ETS Framework
Error, Trend, Seasonal forecasting framework
What You'll Learn
- ETS framework components
- Choosing the right ETS model
- Automatic model selection
- Forecasting with ETS
- Model evaluation
What is ETS?
ETS = Error, Trend, Seasonal
Framework for exponential smoothing: Systematic way to choose smoothing method
Three components:
- E: Error type (Additive or Multiplicative)
- T: Trend type (None, Additive, or Damped)
- S: Seasonal type (None, Additive, or Multiplicative)
Total models: 30 possible combinations!
Error Component (E)
Additive error (A): Y_t = (Level + Trend + Seasonal) + ε_t Errors are constant size
Multiplicative error (M): Y_t = (Level + Trend + Seasonal) × (1 + ε_t) Errors proportional to level
Choosing:
- A: For most data
- M: When variance grows with level
Trend Component (T)
None (N): No trend, level is constant ETS(A,N,N) = Simple exponential smoothing
Additive (A): Linear trend ETS(A,A,N) = Holt's linear method
Additive damped (Ad): Trend that flattens out over time ETS(A,Ad,N) = Damped trend method
Why damped? Trends rarely continue forever Damping makes long-term forecasts more realistic
Seasonal Component (S)
None (N): No seasonality
Additive (A): Seasonal effect is constant Sales +$10K every December
Multiplicative (M): Seasonal effect proportional to level Sales ×1.2 every December
Choosing:
- N: No seasonal pattern
- A: Constant seasonal swings
- M: Seasonal swings grow with level
Popular ETS Models
ETS(A,N,N): Simple exponential smoothing No trend, no seasonality
ETS(A,A,N): Holt's linear trend Trend but no seasonality
ETS(A,Ad,N): Damped trend Trend flattens out
ETS(A,N,A): Additive seasonality No trend, seasonal
ETS(A,A,A): Additive Holt-Winters Trend + additive seasonality
ETS(A,A,M): Multiplicative Holt-Winters Trend + multiplicative seasonality
State Space Models
ETS uses state space formulation:
Components:
- Level (ℓ_t)
- Trend (b_t)
- Seasonal (s_t)
Equations update each component: Based on new observations
Example ETS(A,A,A): ℓ_t = α(Y_t - s_{t-m}) + (1-α)(ℓ_{t-1} + b_{t-1}) b_t = β(ℓ_t - ℓ_{t-1}) + (1-β)b_{t-1} s_t = γ(Y_t - ℓ_t) + (1-γ)s_{t-m}
Parameters: α, β, γ (smoothing constants)
Automatic Model Selection
Too many models to choose manually!
Solution: Automatic selection via AIC/BIC
Process:
- Fit all 30 ETS models
- Calculate AIC for each
- Choose model with lowest AIC
AIC (Akaike Information Criterion): Balances fit and complexity Lower is better!
Software does this automatically: forecast::ets() in R statsmodels in Python
Forecasting with ETS
Once model selected:
Point forecasts: Use equations to project forward
Prediction intervals: Analytical formulas available (Unlike many other methods!)
Example: ETS(A,A,A) for monthly sales
Forecast for next 12 months:
- Incorporates trend
- Adds seasonal pattern
- Provides 80% and 95% intervals
Model Diagnostics
Check residuals:
1. No autocorrelation Ljung-Box test
2. Homoscedasticity Constant variance over time
3. Normality For accurate prediction intervals
If diagnostics fail:
- Try different error type
- Check for outliers
- Consider transformations
Advantages of ETS
1. Automatic selection Don't need to choose manually
2. Prediction intervals Analytical formulas available
3. Robust Works for many patterns
4. Interpretable Clear components
5. Fast Quick to fit and forecast
Limitations of ETS
1. Limited patterns Only 30 model types
2. No external variables Can't include predictors
3. Single seasonality Can't handle multiple seasonal periods
4. Short-term focus Best for operational forecasting
5. Assumes patterns continue No structural breaks
Choosing Between Models
No trend, no seasonality: ETS(A,N,N)
Linear trend, no seasonality: ETS(A,A,N) or ETS(A,Ad,N)
Seasonality, no trend: ETS(A,N,A) or ETS(A,N,M)
Trend + seasonality: ETS(A,A,A) or ETS(A,A,M)
Growing variance: Try multiplicative error (M)
Let software decide: Use automatic selection!
Damped Trend
Problem with linear trend: Forecasts infinity!
Solution: Damping parameter φ (0 < φ < 1)
Effect: Trend gradually flattens
Forecast: Approaches asymptote instead of growing forever
When to use:
- Long-term forecasts
- Uncertain trend continuation
- Historical trends slow down
Empirical result: Damped often outperforms linear!
Parameter Estimation
How α, β, γ are found:
Optimization: Minimize Sum of Squared Errors (SSE)
Or: Maximize likelihood
Typical values:
- α (level): 0.1 to 0.3
- β (trend): 0.05 to 0.2
- γ (seasonal): 0.05 to 0.1
Low values: More smoothing, stable forecasts
High values: Less smoothing, responsive forecasts
Prediction Intervals
Big advantage of ETS: Analytical prediction intervals!
Formula depends on model: More complex for multiplicative
Interpretation: 95% PI: [Lower, Upper] "95% confident true value in this range"
Width increases with horizon: Less certain about distant future
Use them! Communicate forecast uncertainty
Information Criteria
AIC (Akaike Information Criterion): AIC = -2×log(L) + 2k
AICc (corrected for small samples): AICc = AIC + 2k(k+1)/(n-k-1)
BIC (Bayesian Information Criterion): BIC = -2×log(L) + k×log(n)
Where:
- L = likelihood
- k = number of parameters
- n = sample size
Use: Compare models, choose lowest
Python Implementation
from statsmodels.tsa.holtwinters import ExponentialSmoothing
import pandas as pd
# Data
data = pd.Series([...]) # Your time series
# Fit ETS(A,A,A)
model = ExponentialSmoothing(
data,
trend='add',
seasonal='add',
seasonal_periods=12
)
fit = model.fit()
# Forecast
forecast = fit.forecast(steps=12)
print(forecast)
# Get prediction intervals
pred = fit.get_prediction(start=len(data), end=len(data)+11)
pred_df = pred.summary_frame()
print(pred_df[['mean', 'pi_lower', 'pi_upper']])
# Model summary
print(fit.summary())
R Implementation
library(forecast)
# Data
data <- ts(your_data, frequency=12)
# Automatic ETS selection
fit <- ets(data)
print(fit)
# Forecast
fc <- forecast(fit, h=12)
plot(fc)
# Components
autoplot(fit)
Real-World Example
Monthly airline passengers:
Pattern:
- Strong upward trend
- Yearly seasonality
- Seasonal swings growing
Best model: ETS(M,A,M)
- Multiplicative error
- Additive trend
- Multiplicative seasonality
Result: Accurate forecasts with realistic intervals
Model Selection Example
Data characteristics: Monthly retail sales, 5 years
Try models:
- ETS(A,N,A): AIC = 1450
- ETS(A,A,A): AIC = 1320
- ETS(A,Ad,A): AIC = 1315 ← Winner!
- ETS(M,A,M): AIC = 1335
Choose: ETS(A,Ad,A) - damped trend with seasonality
Common Mistakes
1. Ignoring diagnostics Always check residuals!
2. Using wrong seasonal period m=12 for monthly, m=4 for quarterly
3. Extrapolating too far ETS best for short-medium term
4. Not checking intervals Wide intervals = high uncertainty
5. Forgetting transformations Log transform can help
Comparison with Other Methods
ETS vs ARIMA:
- ETS: Easier to interpret
- ARIMA: More flexible
ETS vs Prophet:
- ETS: Traditional, proven
- Prophet: Handles holidays, events
ETS vs Machine Learning:
- ETS: Better for pure time series
- ML: Better with many predictors
Practice Exercise
Quarterly data with trend and seasonality: Q1: 100, Q2: 120, Q3: 110, Q4: 130 Q1: 105, Q2: 125, Q3: 115, Q4: 135
Questions:
- Is trend additive or multiplicative?
- Is seasonality additive or multiplicative?
- What ETS model to try first?
- Should you use damping for long forecasts?
Answers:
- Additive (linear increase)
- Additive (constant seasonal swings)
- ETS(A,A,A)
- Yes, damped more realistic long-term
When to Use ETS
Good for:
- Regular patterns
- Automatic forecasting
- Need prediction intervals
- Operational forecasting
- Smooth data
Not ideal for:
- Multiple seasonality
- Need to include predictors
- Irregular patterns
- Structural changes
- Very long-term forecasts
Next Steps
Learn about Excel Statistical Analysis!
Tip: Let ETS auto-select the model, then check if it makes sense!