-
Notifications
You must be signed in to change notification settings - Fork 22
Persistence
This page documents the persistence parameter used in smooth models to control how quickly the model adapts to new observations. This parameter includes smoothing parameters for ETS, AR/MA elements for ARIMA and other parameters for CES/GUM.
| Field | Value |
|---|---|
| Argument name |
persistence (smoothing) plus phi (damping) |
| Type | R: named list. Python: dict (or scalar for single-parameter cases). |
| Valid keys |
alpha, beta, gamma (vector if multiple seasonalities), delta (vector with regressors="adapt"), xreg. For phi: a single float in (0, 1]. |
| Default |
NULL / None for both — fully estimated. Any key not supplied is estimated. |
| Applies to | R: adam, auto.adam, es, om, omg. Python: ADAM, AutoADAM, ES, OM, OMG. |
| Bounds interaction | Constraints depend on the bounds= argument — see Bounds. |
Persistence parameter controls how reactive the model is to the recently made errors. In ETS terminology, this is the vector that contains smoothing parameters denoted with the greek letters: alpha, beta, gamma (and delta for explanatory variables).
# R: Provide fixed persistence values
model <- adam(y, model="AAA", lags=12,
persistence=list(alpha=0.3, beta=0.1, gamma=0.05))# Python: Provide fixed persistence values
model = ADAM(model="AAA", lags=12,
persistence={"alpha": 0.3, "beta": 0.1, "gamma": 0.05})| Parameter | Greek | Component | Typical Range | Effect |
|---|---|---|---|---|
alpha |
α | Level | 0 to 1 | Higher = faster adaptation to level changes |
beta |
β | Trend | 0 to α | Higher = faster adaptation to trend changes |
gamma |
γ | Seasonal | 0 to 1-α | Higher = faster adaptation to seasonal changes |
delta |
δ | Regressors | 0 to 1 | Higher = faster adaptation of regressor coefficients |
In case of several seasonal components, gamma is substituted with a vector: gamma1, gamma2 etc. In case of explanatory variables with regressors="adapt", deltas are used, one per parameter for explanatory variable.
- alpha = 0: Level never updates (constant)
- alpha = 1: Level equals last observation (random walk)
- alpha = 0.3: Moderate adaptation, balances recent and historical
Recommended approach - specify only the parameters you want to fix. If some persistence values are provided and others are missing, the missing ones will be estimated:
# R: Fix alpha and gamma, estimate beta
model <- adam(y, model="AAA", lags=12,
persistence=list(alpha=0.3, gamma=0.1))
# R: Multiple seasonal components
model <- adam(y, model="AAA", lags=c(24, 168),
persistence=list(alpha=0.2, gamma=c(0.1, 0.05)))# Python: Fix alpha and gamma
model = ADAM(model="AAA", lags=12,
persistence={"alpha": 0.3, "gamma": 0.1})When using adaptive regressors (regressors="adapt"), delta parameters control how quickly regressor parameters change:
# R: Fix persistence for level, trend, seasonal, and regressors
model <- adam(data, model="AAN", formula=y ~ x1 + x2,
regressors="adapt",
persistence=list(
alpha=0.3,
beta=0.05,
xreg=c(0.1, 0.15) # deltas for x1 and x2
))In R, persistence can be provided as an unnamed vector in the order: level, trend, seasonal(s), xreg:
# R: Vector notation for AAdA[12] model
# Order: alpha, beta, gamma
model <- adam(y, model="AAdA", lags=12, persistence=c(0.3, 0.05, 0.1))model <- adam(y, model="AAA", lags=12)
# Named vector of all persistence values
model$persistencemodel = ADAM(model="AAA", lags=12)
model.fit(y)
# Individual persistence values
model.persistence_level_ # alpha
model.persistence_trend_ # beta
model.persistence_seasonal_ # gamma (list for multiple seasonalities)The bounds parameter affects the valid range for persistence values:
| Bounds | Level (α) | Trend (β) | Seasonal (γ) |
|---|---|---|---|
"usual" |
[0, 1] | [0, α] | [0, 1-α] |
"admissible" |
Stability region | Stability region | Stability region |
"none" |
Unrestricted | Unrestricted | Unrestricted |
See Bounds for details on stability conditions.
For models with multiple seasonal components, gamma can be a vector:
# R: Hourly data with daily (24) and weekly (168) seasonality
model <- adam(y, model="AAA", lags=c(24, 168),
persistence=list(
alpha=0.2,
beta=0.05,
gamma=c(0.15, 0.05) # daily gamma, weekly gamma
))# Python: same thing
model = ADAM(model="AAA", lags=[24, 168],
persistence={"alpha": 0.2, "beta": 0.05, "gamma": [0.15, 0.05]})Persistence vector is designed in all smooth functions, but defined explicitly only in ADAM and ES. For ARIMA models, it is formed as a sum of ARI and MA polynomials for specific lags. In CES, it is a linear combination of the elements of the complex smoothing parameters. In GUM, it is a vector, containing parameters that adapt each component of the model.
- Let the model estimate: In most cases, let the optimiser find the best persistence values
-
Use bounds: Use
bounds="usual"orbounds="admissible"to keep parameters reasonable - Fix for stability: If estimation produces extreme values, consider fixing some parameters
- Domain knowledge: Use fixed values when you have prior knowledge about adaptation speed
Also, consider using alternative Loss-Functions to regularise smoothing parameters. e.g. multistep losses or RIDGE/LASSO directly.
Parameter for ADAM or ES. The damping parameter phi (φ) controls trend dampening in models with "d" trend (Ad, Md):
# R: Fixed damping parameter
model <- adam(y, model="AAdA", lags=12, phi=0.95)
# R: Estimate phi (default when not specified)
model <- adam(y, model="AAdA", lags=12, phi=NULL)# Python: Fixed damping parameter
model = ADAM(model="AAdA", lags=12, phi=0.95)- phi = 1: No damping (equivalent to non-damped trend)
- phi = 0.95: Moderate damping
- phi = 0.8: Strong damping (trend quickly approaches zero)
- phi = 0: Trend component switched off
Typical range: 0.8 to 0.99
- Svetunkov, I. (2023). Forecasting and Analytics with the Augmented Dynamic Adaptive Model (ADAM). Chapters 4-7
- Hyndman, R.J., et al. (2008). Forecasting with Exponential Smoothing: The State Space Approach. Springer.
- ADAM - Main ADAM function
- Bounds - Parameter bounds and stability
- Initialisation - Initial state values
- Coefficients-and-Parameters - Extracting model parameters