ヒストリカル法とモンテカルロ法

Pythonで学ぶ定量的リスク管理

Jamsheed Shorish

Computational Economist

ヒストリカル法

  • 適切な分布クラスがない場合
  • ヒストリカル法: 過去から将来を予測
    • 分布仮定は不要
    • 過去の損失データを明日の「疑似」損失として使用
Pythonで学ぶ定量的リスク管理

Pythonでのヒストリカル法

  • VaR: asset_returns のリターンから開始
  • ポートフォリオの weights で portfolio_returns を計算
  • portfolio_returns を losses に変換
  • VaR: losses の 95% 信頼水準などで np.quantile() を計算
  • 将来の損失分布が過去と「全く」同じと仮定

 

weights = [0.25, 0.25, 0.25, 0.25]

portfolio_returns = asset_returns.dot(weights)
losses = - portfolio_returns
VaR_95 = np.quantile(losses, 0.95)
Pythonで学ぶ定量的リスク管理

モンテカルロ法

  • モンテカルロ法: 母数推定とシミュレーションの強力な組合せ
    • ポートフォリオ損失やリスク要因に分布を仮定
    • 分布からの乱数でランダムな経路(run)を生成
    • 乱数を反復 ⇒ 複数のシミュレーションrunを作成
  • 各runで所要期間までのポートフォリオ損失を計算
  • 損失の分位点としてVaRを推定
Pythonで学ぶ定量的リスク管理

Pythonでのモンテカルロ法

  • ステップ1:
    • scipy.stats から正規分布 norm をインポート
    • total_steps を定義(1日=1440分)
    • 実行回数 N を定義
    • portfolio_losses の平均 mu と標準偏差 sigma を算出
from scipy.stats import norm

total_steps = 1440
N = 10000
mu = portfolio_losses.mean() sigma = portfolio_losses.std()
Pythonで学ぶ定量的リスク管理

Pythonでのモンテカルロ法

  • ステップ2:
    • N 回分の daily_loss ベクトルを初期化
    • N 回のループ
      • モンテカルロで loss ベクトルを計算
        • norm.rvs() で標準正規から反復サンプル
        • mu と sigma を 1/total_steps でスケール
daily_loss = np.zeros(N)

for n in range(N):
loss = ( mu * (1/total_steps) + norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps) )
Pythonで学ぶ定量的リスク管理

Pythonでのモンテカルロ法

  • ステップ3:
    • 各実行 n の累積 daily_loss を生成
    • np.quantile() で daily_loss の 95% 信頼水準などのVaRを算出

 

daily_loss = np.zeros(N)
for n in range(N):

loss = mu * (1/total_steps) + ... norm.rvs(size=total_steps) * sigma * np.sqrt(1/total_steps)
daily_loss[n] = sum(loss)
VaR_95 = np.quantile(daily_loss, 0.95)
Pythonで学ぶ定量的リスク管理

資産リターンのシミュレーション

  • 拡張: ポートフォリオの資産リターンのランダム経路を生成
    • より現実的: 各資産リターンを個別にシミュレーション可能
    • 資産リターン間の相関を考慮可能
      • 復習: 効率的共分散行列 e_cov
      • ステップ2で資産リターン計算に使用
  • 演習: 資産リターンを用いたモンテカルロ法
Pythonで学ぶ定量的リスク管理

練習しましょう!

Pythonで学ぶ定量的リスク管理

Preparing Video For Download...