Slide 1

Slide 1 text

状態空間時系列モデルで見た R と Python の比較 〜 KFAS と statsmodels 〜 2023/12/02 @tatatatatamiya Japan.R 2023 LT

Slide 2

Slide 2 text

自己紹介 名前: たみや(a.k.a. 畳屋民也 / たみ〜たみゅたみゅ) Twitter X: @tatatatatamiya (@AkapippiBot) 経歴: 大学・大学院で物理を学ぶ(統計物理・生物物理) AIベンチャー・マーケティングSaaS でデータ分析に従事(2018年〜) 現所属: 株式会社マネーフォワード(2023年1月〜) 趣味: カレー(特にスリランカカレー) R 歴: 業務ではここ2~3ヶ月(Python は6~7年) @Rスリランカ 三田

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

(突然ですが)R のここがいい! Python 使いが R を使ってみて感じたこと: ● dplyr によるデータ処理が書きやすい! ● ggplot によるグラフ作成が高機能! ● 統計モデリング周りのパッケージが充実していて使いやすい! → 特にこのポイントに関連して、 最近 状態空間時系列モデリングを行っていて感 じたことをお話しします!

Slide 5

Slide 5 text

状態空間時系列モデルでは、観測値 {y t } の背後に観測できない状態 {α t } を仮定した状 態方程式と観測方程式をもとに、モデル推定・予測を行う。 特に状態・観測方程式が線形かつ状態・観測ノイズがガウス分布に従う場合は、カルマ ンフィルタという手法で状態推定を(比較的)容易に行うことができる。 例: ローカルレベルモデル 状態空間時系列モデルとは? 観測方程式: 状態方程式:

Slide 6

Slide 6 text

状態空間時系列モデルで何ができるか? 例えばこんなことができます! ● 時系列データの成分分解 ● 施策効果の推定

Slide 7

Slide 7 text

例1: 時系列の成分分解 観測データ データ出典: 岩波データサイエンスVol.1 松浦(2015)より https://github.com/iwanami-datascience/vol1/matsu ura/example2/input/data-season.txt + トレンド成分 (μ t ) 季節成分 (γ t )

Slide 8

Slide 8 text

例2: 施策効果の推定 施策介入 (例: ページリニューアル ) トレンド成分 (μ t ): 施策なしの仮想値 回帰成分 (βx t ): 施策効果 外部変数 x t による回帰 + ※データは人工的に生成した架空のものです

Slide 9

Slide 9 text

よく使われるパッケージ: ● R ○ KFAS ○ dlm ○ … ● Python ○ statsmodels (※今回はモデル推定に MCMC は使わず、カルマンフィルタを用いるものとする。) R / Python ではどのように実行するか? 以下の理由から、こちらを採用 ● 機能の充実度 ● 情報の入手のしやすさ ※ KFAS と dlm の比較については、 巻末の参考文献に挙げた [伊東]、[馬場]を参照。

Slide 10

Slide 10 text

Kalman Filter and Smoother for Exponential Family State Space Models. カルマンフィルタを用いた状態空間時系列モデル推定に特化した R パッケージ。 <特徴> ● ガウス分布以外の分布を仮定した推定にも一部対応 <公式ドキュメント> https://cran.r-project.org/web/packages/KFAS/vignettes/KFAS.pdf KFAS

Slide 11

Slide 11 text

Python を代表する汎用統計解析パッケージ。 <特徴> ● 状態空間時系列モデル以外にも、統計的仮説検定、一般含む線形回帰モデル、 ARIMA などの古典的な時系列モデルほか多数実行可能。 <公式ドキュメント> https://www.statsmodels.org/stable/index.html statsmodels

Slide 12

Slide 12 text

パッケージ比較 以下の観点から KFAS と statsmodels を比較していきます: 1. 記述のしやすさ 2. 機能

Slide 13

Slide 13 text

書きやすさは、statsmodels の方がやや勝る (例)モデル作成: ● KFAS は、モデルについての数理的な知識が多少必要 ○ コンポーネントを足し算していくスタイル ○ 推定が必要なハイパーパラメータとその初期値は明示的に指定する ● statsmodels は、モデルの詳細を知らなくてもとりあえず実行できる ○ モデル名を文字列指定するスタイル ○ ハイパーパラメータ等を明示的に指定する必要がない 加えて、 statsmodels にはグラフ作成機能が備わっている。 比較1: 記述のしやすさ

Slide 14

Slide 14 text

KFAS による実行例 ※ グラフは別途 ggplot を用いて作成 トレンド成分(SSMtrend) + 季節成分(SSMseasonal) としてモデルを定義 以下をパラメータとして引数指定: ● トレンド成分の差分階数 (degree) ● 推定対象とするノイズ分散 (Q, H)

Slide 15

Slide 15 text

statsmodels による実行例 引数として、 ● トレンド成分のモデル種類 ● 季節成分の周期 を与える

Slide 16

Slide 16 text

比較2: 機能 KFAS の方が充実している。 以下の内容は、KFAS ではできるが、 statsmodels では実行困難 or 不可能 ● statsmodels では文字列指定できないトレンド成分を含むモデル ○ 例:3次以上の差分トレンド成分モデル ○ → 自前でクラス拡張してカスタムモデルを作成 することで対応は可能(ただし結構面倒) ● ガウス以外のデータ分布を仮定したモデル推定 ○ statsmodels は、観測ノイズとしてガウス分布を仮定したモデルしか現状作成不可能 ○ KFAS は、ガウス以外にもいくつかの指数分布族に対応している ■ 例: カウントデータに対して、 Poisson 分布を仮定したモデル ● 係数が時間依存する外部変数回帰(→ 次のページ参照) ○ statsmodels では、時間不変の係数のみしか扱えない

Slide 17

Slide 17 text

係数が時間依存する外部変数回帰の利用例: 施策効果が時間依存する場合の効果推定 意外とよく使うので、 statsmodels にも欲しい...

Slide 18

Slide 18 text

現状では、記述のしやすさでは statsmodels にやや軍配が上がるものの、 機能面では KFAS の方が充実している。 → statsmodels の今後の機能追加に期待...! <メッセージ> R ユーザー宛: … Python への書き換えが必要になった時は気をつけましょう。 Python ユーザー宛: … R もわかると分析の幅が広がるのでオススメです! まとめ

Slide 19

Slide 19 text

補足資料 ● 状態空間時系列モデルの理論と 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