CVaRと損失カバーの選択
これまでの演習では、危機期間のポートフォリオ損失に対して、T 分布と Gaussian KDE 分布のどちらも比較的よく当てはまることを確認しました。では、リスク管理に最適なのはどちらでしょうか?一つの考え方は、最も大きな「損失カバー」を与える分布――つまり「最悪中の最悪」の損失に備える分布――を選ぶことです。
t と kde の各分布は用意され、2007〜2008年のポートフォリオ losses にフィット済みです(t の当てはめパラメータは p にあります)。ここでは各分布について、1日あたりの99% CVaR 推定値を導出します。CVaR 推定値が大きい方が、99% VaR を超える期待損失をカバーする、最も安全な「準備金額」となります。
この演習のために、kde インスタンスには CVaR に必要な期待値を計算する特別な .expect() メソッドが用意されています。
この演習はコースの一部です
Pythonで学ぶ定量的リスク管理
演習の手順
tとkdeの各分布から乱数サンプルを取り、np.quantile()を使って 99% VaR を求めます。- 各分布の
.expect()メソッドを使って、CVaR 推定に必要な積分(期待値)を計算します。 - 両方の分布について 99% CVaR の推定値を求め、表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Find the VaR as a quantile of random samples from the distributions
VaR_99_T = np.quantile(t.rvs(size=1000, *p), ____)
VaR_99_KDE = np.quantile(kde.resample(size=1000), ____)
# Find the expected tail losses, with lower bounds given by the VaR measures
integral_T = t.____(lambda x: x, args = (p[0],), loc = p[1], scale = p[2], lb = ____)
integral_KDE = kde.____(lambda x: x, lb = ____)
# Create the 99% CVaR estimates
CVaR_99_T = (1 / (1 - ____)) * integral_T
CVaR_99_KDE = (1 / (1 - ____)) * integral_KDE
# Display the results
print("99% CVaR for T: ", CVaR_99_T, "; 99% CVaR for KDE: ", CVaR_99_KDE)