Porting paket R CausalImpact milik Google ke Python (Gibbs sampler ditulis dalam Rust)
(github.com/YuminosukeSato)Saya telah mem-porting paket R CausalImpact milik Google ke Python.
Gibbs sampler diimplementasikan dalam Rust dan dipanggil dari Python melalui PyO3.
Tidak memerlukan TensorFlow, dan sekitar 30 kali lebih cepat dibanding R.
Alasan membuatnya:
Porting Python yang sudah ada memiliki masalah. pycausalimpact
menggunakan MLE sehingga hasilnya berbeda dari R. tfcausalimpact
memerlukan TensorFlow (3GB+). Dan tidak ada porting mana pun yang
mengimplementasikan pemilihan variabel spike-and-slab.
Inilah fitur inti yang membuat bsts di R dapat secara otomatis
memilih deret waktu kontrol yang sesuai dari beberapa deret kontrol.
Library ini mereproduksi Gibbs sampler yang sama dengan paket bsts di R.
Kalman filter, simulation smoother, hingga prior spike-and-slab
semuanya dibuat identik. Pada setiap commit, CI menjalankan uji kesetaraan numerik
dengan R CausalImpact 1.4.1
(efek titik ±3%, rentang CI ±5%).
Bagian tersulit adalah spike-and-slab.
Butuh beberapa minggu untuk mencocokkan sampling coordinate-wise dan nilai default StudentSpikeSlabPrior
(expected.r2=0.8, prior.df=50) dengan output R.
Fitur yang didukung:
- Pemilihan variabel spike-and-slab (prior sama dengan R bsts)
- Komponen musiman (
nseasons,season_duration) - Regresi dinamis (koefisien yang berubah seiring waktu)
- Tren linear lokal
Benchmark (T=1000,niter=1000): - Tanpa kovariat: 0,07 detik (R: 2,1 detik, 30x)
- 5 kovariat: 0,20 detik (R: 2,2 detik, 11x)
pip install bsts-causalimpact
GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
Dokumentasi: https://yuminosukesato.github.io/bsts-causalimpact/
Saya menantikan masukan dari orang-orang yang melakukan inferensi kausal deret waktu.
Terutama, jika ada edge case yang perlu diuji, beri tahu saya.
1 komentar
Keren. Saat ini memang belum ada data yang bisa langsung saya coba, tetapi kalau nanti ada saya akan mengujinya.