重回帰分析は、複数の説明変数から1つの目的変数を説明・予測する手法です。ただし「変数を増やせる回帰分析」という理解のままだと結果を読み違えます。この記事で使う15店舗のデータでは、広告費だけで売上を説明した単回帰の係数は14.144でしたが、売場面積を加えた重回帰では7.345まで下がりました。広告費の見かけの効果の半分は、広告費が多い店ほど売場が広いという相関が生んでいたものです。この差を読み解けることが、重回帰分析を使う実務上の理由になります。
まとめ
- 重回帰式は
y = b0 + b1x1 + b2x2 + …。偏回帰係数b1は「他の説明変数を一定に保ったときの、x1が1増えたときのyの変化量」を表します。 - 単回帰との違いは変数の本数ではなく、他の要因を統計的に一定に保つかどうかです。本記事の例では広告費の係数が14.144から7.345へ変わりました。
- Excelは「データ分析」→「回帰分析」で、Pythonは statsmodels の
sm.OLSで同じ推定値が得られます。 - 出力は補正R2(当てはまり)、各係数のP-値と95%信頼区間(その変数を残す根拠)、残差の分布(前提の妥当性)の順に読みます。
- 多重共線性の目安はVIF 5と10。これは説明変数間の相関係数でいうと0.894と0.949に相当します。
- 予測が目的か、施策の効果を測るのが目的かで、変数選択の正解は変わります。効果を測る目的では、結果に影響された変数(中間変数)を説明変数に入れてはいけません。
以下、式の意味、実データでの結果、Excel・Pythonでの手順、出力の読み方、そして変数選択で結論がひっくり返る条件の順に説明します。
重回帰分析の定義と単回帰分析との違い
重回帰式の形と各項の意味
重回帰分析は、目的変数yをp個の説明変数x1〜xpの一次式で表す手法です。式は次の形になります。
y = b0 + b1x1 + b2x2 + ... + bpxp + e
b0が切片、b1〜bpが偏回帰係数、eが誤差項です。係数は、実測値と式による予測値の差の二乗和が最小になるように決まります(最小二乗法)。回帰分析全体の枠組みと種類は回帰分析とは?種類・回帰式・決定係数と実務での進め方を解説で整理しています。
ここで重要なのは「偏」という字です。b1は単にx1とyの関係の強さではなく、x2以降をすべて一定に保ったうえでx1が1単位増えたときのyの変化量を意味します。売場面積が同じ店どうしで比べたときに、広告費を1万円増やすと売上がいくら増えるか、という読み方になります。
単回帰分析との違いは「変数の数」ではなく「他の要因を一定に保つか」
単回帰分析は説明変数が1つ、重回帰分析は2つ以上、という説明はよく見かけますが、実務で効いてくる違いはそこではありません。単回帰の係数には、その変数と相関している他の要因の影響が混ざり込みます。重回帰はその混入を統計的に取り除きます。
売上を広告費だけで説明すると、広告費の係数は「広告費そのものの効果」と「広告費が多い店は売場も広いことによる効果」の合計になります。売場面積をモデルに入れると後者が分離され、広告費の係数は本来の水準に近づきます。次の節で、その差が実際にどれくらいになるかを見ます。
15店舗のデータで見る単回帰と重回帰の差
使用するサンプルデータ
説明のために用意した15店舗分の架空データです。月間売上(万円)を目的変数、月間広告費(万円)と売場面積(平方メートル)を説明変数とします。実在企業の実績ではありませんが、以下の数値をそのまま使えば本記事の出力を再現できます。
| 店舗 | 広告費 | 売場面積 | 売上 |
|---|---|---|---|
| 1 | 40 | 143 | 681 |
| 2 | 57 | 176 | 877 |
| 3 | 44 | 130 | 728 |
| 4 | 44 | 195 | 829 |
| 5 | 41 | 110 | 631 |
| 6 | 30 | 71 | 410 |
| 7 | 23 | 66 | 419 |
| 8 | 32 | 78 | 482 |
| 9 | 51 | 142 | 820 |
| 10 | 34 | 90 | 575 |
| 11 | 42 | 127 | 622 |
| 12 | 69 | 174 | 941 |
| 13 | 49 | 155 | 984 |
| 14 | 40 | 177 | 769 |
| 15 | 33 | 81 | 513 |
広告費と売場面積の相関係数は0.777です。大きい店ほど広告も多く出している、という現実によくある構造になっています。
単回帰の結果と重回帰の結果の差
同じデータに3通りの回帰を当てはめると、次の結果になります。
| モデル | 広告費の係数 | 売場面積の係数 | 重決定R2 | 補正R2 |
|---|---|---|---|---|
| 単回帰(広告費のみ) | 14.144 | — | 0.7782 | 0.7612 |
| 単回帰(売場面積のみ) | — | 3.855 | 0.8131 | 0.7987 |
| 重回帰(両方) | 7.345 | 2.334 | 0.8963 | 0.8790 |
広告費の係数は14.144から7.345へ、ほぼ半分になりました。単回帰の「広告費1万円で売上14.1万円増」をそのまま予算根拠に使うと、効果を2倍近く見積もることになります。売場面積の係数も3.855から2.334へ下がっています。どちらの変数も、単独で見たときは相手の効果を肩代わりしていたということです。
単位の違う変数を比べる標準化偏回帰係数
広告費の係数7.345と売場面積の係数2.334を並べて「広告費のほうが3倍効く」と読むのは誤りです。単位が万円と平方メートルで違うため、係数の大小は比較できません。比べるには、各変数を平均0・標準偏差1に変換してから回帰する標準化偏回帰係数を使います。
このデータでは広告費が0.458、売場面積が0.546となり、順位は逆転します。売上のばらつきに対しては売場面積のほうがやや強く効いている、という読み方になります。標準化した係数は単位に依存しないため、施策の優先順位を議論するときはこちらを使います。
ExcelとPythonでの実行手順
Excelの分析ツールでの操作手順
Excelでは標準では回帰分析のメニューが出ません。「ファイル」→「オプション」→「アドイン」から分析ツール(Analysis ToolPak)を有効化すると、「データ」タブに「データ分析」が現れます。Mac版は「ツール」→「Excelアドイン」から同じ操作を行います。
- 「データ」タブ→「データ分析」→「回帰分析」を選ぶ
- 「入力Y範囲」に売上の列、「入力X範囲」に広告費と売場面積の2列をまとめて指定する
- 見出し行を含めた場合は「ラベル」にチェックを入れる
- 「残差」「残差グラフ」にチェックを入れて実行する
説明変数は隣接した列に並べておく必要があります。離れた列を指定できないため、分析用のシートに必要な列だけコピーしてから実行するのが確実です。
statsmodelsで同じ推定値を再現するコード
Pythonでは statsmodels を使います。次のコードは上の表のデータをそのまま含んでおり、コピーして実行できます。
import pandas as pd
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
df = pd.DataFrame({
"ad": [40, 57, 44, 44, 41, 30, 23, 32, 51, 34, 42, 69, 49, 40, 33],
"area": [143, 176, 130, 195, 110, 71, 66, 78, 142, 90, 127, 174, 155, 177, 81],
"sales": [681, 877, 728, 829, 631, 410, 419, 482, 820, 575, 622, 941, 984, 769, 513],
})
X = sm.add_constant(df[["ad", "area"]])
model = sm.OLS(df["sales"], X).fit()
print(model.summary())
for i, name in enumerate(X.columns):
if name != "const":
print(name, "VIF =", round(variance_inflation_factor(X.values, i), 3))
statsmodels 0.14.6 で実行した結果の主要部分は次のとおりです。
coef std err t P>|t| [0.025 0.975]
const 79.5081 64.759 1.228 0.243 -61.590 220.607
ad 7.3445 2.368 3.101 0.009 2.185 12.504
area 2.3335 0.631 3.696 0.003 0.958 3.709
R-squared: 0.896 Adj. R-squared: 0.879 F-statistic: 51.84 Prob (F-statistic): 1.25e-06
ad VIF = 2.524
area VIF = 2.524
SPSSやSASでも推定値は同じです。岩崎(2021)は、重回帰分析がExcelから商用ソフト、RやPythonまで広く搭載されており「きわめて多くの人々がそれを使える環境にある」と述べています。違うのは出力ラベルの表記だけなので、次節でExcelとstatsmodelsの対応をそろえておきます。
出力の読み方(決定係数・P-値・信頼区間・残差)
Excelの出力項目とstatsmodelsの対応
Excelの回帰分析は「回帰統計」「分散分析表」「係数表」の3ブロックを出力します。項目名は次のように対応します。
| Excelの表記 | statsmodels | 意味 |
|---|---|---|
| 重相関 R | — | 実測値と予測値の相関 |
| 重決定 R2 | R-squared | 説明できたばらつきの割合 |
| 補正 R2 | Adj. R-squared | 変数の数で調整した当てはまり |
| 観測された分散比 | F-statistic | モデル全体の検定統計量 |
| 有意 F | Prob (F-statistic) | モデル全体のP値 |
| P-値 | P>|t| | 係数が0という帰無仮説での検定確率 |
| 下限 95% / 上限 95% | [0.025 0.975] | 係数の95%信頼区間 |
Excelの係数表には「下限 95%」「上限 95%」が2組出力されますが、既定では同じ値です。ダイアログで信頼区間の水準を変えたときだけ、右側の組がその水準の区間になります。
重決定R2と補正R2の使い分け
重決定R2は説明変数を増やすと必ず上がる指標です。無関係な変数を足しても下がらないため、モデルを比較する場面では使えません。補正R2は説明変数の数だけペナルティを課すので、増やした変数が説明力に見合わなければ下がります。
本記事の例では、広告費のみのモデルの補正R2が0.7612、売場面積を足すと0.8790に上がりました。上がっているので、売場面積は追加に見合う変数だと判断できます。指標そのものの計算式と限界は決定係数とは?R2の意味・計算式と回帰モデルの当てはまりの読み方を実装目線で解説で扱っています。
係数のP-値と95%信頼区間
P-値は「その係数が本当は0なのに、これだけ0から離れた推定値がたまたま出る確率」です。広告費は0.009、売場面積は0.003なので、いずれも有意水準5%で0とは言えないと判断します。切片のP-値は0.243ですが、切片は説明変数がすべて0のときの値なので、有意でなくても通常は問題になりません。P値の意味そのものは有意差検定とは?有意差・p値の意味と検定の種類・やり方をわかりやすく解説で解説しています。
実務ではP-値より信頼区間を見るほうが有益です。広告費の95%信頼区間は2.185から12.504で、幅が10以上あります。「効果はプラス」とは言えても、「1万円あたり7.3万円」を予算計画にそのまま使うのは無理がある、と読めます。P-値だけを見ていると、この不確かさが見えません。
残差で確認するモデルの前提
係数のP-値や信頼区間は、誤差が平均0・等分散・互いに独立という仮定のうえで計算されています。この仮定が崩れていれば、P-値の数字自体が信用できません。上のコードの完全な出力には正規性の検定も含まれており、このデータでは Prob(JB) が3.78e-05、つまり残差の正規性は棄却されます。標本が15件と少なく、外れ値の影響が残っているためです。
この記事の例は係数の解釈を示す目的なので数値をそのまま使いましたが、実務でこの結果が出たら、外れ値の店舗を確認する、目的変数を対数変換する、標本を増やす、といった対応が先になります。残差プロットを出さずにP-値だけを報告するレポートは、この確認を飛ばしています。
多重共線性とVIFの判断基準
VIF 5・10という目安の意味
説明変数どうしの相関が強いと、係数の推定が不安定になります。これが多重共線性です。判定にはVIF(分散拡大係数)を使い、大塚(2023)は「通常VIF の値が5 を超えると多重共線性の疑いあり,10 を超えると多重共線性が確定的であるとされています」と整理しています。
この5と10という数字は、VIF = 1 / (1 - R2) という定義から導かれます。ここでのR2は、その説明変数を他の説明変数で回帰したときの決定係数です。VIF=5はR2=0.8、VIF=10はR2=0.9に対応し、説明変数が2つの場合の相関係数に直せばそれぞれ0.894と0.949になります。「相関係数が0.9を超えたら危ない」という経験則は、VIF 10とほぼ同じことを言っています。
本記事のデータはVIF 2.524でした。相関係数0.777は決して低くありませんが、VIFの基準では許容範囲に入ります。相関係数の見た目だけで変数を落とさずに済むのが、VIFで判断する利点です。
VIFが高いときの対処
VIFが10を超えたときの選択肢は3つです。1つ目は、相関の強い変数のどちらかを落とすこと。売上高と従業員数のように実質的に同じ規模を測っている変数なら、片方で足ります。2つ目は、複数の変数を1つの指標にまとめること。3つ目は、相関のある変数群を無相関な合成変数に置き換える方法で、主成分分析とは?定義・仕組み・分析手順から導入判断まで実装目線で解説で扱う手順が該当します。
係数を縮小して安定させるリッジ回帰やラッソ回帰という選択肢もあります。ただしこれらは係数に偏りを持ち込むため、「広告費1万円あたり何万円」という解釈を目的にする場面には向きません。予測精度を優先する場面で使う手法です。
変数選択で結論がひっくり返る条件
説明変数に入れてはいけない中間変数
変数選択の失敗として最も影響が大きいのは、目的変数より後ろにある変数をモデルに入れてしまうことです。統計数理研究所の岩崎学氏による日本統計学会賞受賞者特別寄稿論文は、この誤りが医学研究で起きた例を挙げています。
出生時体重が成人後の血圧に与える影響を調べた研究で、Barkerらは成人時の体重を交絡因子とみなしてモデルに投入し、出生時体重が低い子供は成人後に血圧が高くなるという結論を得ました。これに対しTuら(2005)は、成人時の体重は出生時体重の影響を受けるため、出生時体重から血圧に至る経路の途中に位置する中間変数だと指摘しました。岩崎(2021)は「因果推論においては,Rosenbaum (1984) で示されたように中間変数をモデルに取り込んではならないのである」と述べています。
ビジネスでも同じ構造は頻発します。広告費が売上に与える効果を測りたいのに、広告によって増えた来店客数を説明変数に入れると、広告費の係数から効果の大半が抜け落ちます。説明変数を選ぶときは、その変数が目的変数の原因側にあるのか結果側にあるのかを先に決める必要があります。相関と因果の切り分けは因果分析とは?相関関係との違い・手法の使い分けと落とし穴を解説でまとめています。
予測目的と効果測定目的で変わる変数選択の正解
「多重共線性は避けるべき」「変数は絞るべき」という助言は、条件付きでしか成り立ちません。岩崎(2021)は目的によって扱いが変わると明示しています。予測が目的の場合について「分析の目的が予測である場合には,個々の回帰係数の解釈は,すべきでないとまでは言わないが,その重要性は高くない」とし、変数選択についても「変数は多すぎてもさほどマイナスにはならない(多重共線性は恐れなくてもよい)」と述べています。予測では、重要な変数を入れ損なうことのほうが損失が大きいためです。
一方、施策の効果を測る目的では反対になります。個々の係数が判断材料そのものになるため、説明変数間の相関を必ず確認し、中間変数を排除し、変数を絞り込む必要があります。同じデータ・同じソフトウェアでも、目的が違えば「良いモデル」の定義が違うということです。
したがって、重回帰分析を使うべきでない場面もはっきりしています。目的変数が「購入したかどうか」のような2値のとき、説明変数の候補が観測数より多いとき、そして効果を測りたい相手が実験も自然実験も設計できず交絡要因を列挙できないときです。最後の場合、重回帰の係数を効果として報告するのは避けるべきです。
よくある質問
多変量解析と重回帰分析の違いは何ですか?
多変量解析は複数の変数を同時に扱う手法群の総称で、重回帰分析はその中の1手法です。同じ多変量解析でも、主成分分析は目的変数を置かずに変数をまとめる手法、判別分析は所属グループを当てる手法で、目的が異なります。手法全体の地図は多変量解析とは?基本概念と活用できる場面をわかりやすく解説を参照してください。
重回帰分析とロジスティック回帰分析の違いは何ですか?
目的変数の種類が違います。重回帰分析は売上や体重のような連続値を扱い、ロジスティック回帰分析は購入する・しないのような2値を扱います。2値の目的変数に重回帰を当てると、予測値が0未満や1超になり確率として解釈できません。誤差が等分散という前提も崩れるため、P-値も信頼できなくなります。
重回帰分析の結果はどのように書けばよいですか?
回帰式、標本サイズ、補正R2、各係数とその標準誤差・P-値、そして95%信頼区間を並べるのが基本です。本記事の例なら「売上 = 79.51 + 7.34×広告費 + 2.33×売場面積(n=15、補正R2=0.879、広告費のP-値0.009)」のように書きます。標準化偏回帰係数を併記すると、変数間の影響の大きさを比較できます。
説明変数はいくつまで入れてよいですか?
上限は目的によって変わります。効果測定が目的なら、制御できる変数と交絡要因に絞るべきです。予測が目的なら、岩崎(2021)が述べるとおり多めに入れても大きな損失にはなりません。ただし計算上の制約として、説明変数の数は標本数より小さい必要があり、残差の自由度は標本数から説明変数の数と1を引いた値になります。この自由度が小さいと、補正R2が急速に悪化します。
重回帰分析はSPSSでもできますか?
できます。SPSS、SAS、R、Python、Excelのいずれでも同じ最小二乗法で係数を推定するため、同じデータなら推定値も一致します。違うのは出力ラベルの表記と、VIFや残差診断を既定で出すかどうかです。Excelは既定でVIFを出さないため、多重共線性を確認したい場合は各説明変数を他の説明変数で回帰してR2を求め、1 / (1 - R2) を計算します。