はじめに
この記事では、Pythonで状態空間時系列モデリングを行う方法を、Rによる実行例の「翻訳」を通して解説します。 題材として季節変動のある時系列データを用います。
状態空間時系列モデルでは、季節性やトレンドといった時系列背後の構造を反映させて直感的にわかりやすいモデリングを行うことができます。
しかし、Pythonで状態空間時系列モデリングを行おうことは、簡単ではありません。 Pythonで統計モデリング全般を実行する場合、ライブラリの選択肢はほぼstatsmodels1一択となります。しかし、このライブラリはインターフェイスが複雑で使いづらいうえにドキュメントも読みにくいのが現状です。 また、書籍やWeb情報も数えるほどしか見つかりません。
一方で、Rであれば学習環境がPythonに比べて恵まれています。RにはKFAS2, dlm3といった状態空間時系列モデルに特化した定番ライブラリが存在します。また、解説書籍・Web情報もPythonと比べて多く出ています。
そこで今回は、Pythonによる状態空間時系列モデリングのハードルを下げるために、まずはRでモデリングを行い「お手本」を作ります。そしてRによる出力結果を再現しながらPythonでモデリングの学習を行います。 具体的には季節変動をもつデータについてRのKFASで予測と成分分解を行い、同一の結果をPythonでstatsmodelsを用いて再現する方法を解説します。 記事の構成は以下のようになっています:
- 状態空間モデルで季節変動のある時系列を表現する方法を解説する
- KFASを用いてRで予測・状態推定を行う
- 長期予測
- 季節成分とレベル成分の分離
- KFASによる出力結果をstatsmodelsで再現する
なお、この記事は状態空間時系列モデリングについて解説する全5本の記事の3本目となっています。
状態空間モデルの概要や線型ガウスモデルのカルマンフィルタによる扱いについては、前回までの記事を参照してください。
- はじめに
- 忙しい人のために
- 状態空間モデルによる季節変動のある時系列データの扱い方
- 線型ガウス状態空間モデル(前回の復習)
- ローカルレベルモデル
- ローカルレベル+季節成分モデル
- KFASによるモデル構築
- 基本的なモデル構築方法
- モデルの定義
- ハイパーパラメータ推定
- 予測・推定結果
- 長期予測
- 成分ごとの推定
- 基本的なモデル構築方法
- statsmodelsによるモデル構築
- 基本的なモデル構築方法
- モデルの定義
- ハイパーパラメータ推定 + 平滑化
- 予測・推定結果
- 長期予測
- 成分ごとの推定
- KFASと比べて取得しにくい量
- 成分ごとの長期予測
- 成分和の予測・推定
- 基本的なモデル構築方法
- まとめ
- 参考資料
忙しい人のために
- レベル成分を
、季節成分を
とし、以下のようなローカルレベル+季節成分モデルを考える:
- RのライブラリKFASを用いてモデル構築を行えば、以下の予測・推定結果を
predict
関数を用いて取得できる:- 観測値の長期予測:
- 成分別の推定・予測
- レベル成分:
- 季節成分:
- レベル成分+季節成分:
- レベル成分:
- 観測値の長期予測:
- PythonのライブラリstatsmodelsのUnobservedComponentsクラスを用いれば、KFASと同様のモデリング結果を再現できる。
- 使い勝手の面では、statsmodelsはKFASに劣る