始める無料で始める

ボラティリティと構造変化点

ボラティリティの変化を可視化すると、時系列の中で起こりうる構造的な変化点を見つけやすくなります。ボラティリティが変わったように見えるタイミングを特定できれば、妥当な変化点候補を選べるようになり、その後の統計分析(たとえば Chow 検定)に活用できます。

ここでは、投資銀行ポートフォリオ(2008〜2009年)のボラティリティを、利用可能な2つのポートフォリオ比率 weights_with_citiweights_without_citi について可視化して比較します。これらは、それぞれ Citibank を含む場合と含まない場合の等金額ポートフォリオに対応しており、(第1章で見たとおり)当該期間における4資産の中で Citibank が最も高いボラティリティを示していました。

2008〜2009年のポートフォリオ価格は、Citibank を含むものが prices_with_citi、含まないものが prices_without_citi として与えられています。

この演習はコースの一部です

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

コースを見る

演習の手順

  • weights_with_citiweights_without_citi を使って、2つのポートフォリオのリターン系列を求めます。
  • 両ポートフォリオについて、30日ローリングウィンドウの標準偏差を計算します。
  • 2つの Pandas の Series オブジェクトを単一の「volDataFrame オブジェクトに結合します。
  • vol オブジェクトをプロットし、時間とともに2つのポートフォリオのボラティリティを比較します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Find the time series of returns with and without Citibank
ret_with_citi = prices_with_citi.____.dot(weights_with_citi)
ret_without_citi = prices_without_citi.pct_change().____(____)

# Find the average 30-day rolling window volatility as the standard deviation
vol_with_citi = ret_with_citi.____.std().dropna().rename("With Citi")
vol_without_citi = ret_without_citi.rolling(30).____.dropna().rename("Without Citi")

# Combine two volatilities into one Pandas DataFrame
vol = pd.concat([____, ____], axis=1)

# Plot volatilities over time
vol.____().set_ylabel("Losses")
plt.show()
コードを編集して実行