Alejandría

Busca en Alejandría

Lenguajes y marcos

MLForecast

Biblioteca Python para pronosticar series temporales con modelos de machine learning.

01

En pocas palabras

Biblioteca Python para pronosticar series temporales con modelos de machine learning.

Qué problema resuelve

Ingeniería repetitiva de rezagos y calendarios sobre grandes conjuntos de series.

Cuándo utilizarlo

Demanda, inventario y capacidad. Ejemplo: pronosticar ventas diarias por tienda y producto.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Trial (valoración de la edición aportada).

Cómo funciona

Genera variables como lags y transformaciones y utiliza modelos compatibles con fit y predict. Incluye opciones distribuidas y estimación de incertidumbre.

Ejemplo de uso

Preparar columnas unique_id, ds e y para cada serie. Entrenar con rezagos semanales y evaluar pronósticos de siete días en varios cortes temporales, comparando con un baseline estacional.

Fragmento de preparación con un DataFrame series ya validado:

from mlforecast import MLForecast
from sklearn.linear_model import LinearRegression

forecast = MLForecast(models=[LinearRegression()], freq="D", lags=[7, 14])
forecast.fit(series)
predicciones = forecast.predict(h=7)

Formato de datos

Columna Contenido
unique_id Identificador de la serie (sucursal, producto, cajero)
ds Fecha o marca de tiempo
y Valor a pronosticar
Otras Variables exógenas (festivos, promociones, precio)

Un solo modelo global se entrena con todas las series a la vez, lo que permite pronosticar series cortas aprovechando patrones de las demás.

Ingeniería de variables completa

import lightgbm as lgb
from mlforecast import MLForecast
from mlforecast.lag_transforms import ExpandingMean, RollingMean
from mlforecast.target_transforms import Differences
from mlforecast.utils import PredictionIntervals

fcst = MLForecast(
    models={"lgbm": lgb.LGBMRegressor(n_estimators=300, learning_rate=0.05, verbose=-1)},
    freq="D",
    lags=[1, 7, 14, 28],
    lag_transforms={
        1: [ExpandingMean()],
        7: [RollingMean(window_size=7), RollingMean(window_size=28)],
    },
    date_features=["dayofweek", "month"],
    target_transforms=[Differences([7])],   # quita la estacionalidad semanal antes de entrenar
)

fcst.fit(series, static_features=[], prediction_intervals=PredictionIntervals(n_windows=3, h=14))
pred = fcst.predict(h=14, level=[80, 95], X_df=exogenas_futuras)

X_df contiene los valores futuros de las variables exógenas: solo se pueden usar las que se conocen de antemano (festivos, campañas planificadas).

Validación temporal

cv = fcst.cross_validation(df=series, n_windows=4, h=14, step_size=14)

from utilsforecast.evaluation import evaluate
from utilsforecast.losses import mae, smape
metricas = evaluate(cv.drop(columns="cutoff"), metrics=[mae, smape])

Cada ventana entrena con los datos hasta un corte y evalúa los 14 días siguientes, imitando el uso real. Nunca uses una partición aleatoria en series temporales: filtra información del futuro.

Comparar siempre con un baseline

Modelo Papel
Naive estacional (mismo día semana pasada) Referencia mínima que hay que superar
Modelos estadísticos (StatsForecast: ETS, ARIMA) Robustos, rápidos y explicables
MLForecast (LightGBM, XGBoost, lineales) Muchas series, variables exógenas
NeuralForecast Grandes volúmenes y patrones complejos

Las tres librerías son de Nixtla y comparten formato, por lo que se pueden comparar con el mismo código de evaluación.

Casos de uso en servicios financieros

  • Demanda de efectivo por cajero o sucursal.
  • Volumen de solicitudes de crédito para dimensionar el equipo de análisis.
  • Recaudo esperado por día para planificar tesorería.
  • Carga del centro de contacto por franja horaria.

Para grandes volúmenes, MLForecast puede ejecutarse sobre Dask, Spark o Ray. Registra experimentos y versiones de datos con Weights & Biases o MLflow.

Criterios de implementación

Comprobar frecuencia, huecos y disponibilidad futura de variables externas. Medir error por segmento e intervalos de predicción antes de decidir un despliegue distribuido.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.