構造的変化

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

Jamsheed Shorish

Computational Economist

リスクと分布

  • リスク管理ツールキット
    • リスク低減:MPT
    • リスク計測:VaR、CVaR
  • リスク:分散性・ボラティリティ
    • リスク定義としての分散(標準偏差)
  • リスクと、リスク要因の確率変数としての分布の関係
Pythonで学ぶ定量的リスク管理

定常性

  • 仮定:分布は時間を通じて同一
  • 不変の分布=定常
  • 世界金融危機期の効率的フロンティア
    • 非定常
  • 推定手法は定常性を要件とする
    • ヒストリカル:過去データから未知の_定常_分布
    • パラメトリック:仮定した_定常_分布族
    • モンテカルロ:乱数生成に仮定した_定常_分布
Pythonで学ぶ定量的リスク管理

構造的変化

  • 非定常 ⇒ 分布が時間とともに_変化_する可能性
  • 変化の時点を特定して仮定
    • データをサブ期間に分割
    • 各サブ期間内は定常と仮定
  • 構造的変化:変化が起きる時点
    • データの平均やボラティリティの『トレンド』の変化
Pythonで学ぶ定量的リスク管理

例:中国の人口増加

  • 期間は1950〜2019年を確認
  • トレンドはおおむね_線形_

1950〜2019年の中国人口の推移グラフ

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

例:中国の人口増加

  • 期間は1950〜2019年を確認
  • トレンドはおおむね_線形_
  • ただし1990年前後から減速しているように見える
  • 1990年前後に構造的変化の可能性
  • 純人口(出生−死亡)の分布が_変化_したことを示唆
  • 想定要因:政府政策、生活水準など

1950〜2019年の中国人口の推移とトレンド矢印のグラフ

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

Chow検定

  • 前の例:構造的変化の視覚的証拠
  • 定量化:統計的測度
  • Chow検定:
    • _線形_モデルで構造的変化の有無を検定
    • 帰無仮説:変化なし
    • OLS回帰を3回実施
      • 全期間での回帰
      • 変化点の_前後_で2回帰
    • 残差平方和を取得
    • 検定統計量はF分布に従う
Pythonで学ぶ定量的リスク管理

PythonでのChow検定

  • 仮説:1990年に中国人口の構造的変化
  • 線形の「因子モデル」を仮定: $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • statsmodels の OLS で1950〜2019年の全期間をOLS回帰
    • 残差平方和 res.ssr を取得
import statsmodels.api as sm
res = sm.OLS(log_pop, year).fit()

print('SSR 1950-2019: ', res.ssr)
SSR 1950-2019: 0.29240576138055463
Pythonで学ぶ定量的リスク管理

PythonでのChow検定

  • 1950〜2019年を1950〜1989年と1990〜2019年に分割
  • 各サブ期間でOLS回帰を実行
    • res_before.ssr と res_after.ssr を取得
pop_before = log_pop.loc['1950':'1989']; year_before = year.loc['1950':'1989'];
pop_after  = log_pop.loc['1990':'2019']; year_after =  year.loc['1990':'2019'];

res_before = sm.OLS(pop_before, year_before).fit() res_after = sm.OLS(pop_after, year_after).fit()
print('SSR 1950-1989: ', res_before.ssr) print('SSR 1990-2019: ', res_after.ssr)
SSR 1950-1989: 0.011741113017411783
SSR 1990-2019: 0.0013717593339608077
Pythonで学ぶ定量的リスク管理

PythonでのChow検定

  • F分布に従うChow検定統計量を計算
    • 分子を計算
      • k = 自由度2 = OLS係数 $\alpha$, $\beta$ の2つ
    • 分母を計算
      • 自由度66 = データ数70 − 2*k
numerator = (ssr_total - (ssr_before + ssr_after)) / 2

denominator = (ssr_before + ssr_after) / 66
chow_test = numerator / denominator print("Chow test statistic: ", chow_test, "; Critical value, 99.9%: ", 7.7)
Chow test statistic: 702.8715822890057; Critical value, 99.9%: 7.7
Pythonで学ぶ定量的リスク管理

演習に進みましょう!

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

Preparing Video For Download...