ボラティリティと構造変化点
ボラティリティの変化を可視化すると、時系列の中で起こりうる構造的な変化点を見つけやすくなります。ボラティリティが変わったように見えるタイミングを特定できれば、妥当な変化点候補を選べるようになり、その後の統計分析(たとえば Chow 検定)に活用できます。
ここでは、投資銀行ポートフォリオ(2008〜2009年)のボラティリティを、利用可能な2つのポートフォリオ比率 weights_with_citi と weights_without_citi について可視化して比較します。これらは、それぞれ Citibank を含む場合と含まない場合の等金額ポートフォリオに対応しており、(第1章で見たとおり)当該期間における4資産の中で Citibank が最も高いボラティリティを示していました。
2008〜2009年のポートフォリオ価格は、Citibank を含むものが prices_with_citi、含まないものが prices_without_citi として与えられています。
この演習はコースの一部です
Pythonで学ぶ定量的リスク管理
演習の手順
weights_with_citiとweights_without_citiを使って、2つのポートフォリオのリターン系列を求めます。- 両ポートフォリオについて、30日ローリングウィンドウの標準偏差を計算します。
- 2つの Pandas の
Seriesオブジェクトを単一の「vol」DataFrameオブジェクトに結合します。 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()