Skip to content

Persistence

Ivan Svetunkov edited this page Apr 10, 2026 · 5 revisions

Persistence (Smoothing Parameters) and phi

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.

Overview

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).

The persistence Parameter

Basic Usage

# 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})

Smoothing Parameters

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.

Interpretation

  • alpha = 0: Level never updates (constant)
  • alpha = 1: Level equals last observation (random walk)
  • alpha = 0.3: Moderate adaptation, balances recent and historical

Providing Persistence Values

As a Named List/Dict

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})

With Explanatory Variables

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
              ))

As a Vector

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))

Accessing Persistence Values

R

model <- adam(y, model="AAA", lags=12)

# Named vector of all persistence values
model$persistence

Python

model = 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)

Relationship to Bounds

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.

Multiple Seasonalities

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]})

Other functions

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.

Best Practices

  1. Let the model estimate: In most cases, let the optimiser find the best persistence values
  2. Use bounds: Use bounds="usual" or bounds="admissible" to keep parameters reasonable
  3. Fix for stability: If estimation produces extreme values, consider fixing some parameters
  4. 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.

The phi Parameter

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 Interpretation

  • 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

References

  • 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.

See Also

Clone this wiki locally