Nearest SPD と Woodbury 恒等式で共分散行列を検証する
金融リスク計算では、複数の資産がどのように一緒に動くかを表す「共分散行列」がよく使われます。
たとえば、株式やETFを複数組み合わせたとき、
どの資産同士が似た動きをするのか
全体としてどれくらいリスクがあるのか
分散投資が本当に効いているのか
といったことを調べるために、共分散行列は重要な役割を持ちます。
ただし、この共分散行列には落とし穴があります。
それは、観測データの日数が、資産数より少ない場合、共分散行列が数学的に不安定になりやすいという点です。
今回、24個のETFについて、12日分の日次リターンから共分散行列を作って検証しました。
観測数は12、資産数は24です。
つまり、
観測数 12 < 資産数 24
(数学的には、中心化後の共分散行列の階数は最大でも $12 - 1 = 11$ にしかなりません)
という状態です。
この条件では、経験共分散行列はランク落ちしやすく、正定値行列として扱えなくなることがあります。
実際に確認すると、
rank deficient: True
Cholesky decomposition failed: True
となりました。
Cholesky分解が失敗するということは、この共分散行列をそのままリスク計算や最適化の中核に使うと、マーコビッツのポートフォリオ最適化(二次計画法)やリスクパリティ計算において、ヘッシアンの逆行列が求まらずソルバーが例外停止(Crash)する可能性があるということです。
そこで、Nearest SPD という方法を使って、共分散行列を「できるだけ小さな変更」で正定値行列へ修復しました。
結果は以下です。
修復後の最小固有値:
9.999999992189761e-11
Frobenius 相対変化量:
9.310601697812883e-16
Frobenius 相対変化量が非常に小さいため、元の行列をほとんど変えずに、Cholesky分解可能な正定値行列へ戻せたことが分かります。
さらに、低ランク因子モデルとして表した共分散行列について、Woodbury恒等式による計算と、通常のdenseな直接計算を比較しました。
結果は、
absolute difference:
7.105427357601002e-15
Woodbury exact identity:
True
でした。
これは、Woodbury恒等式による計算が、直接計算と機械精度レベルで一致したことを意味します。
因子数が少ないモデル(Fama-French 3/5 ファクター等)では、資産数が数百に増えても逆行列の再計算を瞬時に終わらせられる」という計算量削減($\mathcal{O}(N^3) \to \mathcal{O}(p^3)$)
つまり今回の検証では、
1. 少ない観測データでは共分散行列が実際に壊れる
2. Nearest SPD によって、ほぼ最小限の変更で正定値性を回復できる
3. Woodbury 恒等式による低ランク計算は、直接計算と高精度に一致する
ということを、公開価格データを使って確認できました。
これは投資判断そのものではなく、金融リスク計算の土台になる「数値計算の安定性」に関する検証です。
共分散行列は、見た目には普通の表のように見えても、内部では固有値・ランク・条件数といった数値的な性質に大きく左右されます。
特に、データ数が少ない状態で多数の資産を扱う場合、単純に共分散行列を作るだけでは不十分です。
行列が正定値かどうか、Cholesky分解できるか、修復した場合にどれくらい元の行列から変わったのか。
こうした確認を行うことで、リスク計算や最適化の前段階をかなり安全にできます。
※この記事は投資助言ではありません。
売買シグナルやポートフォリオ推奨を目的としたものではなく、公開価格データを使った共分散行列の数値的安定性に関する検証です。