Port do pacote R CausalImpact do Google para Python (com amostrador de Gibbs em Rust)
(github.com/YuminosukeSato)Fiz um port do pacote R CausalImpact do Google para Python.
O amostrador de Gibbs foi implementado em Rust e chamado a partir do Python com PyO3.
Não precisa de TensorFlow e é cerca de 30 vezes mais rápido que o R.
Motivo para criar isso:
Havia problemas nos ports existentes em Python. O pycausalimpact
usa MLE, então os resultados diferem do R. O tfcausalimpact
exige TensorFlow (3 GB+). E nenhum dos ports
implementava seleção de variáveis spike-and-slab.
Esse é justamente o recurso principal do bsts no R, que
escolhe automaticamente os controles mais adequados entre várias
séries temporais de controle.
Esta biblioteca reproduz o mesmo amostrador de Gibbs do pacote bsts do R.
O filtro de Kalman, o simulation smoother e o prior spike-and-slab
são todos idênticos. A cada commit, a CI executa testes de equivalência numérica
com o R CausalImpact 1.4.1
(efeito pontual ±3%, faixa do IC ±5%).
A parte mais difícil foi o spike-and-slab.
Levei semanas para alinhar a saída com a do R em relação ao
amostragem coordinate-wise e aos valores padrão de StudentSpikeSlabPrior
(expected.r2=0.8, prior.df=50).
Recursos suportados:
- Seleção de variáveis spike-and-slab (mesmo prior do R bsts)
- Componente sazonal (
nseasons,season_duration) - Regressão dinâmica (coeficientes variantes no tempo)
- Tendência linear local
Benchmark (T=1000,niter=1000): - Sem covariáveis: 0,07 s (R: 2,1 s, 30x)
- 5 covariáveis: 0,20 s (R: 2,2 s, 11x)
pip install bsts-causalimpact
GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
Documentação: https://yuminosukesato.github.io/bsts-causalimpact/
Aguardo feedback de quem trabalha com inferência causal em séries temporais.
Principalmente se houver edge cases que vocês acham que eu deveria testar.
1 comentários
Muito legal. Não tenho nenhum dado para testar isso agora, mas, se surgir algum, vou experimentar.