Upgrade to Pro — share decks privately, control downloads, hide ads and more …

状態空間時系列モデルで見た R と Python の比較 〜 KFAS と statsmodels 〜

tatamiya
December 01, 2023
1.3k

状態空間時系列モデルで見た R と Python の比較 〜 KFAS と statsmodels 〜

Japan.R 2023 LT 登壇資料
https://japanr.connpass.com/event/302622/

これまで Python を使ってきた人間が R を使い始めて感じた R の良いところを出発点に、
状態空間時系列モデルのパッケージ比較についてお話しします。

tatamiya

December 01, 2023
Tweet

Transcript

  1. 自己紹介 名前: たみや(a.k.a. 畳屋民也 / たみ〜たみゅたみゅ) Twitter X: @tatatatatamiya (@AkapippiBot)

    経歴: 大学・大学院で物理を学ぶ(統計物理・生物物理) AIベンチャー・マーケティングSaaS でデータ分析に従事(2018年〜) 現所属: 株式会社マネーフォワード(2023年1月〜) 趣味: カレー(特にスリランカカレー) R 歴: 業務ではここ2~3ヶ月(Python は6~7年) @Rスリランカ 三田
  2. 状態空間時系列モデルについて、 R の KFAS と Python の statsmodels との比較を 行います。

    これを通して、 Python を使ってきたユーザーが感じた R を利用するメリットの一例につ いて共有できればと思います。 <お話ししないこと> • 状態空間時系列モデルの理論 • 各パッケージの細かい使い方 → 各種公式ドキュメントや、末尾の補足資料を参照してください。 今日お話しすること
  3. (突然ですが)R のここがいい! Python 使いが R を使ってみて感じたこと: • dplyr によるデータ処理が書きやすい! •

    ggplot によるグラフ作成が高機能! • 統計モデリング周りのパッケージが充実していて使いやすい! → 特にこのポイントに関連して、 最近 状態空間時系列モデリングを行っていて感 じたことをお話しします!
  4. 状態空間時系列モデルでは、観測値 {y t } の背後に観測できない状態 {α t } を仮定した状 態方程式と観測方程式をもとに、モデル推定・予測を行う。

    特に状態・観測方程式が線形かつ状態・観測ノイズがガウス分布に従う場合は、カルマ ンフィルタという手法で状態推定を(比較的)容易に行うことができる。 例: ローカルレベルモデル 状態空間時系列モデルとは? 観測方程式: 状態方程式:
  5. 例2: 施策効果の推定 施策介入 (例: ページリニューアル ) トレンド成分 (μ t ):

    施策なしの仮想値 回帰成分 (βx t ): 施策効果 外部変数 x t による回帰 + ※データは人工的に生成した架空のものです
  6. よく使われるパッケージ: • R ◦ KFAS ◦ dlm ◦ … •

    Python ◦ statsmodels (※今回はモデル推定に MCMC は使わず、カルマンフィルタを用いるものとする。) R / Python ではどのように実行するか? 以下の理由から、こちらを採用 • 機能の充実度 • 情報の入手のしやすさ ※ KFAS と dlm の比較については、 巻末の参考文献に挙げた [伊東]、[馬場]を参照。
  7. Kalman Filter and Smoother for Exponential Family State Space Models.

    カルマンフィルタを用いた状態空間時系列モデル推定に特化した R パッケージ。 <特徴> • ガウス分布以外の分布を仮定した推定にも一部対応 <公式ドキュメント> https://cran.r-project.org/web/packages/KFAS/vignettes/KFAS.pdf KFAS
  8. 書きやすさは、statsmodels の方がやや勝る (例)モデル作成: • KFAS は、モデルについての数理的な知識が多少必要 ◦ コンポーネントを足し算していくスタイル ◦ 推定が必要なハイパーパラメータとその初期値は明示的に指定する

    • statsmodels は、モデルの詳細を知らなくてもとりあえず実行できる ◦ モデル名を文字列指定するスタイル ◦ ハイパーパラメータ等を明示的に指定する必要がない 加えて、 statsmodels にはグラフ作成機能が備わっている。 比較1: 記述のしやすさ
  9. KFAS による実行例 ※ グラフは別途 ggplot を用いて作成 トレンド成分(SSMtrend) + 季節成分(SSMseasonal) としてモデルを定義

    以下をパラメータとして引数指定: • トレンド成分の差分階数 (degree) • 推定対象とするノイズ分散 (Q, H)
  10. 比較2: 機能 KFAS の方が充実している。 以下の内容は、KFAS ではできるが、 statsmodels では実行困難 or 不可能

    • statsmodels では文字列指定できないトレンド成分を含むモデル ◦ 例:3次以上の差分トレンド成分モデル ◦ → 自前でクラス拡張してカスタムモデルを作成 することで対応は可能(ただし結構面倒) • ガウス以外のデータ分布を仮定したモデル推定 ◦ statsmodels は、観測ノイズとしてガウス分布を仮定したモデルしか現状作成不可能 ◦ KFAS は、ガウス以外にもいくつかの指数分布族に対応している ▪ 例: カウントデータに対して、 Poisson 分布を仮定したモデル • 係数が時間依存する外部変数回帰(→ 次のページ参照) ◦ statsmodels では、時間不変の係数のみしか扱えない
  11. 現状では、記述のしやすさでは statsmodels にやや軍配が上がるものの、 機能面では KFAS の方が充実している。 → statsmodels の今後の機能追加に期待...! <メッセージ>

    R ユーザー宛: … Python への書き換えが必要になった時は気をつけましょう。 Python ユーザー宛: … R もわかると分析の幅が広がるのでオススメです! まとめ
  12. 補足資料 • 状態空間時系列モデルの理論と R による実行方法 ◦ 馬場真哉「時系列分析と状態空間モデルの基礎」(プレアデス出版) ◦ 野村俊一「カルマンフィルタ」(共立出版) ◦

    萩原淳一郎ほか「基礎からわかる時系列分析」(技術評論社) ◦ 伊東宏樹「Rによる状態空間モデリング」(岩波データサイエンス Vol.6、岩波書店) • ブログ(拙著) ◦ R経由で学ぶPythonの状態空間時系列モデリング ▪ #1: 逐次推定法とカルマンフィルタ • https://tatamiya-practice.hatenablog.com/entry/2021/01/10/152509 ▪ #2: statsmodelsによる状態空間モデリングを、 KFASから「翻訳」して学ぶ • https://tatamiya-practice.hatenablog.com/entry/2021/02/12/194741 ◦ KFAS による状態空間時系列モデリングの snippet 集 (随時更新予定) ▪ https://zenn.dev/tatamiya/scraps/6e4d2278fb009d • 実行コード(※以下に12/3中にアップします!) ◦ https://github.com/tatamiya/state_space_model_notebooks/tree/main/japanr2023