数学編 第10回 コレスキー分解 ― 相関のある乱数の作り方

位置: 数学編 第B部 第10回 / 前提: M8(正定値行列) / 数学編: M10 / この回でできるようになること: 共分散行列をコレスキー分解し、相関のある乱数を作ることができる
0. 物語 ― 掛ける向きを間違える
コレスキー分解で得られる下三角行列を独立な乱数に掛けると、狙い通りの相関を持つ乱数が作れます。前の回で正定値性を学びましたが、この結果は「行列を掛ける向き」という、もっと実務的な面からも見ることができます。
3つの資産があり、それぞれの相関が決まっているとします。コレスキー分解で下三角行列を求め、独立な乱数に掛けるのが正しい手順です。ところが、ある人がうっかり下三角行列ではなく、その転置(上三角行列)を掛けてしまいました。行列の中身は同じ数字です。向きが違うだけです。
結果はどうなったでしょうか。正しく掛けたときは、1番目の資産の分散はきちんと1.0になります。ところが転置を掛けた場合、1番目の資産の分散は1.45になりました。目標から0.45もずれています。2番目の資産の分散は0.8で、こちらは目標の1.0から0.2小さくなっています。相関の値も狂います。
なぜ同じ数字が並んでいるのに結果が変わるのでしょうか。掛け算の順序が変わると、どの乱数がどの資産に影響するかが変わるからです。下三角行列を掛けると、1番目の資産は1番目の乱数だけで決まり、2番目の資産は1番目と2番目の乱数で決まる、という階段状の構造になります。転置を掛けるとこの構造が崩れ、分散と相関の配分が目標からずれてしまいます。
コレスキー分解には「分解が一意に存在する」「掛ける向きが決まっている」「正定値でなければ分解できない」という3つの性質があります。どれか1つでも無視すると、シミュレーションの結果は信用できなくなります。
1. 動機 ― 相関のある乱数をどう作るか
この回を読み終えると、共分散行列をコレスキー分解し、相関のある乱数を作ることができます。
モンテカルロ・シミュレーションで複数の資産を同時に動かすとき、資産ごとに独立な乱数を振るだけでは不十分です。現実の資産は互いに相関を持っているからです。たとえば日経平均とTOPIXはほぼ同じ方向に動きますし、株式と債券は逆方向に動く傾向があります。
この相関をシミュレーションに反映するには、独立な乱数を相関のある乱数に変換する手順が必要です。その道具がコレスキー分解です。共分散行列を「下三角行列
今回は、この分解がなぜ一意に存在するのかを証明し、実際の計算手順を導出し、分解した行列を使って相関のある乱数を生成する方法を示します。
この記事で証明すること
- THM-M10-1 正定値対称行列は、対角成分が正の下三角行列とその転置の積として、ただ一通りに分解できます。
- THM-M10-2 独立な標準正規乱数のベクトルに下三角行列を掛けると、共分散行列が元の行列に一致する乱数ベクトルが得られます。
- THM-M10-3 下三角行列の成分は、左上から順に平方根と引き算だけで逐次的に求まります。
2. 設定と仮定 ― 正定値の共分散行列
以下の仮定を置きます。
- 行列は正定値対称:
は の実対称行列で、任意の零でないベクトル に対して を満たします。M8 で学んだ正定値性です。 - 独立な標準正規乱数は与えられたものとする: 独立な標準正規乱数ベクトル
はすでに生成できるものとします。生成方法は M32 で扱います。 - 乱数のシードを固定する: 数値例では再現性のためシードを固定します。
- 数値例は3行3列: 具体例では
の相関行列を使います。
下三角行列とは、対角より上の成分がすべて
の形です。対角成分
3. 主張 ― 下三角行列に一意に分解できる
定理 THM-M10-1(存在と一意性)
が の正定値対称行列であるとき、対角成分がすべて正の下三角行列 で を満たすものがただ一つ存在する。
定理 THM-M10-2(相関の付与)
を独立な標準正規乱数ベクトル( , )とし、 を (1) の下三角行列とする。 とおくと が成り立つ。
定理 THM-M10-3(計算手順)
の成分は次の漸化式で左上から順に決まる。 に対して 正定値性により、対角の平方根の中身はつねに正である。
3つの定理は互いに補い合っています。THM-M10-1 が分解の存在と一意性を保証し、THM-M10-3 が具体的な計算方法を与え、THM-M10-2 が分解の使い方を示しています。
証明を読む(読まなくても記事は完結します)
4. 証明 ― 成分を左上から順に決める
この節は読まなくても記事は完結します。
この証明を追いたい人は、数学編 第8回「二次形式と正定値性」へ。
THM-M10-2 の証明
THM-M10-2 が最も短いので先に片付けます。
期待値は各成分に対する演算なので、定数行列
この証明のポイントは、
THM-M10-3 の証明
(1) の両辺の
です。
最後の項を分離しました。ここから2つの場合に分けます。
対角の場合(
です。平方根の中身が正であることは後で示します。
非対角の場合(
平方根の中身が正であること:
と書けます。右辺を掛け算すると、左上のブロックは
です。
THM-M10-1 の証明
存在: THM-M10-3 の漸化式 (6), (7) で
一意性: 対角成分がすべて正の下三角行列
よって
直交行列かつ下三角行列であるとき、
5. 反例 ― 正定値でないと途中で止まる
反例 CEX-M10-1: 正定値でない行列で分解が失敗する
THM-M10-1 は正定値性を仮定しています。この仮定を外すと分解が破綻します。次の行列を考えます。
この行列の固有値は
漸化式 (6), (7) に従って計算を進めると、
の平方根の中身が
正定値でない行列は「相関行列として整合していない」ことを意味します。3つの資産の相関を個別に推定したとき、全体として矛盾が生じているケースで起こります。
反例 CEX-M10-2: 転置を間違えた側から掛ける
THM-M10-2 では
です。これは
となり、目標の
反例 CEX-M10-3: 標本数による誤差の違い
分解が正しくても、生成する乱数の個数が少なければ標本共分散は目標から大きくずれます。
標本数
6. 数値例 ― 相関を付けた乱数を作る
を使って、分解から乱数生成までの全手順を示します。
ステップ1: 漸化式で
(6) より
(7) より
(6) より
(7) より
(7) より
(6) より
まとめると
です。対角成分
ステップ2:
最大誤差は
ステップ3: 独立な標準正規乱数
です。目標
標本数を
となり、最大誤差は
7. 次回へ ― 制約付きの最適化
コレスキー分解は、相関のある乱数を作るための基本的な道具です。ポートフォリオのリスクを計算するとき、複数の資産のリターンを相関構造ごとシミュレーションする必要がありますが、その核心がこの分解です。
次回 M11 ではラグランジュ未定乗数法を扱います。「ある制約のもとで目的関数を最小化する」という問題を解く方法で、効率的フロンティアの計算に直結します。
よくある質問
なぜ下三角行列なのですか
1つ目の乱数から順に相関を足していく形になり、計算が単純になるからです。
固有値分解でも作れますか
作れます。コレスキー分解のほうが計算が速いので、よく使われます。
分解が失敗したらどうすればいいですか
相関行列が整合していません。推定をやり直すか、近い正定値行列に補正します。
参考文献
- Golub G. H. and Van Loan C. F.、Matrix Computations、第4版、Johns Hopkins University Press、2013年
- Glasserman P.、Monte Carlo Methods in Financial Engineering、Springer、2004年
数値例は compute.py により numpy で計算し、乱数のシードを固定して再現可能にしている。

