コンテンツにスキップ

第7回 重回帰分析②:モデル診断と変数選択

本日の到達目標

  • 多重共線性の問題を VIF で診断できる
  • 残差分析によりモデルの仮定違反を識別できる
  • 変数選択の手法(AIC基準・ステップワイズ法等)の長所と短所を説明できる
  • 発展:\(VIF_j = 1/(1-R^2_j)\) が係数の分散を何倍にするかを式で導き、ステップワイズが全探索の一部しか見ていないことを数えて示せる

1. 多重共線性(Multicollinearity)

1.1 問題の本質

多重共線性:説明変数同士の間に強い線形相関がある状態

なぜ問題か:

\((X^T X)^{-1}\) の数値的安定性が低下 → 偏回帰係数の推定値が不安定・分散が大きくなる

直観的な理解:

y = 売上
x1 = 移動平均7日
x2 = 移動平均8日  ← x1 と x2 はほぼ同じ情報

モデルはβ1とβ2の「合計」しか分からなくなる:
β1 = 1000, β2 = -999 でも
β1 = 0,    β2 = 1    でも
予測値 ŷ はほぼ変わらない

→ 個別の係数の解釈が意味をなさなくなる

1.2 VIF(Variance Inflation Factor:分散膨張係数)

定義:変数 \(x_j\) を他の説明変数で回帰したときの決定係数 \(R^2_j\) を使い定義する

\[VIF_j = \frac{1}{1 - R^2_j}\]
VIF値 解釈
1 他の変数と全く相関なし(理想)
1〜5 軽度の共線性(許容可)
5〜10 中程度の共線性(注意)
10以上 強い共線性(問題あり)
導出①:なぜ「分散膨張」係数と呼ぶのか

VIF は経験的な指標ではなく、係数の分散の式にそのまま現れる量です。

OLS 推定量の分散は \(\text{Var}(\hat{\boldsymbol{\beta}}) = \sigma^2 (\mathbf{X}^T\mathbf{X})^{-1}\) です。その第 \(j\) 対角成分を取り出すと、次の形に分解できます。

\[\text{Var}(\hat{\beta}_j) = \frac{\sigma^2}{S_{jj}(1 - R^2_j)} = \underbrace{\frac{\sigma^2}{S_{jj}}}_{\text{共線性がないときの分散}} \times \underbrace{\frac{1}{1-R^2_j}}_{VIF_j}\]

ここで \(S_{jj} = \sum_i (x_{ij} - \bar{x}_j)^2\)、\(R^2_j\) は \(x_j\) を他の説明変数で回帰したときの決定係数です。

第1項は「\(x_j\) が他の変数とまったく相関しないとき(\(R^2_j = 0\))の分散」です。\(VIF_j\) はそれが何倍に膨らむかを表します。名前のとおりです。

分母の \(1 - R^2_j\) は、第6回の導出②に出てきた残差 \(\mathbf{r}_j\) のばらつきに対応します。\(x_j\) が他の変数でほぼ説明できてしまうと \(R^2_j \to 1\)、\(VIF_j \to \infty\) となり、係数の推定は無限に不安定になります。

数値で確かめる:\(n=200\)、\(x_2 = 0.9x_1 + \sqrt{1-0.9^2}\,\varepsilon\) として \(x_1, x_2\) を強く相関させ、\(x_3\) は無相関にした人工データで計算しました。

変数 \(R^2_j\) \(VIF_j\) \(\text{Var}(\hat{\beta}_j)\)(行列から) \((\sigma^2/S_{jj})\times VIF_j\)
\(x_1\) 0.7970 4.9250 0.022227 0.022227
\(x_2\) 0.7979 4.9473 0.022978 0.022978
\(x_3\) 0.0103 1.0104 0.004395 0.004395

両者は小数第6位まで一致します。VIF は \((\mathbf{X}^T\mathbf{X})^{-1}\) の対角成分を言い換えただけのものです。

使った数学:分割行列の逆行列(線形代数)。分割公式そのものの導出はこの授業では扱いません。

計算手順: 1. \(x_1\) を応答変数、残り全変数を説明変数として回帰 → \(R^2_1\) を得る 2. \(VIF_1 = 1/(1 - R^2_1)\) を計算 3. 全変数で繰り返す

1.3 時間窓特徴量における共線性の典型例

変数ペア なぜ共線性が高いか
移動平均7日 & 移動平均30日 同じ時系列の異なる窓幅
気温 & 最高気温 ほぼ同じ情報
ラグ1 & ラグ2 時系列的に連続した値

対処法: - VIF > 10 の変数を除去 - 相関の高い変数をまとめて主成分に変換(→ 第8回 PCA) - PLS の使用(→ 第12回)

【カードに記入・3分】:移動平均7日と移動平均30日の両方をモデルに入れた場合、どちらを残すべきか判断する方法を考えてください。


2. 残差分析(Residual Analysis)

残差 \(e_i = y_i - \hat{y}_i\) を分析することで、OLSの仮定が成り立っているかを検証する。

2.1 残差プロットの種類と読み方

① 残差 vs 予測値プロット

目的:等分散性(ホモスケダスティシティ)の確認

OK(等分散):             NG(分散が予測値に依存):
残 |  . . . .  .         残 |      .  .  .
差 | . .  . .             差 |   .  .
  |.  . .  . . .           | . .
  ├──────────────           ├──────────────
     予測値                      予測値
(水平に散布)              (ファンネル形 → 分散が増大)

異分散の対処:目的変数の対数変換、WLS(加重最小二乗法)

② 残差のヒストグラム・QQプロット

  • 目的:正規性の確認
  • QQプロット:理論的正規分布との比較。直線上に乗れば正規性が高い

③ 残差 vs 時間プロット(時系列データの場合)

  • 目的:自己相関の確認
  • 残差に系統的なパターン(波、増加傾向)があれば自己相関あり
  • DW統計量(Durbin-Watson)でテスト:2に近ければ自己相関なし

2.2 外れ値・影響点の検出

指標 意味
標準化残差 残差を標準偏差で割った値。
てこ比(leverage) \(h_{ii} = [H]_{ii}\), \(H = X(X^TX)^{-1}X^T\)。高い点は予測に大きく影響
Cook's距離 その点を除いた場合の係数変化量。大きい点は「影響点」
導出②:てこ比 \(h_{ii}\) は「自分で自分を引っ張る度合い」である

ハット行列 \(\mathbf{H} = \mathbf{X}(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\) は、\(\hat{\mathbf{y}} = \mathbf{H}\mathbf{y}\) という形で \(\mathbf{y}\) に帽子をかぶせる行列です。第6回の導出①で見た直交射影を行列で書いたものにあたります。

性質1:射影行列である。 計算すると \(\mathbf{H}^T = \mathbf{H}\)、\(\mathbf{H}^2 = \mathbf{H}\) です。2回射影しても1回と同じ、という当然のことを式が言っています。

性質2:\(h_{ii}\) の意味。 成分で書くと \(\hat{y}_i = \sum_k h_{ik} y_k\) です。このうち \(k = i\) の項、つまり \(h_{ii} y_i\) が、観測 \(i\) 自身が自分の予測値に与える寄与です。\(h_{ii}\) が大きい点は、自分で自分を引き寄せています。

性質3:平均は \((p+1)/n\)。 \(\text{tr}(\mathbf{H}) = p+1\)(説明変数の数+切片)なので、\(h_{ii}\) の平均は \((p+1)/n\) です。目安として \(2(p+1)/n\) を超える点を「てこ比が高い」と呼びます。基準が天下りでないことがここで分かります。

性質4:残差の分散が縮む。 \(\text{Var}(e_i) = \sigma^2(1 - h_{ii})\) となります。\(h_{ii}\) が 1 に近い点では残差がほとんどゼロになります。

性質4が実務上いちばん大事です。てこ比の高い点は、当てはまりが良く見えても、それは自分で自分を引っ張っているからかもしれません。 生の残差を見るだけでは見抜けないので、\(\sqrt{1-h_{ii}}\) で割った標準化残差を使います。

使った数学:射影行列の性質とトレース(線形代数)。

影響点の対処: - 測定誤差 → 除去または修正 - 真の極端値 → ロバスト回帰の検討 - モデルの仕様誤り → 変換・交互作用項の追加


3. 変数選択

3.1 変数選択の必要性

説明変数を多く含めると: - \(R^2\) は改善するが過適合(overfitting)のリスク - 解釈が困難になる - 計算コストが増大

3.2 ステップワイズ法

前進選択(Forward Selection) 1. 変数なし(切片のみ)から出発 2. 追加すると最も AIC が改善する変数を1つ追加 3. 改善がなくなるまで繰り返す

後退削除(Backward Elimination) 1. 全変数を含むモデルから出発 2. 削除しても AIC が悪化しない(または改善する)変数を削除 3. 全変数が有意になるまで繰り返す

ステップワイズ(両方向) - 前進と後退を交互に繰り返す

問題点: - 局所最適に陥りやすい(すべての組み合わせは探索しない) - p値を基準にした変数選択は多重検定問題を引き起こす

導出③:ステップワイズは全体のどれだけを見ているのか

「局所最適に陥りやすい」の中身を数えてみます。

説明変数が \(p\) 個あるとき、使う/使わないの組み合わせは

\[2^p \text{ 通り}\]

です。\(p = 20\) なら \(2^{20} = 1{,}048{,}576\) 通りあります。

前進選択は、変数を0個から1個ずつ増やしていきます。\(k\) 個決まった段階で試すのは残り \(p-k\) 個なので、全体で試すモデルの数は高々

\[p + (p-1) + \cdots + 1 = \frac{p(p+1)}{2} \text{ 通り}\]

\(p = 20\) なら \(20 \times 21 / 2 = 210\) 通りです。

\(1{,}048{,}576\) 通りのうち \(210\) 通り、およそ 5000分の1 しか見ていません。全体を見ずに「その時点で最も良い1手」を選び続けるので、最良の組み合わせに行き着く保証はありません。

具体的に取りこぼす例:\(x_A\) 単独では \(y\) とほとんど相関しないが、\(x_B\) と一緒に入れて初めて効く、という組み合わせがあるとします。前進選択の第1段階では \(x_A\) も \(x_B\) も選ばれないので、この組はそもそも試されません。

これは実装の欠陥ではなく、探索の順序を固定したことの必然です。だから結果は「選ばれた変数が最良」ではなく「この探索手順ではここに行き着いた」と読むべきです。

使った数学:組み合わせの数え上げ(部分集合の個数と等差数列の和)。

3.3 正則化(参考:詳細は「ビッグデータ処理」科目で)

手法 追加する罰則項 効果
Ridge \(\lambda \sum \beta_j^2\) 係数を0に近づける(0にはしない)
Lasso $\lambda \sum \beta_j
Elastic Net Ridgeとの組み合わせ グループ変数の選択に強い

→ 共線性がある場合は Lasso/Elastic Net が有効(第12回の PLS とも関連)


4. 変数選択の試行錯誤を効率化する

4.1 列指向ストレージとの接続(第2回の応用)

変数選択の試行回数が多い場合、各試行のI/Oコストを削減することが重要。

試行1(変数: x1, x2)       : x1列とx2列のみ読み込み
試行2(変数: x1, x2, x3)   : x1, x2は再利用、x3だけ追加読み込み
試行3(変数: x1, x2, x4)   : x1, x2は再利用、x4だけ追加読み込み

列指向ストレージではこの「列追加」が行指向より大幅に軽い。

4.2 DAGでの試行管理(第4回の応用)

特徴行列の全列 (features.parquet)
   ├→ 試行A: [x1, x2]      → AIC_A
   ├→ 試行B: [x1, x2, x3]  → AIC_B
   ├→ 試行C: [x1, x2, x4]  → AIC_C
   └→ ...
          ↓ 最良モデル選択
      最終モデル

5. 診断から修正への流れ

1. モデル推定(OLS)
       ↓
2. VIF の確認
   VIF > 10 → 共線性あり → 変数除去 or PCA/PLS へ
       ↓
3. 残差分析
   等分散性違反 → 目的変数を対数変換
   正規性違反  → ロバスト回帰 or ノンパラメトリック手法
   自己相関   → ARIMA、時系列モデルへ
       ↓
4. 影響点確認(Cook's距離)
   大きい点 → データ確認・修正・除外
       ↓
5. 変数選択(AIC/BIC によるステップワイズ)
       ↓
6. 再推定・再診断

6. 基盤リンクの整理

基盤概念 本回での役割 具体的な使い方
列指向 変数追加/削除を低コストで繰り返す ステップワイズの各試行が速い
整合性 診断結果がデータ更新で変わらないよう固定 VIF計算のたびにデータが変わると比較不能
DAG 診断指標計算をパイプラインに組み込み AIC・VIF・残差プロットを自動生成
近似 候補絞り込みを近似集計で先に行う VIF計算前に相関係数を近似で確認

7. 本日のまとめ

  1. VIF(分散膨張係数)で多重共線性を診断し、VIF > 10 の変数を精査する
  2. 残差分析(等分散性・正規性・自己相関・影響点)でOLSの仮定を検証する
  3. 変数選択は AIC/BIC を基準としたステップワイズが基本(正則化は詳細後続科目)
  4. 共線性が残る場合は PCA(第8回)や PLS(第12回)への移行を検討する

次回予告

第8回からはPCA(主成分分析)に入る。
「なぜ分散を最大化することが次元削減になるのか」を固有値・固有ベクトルの観点から理解する。


事後課題

以下の問いに答えること(A4 半枚):

  1. VIF は「変数 \(x_j\) を他の変数で回帰した \(R^2_j\)」から計算されるが、なぜこれが多重共線性の指標になるか、直観的に説明してください。
  2. 時系列データの残差に正の自己相関があった場合、推定された標準誤差(係数の信頼区間)はどのように影響を受けるか説明してください。