Saltar a contenido

Guía rápida

Instalación

pip install forecast-arena            # núcleo
pip install "forecast-arena[xgb]"     # + XGBoost (recomendado)
pip install "forecast-arena[plots]"   # + matplotlib para result.plot()

El caso básico: una serie, cero configuración

import pandas as pd
from forecast_arena import Arena

y = pd.read_csv("ventas.csv", index_col=0, parse_dates=True).squeeze()

arena = Arena()
result = arena.compete(y, test_size=12, h=12, n_windows=3)

print(result)          # leaderboard, campeón, diagnóstico, intervalos
result.plot(last=48)   # gráfica con bandas y quiebres marcados

test_size es cuántas observaciones se apartan para evaluar, h cuántos pasos pronosticar y n_windows cuántas ventanas de backtesting rolling-origin usar (más ventanas = evaluación más robusta).

Con promociones planeadas (exógenas conocidas)

result = arena.compete(y, test_size=6, h=6, X=X_hist, X_future=X_promos)

Con variables que hay que pronosticar primero (cascada)

result = arena.compete(y, test_size=6, h=6, X=X_hist, forecast_X=True)
result.exog_report   # qué tan pronosticable fue cada exógena

Demanda con muchos ceros

Arena(models=["croston", "naive"]).compete(demanda, test_size=8, h=4)

Datos diarios con doble estacionalidad

Arena(season_length=[7, 365]).compete(y_diaria, test_size=28, h=14)

Muchas series a la vez

resultados = arena.compete_many({"tienda_a": ya, "tienda_b": yb}, test_size=6, h=6)
Arena.summarize(resultados)

Jerarquías que deben cuadrar

from forecast_arena import forecast_hierarchy
tree = {"total": ["norte", "sur"], "norte": ["mty", "chih"]}
hr = forecast_hierarchy(df_hojas, tree, test_size=6, h=12)
hr.reconciled   # las sumas cuadran exacto en todos los niveles

Guardar y reutilizar al campeón

result.save("campeon.joblib")

from forecast_arena import load
r = load("campeon.joblib")
r.fitted_champion.predict(6)   # pronostica sin reentrenar

Los parámetros que más vas a tocar

Parámetro Default Qué controla
models los 8 principales qué luchadores entran al ring
season_length "auto" periodicidad (12, 7, [7, 365]...)
transform "auto" Box-Cox/log/nada, detectado
changepoints "report" None/"report"/"trim"/"dummy"
metric "MAE" qué métrica corona al campeón
n_jobs 1 luchadores en paralelo
random_state 123 reproducibilidad