1 Punkte von merumeru 2026-03-23 | 1 Kommentare | Auf WhatsApp teilen

Ich habe das CausalImpact-R-Paket von Google nach Python portiert.
Der Gibbs-Sampler ist in Rust implementiert und wird über PyO3 aus Python aufgerufen.
Kein TensorFlow nötig, gegenüber R etwa 30-mal schneller.
Warum ich es gebaut habe:
Bei den bestehenden Python-Portierungen gab es Probleme. pycausalimpact verwendet
MLE, wodurch die Ergebnisse von R abweichen. tfcausalimpact benötigt
TensorFlow (3GB+). Außerdem implementierte keine der Portierungen
spike-and-slab-Variablenselektion.
Genau das ist die Kernfunktion von bsts in R, die unter mehreren Kontroll-Zeitreihen
automatisch die passenden auswählt.
Diese Bibliothek reproduziert denselben Gibbs-Sampler wie das bsts-Paket in R.
Kalman-Filter, Simulation Smoother und sogar der spike-and-slab-Prior
sind vollständig identisch. Bei jedem Commit laufen in der CI Tests auf numerische Gleichwertigkeit
mit R CausalImpact 1.4.1
(Punkteffekt ±3 %, CI-Bereich ±5 %).
Der schwierigste Teil war spike-and-slab.
Es hat mehrere Wochen gedauert, coordinate-wise Sampling und die Standardwerte von StudentSpikeSlabPrior
(expected.r2=0.8, prior.df=50) an die R-Ausgabe anzupassen.
Unterstützte Funktionen:

  • spike-and-slab-Variablenselektion (derselbe Prior wie in R bsts)
  • Saisonalitätskomponente (nseasons, season_duration)
  • Dynamische Regression (zeitvariable Koeffizienten)
  • Local linear trend
    Benchmark (T=1000, niter=1000):
  • Ohne Kovariaten: 0,07 Sekunden (R: 2,1 Sekunden, 30x)
  • 5 Kovariaten: 0,20 Sekunden (R: 2,2 Sekunden, 11x)
    pip install bsts-causalimpact
    GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
    Dokumentation: https://yuminosukesato.github.io/bsts-causalimpact/
    Ich freue mich auf Feedback von allen, die kausale Inferenz mit Zeitreihen machen.
    Wenn es insbesondere Edge Cases gibt, die ich testen sollte, sagt bitte Bescheid.

1 Kommentare

 
shw00 2026-03-24

Klasse. Ich habe zwar gerade keine Daten, an denen ich es sofort ausprobieren könnte, aber wenn sich welche ergeben, werde ich es einmal testen.