ETS stands for Error, Trend, and Seasonality. It is an exponential smoothing model that decomposes a time series into three components and model each one. The letters represent the type of each component:
Seasonality (S): None (N), Additive (A), or Multiplicative (M)
Smoothing parameters control how much weight each recent vs. older observation is given. The parameters are between 0 and 1. A value close 1 means recent data is weighted more heavily and past data is weighted less. In contrast, a value close to 0 means older values have higher weight, and recent ones have less weight.
Alpha (Level Smoothing)
Alpha (\(\alpha\)) controls how quickly the baseline value of the series adapts to new data. A value close to 1 means the model reacts fast to every new data point, while a value close to 0 means the model is very stable and slow to update.
Beta (Trend Smoothing)
Beta (\(\beta\)) controls how quickly the estimated trend (the slope) updates over time. It only exists when there is a trend component (T = A or Ad). A high \(\beta\) means that the slope adjust quickly, so the model sees trend changes fast. A low \(\beta\) means that the slope changes slowly, which is useful when we believe the trend is stable and will not flip around.
Gamma (Seasonal Smoothing)
Gamma (\(\gamma\)) controls how quickly the seasonal factors update. It only exists when there is a seasonal component (S = A or M). A high \(\gamma\) means that seasonal patterns adapt quickly from year to year, and a low \(\gamma\) means that seasonal patterns are assumed to be very stable across the years.
Phi (Damping Parameter)
Phi (\(\phi\)) is the damping parameter for the trend. It only exists when you have a damped trend (T = Ad). Its range is typically constrained between 0.8 and 0.98. It tells us how quickly the trend “fades out” for our forecast in the future. Without damping, a trend projects forever at the same slope, which is often unrealistic.
Visualize 2 Time Series
library(fpp3)
Registered S3 method overwritten by 'tsibble':
method from
as_tibble.grouped_df dplyr
# A tsibble: 6 x 2 [1M]
Month retail_sales
<mth> <dbl>
1 2010 Jan 302325
2 2010 Feb 302310
3 2010 Mar 309525
4 2010 Apr 312143
5 2010 May 309158
6 2010 Jun 308588
head(indpro_ts)
# A tsibble: 6 x 2 [1M]
Month indpro
<mth> <dbl>
1 2010 Jan 89.3
2 2010 Feb 89.7
3 2010 Mar 90.3
4 2010 Apr 90.6
5 2010 May 91.8
6 2010 Jun 92.0
tail(retail_ts)
# A tsibble: 6 x 2 [1M]
Month retail_sales
<mth> <dbl>
1 2025 Jul 628747
2 2025 Aug 632149
3 2025 Sep 632395
4 2025 Oct 631346
5 2025 Nov 634711
6 2025 Dec 634738
tail(indpro_ts)
# A tsibble: 6 x 2 [1M]
Month indpro
<mth> <dbl>
1 2025 Aug 102.
2 2025 Sep 102.
3 2025 Oct 101.
4 2025 Nov 101.
5 2025 Dec 102.
6 2026 Jan 102.
The retail sales series shows a consistent upward trend from 2010 onwards, with only one major disruption from the COVID-19 shock in early 2020. The level recovers quickly and continues climbing.
Based on this, I expect alpha to be moderate (around 0.3 to 0.5), since the level evolves predictably. I expect Beta to be close to zero because the trend is remarkably stable over 15 years and rarely changes direction. I don’t think there will be a value for Gamma because from eyeballing it, it does not seem that there is sessonality. However, I know that retail sales are higher before christmas time, so there could be a value for Gamma, which could be around 0.1. I do not expect a value for Phi because it seems that the time series has no damping.
U.S. Industrial Production Index
The industrial production series also trends upward from 2010, but the pattern is less clean. The trend stalls around 2015, and the series is visibly more volatile with greater short-term noise compared to retail sales. The COVID crash in 2020 is sharp and severe, but recovery is fast.
I expect alpha to be around 0.5 to 0.8, as the model needs to adapt the level estimate more aggressively to track sudden changes. I do not see a strong trend, so I expect no Beta. There might be a value for gamma, but I don’t think the seasonality is strong enough.
ggsave(filename ="ets_series_plots.png",plot = p3,width =8,height =6,dpi =300, # 300 DPI is standard for academic workdevice ="png")ggsave(filename ="ets_series_plots2.png",plot = p4,width =8,height =6,dpi =300, # 300 DPI is standard for academic workdevice ="png")
U.S. Retail & Food Services Sales - ETS(M, A, N)
R selected an ETS(M, A, N) model for retail sales, which stands for multiplicative errors, an additive trend, and no seasonality. The multiplicative error makes sense here because the series grows steadily over time, meaning the size of random fluctuations tends to scale with the level of the series rather than staying constant. The additive trend captures the consistent upward growth visible in the plot. Seasonality was excluded.
Alpha = 0.67: Higher than my expected range of 0.3 to 0.5. I believe the Covid shock forced the model to weight recent observations more heavily to adapt quickly to sudden change
Beta = 0.0001: Confirmed my intuition. The trend is remarkably stable over 15 years and barely changes direction, so the slope almost never needs updating.
Gamma = NA: Seasonal Patterns seem to be not strong enough for model
Phi = NA: There is no damping applied to the model
U.S. Industrial Production Index - ETS(A, N, N)
R selected an ETS(A, N, N) model for industrial production, meaning additive errors, no trend, and no seasonality. This is the simplest possible ETS specification, equivalent to simple exponential smoothing. The additive error structure is appropriate because the series does not grow dramatically in scale over the sample period. Both trend and seasonality were excluded.
Alpha = 0.9999: Alpha near 1 means the model almost entirely ignores past observations and uses only the most recent value, which reflects the high volatility and structural shifts in the series.
Beta = NA: Model detected no trend that was important for forecast.