多重共線性とは?重回帰分析の落とし穴と対処法を初心者向けに解説
📌 重回帰分析を学び始めると、必ず一度はぶつかるのが「多重共線性(マルチコ)」という落とし穴です。
結論をひとことで言うと、こうです。
多重共線性とは「説明変数同士が似すぎてケンカする状態」。主に問題になるのは予測値そのものよりも、「どの変数がどれだけ効いているか」という係数の解釈です。解釈したいときは、VIFを必ずチェックしましょう。
この記事は「機械学習入門」シリーズの1本です。AIの全体像から知りたい方はAIの地図|目的別にAIツールを探す、分析手法を順番に学びたい方はデータ分析・機械学習カテゴリもあわせてご覧ください。
「説明変数を増やしたのに、なぜか係数の符号がおかしくなった…」「p値が大きくなって、有意じゃなくなった…」そんな経験はありませんか?それ、もしかすると多重共線性が原因かもしれません。私自身、初めて重回帰で「売上=広告A+広告B+広告C」のようなモデルを組んだとき、係数の符号が想定と逆になって頭を抱えた経験があります。この記事では、多重共線性の正体・見つけ方・対処法を初心者向けにやさしく解説します。

「多重共線性」って名前が難しそうだけど、イメージとしては「説明変数同士が似すぎてケンカしちゃう状態」って考えればOKだよ~
🙋 この記事はこんな人に向いています
- 重回帰分析を学んでいて、係数の符号やp値の動きに違和感を感じている人
- 「どの変数が、どれくらい効いているか」をビジネスで説明したい人
- VIFという言葉を聞いたことはあるが、何を見ればいいのか曖昧な人
- Ridge回帰やLasso回帰の存在意義を、自分の言葉で理解したい人
- 多重共線性をいつ気にして、いつ気にしなくていいかの線引きを知りたい人
📍 多重共線性とは|「似たもの同士」が混ざると起こる問題
多重共線性(multicollinearity、通称「マルチコ」)とは、重回帰分析で説明変数同士が強く相関している状態のことです。たとえば、家賃を予測する重回帰モデルに「広さ(㎡)」と「部屋数」を入れたとします。この2つは強く相関していますよね(広い家ほど部屋数も多い)。
このように説明変数同士が「似たような情報」を持っていると、モデルが「どちらが効いているか」を区別できなくなるのです。これが多重共線性の正体です。
多重共線性は、予測値そのものよりも「個々の係数の解釈」に大きく影響する問題です。予測だけが目的なら影響が小さいこともありますが、要因分析や施策立案では注意が必要です。
多重共線性が起きやすい典型例
「自分の分析でも起きていないかな?」と思ったら、まずはこの典型パターンに当てはまっていないかチェックしてみてください。
- 広告費:テレビ広告費、Web広告費、総広告費を同時に入れる
- 住宅価格:広さ、部屋数、延床面積を同時に入れる
- 体格データ:身長、体重、BMIを同時に入れる
- 売上分析:来店数、購入者数、売上件数を同時に入れる
- 時系列データ:年・月・四半期のような時間軸を重複して入れる
共通点は、「同じことを別の角度から測っている変数」を複数入れていること。「念のため全部入れておこう」が裏目に出やすいパターンです。
⚠️ 多重共線性が起きると何が困るのか
多重共線性があると、具体的に以下のような問題が発生します。
- 係数の符号が逆転する:本来プラスのはずがマイナスになる、など
- 係数の値が異常に大きく/小さくなる:解釈ができない値が出る
- 標準誤差が膨らむ:p値が大きくなり、有意性の判定が崩れる
- データを少し変えるだけで結果が大きく変動する:再現性が低くなる
つまり、「モデルの解釈」が信頼できなくなるのが一番のデメリットです。
🔍 多重共線性の見つけ方|VIFをチェックしよう
多重共線性を診断する代表的な指標がVIF(Variance Inflation Factor/分散拡大係数)です。各説明変数について計算し、値が大きいほど多重共線性が疑われます。
VIFの式と意味
VIFは、「ある説明変数を、他の説明変数で回帰したときの当てはまり具合」から計算します。
VIFi = 1 / (1 − Ri²)
Ri²は「変数iを、それ以外の説明変数で回帰したときの決定係数」です。他の変数でiがよく説明できてしまう(=似ている)ほどRi²が1に近づき、VIFは大きく跳ね上がります。
手で計算してみる|数値例
例:説明変数「広さ」を、他の説明変数(部屋数、築年数など)で回帰したら R² = 0.9 だった。
VIF = 1 / (1 − 0.9) = 1 / 0.1 = 10
→ 「広さ」は他の変数で90%説明できてしまう=独立性がほぼない。多重共線性が強く疑われる状態。
比較:R² = 0.2 だった場合
VIF = 1 / (1 − 0.2) = 1 / 0.8 = 1.25(問題なし)
判定の目安
- VIF < 5:大きな問題は出にくい目安
- 5 ≤ VIF < 10:注意して確認
- VIF ≥ 10:多重共線性が強く疑われる → 対処を検討
ただしこの基準はあくまで一般的な目安です。分野や教科書によっては「VIF≥5で要注意」「VIF≥4で対処を検討」とされる場合もあります。最終的には自分の分析目的とデータの性質に応じて判断してください。
PythonでVIFを計算する
Pythonならstatsmodelsライブラリで簡単にVIFを計算できます。
from statsmodels.stats.outliers_influence import variance_inflation_factor
import pandas as pd
vif = pd.DataFrame()
vif["feature"] = X.columns
vif["VIF"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif)実務では、カテゴリ変数は事前にダミー変数化し、欠損値を除外または補完してからVIFを計算します。また、定数項(切片)を含める場合は、定数項のVIFは解釈対象から外すのが一般的です。
VIF以外にも、相関行列(ヒートマップ)で説明変数同士の相関係数を確認するのも有効です。0.8以上の強い相関があるペアは要注意です。ただし、相関行列は2変数の関係しか見られないため、3つ以上の変数が絡む共線性は見逃すことがあります。そうした多変数の絡みを見るには、VIFが有効です。

ちなみにVIFを見るときは、「全部の変数で一気に判断」しようとせず、「大きいものから順番に対処する」のがコツだよ!
🛠 多重共線性の対処法|4つの定番アプローチ
多重共線性が見つかったときの対処法は、大きく4つあります。まず全体像を表で押さえてから、個別に見ていきましょう。
| 手法 | やり方 | 強み | 注意点 |
|---|---|---|---|
| ① 削除 | 相関の強い変数のどちらかをモデルから外す | シンプル、解釈性が高い | 情報の損失が出る |
| ② 統合 | BMIのような合成変数を作る | 情報を保ちながら緩和できる | 意味のある合成指標を考える必要がある |
| ③ PCA(主成分分析) | 無相関な主成分に変換する | 強力に共線性を解消 | 解釈性が落ちる |
| ④ 正則化回帰 | Ridge回帰やLasso回帰を使う | 多数の変数を投入できる、Lassoは変数選択も自動化 | 解釈の自由度がやや下がる |
① 相関の強い変数のどちらかを削除する
もっともシンプルな方法。相関の強いペアのうち、どちらか片方だけをモデルに残します。たとえば「広さ」と「部屋数」なら、ビジネス的な解釈のしやすさで「広さ」を残す、という判断です。
② 変数を統合する(合成変数を作る)
「身長」と「体重」のように相関が強い変数は、BMI(体重 ÷ 身長²)のような合成変数にまとめると、情報量を保ったまま多重共線性を緩和できます。広告予算なら「テレビ+Web+新聞」を合計して「総広告費」にまとめる、といった発想も同じです。
③ 主成分分析(PCA)で次元削減する
説明変数が多くて相関も複雑な場合は、PCA(主成分分析)で互いに無相関な合成変数(主成分)を作る方法もあります。ただし、できあがる主成分は元の変数の混合になるため、解釈性は犠牲になります。
④ 正則化回帰(Ridge回帰・Lasso回帰)を使う
多重共線性に対して頑健な回帰手法として、Ridge回帰やLasso回帰があります。係数が極端な値になるのを防ぎ、安定した推定を可能にします。とくに変数を多く投入したいときの強力な味方です。Lassoは不要な変数の係数を自動的に0にしてくれるため、変数選択も同時に行えます。
Ridge回帰やLasso回帰を使う場合は、変数のスケールをそろえるために標準化してから学習させるのが基本です。正則化は係数の大きさにペナルティをかける手法なので、スケールが大きい変数だけが不利にならないようにする必要があります。
「個々の変数の意味を解釈したい」なら ①②(削除・統合)が有効。
「変数選択もまとめて自動でやりたい」なら ④(特にLasso)が便利。
「とにかく予測精度を上げたい」なら ③④で次元削減+正則化が王道です。
迷ったら、まずは①相関行列で似た変数を確認 → ②VIFを計算 → ③意味が重複している変数を削除・統合 → ④それでも不安定ならRidge/Lassoを検討、という順番がおすすめです。シンプルな対処から始めて、必要なら手法を組み合わせていくのが実務的なアプローチです。
🤔 そもそも気にしなくていい場面もある
多重共線性に過敏になりすぎる必要はありません。以下のような場合は、気にしなくてOKです。
- 予測精度だけが目的:個々の係数の解釈をしないなら影響は小さい
- 決定木・ランダムフォレストなどのツリー系モデル:そもそも多重共線性の影響を受けにくい
- VIFが5未満:実務上は問題視しなくてOK
▶ 関連記事:決定木とは?仕組み・ジニ不純度・剪定までやさしく解説

多重共線性とうまくつきあうコツは、「何がしたいか」を先にハッキリさせること!予測だけなら気にしなくてOK、解釈したいならチェックしよう~
❓ よくある質問(FAQ)
Q1. VIFの値はいくつから問題ですか?
A. 一般的には「VIF≥10で対処が必要、5〜10で要注意、5未満なら問題なし」が目安として広く使われています。ただし、分野や教科書によっては「VIF≥5で要注意」とより厳しい基準を採るケースもあります。最終的には、分析の目的(予測重視か解釈重視か)とデータの性質によって判断してください。
Q2. 多重共線性は予測精度に影響しますか?
A. 予測精度そのものへの影響は限定的です。多重共線性が問題になるのは「個々の係数の解釈」で、係数の符号が反転したり、p値が大きくなって有意性の判定が崩れたりします。予測値だけを使う用途なら、過度に気にする必要はありません。逆に「どの変数がどれだけ効いているか」を説明したい場面では、対処を検討すべきです。
Q3. 決定木やランダムフォレストでも多重共線性は気にすべきですか?
A. ツリー系モデル(決定木・ランダムフォレスト・XGBoostなど)は、変数間の相関による係数の不安定さという問題を抱えていません。そのため、線形回帰のように厳しくチェックする必要はありません。ただし、相関の強い変数があると特徴量重要度の解釈がブレることがあるため、変数の意味を説明したい場合は引き続き注意してください。
Q4. Ridge回帰とLasso回帰、どちらを使えばいいですか?
A. ざっくり言うと、「全部の変数を残したいならRidge、不要な変数を削りたいならLasso」です。Ridgeは係数を小さくして安定化させますが、変数自体は残します。Lassoは不要な変数の係数を完全に0にするため、変数選択も同時に行えます。両方の良いとこ取りをしたElasticNetもあるので、迷ったら3つすべて試して交差検証で精度を比べるのが実務的です。
Q5. 相関係数とVIF、どちらで判断すればいいですか?
A. 両方を併用するのが理想です。相関係数(相関行列)は2変数間の関係しか見られないため、「3つの変数が組み合わさって生じる共線性」は見抜けません。一方VIFは他の説明変数すべてを使って計算するため、多変数の絡みも検出できます。まず相関行列で全体像をつかみ、次にVIFで個別に診断する流れがおすすめです。
🚀 まとめ|多重共線性は「解釈したいとき」に注意
- 多重共線性 = 説明変数同士が強く相関している状態
- 係数が不安定になり、モデルの解釈が信頼できなくなる
- 診断はVIFが定番(VIF ≥ 10で要対処、ただし分野によって基準は異なる)
- 対処法は「削除・統合・PCA・正則化」の4つ
- 予測精度だけが目的なら、過度に気にしなくてOK
多重共線性は、データ分析の現場で必ずと言っていいほど登場するテーマです。「係数の符号が変だな」「p値が急に大きくなったな」と感じたら、まずVIFをチェックする習慣をつけましょう。
今すぐ試せる次の一歩:
1. 手元のデータで重回帰分析を実行し、係数の符号やp値を確認する
2. statsmodelsで各変数のVIFを計算し、大きい変数を特定する
3. VIF≥10なら、解釈が目的なら変数の削除や統合、予測が目的ならRidge・Lassoなどの正則化回帰や、他モデルとの比較を検討する
▶ 関連記事:【完全ガイド】線形回帰分析を学ぶ全ステップ
▶ 関連記事:ロジスティック回帰とは?線形回帰との違いを初心者向けに解説

