1 puntos por merumeru 2026-03-23 | 1 comentarios | Compartir por WhatsApp

Se portó el paquete R CausalImpact de Google a Python.
El muestreador de Gibbs está implementado en Rust y se invoca desde Python con PyO3.
No requiere TensorFlow y es aproximadamente 30 veces más rápido que R.
Motivo de su creación:
Las implementaciones previas en Python tenían problemas. pycausalimpact
usa MLE, por lo que sus resultados difieren de los de R. tfcausalimpact
requiere TensorFlow (3 GB+). Además, ninguna implementación
había incorporado la selección de variables spike-and-slab.
Esta es justamente la función clave con la que bsts de R
selecciona automáticamente las series temporales de control adecuadas entre varias opciones.
Esta biblioteca reproduce el mismo muestreador de Gibbs del paquete bsts de R.
El filtro de Kalman, el suavizador por simulación y el prior
spike-and-slab son idénticos. En cada commit, CI ejecuta pruebas de equivalencia numérica
contra R CausalImpact 1.4.1
(efecto puntual ±3 %, rango de CI ±5 %).
La parte más difícil fue spike-and-slab.
Tomó varias semanas hacer coincidir con la salida de R
el muestreo coordinate-wise y los valores predeterminados de StudentSpikeSlabPrior
(expected.r2=0.8, prior.df=50).
Funciones compatibles:

  • Selección de variables spike-and-slab (mismo prior que R bsts)
  • Componente estacional (nseasons, season_duration)
  • Regresión dinámica (coeficientes que varían en el tiempo)
  • Tendencia lineal local
    Benchmark (T=1000, niter=1000):
  • Sin covariables: 0.07 s (R: 2.1 s, 30x)
  • Con 5 covariables: 0.20 s (R: 2.2 s, 11x)
    pip install bsts-causalimpact
    GitHub: https://github.com/YuminosukeSato/bsts-causalimpact
    Documentación: https://yuminosukesato.github.io/bsts-causalimpact/
    Se agradece la retroalimentación de quienes trabajan con inferencia causal en series temporales.
    En especial, si hay casos límite que valga la pena probar, compártanlos.

1 comentarios

 
shw00 2026-03-24

Está genial. No tengo datos con los que valga la pena probarlo ahora mismo, pero si aparece alguno, lo probaré.