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 |