数学編 第9回 固有値分解と主成分分析 ― イールドカーブの3つの動き

位置: 数学編 第9回(M9) / 前提: M8(行列と二次形式) / 数学編: M8 / この回でできるようになること: 金利の変動データを主成分分析し、上位の成分の寄与率を計算できる
0. 物語 ― 主成分に経済的な意味を読み込みすぎる
前回までに、行列のかけ算と二次形式という道具を手に入れました。二次形式を使うと、ある方向にデータがどのくらい広がっているかを1つの数で測れます。共分散行列にこの道具を当てれば、「最も散らばりが大きい方向」を探す問題が立てられます。
イールドカーブの金利データに使ってみると、結果はきれいに読めます。最も大きな動きは全ての満期が同じ向きに動く「水準の変化」で、全体の約90%を占めます。次が短い満期と長い満期が反対に動く「傾きの変化」で約8%、3番目が真ん中だけ逆に動く「曲率の変化」で約1%です。たった3方向で変動の99%以上を説明できます。
これだけ見ると、「主成分分析をすれば必ず意味のある動きが取り出せる」と思えるかもしれません。しかし、何の構造もないランダムなデータから共分散行列を作って同じ計算をしても、主成分は出てきます。第1成分の寄与率は55%程度にとどまり、1つの方向で全体を代表できません。成分の形を見ても、「水準」や「傾き」のような名前を付けられるパターンは現れません。
主成分分析が経済的に意味のある答えを返すのは、データの裏に共通の要因があるときだけです。計算はいつでもできますが、結果に意味があるかどうかは別の問題です。この回では、計算の仕組みを証明したうえで、使える場面と使えない場面の違いを数値で確かめます。
1. 動機 ― たくさんの動きを少数の動きにまとめる
この回を読み終えると、金利の変動データを主成分分析し、上位の成分の寄与率を計算できます。
金利カーブは満期ごとに異なる動きをします。1年金利と30年金利は同じ日に上がることもあれば逆方向に動くこともあります。5つの満期を追えばデータは5次元になりますが、実務で「5方向を同時に見る」のは困難です。
ここで「たくさんの変数の動きを、少数の代表的な動きに分解する」道具が欲しくなります。主成分分析(PCA)がまさにそれです。PCA は共分散行列の固有値分解という線形代数の操作に帰着します。今回はその数学的な仕組みを証明し、イールドカーブのデータで実際に確かめます。
この記事で証明すること
- THM-M9-1 実対称行列は直交行列で対角化でき、固有値はすべて実数です。
- THM-M9-2 長さ1のベクトルの中で、共分散行列による二次形式
を最大にするのは、最大固有値に対応する固有ベクトルです。そのときの値は最大固有値に等しくなります。 - THM-M9-3 各主成分が説明する分散の割合(寄与率)は、対応する固有値を固有値の総和で割ったものです。
2. 設定と仮定 ― 共分散行列の固有値
以下の仮定を置きます。
個の観測変数があり、 回のデータを並べた行列 は各列の平均を引いて中心化済みとします。 - 共分散行列
は の実対称行列で、半正定値(すべての に対し )です。 - 固有値は大きい順に
と並べます。 - 数値例では、5つの満期(1年、2年、5年、10年、30年)の金利変化を模した人工データを使います。
3. 主張 ― 分散が最大になる方向は固有ベクトル
定理 THM-M9-1(対称行列のスペクトル分解)
の実対称行列 に対し、直交行列 ( )と対角行列 が存在して が成り立つ。固有値
はすべて実数である。
定理 THM-M9-2(分散最大の方向) 共分散行列
の固有値を 、対応する正規直交固有ベクトルを とする。 のもとで二次形式 を最大にするベクトルは であり、最大値は である。
定理 THM-M9-3(寄与率) 第
主成分が説明する分散の割合(寄与率)は に等しい。
3つの定理が PCA の数学的な骨格です。THM-M9-1 が分解の存在を保証し、THM-M9-2 が「固有ベクトル方向で分散が最大」を示し、THM-M9-3 が各成分の重要度を定量化します。
証明を読む(読まなくても記事は完結します)
4. 証明 ― ラグランジュ未定乗数法で最大化する
この節は読まなくても記事は完結します。
この証明を追いたい人は、数学編 第8回「二次形式と正定値性」へ。
THM-M9-1 の証明(要点)
実対称行列の固有値がすべて実数であることを示します。
一方、
異なる固有値に属する固有ベクトルが直交することも、対称性から導けます。
THM-M9-2 の証明
制約
です。ここで
整理すると
これは
停留点での目的関数の値を求めます。(4.3) の両辺に左から
制約
最大値が確かに達成されることを確認します。
THM-M9-3 の証明
THM-M9-1 により
トレースの巡回性
つまり、分散の総和は固有値の総和に等しくなります。
第
これが寄与率の定義と一致します。 ∎
5. 反例 ― 単位をそろえないと結果が歪む
CEX-M9-1: 回転行列は実数の固有値を持たない
THM-M9-1 の「対称」という仮定を外すとどうなるでしょうか。
の固有値は
CEX-M9-2: 単位を100倍にすると第1主成分がその変数に引っ張られる
5つの満期の金利変化データで、30年金利だけを100倍にして PCA を行います。元のデータでは第1主成分は
と5成分がほぼ均等でした。30年金利を100倍にすると
となり、第1主成分のほぼ全体が30年金利の方向を向きます。寄与率も 99.99% に跳ね上がり、他の成分の情報が埋もれます。
これは30年金利の「分散」が単位のせいで人工的に大きくなったためです。PCA は共分散行列の固有値、つまり分散の大きさで重要度を判断します。変数間でスケールが違えば、大きい変数が自動的に「重要」とみなされます。異なる単位の変数を混ぜるときは、事前に標準化(各変数を標準偏差で割る)するか、相関行列を使う必要があります。
CEX-M9-3: ランダムな共分散行列の主成分は解釈できない
ランダムに生成した
のようになります。寄与率は第1成分が 54.5%、第2成分が 24.6%、第3成分が 16.3% で、どの成分も突出しません。成分の形にも「水準」「傾き」のような解釈を与えられません。
PCA は数学的にはどんな共分散行列にも適用できますが、結果に経済的な意味があるとは限りません。イールドカーブの PCA がうまくいくのは、金利の動きに共通の経済的な要因(金融政策、景気見通しなど)があるからです。道具の適用可能性と結果の解釈可能性は別の問題です。
6. 数値例 ― イールドカーブを3成分に分ける
5つの満期(1年、2年、5年、10年、30年)の金利日次変化250日分の人工データで PCA を実行します。
共分散行列の固有値と寄与率
| 主成分 | 固有値 | 寄与率 | 累積寄与率 |
|---|---|---|---|
| 第1 | 0.01178076 | 89.96% | 89.96% |
| 第2 | 0.00111164 | 8.49% | 98.45% |
| 第3 | 0.00015223 | 1.16% | 99.61% |
| 第4 | 0.00003026 | 0.23% | 99.84% |
| 第5 | 0.00002061 | 0.16% | 100.00% |
第1から第3主成分だけで累積寄与率が 99.61% に達します。5次元の動きを3次元でほとんど説明できるということです。
主成分ベクトルの形
| 満期 | 第1主成分 | 第2主成分 | 第3主成分 |
|---|---|---|---|
| 1Y | 0.457 | 0.645 | 0.515 |
| 2Y | 0.451 | 0.315 | |
| 5Y | 0.441 | ||
| 10Y | 0.445 | ||
| 30Y | 0.441 | 0.501 |
- 第1主成分(水準): 全満期でほぼ同じ大きさの正の値。金利全体が同時に上下する「パラレルシフト」に対応します。
- 第2主成分(傾き): 短期がプラス、長期がマイナス。短期金利が上がり長期金利が下がる「スティープニング/フラットニング」です。
- 第3主成分(曲率): 短期と長期がプラス、中期がマイナス。カーブが「へ」の字に曲がる動きです。
分散最大化の検証
以上の結果は、金利市場の実証研究(Litterman and Scheinkman, 1991)で報告されている「水準・傾き・曲率の3因子」と整合しています。
7. 次回へ ― 相関のある乱数を作る
PCA で得た固有値と固有ベクトルを使えば、相関構造を持つ乱数を生成できます。次回 M10 ではコレスキー分解を取り上げ、この問題を正面から扱います。モンテカルロ・シミュレーションで複数の資産を同時に動かすための基礎道具です。
よくある質問
主成分分析とは何ですか
変数どうしの動きの共通部分を、重要な順に取り出す方法です。
なぜイールドカーブで3つなのですか
実際のデータで、水準、傾き、曲率の3つでほとんどの変動が説明できることが知られているからです。
固有値は何を表しますか
その方向の分散の大きさです。大きいほど重要な動きです。
参考文献
- Strang G.、Introduction to Linear Algebra、第5版、Wellesley-Cambridge Press、2016年
- Litterman R. and Scheinkman J.、Common Factors Affecting Bond Returns、The Journal of Fixed Income、1991年、DOI 10.3905/jfi.1991.692347
数値例は compute.py により NumPy(シード固定)で計算済み。本文中の小数は outputs.json の値を丸めている。

