見えないものを追跡する
状態空間モデルは、本物と測定値を分けて考えます。真のボラティリティ水準のような隠れた状態 μt が自分で動き、観測されるのはその状態にノイズを足したものです。ローカルレベルモデルでは yt=μt+εt(εt∼N(0,r))、μt=μt−1+ηt(ηt∼N(0,q))です。観測分散 r は読み取りのノイズの大きさを、水準分散 q は真の値がどれだけ速く漂うかを表します。statsmodels の UnobservedComponents(y, 'llevel') クラスがこのモデルを当てはめ、q と r を最尤法で推定するので、推測する必要はありません。
カルマンフィルタは、新しい観測を更新された信念に変えます。手順は2つです。予測:平均はそのままで不確実性が増え、P−=P+q。更新:ゲイン K=P−/(P−+r) が驚き y−a のどれだけを信じるかを決め、新しい平均は a+K(y−a)、新しい不確実性は (1−K)P− です。観測が欠けた月は予測だけを行います。フィルタは今日までのデータを使い、スムーザは標本全体から振り返って過去の各状態の最良推定を与えます。
P−=P+q,K=P−+rP−,a′=a+K(y−a),P′=(1−K)P−(1) 3か月の手計算信念
a=10、
P=4 から始め、
q=1、
r=5 とします。1か月目:
P−=5、
K=5/10=0.5、観測
12 で
a=10+0.5⋅2=11、
P=0.5⋅5=2.5。2か月目:
P−=3.5、
K=3.5/8.5=0.4118、観測
9 は驚き
−2 なので
a=11−0.4118⋅2=10.18、
P=0.5882⋅3.5=2.06。3か月目は観測がなく、予測だけを行うので
a は
10.18 のまま、
P は
2.06+1=3.06 に増えます。実データでは、2005年2月以降の
259 か月それぞれについて SPY の年率換算実現ボラティリティの対数を取ります。最尤法で
r^=0.0889、
q^=0.0449 となり
q/r=0.50、定常ゲインは
K=0.50:新しい月ごとに、ボラティリティ推定は最新の観測へ半分だけ動きます。これは移動平均係数
−0.498=−(1−K) の ARIMA(0,1,1) と全く同じで、対数尤度も同じ
−151.09 です。標本の最後では、フィルタ後の水準は年率
12.4%、最後の観測は
11.7% で、対数での標準誤差は
0.21、つまり95%の幅は約
8% から
19% です。
フィルタか平滑化か当時知り得たことが必要な場面(売買ルールやバックテスト)にはフィルタ後の推定を使います。平滑化した推定は将来のデータを使うので、過去を描写するためだけのものです。
ラボ:採点される内容
- 予測分散10点
- カルマンゲイン15点
- 更新後の平均15点
- 更新後の分散10点
- 翌月のゲイン15点
- 欠けた観測10点
- 信号雑音比25点