重回帰分析を実行したところ、係数の符号が直感と逆だった、t値が小さくて有意な変数が一つも出なかった——そういう経験はないでしょうか。原因の多くは多重共線性です。
この記事では、多重共線性の何が問題なのか、VIF(分散拡大係数)でどう診断するのか、そして実際にどう対処するかを製造業の例題で解説します。
多重共線性とは
多重共線性とは、重回帰分析の説明変数どうしが強く相関している状態です。たとえば「炭素含有率」と「硬さ」はどちらも材料の強度と関係しますが、炭素が多いほど硬くなるため、2変数自体も強く相関します。
このような変数を両方モデルに入れると、回帰分析が「炭素量の影響」と「硬さの影響」を切り分けられなくなります。結果として次のような症状が現れます。
- 係数の符号が物理的に意味のない方向になる(正のはずが負に)
- 標準誤差(SE)が膨らみ、t値が小さくなる
- 変数を1つ増減するだけで係数が大きく変わる
- R²は高いのに、個々の係数が有意でない
多重共線性は「モデルが間違っている」わけではなく、「情報が重複しているため推定が不安定」という問題です。予測精度への影響は小さいですが、係数の解釈が信頼できなくなります。
VIF(分散拡大係数)で診断する
多重共線性の診断に使われる代表的な指標がVIF(Variance Inflation Factor:分散拡大係数)です。
\( j \) 番目の説明変数のVIFは、その変数を他のすべての説明変数で回帰したときの決定係数 \( R_j^2 \) から計算します。\[ \text{VIF}_j = \frac{1}{1 – R_j^2} \]
VIFが大きいほど、その変数は他の変数と強く相関しており、係数推定が不安定です。判断の目安はこうです。
| VIFの値 | 判断 |
|---|---|
| 1〜5 | 問題なし |
| 5〜10 | 注意が必要 |
| 10以上 | 多重共線性あり・対処を検討 |
例題:鉄鋼部品の引張強度予測
鉄鋼部品の引張強度(MPa)を予測する重回帰分析を考えます。説明変数は3つです。
- \( x_1 \):炭素含有率(%)
- \( x_2 \):表面硬さ(HRC)
- \( x_3 \):焼入れ温度(℃)
| ロット | \( x_1 \) 炭素量(%) | \( x_2 \) 硬さ(HRC) | \( x_3 \) 温度(℃) | \( y \) 引張強度(MPa) |
|---|---|---|---|---|
| 1 | 0.20 | 44.2 | 820 | 552 |
| 2 | 0.25 | 47.4 | 850 | 590 |
| 3 | 0.30 | 51.3 | 830 | 621 |
| 4 | 0.35 | 55.3 | 860 | 686 |
| 5 | 0.40 | 57.9 | 840 | 712 |
| 6 | 0.22 | 45.3 | 870 | 594 |
| 7 | 0.28 | 50.4 | 810 | 602 |
| 8 | 0.33 | 53.5 | 855 | 660 |
| 9 | 0.38 | 56.4 | 825 | 708 |
| 10 | 0.18 | 42.9 | 845 | 545 |
| 11 | 0.32 | 52.2 | 835 | 654 |
| 12 | 0.42 | 59.2 | 860 | 735 |
まず説明変数間の相関を確認します。
| \( x_1 \) 炭素量 | \( x_2 \) 硬さ | \( x_3 \) 温度 | |
|---|---|---|---|
| \( x_1 \) 炭素量 | 1.000 | 0.998 | 0.101 |
| \( x_2 \) 硬さ | 0.998 | 1.000 | 0.089 |
| \( x_3 \) 温度 | 0.101 | 0.089 | 1.000 |
\( x_1 \) と \( x_2 \) の相関係数が 0.998 と極めて高い。炭素が多いほど硬くなるため、この2変数はほぼ同じ情報を持っています。
Step 1:VIFを計算する
各説明変数を「他の説明変数で回帰」して \( R_j^2 \) を求めます。
x₁のVIF
\( x_1 \) を \( x_2, x_3 \) で回帰すると \( R_1^2 = 0.9957 \)。\[ \text{VIF}_1 = \frac{1}{1 – 0.9957} = \frac{1}{0.0043} = 234 \]
x₂のVIF
\( x_2 \) を \( x_1, x_3 \) で回帰すると \( R_2^2 = 0.9957 \)。\[ \text{VIF}_2 = \frac{1}{1 – 0.9957} = 234 \]
x₃のVIF
\( x_3 \) を \( x_1, x_2 \) で回帰すると \( R_3^2 = 0.0427 \)。\[ \text{VIF}_3 = \frac{1}{1 – 0.0427} = 1.04 \]
| 変数 | \( R_j^2 \) | VIF | 判定 |
|---|---|---|---|
| \( x_1 \) 炭素量 | 0.9957 | 234 | ❌ 多重共線性あり |
| \( x_2 \) 硬さ | 0.9957 | 234 | ❌ 多重共線性あり |
| \( x_3 \) 温度 | 0.0427 | 1.04 | ✅ 問題なし |
\( x_1 \) と \( x_2 \) のVIFがともに 234 と異常に大きく、深刻な多重共線性があることが確認できます。
Step 2:多重共線性が回帰係数に与える影響を確認する
3変数すべてを使ったモデルの結果を見てみましょう(R² = 0.987)。
| 変数 | 係数 \( \hat{\beta} \) | 標準誤差 SE | t値 |
|---|---|---|---|
| 切片 | 265.0 | 273.6 | 0.97 |
| \( x_1 \) 炭素量 | 1238.8 | 508.3 | 2.44 |
| \( x_2 \) 硬さ | −6.5 | 7.34 | −0.89 |
| \( x_3 \) 温度 | 0.40 | 0.15 | 2.71 |
ここに典型的な症状が出ています。
- x₂(硬さ)の係数が −6.5:「硬いほど引張強度が下がる」という物理的に誤った方向の係数になっています
- x₁の標準誤差が 508.3:係数の推定が極めて不安定で、信頼区間が非常に広い
- R²は 0.987 と高い:モデル全体の予測精度は悪くないのに、個々の係数が信頼できない典型パターン
Step 3:対処法(変数の除去)
多重共線性の最もシンプルな対処は、相関の高い変数のどちらかを除去することです。\( x_1 \)(炭素量)は直接制御できる工程変数、\( x_2 \)(硬さ)は結果として生じる特性値なので、\( x_2 \) を除外します。
\( x_1, x_3 \) の2変数モデルの結果(R² = 0.985):
| 変数 | 係数 \( \hat{\beta} \) | 標準誤差 SE | t値 |
|---|---|---|---|
| 切片 | 46.5 | 119.2 | 0.39 |
| \( x_1 \) 炭素量 | 787.7 | 33.0 | 23.87 |
| \( x_3 \) 温度 | 0.42 | 0.14 | 2.95 |
劇的に改善されました。
- x₁の係数が +787.7:炭素量が増えると強度が上がるという正しい方向に戻りました
- x₁の標準誤差が 508.3 → 33.0 に激減:係数推定が安定しました
- t値が 2.44 → 23.87 に急上昇:炭素量の効果が統計的に明確になりました
- R²は 0.987 → 0.985 とほぼ変わらず:予測精度を落とさずに問題を解消できました
また、x₂除外後のVIFも確認します。
| 変数 | VIF(x₂除外後) | 判定 |
|---|---|---|
| \( x_1 \) 炭素量 | 1.01 | ✅ 問題なし |
| \( x_3 \) 温度 | 1.01 | ✅ 問題なし |
Excelでの確認手順
VIFの計算手順
ExcelにはVIFを直接出力する機能がありません。次の手順で手動計算します。
- 「データ分析」→「回帰」を選択
- 目的変数に x₁(炭素量)、説明変数に x₂と x₃ を指定して回帰を実行
- 出力された「重決定 R²」の値をメモ(例:0.9957)
- VIF = 1 / (1 − R²) を計算(例:= 1/(1−0.9957) )
- x₂、x₃についても同様に繰り返す
相関行列で事前チェック
VIF計算の前に、説明変数間の相関を確認しておくと効率的です。
- 「データ分析」→「相関」を選択
- 説明変数(x₁〜x₃)のみを範囲指定して実行
- |相関係数| ≥ 0.9 のペアは多重共線性の候補として要注意
相関係数の計算詳細は相関分析のやり方と結果の見方を参照してください。
他の対処法
主成分回帰
説明変数を主成分分析で無相関な主成分に変換してから回帰する方法です。多重共線性を根本的に解消できますが、係数の解釈が元の変数単位でできなくなります。
リッジ回帰
係数に罰則項を加えて推定を安定させる方法です。すべての変数を残したまま多重共線性の影響を緩和できますが、Excelでの実装は複雑でPythonが現実的です。
変数の変換・合成
相関の高い2変数を合成する(例:炭素当量 = 炭素量 + 硬さ/10 など)ことで、情報を1変数にまとめる方法もあります。ドメイン知識がある場合に有効です。
まとめ
多重共線性の診断・対処の流れをまとめます。
- 説明変数間の相関行列を確認する(|r| ≥ 0.9 は要注意)
- VIFを計算する(VIF = 1/(1−R²_j)。VIF ≥ 10 で多重共線性あり)
- 症状を確認する(係数の符号逆転・SEの膨張・t値の低下)
- 相関の高い変数のどちらかを除去する(優先順位:理論的意味・制御可能性・寄与の大きさ)
- 除去後にVIFを再確認する
今回の例では、炭素量(x₁)と硬さ(x₂)のVIFが 234 という深刻な多重共線性が確認されました。x₂を除去したところ、R²はほぼ変わらず(0.987→0.985)、炭素量の t値は 2.44 から 23.87 に急上昇しました。重回帰分析を実行したら VIF は必ず確認するようにしてください。
重回帰分析の全体的な結果の読み方は重回帰分析の結果の読み方と変数選択、残差の確認方法は回帰分析の前提条件と残差分析を参照してください。
多重共線性の解消後、残った変数をさらに絞り込みたい場合は、ステップワイズ変数選択法|前進選択・後退除去をExcelで実践する手順も参考にしてください。


