← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:線形回帰(最小二乗法と確率的解釈) | 数理:重回帰分析(統計)・残差分析・回帰診断(統計)

要点(BLUF)

1. 重回帰モデルと偏回帰係数

説明変数が pp 個あるとき、線形回帰モデルは次のように書けます。

y=β0+β1x1+β2x2++βpxp+εy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \varepsilon

nn 個のデータをまとめて、定数項の列(全部 1)を加えた計画行列 XRn×(p+1)X \in \mathbb{R}^{n\times(p+1)} を使うと、最小二乗解は一行で表せます(導出は統計の 重回帰分析 にあります)。

β^=(XX)1Xy\hat{\boldsymbol\beta} = (X^\top X)^{-1} X^\top \mathbf{y}

要するに:単回帰の「傾き」を多次元に拡張しただけで、解の形は逆行列をひとつ挟むだけです。

偏回帰係数の意味

係数 βj\beta_j偏回帰係数(partial regression coefficient) と呼ばれ、

他のすべての説明変数を固定したまま、xjx_j を1単位だけ増やしたときの yy の変化量

を意味します。「他を止めて1つだけ動かす」がポイントです。単回帰の傾きと値が違うのはこのためで、単回帰では「他の変数経由の間接効果」も混ざって現れるのに対し、重回帰の偏回帰係数は他変数の影響を取り除いた正味の効果を測ります。

flowchart LR
  X1["x1(広告費)"] --> Y["y(売上)"]
  X2["x2(店舗数)"] --> Y
  X3["x3(気温)"] --> Y
  Y -. "各矢印の強さが偏回帰係数 βj(他を固定した正味の効果)" .-> NOTE["係数の解釈"]

2. 多重共線性とは

多重共線性(multicollinearity) は、説明変数どうしが強く相関している状態を指します。極端な場合、ある変数が他の変数の線形結合でほぼ表せてしまう(例:「身長」と「座高」、「気温(℃)」と「気温(℉)」)。

なぜ係数が不安定になるのか

鍵は XXX^\top X の逆行列です。説明変数が強く相関すると XX の列がほぼ平行になり、XXX^\top Xほぼ特異(行列式がほぼ 0) になります。すると逆行列 (XX)1(X^\top X)^{-1} の成分が爆発的に大きくなります。

係数推定量の分散・共分散は次の形をしています。

Cov(β^)=σ2(XX)1\mathrm{Cov}(\hat{\boldsymbol\beta}) = \sigma^2 (X^\top X)^{-1}

要するに(XX)1(X^\top X)^{-1} が暴れる = 係数の分散が膨らむ。データを少し変えただけで係数が大きく揺れ、ときに符号が逆転します。「広告費を増やすほど売上が下がる」といった直観に反する係数が出たら、まず共線性を疑います。

重要なのは、予測そのものは必ずしも悪化しないことです。共線性が壊すのは「個々の係数の解釈」であって、y^\hat y 全体の当てはまりではありません。係数は依然として不偏ですが、分散が大きく信頼できなくなります。

graph TD
  A["説明変数どうしが強く相関"] --> B["X の列がほぼ平行"]
  B --> C["X^T X がほぼ特異(行列式 ≒ 0)"]
  C --> D["逆行列 (X^T X)^-1 の成分が爆発"]
  D --> E["係数の分散が増大"]
  E --> F["符号反転・不安定・解釈不能"]
  E --> G["予測自体は壊れにくい"]

3. 診断:相関行列・VIF・条件数

(1) 相関行列

最も手軽なのは説明変数の相関行列を見ること。r>0.8|r| > 0.8 程度の強い相関ペアがあれば共線性の候補です。ただし2変数ずつしか見られないのが弱点で、「3変数の和でほぼ表せる」ような多変数間の共線性は見逃します。

(2) VIF(分散拡大係数)

その弱点を補うのが VIF(Variance Inflation Factor, 分散拡大係数) です。変数 xjx_j残りの全説明変数で回帰したときの決定係数を Rj2R_j^2 とすると、

VIFj=11Rj2\mathrm{VIF}_j = \frac{1}{1 - R_j^2}

要するにxjx_j が他の変数たちでどれだけ説明できてしまうか(Rj2R_j^2)が大きいほど VIF が跳ね上がる。「他で説明しきれる = 共線性が強い」という直観そのままの指標です。Rj2=0R_j^2 = 0(無相関)なら VIF=1、Rj21R_j^2 \to 1 なら VIF\to\infty

名前のとおり、VIF は係数 β^j\hat\beta_j の分散が、共線性のない理想状態の何倍に膨らんでいるかを表します。

目安(情報源で幅があります):

VIF の値解釈
1共線性なし
1〜5おおむね許容
5〜10注意(5超で係数の推定が不安定との指摘)
10 超深刻な共線性。対処が必要

(3) 条件数

VIF は変数ごとの指標ですが、条件数(condition number) はモデル全体の共線性を1つの数で測ります。XX(または XXX^\top X)の最大特異値と最小特異値の比で定義されます。

κ=σmaxσmin\kappa = \frac{\sigma_{\max}}{\sigma_{\min}}

最小特異値が 0 に近い = ほぼ特異 = 比が巨大、という関係です。目安として条件数が 10〜30 を超えると共線性あり、100 を超えると深刻とされます(しきい値は要最新確認)。

要するに:相関行列で当たりをつけ、VIF で犯人の変数を特定し、条件数でモデル全体の重症度を測る、という三段構えです。

flowchart TD
  S["重回帰を当てはめた"] --> C["相関行列<br/>強い相関ペアを探す"]
  C --> V["VIF を計算<br/>VIFj = 1 / (1 - Rj^2)"]
  V --> K["条件数を計算<br/>全体の重症度"]
  K --> J{"共線性あり?"}
  J -- "なし" --> OK["そのまま解釈してよい"]
  J -- "あり" --> FIX["対処へ(第4節)"]

4. 対処:削る・まとめる・縮める

共線性が見つかったときの代表的な対処は次の通りです。

最後の正則化が、次のノート 正則化(Ridge・Lasso・Elastic Net) の主題です。Ridge は推定式が (XX+λI)1Xy(X^\top X + \lambda I)^{-1} X^\top \mathbf{y} となり、対角に足した λI\lambda Iほぼ特異な行列を確実に正則化する——共線性対策がそのまま正則化の動機になっている、という流れで読み進めてください。

graph TD
  P["多重共線性"] --> A["削る:変数選択"]
  P --> B["まとめる:主成分回帰(直交化)"]
  P --> C["中心化・標準化"]
  P --> D["縮める:Ridge / Lasso(正則化)"]
  D --> N["次ノート:正則化へ"]

⚠️ よくある誤解

対応するシミュレーション

simulations/multicollinearity.py:2つの特徴がほぼ同じ(相関 0.99\approx 0.99、VIF\approx98)データと、無相関なデータで、ブートストラップで何度も線形回帰を当てはめ、係数の推定がどれだけブレるかを比べます。相関が強いと係数が「係数1+係数2≈一定」の直線上で激しく振れ、予測は安定なのに個々の係数の解釈ができなくなる多重共線性を可視化します。対策は正則化(正則化(Ridge・Lasso・Elastic Net))。

相関の強い特徴で係数推定が不安定化

関連ノート