同僚からお借りして読んでいます(というか僕も持っていたんだけどどこいった)
時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装
- 作者:真哉, 馬場
- 発売日: 2018/02/14
- メディア: 単行本
- 状態空間モデルのイメージ
- 湖で釣りしている人がいる
- 毎日釣った魚の数を観測する
- つれた数で湖の魚の数を推測することができる
- ただそれだけじゃ難しいよね
- たまたまエサの食いつきがわるかったとか
- とても暑い日だったからいつもいるところにいなかったとか
- こういう観測誤差がある
- というのを状態空間モデルで解決しましょう
- 湖の中の魚の数を見えないけども状態として取り扱うことができる
- 本当に湖の中の魚の数が変わったのか、感想誤差の範疇なのかを判断できる(らしい)
- 状態と観測値を分けて考えることで対応可能(らしい)
- 状態の変化を記述する方程式を状態方程式
- 状態から観測値が得られるプロセスを記述する方程式を観測方程式
- メリット
- 過去の知見や直感を自由に表現できる(モデル化できる)
- ARIMAなどの古典的なモデルも状態空間モデルで表現可能
- 推定されたモデルの解釈が容易
- 差分を取るといった前処理が不要
- 欠損があってもそのまま分析に利用できるし、補完もできる
- デメリット
- 分析のルールがない(自由なのねなるほど)
- 雑メモ
- 状態
- 前時点の状態を用いた予測値 + 過程誤差
- 観測値
- 状態 + 観測誤差
- パラメタ推定
- ほげほげフィルタ
- MCMC法
- 線形ガウス状態空間モデル
- 状態方程式 x_t = T_t x{t-1} + R_t ζt` ζ_t~N(0, Q_t)
- 観測方程式 y_t = Ζt x{t-1} + εt` εt~N(0, H_t)
- x_tはt時点の状態
- 状態はk次元のベクトル(kってどこ?)
- y_tはt時点の観測値
- T_t, R_t, Ζ_tはモデルの表現形式をきめる行列
- 状態推定
- フィルタリングとは、手に入った観測値を用いて、予測された状態の値を補正すること
- 手順
- step1: 予測. 予測値と実際の観測値が異なる値になる場合があるので、step2で補正する
- 状態
- 過去の状態 → 未来の状態※1(予測)
- 観測
- ※1 → 未来の観測値(予測)
- 状態
- step2: フィルタリング(状態の補正). 状態の補正を行ってstep3で再度予測する
- 状態
- 過去の状態 → 未来の状態※1(補正後)
- 観測
- 未来の観測値(実測値) → ※1を補正
- 状態
- step3: 予測(?). 最新の観測値を使って、即座に誤りを補正して次の予測を行う
- 状態
- 過去の状態 → 未来の状態※1(補正後) → 未来の状態※2(予測)
- 観測
- ※1 ← 未来の観測値(実測値)、未来の観測値(予測) ← ※2
- 状態
- step1: 予測. 予測値と実際の観測値が異なる値になる場合があるので、step2で補正する
- カルマンフィルタを使うと、↑の手順を効率よく行える
- 散漫カルマンフィルタもほとんど変わらない。カルマンフィルタが持つ欠点を補った認識でおk
- 平滑化
- 平滑化とは、すべてのデータが手に入ったそのあとに、状態の補正を行う計算のことを指します
- 過去の観測値、未来の観測値を使って過去の状態を補正する
- 予測の精度をあげるものではなく、ノイズの影響を軽減することができる
- 知識発見という意味合いで使用されることが多い技術(なんのこっちゃ)
- 最も新しい時点においては、フィルタリングの結果と平滑化の結果は一致する
- パラメタ推定: 最尤法
- 状態推定を実際に行うには、観測値以外に情報が必要
- 過程誤差の分散の大きさ
- こいつが大きいということは、Step1の予測を行った際に、予測が当たり難いということを意味する
- 予測された未来の状態の精度が悪いということは「観測値を用いた状態の補正」を行うべきー
- 観測誤差の分散の大きさ
- 観測誤差が大きいということは、観測値をあまり信用できないということを意味する
- 「観測値を用いた状態の補正」はあまり行わないほうが良いといえる
- このふたつを最尤法で推定しまぁーす
- 過程誤差の分散の大きさ
- 手順
- 適当にパラメタを決める
- てきとーな状態の補正が行われる
- ↑の結果を逐一評価していく → パラメタの微修正を繰り返す
- これで最適なパラメタを探す。このときの評価指標を尤度とよび、尤度を最大にするパラメタを最尤法と呼ぶ
- 例えば
- 過程誤差も観測誤差もともに小さな値を設定するとする
- 観測データが手に入れば
- 状態は補正される(観測誤差が小さい → 観測値は信用できる → 状態を補正する)
- 過程誤差が小さい → 予測はあたっている → 精度良く予測できている
- しかし、正しく補正されている上に精度よく予測された予測結果が、実データと間違っている。ということはパラメタが間違っているということが言える
- なので、想定される予測誤差と実際の予測誤差を比較すればパラメタの設定が正しいか否かを判断することができる
- 状態推定を実際に行うには、観測値以外に情報が必要
- 流れ復習
- 状態方程式・観測方程式を用いて、モデル構造を表現する
- 「とりあえず」のパラメタを使ってフィルタリングする
- カルマンフィルタの結果を援用し、最尤法を用いてパラメタを推定する
- 推定されたパラメタを用いて、再度フィルタリングを行う
- (必要であれば)推定されたパラメタを用いて、平滑化を行う
- 補足
- 誤差が正規分布にしたがったモデルなので、場合によっては対数系列に対してモデル化を行ったほうがよい場合もある
- ただ、階差系列にする必要はない(らしい。何故?)
- カルマンフィルタとカルマンゲイン
- ローカルレベルモデルだけに絞って計算してみる
- 状態の1期先予測は簡単 → 1時点前と同じ値になると予測するだけ
- 観測値を用いた状態の補正は以下の要領で行われる
- 補正後の状態 = 補正前の状態 + カルマンゲイン × (実際の観測値 - 予測された観測値)
- 「補正後の状態」のことは「フィルタ化推定量」と呼ばれる
- 残差がそのまま影響するのではなく、カルマンゲインが間をもっている
- カルマンゲインは常に1以下の値を取る
- 外れた分より少なめに補正する
- なぜ? → そんなシンプルな話じゃないから
- カルマンゲイン = 状態の予測誤差の分散 / (状態の予測誤差の分散 + 観測誤差の分散)
- 状態の予測誤差が大きいなら補正しましょう!
- 観測誤差が大きい場合は、補正量を小さくすべき
- 外れた分より少なめに補正する
- 計算の流れ
- 過程誤差と観測誤差は誤差の増分を表すパラメタのこと
- ↑2つを使って、実際の状態の予測誤差と観測値の予測誤差を求めます
- 手順
- Step1 予測
- 状態の予測値 = 前期の状態
- 状態の予測誤差の分散 = 前期の状態の予測誤差の分散 + 過程誤差の分散
- 観測値の予測値 = 状態の予測値
- 観測値の予測誤差の分散 = 状態の予測誤差の分散 + 観測誤差の分散
- Step2 フィルタリング(状態の補正)
- Step1 予測
- 散漫カルマンフィルタ
- 前時点がない場合、前時点の情報が必要なパラメタはてきとーに値を設定しておく
- ただ、初期値を適当に決めてもいいけども、AICの情報量基準の値も変化するので注意したい
- そこで散漫初期化というアプローチ
- 状態の初期値はわからないので諦める
- そのかわり、状態の予測誤差の分散の初期値を無限大まで大きくする
- ローカルレベルモデルだけに絞って計算してみる
- 平滑化
- 今日の観測値を使って、今日の状態を補正するのがフィルタリング
- 今日の観測値を使って、昨日の状態を補正するのが平滑化
- アイディア