Referencia de API¶
Arena¶
Arena(
models=None, # lista de nombres y/o instancias BaseForecaster
season_length="auto", # int, [m1, m2] o "auto"
include_ensemble=True,
metric="MAE", # criterio para coronar: MAE/RMSE/MASE/...
handle_outliers=False, # winsoriza si generalized ESD detecta anomalías
transform="auto", # "auto" | "boxcox" | "log" | None
ensemble_weights="uniform", # "uniform" | "inverse_error"
bias_adjust=False, # media (no mediana) al destransformar Box-Cox
changepoints="report", # None | "report" | "trim" | "dummy"
impute="interpolate", # None exige serie completa
n_jobs=1,
random_state=123,
verbose=False,
)
Arena.compete¶
arena.compete(
y, # pd.Series (índice de fechas recomendado)
test_size=3, # obs. apartadas por ventana de evaluación
h=3, # horizonte del pronóstico final
n_windows=1, # ventanas rolling-origin
X=None, # exógenas históricas (alineadas con y)
X_future=None, # valores futuros CONOCIDOS (h filas)
forecast_X=False, # pronosticar en cascada las columnas no conocidas
levels=(80, 95), # niveles de los intervalos
) -> CompetitionResult
Arena.compete_many / Arena.summarize¶
resultados = arena.compete_many({"nombre": serie, ...}, test_size=6, h=6)
Arena.summarize(resultados) # DataFrame: campeón y métricas por serie
CompetitionResult¶
| Atributo | Contenido |
|---|---|
leaderboard |
métricas por modelo, ordenadas |
champion |
nombre del ganador |
forecast |
pronóstico puntual del campeón |
forecast_intervals |
forecast + lower/upper por nivel |
interval_report |
cobertura empírica y Winkler por modelo |
residual_diagnostics |
Ljung-Box, sesgo y veredicto |
changepoints |
quiebres detectados (pos, fecha, tipo, cambio) |
transformation / season_length / season_source |
qué se detectó y por qué |
exog_report / X_future_used |
detalle de la cascada de exógenas |
profile |
fuerzas de tendencia/estacionalidad (SeriesProfile) |
history |
la serie usada (para plot) |
Métodos: plot(last=None), save(path); módulo: load(path).
Funciones sueltas¶
detect_changepoints(y, season_length="auto", penalty_scale=1.0)
forecast_hierarchy(df_hojas, tree, test_size, h, method="ols")
calendar_features(index) # month, quarter, trading_days, is_easter...
fourier_terms(index, period, K)
strength_trend(y, m) / strength_seasonal(y, m) / SeriesProfile.from_series(y)
residual_diagnostics(resid, season_length)
interval_coverage(y, lo, up) / winkler_score(y, lo, up, level)
rolling_origin_splits(y, test_size, n_windows)
BoxCoxTransformer(lam=None, period=None) / winsorize_outliers(y)
Modelos¶
Todos comparten la interfaz fit(y, X=None) → self, predict(h, X_future=None) → pd.Series,
predict_interval(h, levels=(80,95)), residuals():
NaiveForecaster, SeasonalNaiveForecaster, DriftForecaster,
ThetaForecaster, StlEtsForecaster, SarimaForecaster, EtsForecaster,
HybridStlBoostForecaster, HarmonicRegressionForecaster,
CrostonForecaster, y la clase base BaseForecaster para los tuyos.