コンテンツにスキップ

第8回 PCA①:分散最大化による次元削減

本日の到達目標

  • PCAの目的関数(分散最大化)を数式で説明できる
  • 固有値・固有ベクトルとPCAの関係を説明できる
  • PCAの結果(主成分スコア・寄与率)を正しく解釈できる
  • 発展:射影後の分散が \(\mathbf{w}^T\mathbf{S}\mathbf{w}\) になることを導き、その最大値が最大固有値になる理由をラグランジュ乗数法を使わずに説明できる

1. なぜ次元削減が必要か

1.1 高次元データの問題

後半の分析で扱う特徴行列 X は、時間窓特徴量を多数作ると次元が大きくなる。

例:移動平均7日・14日・30日、ラグ1〜7、頻度7日・30日、… → 数十〜数百変数

高次元データの問題点

問題 内容
次元の呪い(Curse of Dimensionality) 次元が増えるほどデータが「空間上に薄く」なる
可視化の困難 3次元以上は直接描けない
多重共線性 変数が増えると共線性のリスクが高まる(第7回)
計算コスト 行列演算のコストは次元の増加に応じて増大

1.2 次元削減の目標

  • 元の \(p\) 次元データを \(k \ll p\) 次元に射影する(\(k = 2, 3\) なら可視化できる)
  • できるだけ元のデータの情報(分散)を保持しながら削減する
  • PCAはこの「分散最大化」を目的関数とした次元削減手法

2. PCAの目的関数:分散最大化

2.1 問題の設定

\(n\) 個のデータ点、\(p\) 個の変数からなる行列 \(\mathbf{X}\)(列を平均0に標準化済み)

目標:データを1本の方向ベクトル \(\mathbf{w} \in \mathbb{R}^p\)(\(\|\mathbf{w}\| = 1\))に射影したとき、
射影後の分散が最大になる方向 \(\mathbf{w}\) を求める。

2.2 射影後の分散

データ点 \(\mathbf{x}_i\) の \(\mathbf{w}\) への射影:\(z_i = \mathbf{x}_i^T \mathbf{w}\)

射影後の分散(\(\bar{z} = 0\) に標準化済みのとき):

\[\text{Var}(z) = \frac{1}{n} \sum_{i=1}^n z_i^2 = \frac{1}{n} \mathbf{w}^T \mathbf{X}^T \mathbf{X} \mathbf{w} = \mathbf{w}^T \mathbf{S} \mathbf{w}\]

ここで \(\mathbf{S} = \frac{1}{n} \mathbf{X}^T \mathbf{X}\) は共分散行列

導出①:射影後の分散が \(\mathbf{w}^T\mathbf{S}\mathbf{w}\) になるまで

各データ点を方向 \(\mathbf{w}\) に射影した値は \(z_i = \mathbf{x}_i^T\mathbf{w}\)(スカラー)です。列は平均0に標準化済みなので \(\bar{z} = 0\)、したがって分散は二乗平均です。

\[\text{Var}(z) = \frac{1}{n}\sum_{i=1}^n z_i^2 = \frac{1}{n}\sum_i (\mathbf{x}_i^T\mathbf{w})^2\]

スカラーは転置しても同じなので \((\mathbf{x}_i^T\mathbf{w})^2 = (\mathbf{x}_i^T\mathbf{w})(\mathbf{w}^T\mathbf{x}_i) = \mathbf{w}^T(\mathbf{x}_i\mathbf{x}_i^T)\mathbf{w}\) と書けます。\(\mathbf{w}\) は \(i\) によらないので和の外に出せます。

\[\text{Var}(z) = \mathbf{w}^T\left(\frac{1}{n}\sum_i \mathbf{x}_i\mathbf{x}_i^T\right)\mathbf{w} = \mathbf{w}^T\mathbf{S}\mathbf{w}\]

なぜ \(\|\mathbf{w}\| = 1\) という制約が要るのか。 \(\mathbf{w}\) を2倍すると射影の値も2倍、分散は4倍になります(\(\text{Var}(2z) = 4\text{Var}(z)\))。制約を付けないと、長さを伸ばすだけで目的関数をいくらでも大きくできてしまい、問題が意味を持ちません。知りたいのは「どの向きか」であって「どれだけ長いか」ではないので、長さを1に固定します。

使った数学:内積と転置の操作、和の入れ替え(線形代数)。

2.3 最大化問題の定式化

\[\max_{\mathbf{w}} \mathbf{w}^T \mathbf{S} \mathbf{w} \quad \text{subject to} \quad \|\mathbf{w}\|^2 = \mathbf{w}^T\mathbf{w} = 1\]

ラグランジュ乗数法を使うと:

\[\mathbf{S} \mathbf{w} = \lambda \mathbf{w}\]

これは固有値問題!

結論:分散を最大化する射影方向は、共分散行列 \(\mathbf{S}\) の固有ベクトル(最大固有値に対応)

導出②:最大値が最大固有値になる理由(ラグランジュ乗数法を使わない道筋)

本文ではラグランジュ乗数法で固有値問題に帰着させました。実は、答えが \(\lambda_1\) になることだけなら、もっと素朴に示せます。

\(\mathbf{S}\) は対称行列なので、互いに直交する単位固有ベクトル \(\mathbf{v}_1, \ldots, \mathbf{v}_p\)(固有値 \(\lambda_1 \geq \cdots \geq \lambda_p \geq 0\))で空間全体を表せます。そこで任意の単位ベクトル \(\mathbf{w}\) を

\[\mathbf{w} = \sum_{k=1}^p c_k \mathbf{v}_k, \qquad \sum_k c_k^2 = 1\]

と展開します(\(\|\mathbf{w}\|=1\) がそのまま \(\sum c_k^2 = 1\) になります)。\(\mathbf{S}\mathbf{v}_k = \lambda_k \mathbf{v}_k\) と固有ベクトルの直交性を使うと、

\[\mathbf{w}^T\mathbf{S}\mathbf{w} = \sum_{k=1}^p \lambda_k c_k^2\]

右辺は、重み \(c_k^2\)(非負で合計1)による固有値の重み付き平均です。平均は最大の値を超えられません。

\[\sum_k \lambda_k c_k^2 \leq \lambda_1 \sum_k c_k^2 = \lambda_1\]

等号は重みを \(\lambda_1\) に全部乗せたとき、つまり \(c_1 = 1\)(\(\mathbf{w} = \mathbf{v}_1\))のときです。「制約つき最大化」の正体は、固有値の中から一番大きいものを選ぶことでした。

数値で確かめる:\(\mathbf{S} = \begin{pmatrix} 4.0 & 1.2 \\ 1.2 & 1.0 \end{pmatrix}\) の固有値は \(\lambda_1 = 4.420937\)、\(\lambda_2 = 0.579063\)、第1固有ベクトルは \((0.943628,\ 0.331007)\) です。一方、方向を角度 \(\theta\) で表して \(0\) から \(\pi\) まで総当たりで射影分散を計算すると、最大値は \(4.420937\)、そのときの方向は \((0.943628,\ 0.331007)\) でした。固有値計算と総当たりが一致します。

この授業で扱う範囲外:対称行列が必ず直交する固有ベクトルの組を持つこと(スペクトル定理)の証明、およびラグランジュ乗数法が最適解を与えることの正当化。ここでは結果を使います。

使った数学:固有ベクトルによる展開、重み付き平均は最大値を超えないという不等式。


3. 固有値・固有ベクトルとPCA

3.1 固有値分解の復習

正方行列 \(\mathbf{S}\) に対して:

\[\mathbf{S} \mathbf{v} = \lambda \mathbf{v}\]
  • \(\lambda\):固有値(スカラー)
  • \(\mathbf{v}\):固有ベクトル

共分散行列 \(\mathbf{S}\)(半正定値対称行列)の固有値はすべて非負の実数。

3.2 PCAの主成分

\(p\) 個の固有値 \(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_p \geq 0\) と対応する固有ベクトル \(\mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_p\)

主成分 射影方向 射影後の分散 条件
第1主成分 \(\mathbf{v}_1\) \(\lambda_1\) 分散最大
第2主成分 \(\mathbf{v}_2\) \(\lambda_2\) \(\mathbf{v}_1\) と直交、残余分散最大
第3主成分 \(\mathbf{v}_3\) \(\lambda_3\) \(\mathbf{v}_1, \mathbf{v}_2\) と直交
… … … …

主成分スコア:\(\mathbf{Z} = \mathbf{X} \mathbf{V}\)(\(\mathbf{V}\):固有ベクトルを列に並べた行列)

3.3 2次元の幾何的理解

原空間(x1-x2 平面):

x2 ↑      ↗ 第1主成分方向(v1): データが最も広がる方向
   |    /     ↖ 第2主成分方向(v2): v1 と直交する方向
   |   /  ○ ○ 
   |  /○ ○○ ○ 
   | ○○ ○  ○ 
   |○ ○   ○  
   ├─────────→ x1

データを \(\mathbf{v}_1\) 方向に射影すると、元の分散をできるだけ保持しながら次元を削減できる。


4. 寄与率と累積寄与率

4.1 寄与率(Explained Variance Ratio)

\[\text{寄与率}_k = \frac{\lambda_k}{\sum_{j=1}^p \lambda_j}\]

第 \(k\) 主成分が元のデータの全分散のうちどれだけを説明するか。

導出③:寄与率の分母は「元のデータが持っていた分散の総量」である

寄与率の分母 \(\sum_j \lambda_j\) は固有値の和ですが、これは元の変数の分散の合計と同じものです。

行列の対角成分の和(トレース)について、\(\mathbf{S}\) の対角成分 \(S_{jj}\) は変数 \(x_j\) の分散です。したがって

\[\text{tr}(\mathbf{S}) = \sum_{j=1}^p S_{jj} = (\text{各変数の分散の合計})\]

一方、トレースは固有値の和にも等しくなります。

\[\text{tr}(\mathbf{S}) = \sum_{k=1}^p \lambda_k\]

つまり分母は主成分に移しても保存される分散の総量です。PCA は分散を作りもしなければ消しもせず、座標を取り替えて分散の配分を変えているだけだと分かります。寄与率 \(\lambda_k / \sum_j \lambda_j\) は「その総量のうち第 \(k\) 主成分が受け取った割合」です。

標準化してあれば各変数の分散は1なので \(\text{tr}(\mathbf{S}) = p\)、分母はちょうど変数の数になります。

数値で確かめる:上の \(\mathbf{S}\) では \(\text{tr}(\mathbf{S}) = 4.0 + 1.0 = 5.000000\)、固有値の和は \(4.420937 + 0.579063 = 5.000000\) で一致します。第1主成分の寄与率は \(4.420937 / 5 = 0.884187\)、すなわち 88.42% です。

使った数学:トレースと固有値の和が一致すること(線形代数)。

4.2 累積寄与率

\[\text{累積寄与率}_K = \frac{\sum_{k=1}^K \lambda_k}{\sum_{j=1}^p \lambda_j}\]

主成分の個数 \(k\) の選択基準

基準 内容
累積寄与率 ≥ 80%(または90%) 実務でよく使われる経験則
スクリープロット(肘法) 固有値の減少が急に緩やかになる点を選ぶ
固有値 ≥ 1(Kaiser基準) 元の変数1つ分以上の情報を持つ成分のみ

スクリープロットのイメージ

固 ↑
有 | ×
値 |   ×
   |     ×  ← ここで急に減少が緩やかになる("肘")
   |       × × ×
   ├────────────→ 主成分番号

5. 主成分の解釈

5.1 ローディング(因子負荷量)

固有ベクトル \(\mathbf{v}_k\) の各成分 = 各元変数の主成分への「重み」(ローディング)

例(時間窓特徴量での解釈)

第1主成分 v1 = [0.6, 0.7, -0.1, -0.2, ...]
               ↑     ↑     ↑     ↑
            MA7日  MA30日 ラグ1 頻度30日

→ 移動平均系の変数が大きな正の重み
   第1主成分 ≈ 「最近の売上水準」の総合指標

5.2 主成分の命名

各主成分は「大きなローディングを持つ変数群」から意味を読み取って名前をつける

注意:主成分はデータ依存の合成変数であり、解釈は研究者の判断を要する


6. 後半の分析への接続

6.1 PCAの位置づけ

時間窓特徴量(高次元)
     ↓ PCA(第8・9回)
低次元主成分スコア Z
     ├→ クラスタリング(k-means: 第10・11回)
     ├→ 可視化(散布図)
     └→ 重回帰の説明変数として利用

メリット:主成分は互いに直交(共線性なし) → VIF の問題を回避できる


7. 基盤リンクの整理

基盤概念 本回での役割 具体的な使い方
列指向 高次元特徴行列を必要列から構成しI/Oを抑える \(p\) が大きい場合に必要列だけ読む
整合性 射影の比較のため同一データを使う PCAの前後で同じスナップショットを使う
DAG 標準化→PCA→下流タスクの流れを固定 標準化パラメータも含めてパイプライン管理
近似 大規模時は近似SVDの導入余地を意識する 第9回で詳述(ランダム化SVD)

8. 本日のまとめ

  1. PCAの目的関数は共分散行列の固有値問題として定式化される
  2. 第 \(k\) 主成分 = 共分散行列の第 \(k\) 固有ベクトル方向(前成分と直交)
  3. 寄与率と累積寄与率で「いくつの主成分を使うか」を決める
  4. 主成分は元の変数の線形結合であり、ローディングで解釈できる

次回予告

第9回では PCA②:高次元・大規模データへの対応として ランダム化SVD を扱う。
近似が精度・速度に与える影響を評価し、バイプロットで成分を解釈する。


事後課題

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

  1. 2変数 \((x_1, x_2)\) の共分散行列 \(S = \begin{pmatrix} 2 & 1 \\ 1 & 1 \end{pmatrix}\) の固有値と固有ベクトルを求め、第1主成分が全分散の何%を説明するかを計算してください。
  2. PCA後の主成分は「互いに直交している」とはどういう意味か、多重共線性との関係で説明してください。