本記事は状態空間モデルの入門書として定評のある「 時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装 」を読んで習得した基礎知識の備忘録です。
同書は、ARIMAモデルと状態空間モデルの2部構成になっています。
本記事は状態空間モデルに主眼を置き、「状態空間モデルとは何か」を単純なローカルレベルモデルを使って解説しています。
状態空間モデルとは
状態空間モデルとは、目に見えない「状態」を過程した時系列モデルの1種です。
上記の説明だけでは、なんのことか分からないのでARIMAモデルに代表される古典的な時系列モデルと比較しながら説明していきます。
古典的な時系列モデルは、基本的に観測値の情報だけを使って時系列モデルを作成します。
例えば、ある湖で釣れた魚の数を毎日観測したとしましょう。
観測した魚の数のデータから、釣れる魚の数を予測するモデルを考えるとします。
観測値は、魚の数を予測する上でとても貴重な情報ですが、釣れる魚の数はその日の「気象」、「釣り人の技術」、「えさ」の違いといった観測誤差によって変化します。
一方、湖全体の魚の数自体も日々変化しており、これも釣れる数に影響を与えていると考えられます。
しかし、湖の魚の数は目に見えないので観測することできません。
そこで、状態空間モデルの出番となります。
湖の魚という目に見えない状態の変動を予測し、さらにその状態から観測値を予測するのが状態空間モデルです。
状態空間モデルでは、状態の変化と観測誤差を明確に切り離し、これらを2つの方程式で構成します。
状態の変化を表す式を状態方程式、状態から得られる観測値を表す式を観測方程式といいます。
状態=前時点の状態を用いた予測値+過程誤差
観測値=状態+観測誤差
ここで、古典的な時系列モデルと状態空間モデルの違いを説明するために、それぞれの状態方程式、観測方程式を図示します。
古典的な時系列モデルは、目に見える観測誤差によってのみ観測値が変化しているとみなします。
状態である「湖の魚の数」は長期的にみると一定の幅に収束する前提となっています。

一方、状態空間モデルは、過程誤差が加わることで状態の変化も認めています。
湖の魚の数は長期的にみると、環境の変化によって大きく変動することを認めており、先ほどの古典的な時系列モデルとは異なっています。
状態空間モデル推定のざっくりしたタスクは、状態方程式と観測方程式を使ってデータを表現することと、方程式のパラメタを推定することの2つです。
推定するパラメタは、過程誤差と観測誤差の分散です。
パラメタの推定手法で有名なのが、カルマンフィルタと最尤法の組み合わせです。
カルマンフィルタは、フィルタリングの1種であり、状態を推定するためのアルゴリズムです。
最尤法はパラメタの推定方法です。
カルマンフィルタ+最尤法の方式は、正規分布かつ線形なデータにしか適用できません。
この方式で推定されるモデルは、線形ガウス状態空間モデルと呼ばれます。
線形ガウス状態空間モデルとカルマンフィルタ
線形ガウス状態空間モデルを推定する流れを説明します。
データの表現
状態方程式と観測方程式を用いてデータを表現します。
状態=前時点の状態を用いた予測値+過程誤差
観測値=状態+観測誤差
状態方程式と観測方程式を合わせて、状態・観測方程式とよぶことにします。
フィルタリングと予測
フィルタリングとは、当時点の観測値を用いて状態を補正することです。
状態・観測方程式を用いた予測とフィルタリングを下記のステップで実行します。
STEP1:状態の更新式を用いて、未来の観測値を予測します。

STEP2:「STEP1で予測した観測値」と「実際の観測値」の情報を使って、フィルタリング(状態の補正)を行います。

STEP3:補正された状態を用いて、再度未来を予測します。

上記ステップを繰り返すことで、最新の観測値を用いて即座に状態を補正しながら予測を行います。
これらの計算を効率よく実施するアルゴリズムがカルマンフィルタです。
カルマンフィルタは、「状態の1期先の予測」と「観測値を用いた状態の補正」を交互に繰り返していくものです。
「観測値を用いた状態の補正」の概念式は次のとおりです。
補正後の状態
=補正前の状態+カルマンゲイン×(実際の観測値ー予測された観測値)
補正後の状態は「フィルタ化推定量」と呼ばれます。
上式のカルマンゲインとは、予測が外れた分よりも少なめに補正するための係数です。
よって、カルマンゲインは常に1以下となります。
カルマンゲインは以下のようにして求められます。
カルマンゲイン
=状態の予測誤差の分散 /(状態の予測誤差の分散+観測誤差の分散)
カルマンゲインの考え方は以下のとおりです。
予測誤差の分散を大きいということは、予測が外れていることを示すので、その分を補正すべきです。よって、上式の分子に位置します。
一方、観測誤差の分散が大きいということは、観測値が信用できないことを意味しているので、補正は行うべきではありません。よって、上式の分母に位置しています。
平滑化
すべてのデータが手に入ったあとに、状態の補正を行う計算を必要に応じて行います。
この計算を平滑化といいます。
平滑化の考え方を説明するために、毎日計測されているデータを考えます。
今日のデータが最新のデータです。
今日の観測値を使って、今日の状態を補正するのがフィルタリングです。
今日の観測値を使って、昨日の状態を補正するのが平滑化です。
昨日だけではなく、昨日よりも前の状態を補正することもできます。

今日までのデータを使って過去の状態を補正するのが平滑化の基本的な考え方です。
平滑化によって補正された状態を平滑化推定量とよびます。
昨日の平滑化推定量は、以下のようにして計算できます。
昨日の平滑化推定量
=昨日のフィルタ化推定量+(昨日のフィルタ化推定量/今日の観測値の予測誤差の分散)×今日の予測誤差
最尤法
カルマンフィルタは状態を推定するアルゴリズムでした。
ここで紹介する最尤法はカルマンフィルタに用いられるパラメタを推定する方法です。
最尤法で求めるパラメタは「過程誤差の分散」と「観測誤差の分散」です。
最尤法のざっくりとした考え方を説明します。
適当にパラメータを設定してカルマンフィルタを実行します。
すると、適当に状態の補正が行われることになります。
想定される予測誤差の大きさと、実際に計測された予測誤差の大きさを評価(比較)して、それが食い違っていた場合にパラメタを修正します。
このときの評価指標を尤度といい、尤度を最大にするパラメタを推定する方法が最尤法です。
実際には、より扱いやすい対数尤度を用いるのが一般的です。
線形ガウス状態空間モデル推定の流れ
①状態・観測方程式を用いてデータを表現する
②適当なパラメータを設定してフィルタリングを行う
③カルマンフィルタの結果を用いて、最尤法でパラメータを推定する
④推定されたパラメタを用いて再度フィルタリングを行う
⑤必要に応じて、平滑化を行う
参考文献
時系列解析と状態空間モデルの基礎について、簡単な数式や図を使って丁寧に解説されている良本です。
統計学の基礎知識(統計検定2級レベル)があれば、つまづくことなく読み進められる内容となっています。
サンプルコードも付いているので、理論と実践の両方を習得できます。
状態空間モデルの入門書として強く推奨したい良本です。
コメント