| name | statistical-models |
| description | Forecasts time series using classical statistical models (ARIMA, SARIMAX, ETS, ARAR) wrapped in ForecasterStats. Covers model selection, Auto-ARIMA, backtesting statistical models, and parameter tuning. Use when the user wants traditional statistical forecasting methods.
|
Statistical Models (ARIMA, ETS, SARIMAX, ARAR)
References
See references/model-parameters.md for
complete constructor signatures of all statistical models (Arima, Sarimax,
Ets, Arar), the Ets model string format, Auto-ARIMA parameters, seasonal_order
differences between Arima and Sarimax, and grid search param_grid examples.
When to Use
Use statistical models when:
- The series is short (< 200 observations)
- Interpretability is important (ARIMA coefficients, ETS components)
- You need built-in prediction intervals without residual bootstrapping
- As a baseline to compare against ML models
Available Models
| Model | Class | Description |
|---|
| ARIMA | Arima | AutoRegressive Integrated Moving Average |
| Auto-ARIMA | Arima(order=None) | Automatic order selection |
| SARIMAX | Sarimax | ARIMA with exogenous variables (seasonal) |
| ETS | Ets | Exponential Smoothing (Error-Trend-Seasonal) |
| ARAR | Arar | Autoregressive model with memory shortening |
Complete Workflow: ARIMA
import pandas as pd
from skforecast.recursive import ForecasterStats
from skforecast.stats import Arima
from skforecast.model_selection import backtesting_stats, TimeSeriesFold
data = pd.read_csv('data.csv', index_col='date', parse_dates=True)
data = data.asfreq('MS')
arima_model = Arima(
order=(1, 1, 1),
seasonal_order=(1, 1, 1),
m=12,
)
forecaster = ForecasterStats(estimator=arima_model)
forecaster.fit(y=data['target'])
predictions = forecaster.predict(steps=12)
predictions_interval = forecaster.predict_interval(
steps=12,
interval=[10, 90],
)
Auto-ARIMA (Automatic Order Selection)
auto_arima = Arima(order=None, seasonal=True, m=12)
forecaster = ForecasterStats(estimator=auto_arima)
forecaster.fit(y=data['target'])
print(forecaster.estimator.best_params_['order'])
print(forecaster.estimator.best_params_['seasonal_order'])
predictions = forecaster.predict(steps=12)
ETS (Exponential Smoothing)
from skforecast.stats import Ets
ets_model = Ets(model='AAA', m=12)
forecaster = ForecasterStats(estimator=ets_model)
forecaster.fit(y=data['target'])
predictions = forecaster.predict(steps=12)
Auto-ETS (Automatic Model Selection)
auto_ets = Ets(model='ZZZ', m=12)
forecaster = ForecasterStats(estimator=auto_ets)
forecaster.fit(y=data['target'])
print(forecaster.estimator.best_params_)
predictions = forecaster.predict(steps=12)
SARIMAX (with Exogenous Variables)
from skforecast.stats import Sarimax
sarimax_model = Sarimax(
order=(1, 1, 1),
seasonal_order=(1, 1, 1, 12),
)
forecaster = ForecasterStats(estimator=sarimax_model)
forecaster.fit(y=data['target'], exog=exog_train)
predictions = forecaster.predict(steps=12, exog=exog_test)
ARAR
from skforecast.stats import Arar
arar_model = Arar()
forecaster = ForecasterStats(estimator=arar_model)
forecaster.fit(y=data['target'])
predictions = forecaster.predict(steps=12)
Backtesting Statistical Models
cv = TimeSeriesFold(
steps=12,
initial_train_size=len(data) - 60,
refit=False,
)
metric, predictions_bt = backtesting_stats(
forecaster=forecaster,
y=data['target'],
cv=cv,
metric='mean_absolute_error',
freeze_params=True,
)
Multiple Models Simultaneously
from skforecast.stats import Arima, Ets
models = [
Arima(order=(1, 1, 1), seasonal_order=(1, 1, 1), m=12),
Ets(model='AAA', m=12),
]
forecaster = ForecasterStats(estimator=models)
forecaster.fit(y=data['target'])
predictions = forecaster.predict(steps=12)
Common Mistakes
- Using deprecated
Ets(error=, trend=, seasonal=) syntax: Use Ets(model='AAA', m=12) with a model string instead.
- Forgetting
m parameter: ARIMA and ETS seasonal models require m (seasonal period).
- Not using
backtesting_stats: Use backtesting_stats() for statistical models, NOT backtesting_forecaster().
- Using grid_search_forecaster for stats: Use
grid_search_stats() or random_search_stats() instead.
- Passing
seasonal_order=(1,1,1,12) to Arima: Arima uses a 3-tuple seasonal_order=(P,D,Q) plus a separate m=12 parameter. The 4-tuple (P,D,Q,s) format is only for Sarimax.