พอร์ตแพ็กเกจ Google CausalImpact จาก R ไปยัง Python (Gibbs sampler ใช้ Rust)
(github.com/YuminosukeSato)ได้พอร์ตแพ็กเกจ CausalImpact ของ Google จาก R ไปยัง Python
Gibbs sampler ถูกพัฒนาด้วย Rust และเรียกใช้จาก Python ผ่าน PyO3
ไม่ต้องใช้ TensorFlow และเร็วกว่า R ประมาณ 30 เท่า
เหตุผลที่สร้างขึ้นมา:
พอร์ตฝั่ง Python ที่มีอยู่เดิมมีปัญหาอยู่ pycausalimpact
ใช้ MLE จึงให้ผลลัพธ์ต่างจาก R ส่วน tfcausalimpact
ต้องใช้ TensorFlow (3GB+) และยังไม่มีพอร์ตใด
ที่รองรับการทำ spike-and-slab variable selection
ซึ่งนี่คือฟีเจอร์สำคัญที่ทำให้ bsts ของ R สามารถ
คัดเลือก control time series ที่เหมาะสมจากหลายชุดได้โดยอัตโนมัติ
ไลบรารีนี้จำลอง Gibbs sampler แบบเดียวกับแพ็กเกจ bsts ของ R
ทั้ง Kalman filter, simulation smoother และ spike-and-slab
prior ล้วนเหมือนกันทั้งหมด มีการรันทดสอบความเท่าเทียมเชิงตัวเลขกับ R CausalImpact 1.4.1 ใน CI ทุกครั้งที่มีการคอมมิต
(point effect ±3%, ช่วง CI ±5%)
ส่วนที่ยากที่สุดคือ spike-and-slab
ต้องใช้เวลาหลายสัปดาห์เพื่อให้ coordinate-wise sampling และค่าเริ่มต้นของ StudentSpikeSlabPrior
(expected.r2=0.8, prior.df=50) ตรงกับผลลัพธ์ของ R
ฟีเจอร์ที่รองรับ:
- spike-and-slab variable selection (prior แบบเดียวกับ R bsts)
- seasonal component (nseasons, season_duration)
- dynamic regression (ค่าสัมประสิทธิ์เปลี่ยนตามเวลา)
- local linear trend
เบนช์มาร์ก (T=1000, niter=1000): - ไม่มี covariate: 0.07 วินาที (R: 2.1 วินาที, เร็วกว่า 30 เท่า)
- มี covariate 5 ตัว: 0.20 วินาที (R: 2.2 วินาที, เร็วกว่า 11 เท่า)
pip install bsts-causalimpact
GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
เอกสาร: https://yuminosukesato.github.io/bsts-causalimpact/
ยินดีรับฟีดแบ็กจากผู้ที่ทำ causal inference กับ time series
โดยเฉพาะถ้ามี edge case ที่ควรทดสอบเพิ่มเติม ช่วยแจ้งได้เลย
1 ความคิดเห็น
เจ๋งดีครับ ตอนนี้ยังไม่มีข้อมูลที่น่าจะลองใช้ได้ทันที แต่ถ้ามีขึ้นมาเมื่อไหร่จะลองทดสอบดูสักครั้งครับ