1 คะแนน โดย merumeru 2026-03-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ได้พอร์ตแพ็กเกจ 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 ความคิดเห็น

 
shw00 2026-03-24

เจ๋งดีครับ ตอนนี้ยังไม่มีข้อมูลที่น่าจะลองใช้ได้ทันที แต่ถ้ามีขึ้นมาเมื่อไหร่จะลองทดสอบดูสักครั้งครับ