1 ポイント 投稿者 merumeru 2026-03-23 | 1件のコメント | WhatsAppで共有

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件のコメント

 
shw00 2026-03-24

いいですね。今すぐ試せるようなデータはまだありませんが、できたら一度テストしてみます。