回帰分析とは、知りたい値(目的変数)が、手がかりになる値(説明変数)によってどう決まるかを式で表す統計手法です。「気温が1度上がると販売数がいくつ増えるか」のように、関係の大きさを数字で取り出せます。この記事では、10日分の気温と販売数という小さなデータを使い、回帰式の傾きと切片、決定係数を手計算・Excel・Pythonの3通りで求めて、結果が一致するところまで確かめます。「回帰」という言葉の由来、相関分析との違い、手法の選び方、予測に使うときの落とし穴もあわせて整理しました。
まとめ:回帰分析で分かることと求め方の要点
回帰分析で分かるのは二つです。説明変数が1単位動いたときに目的変数がいくつ動くか(回帰係数)と、その式がデータのばらつきをどれだけ説明できているか(決定係数)です。相関係数が「連動の強さ」だけを返すのに対し、回帰分析は「1度あたり3.72個」のような量を返します。
- 回帰式:単回帰は
y = a + bx。傾きbは「xとyの偏差の積和 ÷ xの偏差平方和」、切片aは「yの平均 − b × xの平均」で求まる(最小二乗法)。 - 決定係数:
R2 = 1 − 残差平方和 ÷ 全平方和。切片を含む最小二乗単回帰では、当てはめに使ったデータ上で相関係数の2乗と同じ値になる。 - 手法の選び方:目的変数が金額や個数なら単回帰・重回帰、買う/買わないの二択ならロジスティック回帰。
- 道具:ExcelならSLOPE・INTERCEPT・RSQ・LINEST関数、Pythonならstatsmodelsで同じ値が出る。
- 落とし穴:データの範囲外を予測する外挿、回帰係数を因果と読む誤り、時系列データの見せかけの当てはまり。
回帰分析とは:目的変数を説明変数の式で表す手法
回帰分析では、予測したい値を目的変数(従属変数・被説明変数とも呼ぶ)、予測に使う値を説明変数(独立変数)と呼びます。両者の関係を表した式が回帰式です。説明変数が1つの一次式の場合は、グラフに引いた線を回帰直線と呼びます。説明変数が1つなら単回帰分析、2つ以上なら重回帰分析と呼び分けます。
使い道は大きく分けて二つあります。一つは予測で、明日の予想気温から販売数を見積もる、といった使い方です。もう一つは関連の大きさの把握で、価格や広告費が1単位違うと売上の予測値がどれだけ違うかを係数で読みます。変数間で比較するときは、単位や変動幅をそろえる必要があります。経理の実務でも、製造原価を操業度で回帰して固定費と変動費に分ける方法が使われます(変動費の求め方:勘定科目法・高低点法・回帰分析で固定費と分ける手順と計算例)。
「回帰」という言葉の意味とゴルトンの身長データ
「回帰(regression)」はもともと「元に戻る」という意味の語で、統計の用語になったのはイギリスのフランシス・ゴルトンの研究がきっかけです。ゴルトンは1886年の論文「Regression towards Mediocrity in Hereditary Stature」(Journal of the Anthropological Institute 第15巻・246〜263ページ)で、両親の身長をならした値(Mid-Parent)と子の身長を比べました。論文の図版IXには「子の偏差は親の偏差に対して2対3」とあり、親の身長をまとめた値が平均より高い集団では、子の平均身長も高いものの、平均からのずれは親の約3分の2になる傾向がありました。この「平均の側へ戻る」現象を回帰と呼び、親の身長から子の身長を推し量る直線の引き方が、のちに回帰分析として一般化されました。
この由来は今でも実務の判断に効きます。売上が過去最高だった店舗の翌月が落ちる、成績が最低だった社員が研修後に伸びる、といった変化の一部は、施策の効果ではなく平均への回帰で説明できてしまいます。極端な値を選んで前後を比べるときは、同じ条件で施策をしなかった対照群を置きます。
相関分析との違い:向きと「1単位あたりの変化量」
相関分析は、二つの変数がどのくらい一緒に動くかを相関係数(−1〜1)で表します。xとyを入れ替えても値は変わりません。回帰分析は「xでyを説明する」という向きを持ち、xが1増えたときのyの変化量を返します。後で計算する例では、相関係数は0.985、回帰係数は3.72です。前者は「強く連動している」までしか言えず、後者は「気温が1度上がると販売数が約3.7個増える」と言えます。
向きがあるので、xとyを入れ替えると別の式になります。「気温で販売数を説明する」式と「販売数で気温を説明する」式の傾きは、完全な直線関係がある場合を除き、逆数の関係にはなりません。どちらを目的変数に置くかは、分析の目的と業務上の因果の理解で決めます。
回帰分析の種類:目的変数の型と手法の対応
手法は、まず目的変数がどんな値かで絞り込みます。次の表が出発点です。
| 手法 | 目的変数 | 説明変数 | 例 |
|---|---|---|---|
| 単回帰分析 | 連続量 | 1つ | 気温→販売数 |
| 重回帰分析 | 連続量 | 2つ以上 | 広告費・価格→売上 |
| ロジスティック回帰 | 二値(0/1) | 1つ以上 | 来店回数→継続するか |
| 多項式回帰 | 連続量 | xの2乗などを追加 | 曲線の関係 |
| ポアソン回帰 | 回数(0,1,2…) | 1つ以上 | 問い合わせ件数 |
| 回帰木・GBDT | 連続量 | 多数 | 非線形の需要予測 |
「分析方法の種類」を広く知りたい場合、回帰分析は多変量解析のうち「予測」の側に属します。既知のグループへの所属を予測するなら判別分析、似た対象をまとめて未知のグループを探すならクラスター分析、多数の変数を少数の軸に要約するなら主成分分析が候補です。全体の地図は多変量解析とは?予測と要約で選ぶ手法一覧とビジネスでの使いどころにまとめています。
単回帰と重回帰の使い分け
関係を探索する段階では、説明変数を1つずつ見る単回帰が出発点になります。ただし、他の条件をそろえた関連を知りたい場合は、交絡しうる変数を分析目的に基づいて選び、重回帰で同時に扱います。注意したいのは、重回帰にすると単回帰のときの係数が大きく変わることがある点です。広告費と店舗面積のように説明変数どうしが相関していると、単回帰の係数には「一緒に動く別の変数」の効果が混ざっているからです。係数の変わり方や多重共線性(VIF)の判断は重回帰分析とは?単回帰との違い・式の立て方と結果の見方を実例で解説で、15店舗のデータを使って確かめています。
ロジスティック回帰:二択の確率推定と正則化
目的変数が「継続する/解約する」「購入する/しない」の二択なら、ロジスティック回帰を使います。直線の代わりにS字の曲線を当てはめ、0〜1の確率を返します。架空の16人分のデータを、来店回数[1,1,2,2,3,3,4,4,5,5,6,6,7,8,9,10]、翌月の継続[0,0,0,1,0,0,1,0,1,1,0,1,1,1,1,1](継続=1)とします。切片を含むstatsmodelsのLogitで推定すると、来店3回の継続確率は0.32、8回は0.95です。
Pythonで実装するときに一つ落とし穴があります。scikit-learnの LogisticRegression は、何も指定しないとL2正則化(C=1.0)という「係数を小さく抑える補正」付きで推定します。同じ16人分のデータで比べると、statsmodelsの Logit(正則化なしの最尤法)の係数は0.746、scikit-learn 1.9.1の既定では0.664でした。予測が目的なら問題になりにくいものの、正則化なしの最尤推定値を比較したい場合は、statsmodelsを使うか、scikit-learnで C=np.inf を指定して正則化を外します(0.746に一致します)。古い解説にある penalty=None の書き方は、1.8で penalty 引数ごと非推奨になりました。
回帰式の求め方:10日分のデータによる最小二乗法の計算
ここからは、ある売店の10日分の最高気温と販売数(架空のデータ)で、回帰式を実際に求めます。
| 日 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 気温(℃)x | 22 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 34 |
| 販売数(個)y | 61 | 70 | 68 | 79 | 84 | 83 | 92 | 95 | 94 | 107 |
最小二乗法の公式による傾きと切片の計算
回帰直線は、各データ点と直線との縦方向のずれ(残差)を2乗して合計し、その合計が最も小さくなるように引きます。これが最小二乗法です。単回帰では、傾きと切片が次の公式で求まります。
傾き b = Σ(x − xの平均)(y − yの平均) ÷ Σ(x − xの平均)^2
切片 a = yの平均 − b × xの平均
このデータでは、xの平均が28.2、yの平均が83.3です。偏差の積和は474.4、xの偏差平方和は127.6なので、傾きは 474.4 ÷ 127.6 = 3.7179。切片は 83.3 − 3.7179 × 28.2 = −21.54 です。回帰式は次のとおりです。
販売数 = -21.54 + 3.718 × 気温
回帰係数と切片の読み方:符号・単位・観測範囲
傾き3.718は「気温が1度上がると販売数が約3.7個増える」という意味です。符号がプラスなら同じ向き、マイナスなら逆向きの関係を表します。係数の大きさは説明変数の単位に依存するので、「気温(℃)」を「気温(華氏)」に変えれば数字も変わります。単位の違う係数どうしを並べて「どちらが効いているか」を比べてはいけないのはこのためです。
切片の −21.54 は「気温0℃なら販売数はマイナス21.5個」という意味になり、現実にはありえません。データが22〜34℃の範囲にしか無いので、0℃の位置は直線を延ばした先の値にすぎないからです。切片は「直線の高さを合わせるための値」と割り切り、観測範囲外の意味を読み取らないようにします。
決定係数R2の求め方と目安
決定係数(R2)は、目的変数のばらつきのうち、回帰式で説明できた割合です。式は次のとおりです。
R2 = 1 − 残差平方和 ÷ 全平方和
このデータでは、販売数の平均からのずれを2乗した合計(全平方和)が1816.1、回帰式からのずれ(残差)を2乗した合計が52.34です。R2 = 1 − 52.34 ÷ 1816.1 = 0.971 となり、販売数のばらつきの97.1%を気温で説明できています。丸める前の相関係数は約0.985484で、その2乗は約0.971178です。このように、切片を含む最小二乗単回帰では、当てはめに使ったデータ上の決定係数と相関係数の2乗が一致します。
同じ観測データに最小二乗法で当てはめる場合、説明変数を追加しても学習データ上のR2は下がりません。重回帰で変数の数が違うモデルを比べるときは、変数の数で割り引いた自由度調整済み決定係数(このデータでは0.968)を使います。計算式とPythonでの求め方は決定係数とは?R2の意味・計算式と回帰モデルの当てはまりの読み方を実装目線で解説で詳しく扱っています。
「決定係数がいくつあれば良いか」の考え方
決定係数の良し悪しは、目的と比較の相手で決まります。個人の行動のようにばらつきの大きいデータでは、R2が低くても係数の推定には意味がある場合があります。逆に、時間とともに一緒に伸びる二つの系列は、互いに無関係でも高いR2が出ます(見せかけの回帰)。判断するときは次の順で見ます。
- 要因の大きさを知りたい場合は、R2よりも回帰係数のp値と信頼区間を先に見る。
- 予測に使う場合は、学習に使っていないデータで予測誤差を測る。R2が高くても新しいデータで外れるモデルは使えない。
- R2が0.99のように高すぎる場合は、目的変数をほぼそのまま含む変数が紛れ込んでいないか、時系列のトレンドに引きずられていないかを疑う。
Excelで回帰分析をする手順:関数と分析ツール
Excelでは、関数を使う方法と「分析ツール」アドインを使う方法の二つがあります。気温をA1:A10、販売数をB1:B10に入れた場合の関数と結果は次のとおりです。LibreOffice Calcで同じ式を再計算し、上の手計算と一致することを確認しました。
| 求めるもの | 関数 | 結果 |
|---|---|---|
| 傾き | =SLOPE(B1:B10,A1:A10) |
3.7179 |
| 切片 | =INTERCEPT(B1:B10,A1:A10) |
-21.544 |
| 決定係数 | =RSQ(B1:B10,A1:A10) |
0.9712 |
| 33℃の予測値 | =FORECAST.LINEAR(33,B1:B10,A1:A10) |
101.15 |
| 係数と統計量 | =LINEST(B1:B10,A1:A10,TRUE,TRUE) |
5行×2列 |
関数の引数は「yの範囲、xの範囲」の順です。逆にすると、販売数で気温を説明する別の式になります。LINEST関数は最後の引数をTRUEにすると、1行目に傾きと切片、2行目にそれぞれの標準誤差(0.226と6.44)、3行目に決定係数と推定値の標準誤差、4行目にF値と自由度、5行目に回帰平方和と残差平方和を返します。
説明変数が複数ある場合や、p値まで一覧で見たい場合は「分析ツール」を使います。Windows版は「ファイル」→「オプション」→「アドイン」で、下部の「管理」に「Excelアドイン」を選んで「設定」を押し、「分析ツール」にチェックを入れます。Mac版は「ツール」→「Excelアドイン」で「分析ツール」にチェックして「OK」を押し、Excelを終了して再起動します(Microsoftの手順)。有効にすると「データ」タブに「データ分析」が現れ、その中の「回帰分析」で入力範囲を指定します。分析ツールの回帰分析は内部でLINEST関数を使うので、係数は上の表と同じ値になります。出力の「P-値」や「補正 R2」の読み方は、重回帰の記事で表にまとめています。
Pythonで回帰分析をする手順:statsmodelsの実装と出力の読み方
Pythonでは、係数の検定結果まで表で出せるstatsmodelsのOLSが向いています。式("sales ~ temp")で書くと切片が自動で入りますが、sm.OLS に配列を渡す書き方では切片が入らないので、sm.add_constant() で定数列を足します。次のコードで、上と同じデータの回帰分析を実行できます。
import pandas as pd
import statsmodels.formula.api as smf
df = pd.DataFrame({
"temp": [22, 24, 25, 27, 28, 29, 30, 31, 32, 34],
"sales": [61, 70, 68, 79, 84, 83, 92, 95, 94, 107],
})
model = smf.ols("sales ~ temp", data=df).fit()
print(model.summary())
statsmodels 0.15.0(2026年8月公開の最新版)で実行すると、出力の主要部分は次のようになります。
R-squared: 0.971
Adj. R-squared: 0.968
F-statistic: 269.6
Prob (F-statistic): 1.91e-07
No. Observations: 10
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -21.5439 6.437 -3.347 0.010 -36.387 -6.701
temp 3.7179 0.226 16.419 0.000 3.196 4.240
読む順番は次のとおりです。
- coef:回帰係数。temp の3.7179が傾き、Intercept の-21.5439が切片で、手計算と一致する。
- std err:係数の標準誤差。データを取り直したときに係数がどれくらいぶれるかの目安(標準誤差の求め方とエクセルの計算式)。
- P>|t|:係数が0という帰無仮説とモデルの仮定の下で、観測された値以上に絶対値の大きいt統計量が得られる確率。0.05未満なら有意と判断することが多い(有意差検定とは?有意差・p値の意味と検定の種類・やり方をわかりやすく解説)。
- [0.025 0.975]:係数の95%信頼区間。傾きの区間推定は3.196〜4.240で、モデルの仮定の下で同じ標本抽出と計算を繰り返すと、得られる区間の約95%が真の係数を含む。
- R-squared / Adj. R-squared:決定係数と自由度調整済み決定係数。
機械学習の流れに組み込む場合は、scikit-learnの LinearRegression でも同じ係数が得られます。ただし検定結果の表は出ないので、係数の有意性を確かめる段階ではstatsmodelsを使い、予測の運用はscikit-learnに載せる、という分担が扱いやすいです。
回帰分析を予測に使うときの落とし穴
式が求まっても、そのまま予測や意思決定に使えるとは限りません。失敗の多くは計算ではなく、式の使い方で起きます。
観測範囲の外を予測する外挿
気温33℃の予測値は101.1個で、95%予測区間は94.5〜107.8個です。同じ式で40℃を予測すると127.2個、予測区間は118.4〜135.9個まで広がります。しかも区間の計算は「40℃でも直線の関係が続く」前提に立っています。猛暑日には客足そのものが落ちるかもしれず、データに無い範囲の関係は式からは分かりません。予測は観測した範囲の内側で使い、外側では値を出すとしても参考扱いにとどめます。
回帰係数を因果関係と読む誤り
回帰係数は「xが大きい日ほどyが大きい」という関係の大きさであって、「xを動かせばyが動く」ことまでは保証しません。気温と販売数の例でも、気温が高い日は休日が多かった、という別の要因が混ざっている可能性があります。施策の効果を測りたい場合は、比較の設計から考え直す必要があります(因果分析とは?相関関係との違い・手法の使い分けと落とし穴を解説)。
時系列データ・外れ値・欠測値の扱い
月次売上のように時間順に並んだデータでは、誤差に自己相関が生じることがあります。これを無視した通常のOLSでは標準誤差やp値が不適切になり、関係を過大評価する場合があります。statsmodelsの出力にあるDurbin-Watson比が2から大きく離れていたら、時系列モデルの検討に進みます(時系列とは?意味と分析手法の使い分け|ARIMAからPython実装まで)。
最小二乗法は残差を2乗するため、極端な値が1点あるだけで直線が大きく引っ張られます。外れ値は機械的に消さず、入力ミスなのか本当に起きた値なのかを確かめてから扱いを決めます。欠測のある行を黙って落とすと、残ったデータが偏る場合もあります(欠測値とは?欠損値との違い・3つの種類とリストワイズ削除・多重代入の選び方)。
曲線的な関係や、変数どうしの組み合わせで効き方が変わる関係が強いデータでは、多項式項や交互作用項を加えた回帰、回帰木、勾配ブースティングを候補にし、学習に使っていないデータの予測誤差で比較します(決定木分析とは?分類木・回帰木の仕組みと過学習を防ぐ剪定・アンサンブルを実装目線で解説)。その代わり係数のような「1単位あたりの効き目」は読みにくくなります。需要予測のように精度を優先するのか、要因の説明を優先するのかで、手法の選び方は変わります。回帰分析から予測モデルの業務組み込みまでを外部に任せたい場合は、機械学習モデル開発の支援もご相談いただけます。
よくある質問
回帰分析とは何かを簡単に言うと?
「ある値が別の値によってどう決まるか」を式で表す方法です。気温と販売数なら「気温が1度上がると販売数が約3.7個増える」のように、関係の大きさを数字で表せます。式が決まれば、新しい気温から販売数を予測できます。
回帰式とは何ですか?
目的変数を説明変数で表した式です。単回帰なら y = a + bx の形で、bを回帰係数(傾き)、aを切片と呼びます。aとbは、データとのずれの2乗和が最小になるように最小二乗法で決めます。
決定係数と相関係数の関係は?
切片を含む最小二乗単回帰では、当てはめに使ったデータ上の決定係数は相関係数の2乗と一致します。本文の例では、相関係数0.98548の2乗が決定係数0.97118になります。切片を含む最小二乗重回帰でも、当てはめに使ったデータ上では、実測値と予測値の両方にばらつきがあれば、決定係数は両者の相関係数の2乗と一致します。
回帰分析はExcelでできますか?
できます。説明変数が1つならSLOPE・INTERCEPT・RSQ関数で傾き・切片・決定係数が出せます。説明変数が複数ある場合は、LINEST関数か「分析ツール」の「回帰分析」を使います。p値と信頼区間まで一覧で出るのは「回帰分析」の方で、LINESTの場合は戻り値の係数・標準誤差・自由度から別に計算します。
回帰分析に必要なデータの数は?
十分な精度を得るための万能な件数はありません。ただし、切片付きの通常の最小二乗回帰で係数を一意に求めるには説明変数に完全な重複がないことが必要で、通常の検定には観測数が推定する係数の総数を上回る必要があります。本文の10件の例でも、傾きの95%信頼区間は3.196〜4.240と幅があります。重回帰で変数を増やすほど必要なデータ数も増えると考えてください。