forward-risk について
forward-riskは、投資家やポートフォリオ分析担当者向けの金融分析スキルです。将来リスク指標、ポートフォリオのリスク分解、シナリオ分析、ストレステストを扱い、実行可能なPythonデモも含みます。
主な機能
- 01パラメトリック法とモンテカルロVaR
- 02CVaRと期待ショートフォール
- 03コンポーネントVaRと限界VaR
- 04シナリオ分析とストレステスト
- 05ファクターリスクの分解
- 06実行可能なPythonデモ
活用シーン
- 01単一資産やポートフォリオのリスク推定
- 02VaRとCVaRによるテール損失の比較
- 03ポートフォリオリスクの主な要因の特定
- 04市場ショック下でのポートフォリオ評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ joellewis/ finance_skills --skill forward-riskインストール後、Claude Code で/forward-riskを入力して読み込まれたか確認します。
同梱ファイルscripts/forward_risk.py
詳細
将来予測型リスク分析
中核概念
パラメトリック(分散共分散)VaR
リターンが正規分布に従うと仮定します。単一資産またはドル建てのポートフォリオの場合(短期間の期待リターンをゼロと仮定):
VaR = W * z_alpha * sigma_p
ここで:
- W = ポートフォリオ価値
- z_alpha = 信頼水準に対応する z スコア(95%の場合は1.645、99%の場合は2.326)
- sigma_p = 該当する期間におけるポートフォリオのボラティリティ
期待リターンを含めると、より一般的には次のようになります。
VaR_alpha = mu - z_alpha * sigma
1日 VaR を h 日 VaR に変換するには(リターンが独立同一分布に従うと仮定):
VaR_h = VaR_1 * sqrt(h)
ポートフォリオ VaR(複数資産)
ウェイトベクトル w と共分散行列 Sigma を持つポートフォリオの場合:
sigma_p = sqrt(w' * Sigma * w)
VaR_p = W * z_alpha * sqrt(w' * Sigma * w)
共分散行列は、各資産のボラティリティと資産間の相関の両方を捉えます。
モンテカルロ VaR
多数のポートフォリオリターンのシナリオ(例:10,000件以上)をシミュレーションし、シミュレーションした損失分布のアルファ・パーセンタイルを求めます。
手順:
- リターン分布のパラメーター(平均ベクトル、共分散行列、またはコピュラモデル)を推定します。
- N 個のランダムなリターンシナリオを生成します(例:多変量正規分布の場合は共分散行列のコレスキー分解を使用)。
- 各シナリオについてポートフォリオリターンを計算します。
- 結果を並べ替え、アルファ・パーセンタイルにあたる損失を特定します。
モンテカルロ VaR は、非正規分布、ファットテール、経路依存型金融商品、非線形ペイオフ(例:オプション)に対応できます。
条件付き VaR(CVaR)/期待ショートフォール
CVaR は、「損失が VaR を超えた場合、損失の期待値はいくらか」という問いに答えます。
ES_alpha = E[Loss | Loss > VaR_alpha]
正規分布の場合:
ES_alpha = mu + sigma * phi(z_alpha) / (1 - alpha)
ここで phi は標準正規分布の確率密度関数(PDF)です。
CVaR は、劣加法性を満たすため、VaR とは異なり、コヒーレントリスク尺度です。CVaR(A+B) <= CVaR(A) + CVaR(B) となります。これは、VaR では保証されない一方で、分散投資によって CVaR が必ず低下するか、少なくとも維持されることを意味します。
コンポーネント VaR
ポートフォリオ全体の VaR を各ポジションの寄与分に分解します。各コンポーネント VaR の合計は、ポートフォリオ全体の VaR と一致します。
CVaR_i = w_i * beta_i * VaR_p
ここで beta_i = Cov(R_i, R_p) / Var(R_p) は、資産のポートフォリオに対するベータです。
同様に、次のようにも表せます。
CVaR_i = w_i * (partial VaR / partial w_i)
sum(CVaR_i) = VaR_p
この分解により、ポートフォリオリスクへの寄与が最も大きいポジションを特定できます。
限界 VaR
ポジションのウェイトをわずかに増やしたときの、ポートフォリオ VaR の変化率を測定します。
MVaR_i = partial(VaR_p) / partial(w_i) = z_alpha * (Sigma * w)_i / sigma_p
限界 VaR はポジションのサイズ決定に使用されます。限界 VaR の低いポジションを追加すると、より効率的にポートフォリオリスクを低減できます。
シナリオ分析
特定の過去の市場変動または仮想的な市場変動を現在のポートフォリオに適用し、損益への影響を推定します。
- 過去のシナリオ: 実際の市場イベント(例:2008年の世界金融危機(GFC)、2020年のCOVID暴落、2022年の利上げサイクル)を現在の保有資産に適用します。
- 仮想シナリオ: 独自のショックを設定します(例:「株式 -20%、金利 +200bp、信用スプレッド +300bp、米ドル +10%」)。
シナリオ損益は、シナリオリターンを現在のポジションのエクスポージャーに適用し、再評価して算出します。
ストレステスト
極端ではあるものの、起こり得る状況下でのポートフォリオの回復力を評価するための体系的なフレームワークです。
一般的なストレスシナリオ:
- 株式暴落:S&P 500 が -30% ~ -40%
- 金利ショック:平行移動で +300bp
- 信用危機:投資適格債のスプレッドが +200bp、ハイイールド債が +800bp
- 流動性の凍結:ビッド・アスク・スプレッドが10倍に拡大し、強制売却がディスカウント価格で行われる
- 通貨ショック:主要通貨ペアが15~20%変動
- スタグフレーション:インフレ率 +5%、GDP -3%、金利 +200bp
ストレステストでは、追証、流動性需要、相関の急上昇、カウンターパーティリスクなどの二次的な影響も考慮する必要があります。
ファクターベースのリスク分解
ポートフォリオ全体のリスクを、システマティックファクターリスクと固有リスク(証券固有のリスク)に分解します。
sigma^2_p = b' * Sigma_f * b + sum(w_i^2 * sigma^2_epsilon_i)
ここで:
- b = ポートフォリオのファクターエクスポージャーのベクトル
- Sigma_f = ファクター共分散行列
- sigma^2_epsilon_i = 資産 i の固有分散
一般的なファクターモデル:Fama-French(市場、サイズ、バリュー、モメンタム)、Barra リスクモデル、PCA ベースの統計的ファクター。
主要な公式
| 公式 | 式 | 用途 |
|---|---|---|
| パラメトリック VaR(単一) | W * z_alpha * sigma | 単純なポジションの VaR |
| ポートフォリオ VaR | W * z_alpha * sqrt(w' * Sigma * w) | 複数資産の VaR |
| 複数日 VaR | VaR_1 * sqrt(h) | h 日の期間に換算 |
| CVaR(正規分布) | mu + sigma * phi(z_alpha) / (1 - alpha) | 期待テール損失 |
| コンポーネント VaR | w_i * beta_i * VaR_p | ポジションごとのリスク寄与 |
| マージナル VaR | z_alpha * (Sigma * w)_i / sigma_p | ウェイト変更に対する感応度 |
| ファクターリスク | b' * Sigma_f * b | システマティックリスク成分 |
| 固有リスク | sum(w_i^2 * sigma^2_epsilon_i) | 個別銘柄固有のリスク |
計算例
例 1:パラメトリック 95% VaR
条件: 年率ボラティリティが 15% の 1,000,000 ドルの株式ポートフォリオです。
計算: 1 日の 95% パラメトリック VaR(年間 252 取引日、日次期待リターンはゼロと仮定)。
解答:
日次ボラティリティ:
sigma_daily = 0.15 / sqrt(252) = 0.15 / 15.875 = 0.00945
1 日の 95% VaR:
VaR = $1,000,000 * 1.645 * 0.00945 = $15,545
年次の数値から直接計算する方法もあります:
VaR_annual = $1,000,000 * 1.645 * 0.15 = $246,750
VaR_1day = $246,750 / sqrt(252) = $15,545
解釈:通常の市場環境では、1 日で 15,545 ドルを超える損失が発生する確率は 5% です。
例 2:モンテカルロ VaR
条件: 2 資産ポートフォリオ(株式 60%、債券 40%)です。株式:mu = 10%、sigma = 18%。債券:mu = 4%、sigma = 5%。相関係数 rho = -0.2。ポートフォリオの価値 = 1,000,000 ドルです。
計算: モンテカルロシミュレーションによる年率 95% VaR(概念的な手順)。
解答:
- 共分散行列を構成します:
Sigma = | 0.0324 -0.0018 |
| -0.0018 0.0025 |
-
Sigma のコレスキー分解を行い、下三角行列 L を求めます。
-
10,000 個のシナリオをシミュレーションします: 各シミュレーションで z ~ N(0, I) を抽出し、r = mu + L*z を計算した後、ポートフォリオリターン R_p = w' * r を求めます。
-
各シナリオのポートフォリオ損益を計算します:P&L = 1,000,000 ドル * R_p。
-
P&L を最悪から最良の順に並べ替えます。下から 500 番目(5 パーセンタイル)が 95% VaR です。
このポートフォリオでは、解析解が基準値となります:
sigma_p = sqrt(0.6^2 * 0.0324 + 0.4^2 * 0.0025 + 2 * 0.6 * 0.4 * (-0.0018))
= sqrt(0.011664 + 0.0004 - 0.000864)
= sqrt(0.0112)
= 10.58%
VaR_95% = $1,000,000 * 1.645 * 0.1058 = $174,090
多変量正規分布を仮定した場合、モンテカルロの結果はおおよそこの値に収束するはずです。
例 3:期待ショートフォール
条件: 上記のモンテカルロシミュレーションで、VaR を超える損失(最悪の 10,000 シナリオ中 500 件)の平均損失は 225,000 ドルです。
計算: 95% CVaR。
解答:
CVaR_95% = $225,000
解釈:損失が 95% VaR のしきい値を超えた場合、平均損失は 225,000 ドルです。これは 174,090 ドルの VaR の数値より約 29% 大きく、テール事象の深刻さを示しています。
よくある落とし穴
- VaR ではテールの形状は分かりません: VaR が示すのはしきい値のみです。VaR が同じ 2 つのポートフォリオでも、テール損失は大きく異なる場合があります。テールの深刻さを把握するには、必ず VaR と併せて CVaR も計算してください。
- パラメトリック VaR は正規性を仮定します: 金融リターンにはファットテールや歪度が見られます。パラメトリック VaR はテールリスクを系統的に過小評価します。より現実的な推定には、ファットテール分布を用いたモンテカルロ法、またはヒストリカルシミュレーションを使用してください。
- 危機時の相関の崩れ: 市場がストレス状態にあると相関は 1.0 に近づきますが、それはまさに分散投資が最も必要とされるときです。ストレステストでは、平常時の相関ではなく危機時の相関を使用してください。
- 共分散の推定に短すぎる期間を使用する: 期間が短すぎるとノイズが多くなり、長すぎると異なる市場レジームの古いデータが含まれます。一般的な折衷案は、日次データの 1~3 年分を使用することです。または、EWMA で加重した共分散を使用してください。
- 絶対 VaR と相対 VaR を区別しない: 絶対 VaR には期待リターンが含まれます(VaR = -mu + zsigma)。相対 VaR には含まれません(VaR = zsigma)。短期(1~10 日)では期待リターンは無視できるため、違いはわずかです。期間が長い場合は重要になります。
- 平方根時間スケーリングの制約: VaR_h = VaR_1 * sqrt(h) は、リターンが独立同分布であることを仮定します。系列相関やボラティリティ・クラスタリングがある場合、このスケーリングは正確ではありません。
相互参照
- historical-risk(ウェルスマネジメントプラグイン):過去の VaR と実現ボラティリティは、このスキルのフォワードルッキングモデルに対するノンパラメトリックな代替手段および較正ベンチマークとして機能します。
- performance-metrics(ウェルスマネジメントプラグイン):VaR と CVaR は、修正リスク調整比率(例:リターン/CVaR)のリスク分母として使用できます。
- volatility-modeling(ウェルスマネジメントプラグイン):EWMA と GARCH のボラティリティ予測は、パラメトリック VaR およびモンテカルロ VaR のボラティリティ入力値(シグマ)を提供します。
スクリプトの実行
uv run scripts/forward_risk.py # run the demo (uses PEP 723 inline deps)
uv run scripts/forward_risk.py --verify # check demo outputs against the worked examples (exit 1 on mismatch)
python3 scripts/forward_risk.py # alternative (requires: pip install numpy scipy)
デモでは、上記の計算結果が出力されます。その値は、このスキルの計算例と一致します。クラスと関数の一覧を確認するには、--help を実行してください。プログラムから使用する場合は、スクリプトを実行するのではなく、モジュールをインポートしてください。デモは python forward_risk.py で実行した場合にのみ動作します。