AutoADAM

Automatic ADAM model selection with distribution and ARIMA order selection.

class smooth.AutoADAM(model='ZXZ', lags=None, ar_order=None, i_order=None, ma_order=None, orders=None, arima_select=True, distribution=None, outliers='ignore', level=0.99, constant=False, ic='AICc', loss='likelihood', h=None, holdout=False, bounds='usual', initial='backcasting', regressors='use', verbose=0, **kwargs)

Automatic ADAM model selection.

Wraps ADAM with automatic selection of ARIMA orders and error distribution, mirroring R’s auto.adam() function.

ETS model selection (ZZZ, ZXZ, FFF, CCC …) is handled by the underlying ADAM machinery and is not duplicated here.

Parameters:
  • model (Union[str, List[str]], default="ZXZ") – ETS model specification passed to each internal ADAM fit. Supports all codes accepted by ADAM.

  • lags (Optional[List[int]], default=None) – Seasonal period(s). Lag 1 is prepended automatically when absent.

  • ar_order (Union[int, List[int]], default=[3, 3]) – Maximum AR order(s) per lag level for ARIMA selection. Defaults to [3, 3] matching R’s auto.adam().

  • i_order (Union[int, List[int]], default=[2, 1]) – Maximum integration order(s) per lag level for ARIMA selection. Defaults to [2, 1] matching R’s auto.adam().

  • ma_order (Union[int, List[int]], default=[3, 3]) – Maximum MA order(s) per lag level for ARIMA selection. Defaults to [3, 3] matching R’s auto.adam().

  • orders (Optional[Dict[str, Any]], default=None) – R-style alternative to scalar max orders. A dict with keys "ar", "i", "ma" (each an int or list) and optionally "select" (bool). When provided, ar_order/i_order/ ma_order are ignored.

  • arima_select (bool, default=True) – Whether to perform ARIMA order selection. Unlike ADAM, this defaults to True.

  • distribution (Union[str, List[str]], default=(all 7 distributions)) – Distribution(s) to try. When a list is supplied every entry is fitted and the one with lowest IC is kept. A single string uses only that distribution (no selection loop).

  • outliers (Literal["ignore", "use", "select"], default="ignore") – Outlier handling mode. "use" and "select" are accepted but not yet implemented; a UserWarning is issued.

  • level (float, default=0.99) – Confidence level for outlier detection (placeholder for future use).

  • ic (Literal["AIC", "AICc", "BIC", "BICc"], default="AICc") – Information criterion used for all model comparisons.

  • loss (LOSS_OPTIONS, default="likelihood") – Loss function for parameter estimation.

  • constant (Union[bool, float], default=False) – Constant/drift term. Overridden by ARIMA selection when arima_select=True (the selection algorithm tests constant on/off).

  • holdout (bool, default=False) – Whether to use a holdout sample.

  • h (Optional[int], default=None) – Forecast horizon.

  • bounds (Literal["usual", "admissible", "none"], default="usual") – Parameter bounds type.

  • initial (str or dict, default="backcasting") – Initialisation method or fixed initial values.

  • regressors (Literal["use", "select", "adapt"], default="use") – How to handle external regressors.

  • verbose (int, default=0) – Verbosity level for the final model fit. All intermediate selection fits are always silent.

  • **kwargs – Additional arguments forwarded to every internal ADAM fit.

See also

ADAM

Full ADAM model.

ES

ETS-only wrapper.

MSARIMA

Pure ARIMA wrapper.

Examples

Full automatic selection (ETS + ARIMA + distribution):

>>> from smooth import AutoADAM
>>> import numpy as np
>>> y = np.cumsum(np.random.randn(120)) + 100
>>> model = AutoADAM(lags=[12])
>>> model.fit(y)
>>> print(model.model, model.distribution_)

ARIMA-only automatic selection (no ETS):

>>> model = AutoADAM(model="NNN", lags=[1, 12])
>>> model.fit(y)

Fix the distribution, only select ARIMA orders:

>>> model = AutoADAM(distribution="dnorm", lags=[1, 12])
>>> model.fit(y)

References

Overview

AutoADAM extends ADAM with automatic selection of:

  1. Distribution — tests multiple error distributions and selects by IC

  2. ARIMA orders — when arima_select=True (default), selects AR/I/MA orders

  3. Outlier detection — optionally detects and includes outlier dummies

Example Usage

Distribution selection:

from smooth import AutoADAM

model = AutoADAM(model="ZZZ",
                 distribution=["dnorm", "dlaplace", "ds"])
model.fit(y)
print(model)

With ARIMA order selection:

model = AutoADAM(model="ZZZ",
                 lags=[1, 12],
                 ar_order=[3, 1],
                 i_order=[2, 1],
                 ma_order=[3, 1])
model.fit(y)
fc = model.predict(h=24)

With outlier detection:

model = AutoADAM(model="ZZZ", lags=[1, 12],
                 outliers="use", level=0.99)
model.fit(y)

Diagnostics after fitting:

# Standardised residuals
std_res = model.rstandard()

# Studentised residuals
stud_res = model.rstudent()

# Outlier dummy variables (if outliers detected)
dummies = model.outlierdummy()

See Also