Google CausalImpact RパッケージをPythonへ移植(GibbsサンプラーはRust)
(github.com/YuminosukeSato)GoogleのCausalImpact RパッケージをPythonに移植しました。
GibbsサンプラーをRustで実装し、PyO3でPythonから呼び出します。
TensorFlowは不要で、Rと比べて約30倍高速です。
作った理由:
既存のPython移植版には問題がありました。pycausalimpactは
MLEを使うためRと結果が異なります。tfcausalimpactは
TensorFlow(3GB+)が必要です。そして、どの移植版も
spike-and-slab変数選択を実装していませんでした。
Rのbstsが複数のcontrol時系列の中から適切なものを自動で
選び出す中核機能が、まさにこれです。
このライブラリはRのbstsパッケージと同一のGibbsサンプラーを
再現します。カルマンフィルタ、シミュレーションスムーザー、spike-and-slab
事前分布まで、すべて同一です。コミットごとにR CausalImpact
1.4.1との数値同等性テストがCIで実行されます
(ポイント効果 ±3%、CI範囲 ±5%)。
最も難しかった部分はspike-and-slabでした。
Coordinate-wiseサンプリングとStudentSpikeSlabPriorのデフォルト値
(expected.r2=0.8, prior.df=50)をRの出力に合わせるのに
数週間かかりました。
対応機能:
- Spike-and-slab変数選択(R bstsと同じ事前分布)
- 季節性コンポーネント(nseasons, season_duration)
- 動的回帰(時変係数)
- Local linear trend
ベンチマーク(T=1000, niter=1000): - 共変量なし: 0.07秒(R: 2.1秒、30倍)
- 共変量5個: 0.20秒(R: 2.2秒、11倍)
pip install bsts-causalimpact
GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
ドキュメント: https://yuminosukesato.github.io/bsts-causalimpact/
時系列の因果推論をされる方からのフィードバックをお待ちしています。
特にテストすべきedge caseがあれば、ぜひ教えてください。
1件のコメント
いいですね。今すぐ試せるようなデータはまだありませんが、できたら一度テストしてみます。