🎯 Temporal Arena Pro
Pipeline completo de Forecasting · Toda la cadena del dato
Ingesta → EDA → Features → Modelos → Evaluación → Pronóstico
por JoseAndresLopez | Chronos · LightGBM · ARIMA · ETS · CRPS · Calibración · Fan Charts
Selecciona modelos:
Primera vez: descarga Chronos (~200MB)
📚 Guía Completa de Forecasting — De 0 a Producción
ETAPA 1 — Ingesta y Calidad de Datos
La calidad del dato es el 80% del trabajo real. Antes de modelar:
| Check | Qué buscar | Solución |
|---|---|---|
| Valores faltantes | NaN en la serie | Interpolación lineal, forward-fill |
| Outliers | Picos imposibles | Winsorización, imputación por IQR |
| Duplicados | Fechas repetidas | Aggregar o eliminar |
| Frecuencia irregular | Saltos temporales | Resamplear a freq. fija |
| Escala | Valores muy grandes | Normalización (min-max o z-score) |
| No negativos | ¿Ventas < 0? | Transformación logarítmica |
ETAPA 2 — Análisis Exploratorio (EDA)
Descomposición STL
y(t) = Tendencia(t) + Estacionalidad(t) + Residuo(t)
- Tendencia: dirección a largo plazo (¿crece? ¿decrece?)
- Estacionalidad: patrón periódico (semanas, meses, años)
- Residuo: lo que no se explica → mide el "ruido" real
Fuerza de estacionalidad Fs ∈ [0,1]:
Fs = max(0, 1 - Var(residuo) / Var(residuo + estacionalidad))
Fs > 0.64 → estacionalidad pronunciada (la M4 competition usaba este umbral)
ACF y PACF
- ACF(k): correlación entre xₜ y xₜ₋ₖ
- Cae lentamente → no estacionaria
- Picos en k=12,24... → estacionalidad de período 12
- PACF(k): correlación directa (eliminando intermediarios)
- Caída brusca en lag=p → modelo AR(p)
Tests de Estacionariedad
- ADF (H₀: raíz unitaria): p < 0.05 → estacionaria
- KPSS (H₀: estacionaria): p > 0.05 → estacionaria
- Ambos juntos dan más certeza
Periodograma
Análisis espectral via FFT: muestra qué frecuencias dominan. Pico en período=52 → ciclo anual (datos semanales).
Test de normalidad (Shapiro-Wilk)
- p > 0.05 → no rechazamos normalidad
- Importante para: intervalos de predicción gaussianos, tests paramétricos
ETAPA 3 — Feature Engineering
Calendar Features
mes, dia_semana, trimestre, es_fin_semana
→ Capturan estacionalidad conocida sin que el modelo la aprenda
Lag Features
lag_1, lag_2, ..., lag_k = xₜ₋₁, xₜ₋₂, ..., xₜ₋ₖ
→ Información del pasado inmediato ("¿qué pasó ayer?")
Rolling Statistics
roll_mean_7, roll_std_14, roll_max_30...
→ Contexto histórico suavizado ("¿cómo estuvo la semana pasada en promedio?")
Fourier Features
sin(2π·k·t/T), cos(2π·k·t/T) para k=1,...,K
→ Representación continua de la estacionalidad, mejor que dummies categóricas → K términos: K=1 (sinusoide simple), K=5+ (estacionalidad compleja)
ETAPA 4 — Modelos
Jerarquía de complejidad
Complejidad
↑
│ 🤖 Chronos-Bolt (Foundation Model, 2024)
│ ⚡ LightGBM + lag features
│ 📐 SARIMA / SARIMAX
│ 📈 ETS (Holt-Winters)
│ 〰️ Seasonal Naïve
└──────────────────────────────────→ Siempre más complejo ≠ mejor
Naïve
ŷ_{t+h} = y_t
El baseline absoluto. Si no superas esto, algo está mal.
Seasonal Naïve
ŷ_{t+h} = y_{t+h-T} (repite el mismo período anterior)
Muy fuerte para datos con estacionalidad clara.
ETS (Error-Trend-Seasonality)
Familia de modelos con suavizado exponencial. Parámetros: α (nivel), β (tendencia), γ (estacionalidad). Ganó el M3 Competition. Simple pero muy robusto.
SARIMA(p,d,q)(P,D,Q,T)
p,d,q: componentes autoregresivo, integrado, media móvil
P,D,Q: sus equivalentes estacionales, T: período
Interpretable, muy usado en finanzas y economía.
LightGBM + Lag Features
Gradient boosting con árboles de decisión. Aprende relaciones no lineales entre lags. Ventajas: rápido, no requiere estacionariedad, puede usar covariables. Desventaja: forecast recursivo acumula error.
Chronos-Bolt (Amazon, 2024)
Transformer preentrenado en 84,700+ series. Zero-shot: sin reentrenamiento en tus datos. Distribución completa de probabilidad, no solo punto.
Ensemble
ŷ_ensemble = (1/K) · Σ ŷ_modelo_k
Combinar modelos suele mejorar la precisión (wisdom of crowds).
ETAPA 5 — Evaluación Probabilística
Por qué probabilístico es mejor
Un pronóstico puntual dice "venderás 100". Un pronóstico probabilístico dice "hay 80% de probabilidad de que vendas entre 85 y 118". → La segunda información vale para gestión de inventario, riesgo, etc.
CRPS (Continuous Ranked Probability Score)
CRPS(F,y) = E[|X-y|] - ½·E[|X-X'|]
- La métrica de referencia en GIFT-Eval, M4/M5 competitions
- Degeneración puntual: CRPS = MAE cuando F=Dirac(ŷ)
- Penaliza tanto sesgo como mala calibración
Winkler Score (Interval Score)
IS_α = (hi-lo) + (2/α)(lo-y)·𝟙(y<lo) + (2/α)(y-hi)·𝟙(y>hi)
Para un IC del (1-α)%: suma ancho + penalización por misses. Optimiza el trade-off sharpness vs. coverage.
Calibración (Reliability Diagram)
Si prometes un IC del 80%, ¿se cumple el 80% de las veces?
- Curva = diagonal → calibración perfecta
- Curva por debajo de diagonal → intervalos demasiado estrechos (optimista)
- Curva por encima → intervalos demasiado anchos (conservador)
Sharpness
Ancho del IC. Más estrecho = más informativo, pero debe estar calibrado. Trade-off: ¿prefieres decir "entre -∞ y +∞" (100% cobertura, inútil) o "entre 95 y 105" (muy informativo pero puede fallar)?
Ljung-Box Test (residuos)
H₀: no hay autocorrelación en residuos. p < 0.05 → el modelo no ha capturado todo el patrón → prueba otro.
Rolling Window Cross-Validation
Expanding window:
[────────────────]·[horizon] → CRPS₁
[──────────────────]·[horizon] → CRPS₂
[────────────────────]·[horizon] → CRPS₃
Promedio de CRPS sobre ventanas = estimación robusta del rendimiento real.
Análisis de Residuos
- Sesgo (BIAS): ¿predice sistemáticamente alto o bajo?
- Homocedasticidad: ¿la varianza del error es constante en el tiempo?
- Q-Q plot: ¿los residuos son normales? (importante para ICs)
- Residuos vs predicción: ¿hay patrones no capturados?
ETAPA 6 — Producción
Pipeline recomendado
1. Datos → Preprocessing → Feature Engineering
2. Train (rolling CV para estimar rendimiento)
3. Selección de modelo (menor CRPS en CV)
4. Retrain con todos los datos
5. Forecast + IC
6. Monitoreo: detectar drift de datos
Métricas de monitoreo en producción
- MAPE Rolling: ¿el error está aumentando con el tiempo?
- Drift de distribución (Kolmogorov-Smirnov): ¿los datos recientes difieren de los de entrenamiento?
- Coverage drift: ¿los ICs se cumplen con la frecuencia esperada?
Referencias
| Recurso | Descripción |
|---|---|
| FPP3 (Hyndman) | El libro gratuito definitivo |
| GIFT-Eval | Benchmark de referencia (Salesforce 2024) |
| Chronos | Foundation model (Amazon 2024) |
| Timer-S1 | SOTA actual 8.3B (THUML 2026) |
| M4 Competition | El benchmark clásico |
| Nixtla | Librería Python con todo |
| GluonTS | AWS toolkit para TS |