ようこそ!

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

Dr. Jamsheed Shorish

Computational Economist

自己紹介

  • 計量経済学者
  • 専門分野:
    • 資産価格付け
    • フィンテック(FinTech)
    • 経済・金融の計算機応用
  • ANU「Economic Analysis of the Digital Economy」共同講師
  • Shorish Research(ベルギー): 計算ビジネス応用
Pythonで学ぶ定量的リスク管理

定量的リスク管理とは?

  • 定量的リスク管理: 定量化可能な不確実性の研究
  • 不確実性:
    • 将来の結果は不明
    • 結果は計画に影響
  • リスク管理: 望ましくない結果の影響を低減
  • 定量化可能な不確実性: リスク測定の要因を特定
    • 例: 火災保険。火災確率を高める要因は何か?
  • 本コース: 金融ポートフォリオに伴うリスクに焦点
Pythonで学ぶ定量的リスク管理

リスク管理と世界金融危機

  • 世界金融危機(2007–2010)
    • 世界の成長損失は2兆ドル超
    • 米国: 家計資産が約10兆ドル減
    • 米国株式市場は約8兆ドルの時価総額減
  • グローバル金融危機(2007–2009)
    • 基本的価値の大規模変動
    • 将来収益の大きな不確実性
    • 高い収益ボラティリティ
    • リスク管理が成否を左右
Pythonで学ぶ定量的リスク管理

復習: 金融ポートフォリオ

  • 金融ポートフォリオ
    • 将来収益が不確実な資産の集合
    • 株式
    • 債券
    • 外貨(FX)
    • 株式オプション
  • 課題: 不確実性を管理するためにリスクを定量化
    • 最適な投資判断を行う
    • リスク許容度の下で収益最大化
Pythonで学ぶ定量的リスク管理

収益の定量化

  • ポートフォリオ収益: 各資産収益の加重和
    • Pandas データ分析ライブラリ
    • DataFrame prices
    • .pct_change() メソッド
    • returns の .dot() メソッド
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Pythonで学ぶ定量的リスク管理

リスクの定量化

  • ポートフォリオの収益ボラティリティ = リスク
  • 共分散行列でボラティリティを算出
  • returns の DataFrame メソッド .cov() を使い年率換算

 

 

covariance = returns.cov()*252

print(covariance)

4資産の共分散行列の例

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

リスクの定量化

  • ポートフォリオの収益ボラティリティ = リスク
  • 共分散行列でボラティリティを算出
  • returns の DataFrame メソッド .cov() を使い年率換算
  • covariance の対角は各資産の分散  

   

covariance = returns.cov()*252

print(covariance)

対角に分散を強調した共分散行列の例

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

リスクの定量化

  • ポートフォリオの収益ボラティリティ = リスク
  • 共分散行列でボラティリティを算出
  • returns の DataFrame メソッド .cov() を使い年率換算
  • covariance の対角は各資産の分散
  • 非対角は資産間の共分散
covariance = returns.cov()*252

print(covariance)

非対角に共分散を強調した共分散行列の例

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

ポートフォリオのリスク

  • ポートフォリオ内の資産weightsに依存
  • ポートフォリオ分散 $\sigma_p^2$: $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • 行列積は Python の @ 演算子で計算可能
  • 分散より標準偏差を用いるのが一般的
weights = [0.25, 0.25, 0.25, 0.25] # 資産が4つと仮定

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Pythonで学ぶ定量的リスク管理

ボラティリティの時系列

  • 時系列でのポートフォリオ・ボラティリティも算出可能
  • 一定期間(例: 週、30日“月”)で計算するウィンドウを使用
  • Series.rolling() でウィンドウ作成
  • ボラティリティのトレンドや極端な事象を把握
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

年率換算した30日ローリングの収益ボラティリティのプロット

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

練習してみましょう!

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

Preparing Video For Download...