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

数学編 第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 が最も短いので先に片付けます。 の共分散行列を定義に従って計算します。

期待値は各成分に対する演算なので、定数行列 を外に出せます。

は独立な標準正規なので (単位行列)です。したがって

(1)

この証明のポイントは、 を掛ける操作が線形であることです。線形変換の共分散行列は という形になります。元の共分散が単位行列ならば が残り、これがちょうど に等しいという仕組みです。

THM-M10-3 の証明

(1) の両辺の 成分を比較して漸化式を導きます。 の 成分は

です。 は下三角行列なので ( のとき)かつ ( のとき)です。 のとき、和は に制限されます。

最後の項を分離しました。ここから2つの場合に分けます。

対角の場合(): (5) で とすると

という条件のもとで解くと

です。平方根の中身が正であることは後で示します。

非対角の場合(): (5) を について解きます。(すでに求まっている)で割れます。

(6)

平方根の中身が正であること: が正定値であることを使い、 についての帰納法で示します。 まで求まり、第 行の非対角成分 も (7) で求まったとします。(6) の平方根の中身を とおきます。 はまだ定義されていないので、 を使わずに の符号を調べます。 の左上 小行列を 、第 行の非対角成分を並べた列ベクトルを とします。 の左上 小行列 は

と書けます。右辺を掛け算すると、左上のブロックは 、右上のブロックは 、右下の成分は になり、それぞれ (5) と の定義から の対応する部分に等しいからです。両辺の行列式をとると、三角行列の行列式は対角成分の積なので

です。 も正定値(M8 の結果)なので であり、帰納法の仮定から ですから、 です( のときは空の積を 1 とみなし、 です)。よって (6) の平方根の中身はつねに正で、 が定まり、帰納法が次の へ進みます。 ∎

THM-M10-1 の証明

存在: THM-M10-3 の漸化式 (6), (7) で を構成すると を満たすことは (5) の導出を逆にたどれば確認できます。正定値性により平方根の中身はつねに正なので、対角成分が正の下三角行列が得られます。

一意性: 対角成分がすべて正の下三角行列 と がどちらも を満たすとします。 を考えます。

よって は直交行列です。一方、 は対角成分が正の下三角行列(下三角行列の逆行列は下三角行列であり、対角成分は元の対角成分の逆数で正)なので、 も下三角行列です。

直交行列かつ下三角行列であるとき、 の 成分から です。 が下三角なので第1行は です。 の 成分は です。 なので ()です。これを繰り返すと は対角行列で、各対角成分は です。

と の対角成分はどちらも正なので、 の対角成分 もすべて正です。 のうち正は だけなので 、すなわち です。 ∎

5. 反例 ― 正定値でないと途中で止まる

反例 CEX-M10-1: 正定値でない行列で分解が失敗する

THM-M10-1 は正定値性を仮定しています。この仮定を外すと分解が破綻します。次の行列を考えます。

この行列の固有値は , , です。負の固有値があるので正定値ではありません。

漸化式 (6), (7) に従って計算を進めると、, , まではうまくいきます。しかし 成分まで求めた後に 成分を計算しようとすると

の平方根の中身が になります。負の数の平方根は実数の範囲では存在しないため、分解はここで止まります。失敗する位置は (0始まりのインデックス)、すなわち第3行第3列の対角成分です。

正定値でない行列は「相関行列として整合していない」ことを意味します。3つの資産の相関を個別に推定したとき、全体として矛盾が生じているケースで起こります。

反例 CEX-M10-2: 転置を間違えた側から掛ける

THM-M10-2 では と下三角行列 を左から掛けました。もし ではなく (上三角行列)を掛けたらどうなるでしょうか。

とすると、共分散行列は

です。これは とは異なる行列です。先ほどの数値例で実際に計算すると

となり、目標の とは一致しません。たとえば 成分は で、 の から もずれています。 と の掛ける順序を間違えると、共分散構造が壊れます。

反例 CEX-M10-3: 標本数による誤差の違い

分解が正しくても、生成する乱数の個数が少なければ標本共分散は目標から大きくずれます。

標本数 のとき、標本共分散行列と目標 の差の最大値は です。一方、標本数 では最大誤差が に縮まります。約40倍の改善です。大数の法則により標本数を増やせば誤差は に近づきますが、収束速度は 程度なので、精度を1桁上げるには標本数を100倍にする必要があります。

6. 数値例 ― 相関を付けた乱数を作る

の相関行列

を使って、分解から乱数生成までの全手順を示します。

ステップ1: 漸化式で を求める。

(6) より です。

(7) より です。

(6) より です。

(7) より です。

(7) より です。

(6) より です。

まとめると

です。対角成分 はすべて正です。

ステップ2: が に戻ることを検算する。

最大誤差は のオーダーで、浮動小数点の丸め誤差の範囲内です。

ステップ3: 独立な標準正規乱数 を生成し、 で相関を付ける。

本の乱数を生成して標本共分散行列を計算すると

です。目標 との最大誤差は で、十分に小さい値です。

標本数を に減らすと

となり、最大誤差は に膨れ上がります。シミュレーションの精度は標本数に大きく依存します。

7. 次回へ ― 制約付きの最適化

コレスキー分解は、相関のある乱数を作るための基本的な道具です。ポートフォリオのリスクを計算するとき、複数の資産のリターンを相関構造ごとシミュレーションする必要がありますが、その核心がこの分解です。

次回 M11 ではラグランジュ未定乗数法を扱います。「ある制約のもとで目的関数を最小化する」という問題を解く方法で、効率的フロンティアの計算に直結します。

よくある質問

なぜ下三角行列なのですか

1つ目の乱数から順に相関を足していく形になり、計算が単純になるからです。

固有値分解でも作れますか

作れます。コレスキー分解のほうが計算が速いので、よく使われます。

分解が失敗したらどうすればいいですか

相関行列が整合していません。推定をやり直すか、近い正定値行列に補正します。

参考文献

  1. Golub G. H. and Van Loan C. F.、Matrix Computations、第4版、Johns Hopkins University Press、2013年
  2. Glasserman P.、Monte Carlo Methods in Financial Engineering、Springer、2004年

数値例は compute.py により numpy で計算し、乱数のシードを固定して再現可能にしている。

目次