少ない市場データで「リスク行列」はなぜ壊れるのか

少ない市場データで「リスク行列」はなぜ壊れるのか

記事
IT・テクノロジー
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分解できるか、修復した場合にどれくらい元の行列から変わったのか。

こうした確認を行うことで、リスク計算や最適化の前段階をかなり安全にできます。

※この記事は投資助言ではありません。
売買シグナルやポートフォリオ推奨を目的としたものではなく、公開価格データを使った共分散行列の数値的安定性に関する検証です。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す