Port gói R CausalImpact của Google sang Python (Gibbs sampler viết bằng Rust)
(github.com/YuminosukeSato)Đã port gói R CausalImpact của Google sang Python.
Gibbs sampler được triển khai bằng Rust và được gọi từ Python qua PyO3.
Không cần TensorFlow, nhanh hơn khoảng 30 lần so với R.
Lý do tạo ra dự án này:
Các bản port Python hiện có đều có vấn đề. pycausalimpact
dùng MLE nên cho kết quả khác với R. tfcausalimpact
cần TensorFlow (3GB+). Và không có bản port nào
triển khai lựa chọn biến spike-and-slab.
Đây chính là tính năng cốt lõi giúp bsts của R tự động
chọn ra chuỗi thời gian control phù hợp trong số nhiều chuỗi.
Thư viện này tái hiện đúng cùng Gibbs sampler như gói bsts của R.
Kalman filter, simulation smoother, và prior spike-and-slab
đều giống hệt. Ở mỗi commit, CI đều chạy kiểm thử tương đương số học với R CausalImpact
1.4.1
(point effect ±3%, phạm vi CI ±5%).
Phần khó nhất là spike-and-slab.
Phải mất vài tuần để khớp đầu ra của R cho coordinate-wise sampling và các giá trị mặc định của StudentSpikeSlabPrior
(expected.r2=0.8, prior.df=50).
Các tính năng được hỗ trợ:
- Lựa chọn biến spike-and-slab (cùng prior như R bsts)
- Thành phần mùa vụ (nseasons, season_duration)
- Hồi quy động (hệ số thay đổi theo thời gian)
- Local linear trend
Benchmark (T=1000, niter=1000): - Không có biến đồng biến: 0.07 giây (R: 2.1 giây, 30x)
- 5 biến đồng biến: 0.20 giây (R: 2.2 giây, 11x)
pip install bsts-causalimpact
GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
Tài liệu: https://yuminosukesato.github.io/bsts-causalimpact/
Mong nhận được phản hồi từ những người làm suy luận nhân quả chuỗi thời gian.
Đặc biệt, nếu có edge case nào nên được kiểm thử, xin hãy cho tôi biết.
1 bình luận
Tuyệt đấy. Hiện tại tôi chưa có dữ liệu nào để thử ngay, nhưng nếu có thì tôi sẽ test một lần.