15 · Forecasting con ML
Convierte el forecasting en aprendizaje supervisado: las features de retardo y de ventana son X, el siguiente valor es y, y un regresor de gradient boosting aprende el mapeo — y luego pronostica recursivamente sobre el horizonte.
Cualquier regresor (gradient boosting, random forest) puede pronosticar una vez que lo planteas como aprendizaje supervisado: features de retardo + ventana → siguiente valor. Los pronósticos multi-paso salen recursivamente (realimentar predicciones como retardos) o directamente (un modelo por horizonte).
Sin esto:
Sin el replanteo supervisado quedas atrapado en la familia ARIMA; con él, cada truco de gradient boosting y árboles que aprendiste en el track supervisado aplica a series temporales — no linealidad, importancia de features y variables exógenas gratis.
ARIMA y el suavizado exponencial son modelos lineales y ajustados a mano. Pero ya posees una caja de herramientas mucho mayor del track supervisado — gradient boosting, random forests, regresión regularizada. El truco para desbloquearlos en forecasting es un replanteo: convertir la serie en una tabla de aprendizaje supervisado.
Para cada paso t, construye una fila de features a partir solo del pasado:
- Features de retardo (lag) —
y[t-1],y[t-2], … (el valor de hace 1, 2, … pasos). - Features de ventana (rolling) — una media móvil o std sobre los últimos
kpasos (nivel y volatilidad recientes suavizados).
El objetivo es el propio y[t]. Ahora es un problema de regresión simple, y cualquier regresor aprende el mapeo. Usamos GradientBoostingRegressor, que captura interacciones no lineales que un AR lineal no puede.
El detalle es el forecasting multi-paso. El horizonte está varios pasos adelante, pero para predecir t+2 necesitarías y[t+1] como retardo — que aún no tienes. Dos estrategias:
- Recursivo — predecir
t+1, luego realimentar esa predicción como retardo para predecirt+2, y así. Un modelo, pero los errores se acumulan. - Directo — entrenar un modelo separado por horizonte (
h=1,h=2, …), cada uno prediciendo directo desde features conocidas hoy. Sin acumulación, pero más modelos.
Abajo construimos features de retardo + ventana, entrenamos un regresor de gradient boosting respetando el orden temporal (sin barajar, entrenando en la porción anterior), luego pronosticamos el horizonte de test recursivamente y comparamos el MAE contra la baseline ingenua de último valor.
Python (in browser)
Forecasting como aprendizaje supervisado: features de retardo+ventana entrenan un GradientBoostingRegressor, luego un bucle recursivo pronostica el horizonte y supera la baseline ingenua de último valor.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Observa la estructura del bucle recursivo: mantiene una lista history y, tras cada predicción, agrega la propia predicción para que los retardos del siguiente paso se construyan desde pronósticos, no desde los reales que fingimos no ver. Eso simula fielmente producción, donde solo cuentas con tus propias salidas pasadas.
¿Qué regresor elegir? Los ensembles de árboles (gradient boosting, random forests) son los caballos de batalla del forecasting tabular: manejan tendencia no lineal e interacción entre retardos, requieren poco escalado y — clave — te dan importancias de features para ver si lag1, el lag7 semanal o la media móvil carga la señal. También aceptan features exógenas gratis (precio, clima, promociones como columnas extra), lo que el ARIMA clásico solo logra con torpeza vía SARIMAX. El techo, sin embargo, es que los árboles no pueden extrapolar una tendencia más allá del rango visto en entrenamiento — para una serie con fuerte tendencia a menudo primero quitas la tendencia (pronosticar la serie diferenciada y luego acumular) o agregas con cuidado una feature de índice temporal.
Python (in browser)
Las importancias de features de un random forest revelan que lag1 y el lag7 semanal cargan la señal de pronóstico — interpretabilidad que no obtienes de los coeficientes crudos de ARIMA.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
En el forecasting recursivo multi-paso, ¿cómo construyes las features de retardo para el paso que predices en el horizonte h > 1?
- Replantea el forecasting como aprendizaje supervisado: features de retardo + ventana son X, el siguiente valor es y — y entonces aplica cualquier regresor (gradient boosting, random forest).
- Construye features solo del pasado y divide por tiempo; el forecasting recursivo multi-paso realimenta predicciones como retardos (los errores se acumulan), mientras el directo entrena un modelo por horizonte.
- Los ensembles de árboles aportan no linealidad, importancias de features y variables exógenas gratis — pero no extrapolan una tendencia fuera del rango de entrenamiento, así que quita primero la tendencia de series muy tendenciales.
Los forecasters basados en árboles (LightGBM/XGBoost sobre features de retardo) ganan la mayoría de competencias de demanda minorista y carga energética y potencian forecasting en producción a escala porque ingieren drivers exógenos fácilmente.
Si lo quitas: Sin el replanteo supervisado quedas atascado en modelos lineales de la familia ARIMA y pierdes toda la caja de gradient boosting, la no linealidad y las features exógenas fáciles.