When Additive Holt-Winters Smoothing Is Appropriate
A seasonal series may have a changing underlying level and trend while its seasonal pattern stays similar in absolute size. For example, hypothetical quarterly demand might rise over time, while each fourth-quarter value remains about 12 units above the underlying level. Additive Holt-Winters smoothing represents these features separately: a level, a trend, and a seasonal component.
The method is useful when seasonal movements are approximately constant in size rather than growing in proportion to the series level. It is a recursive forecasting method: each new observation updates the states used to describe the series, and those states produce forecasts. The calculations below use regularly spaced observations and a fixed seasonal period.
Here \(y_t\) is the observation at time \(t\). The seasonal state \(s_{t-m}\) is the estimate for the same season in the previous cycle; for monthly data with \(m=12\), it is the estimate for the same month one year earlier. Seasonal states are additive adjustments, in the units of the observations. A positive state raises the fitted value, and a negative state lowers it.
The Update Equations
At time \(t\), first calculate the forecast made just before observing \(y_t\). Then use the new observation to update the three states. The updates are:
The level update first removes the previous estimate for the current season from \(y_t\). It then combines that deseasonalized observation with the predicted level \(l_{t-1}+b_{t-1}\). The trend update smooths the change in level, \(l_t-l_{t-1}\), together with the previous trend. Finally, the seasonal update compares the observation with the newly updated level and smooths that seasonal estimate with the previous estimate for the same season.
The equations are applied in this order because the trend update uses \(l_t\), and the seasonal update also uses \(l_t\). Substituting \(l_{t-1}\) for \(l_t\) in either equation changes the method. The smoothing parameters control responsiveness: a larger parameter gives more weight to the newest corresponding information, while a smaller one retains more of the previous state.
Why the Level Update Uses the Forecast Error
The level equation can also be expressed as an adjustment to the forecast made before observing \(y_t\). Let the forecast error be \(e_t=y_t-\hat{y}_{t\mid t-1}\). Since \(\hat{y}_{t\mid t-1}=l_{t-1}+b_{t-1}+s_{t-m}\), the observation after removing its seasonal component satisfies \(y_t-s_{t-m}=l_{t-1}+b_{t-1}+e_t\). Substituting this expression into the level update gives:
Thus the updated level equals the level predicted for time \(t\), adjusted by \(\alpha\) times the forecast error. A positive error raises the level; a negative error lowers it. This identity is also a useful check on a calculation. It does not replace the trend and seasonal updates, which still use their own equations.
These forecasts extend the current trend line and add the relevant seasonal component. They are point forecasts produced from the states; the recursions themselves do not require a particular probability distribution for the observations. A separate stochastic model would be needed to make distributional claims about forecast errors or prediction intervals.
Worked Example: Updating a Two-Season Series
A hypothetical series has seasonal period \(m=2\). Immediately before observing \(y_t=45\), its states are \(l_{t-1}=40\), \(b_{t-1}=2\), \(s_{t-2}=1\), and \(s_{t-1}=-1\). Use \(\alpha=0.5\), \(\beta=0.25\), and \(\gamma=0.4\) to find the pre-observation forecast, the updated states, and the forecast for \(t+1\). This is a smoothing calculation; no probability distribution is assumed.
Method. Use the seasonal state for the current season, \(s_{t-2}=1\), in the forecast and state updates. The pre-observation forecast is \(\hat{y}_{t\mid t-1}=40+2+1=43\). Thus the forecast error is \(45-43=2\).
Level. Deseasonalize \(y_t\) by subtracting 1, and combine that result with the predicted level \(40+2=42\): \(l_t=0.5(45-1)+0.5(40+2)=0.5(44)+0.5(42)=22+21=43\).
Trend. The change in level is \(43-40=3\), so \(b_t=0.25(43-40)+0.75(2)=0.75+1.5=2.25\).
Seasonal state. Use the new level \(l_t=43\): \(s_t=0.4(45-43)+0.6(1)=0.8+0.6=1.4\).
Next forecast and check. The next season uses \(s_{t-1}=-1\), not the newly updated current-season state \(s_t\). Therefore \(\hat{y}_{t+1\mid t}=43+2.25-1=44.25\). The level identity also checks: \(40+2+0.5(2)=43\). The updated states and next forecast are \(l_t=43\), \(b_t=2.25\), \(s_t=1.4\), and \(\hat{y}_{t+1\mid t}=44.25\). A common mistake is to use the next season’s seasonal state in the current-period update or to use the current season’s state in the next forecast.
Worked Example: Updating Monthly States With a Negative Trend
A hypothetical monthly series has \(m=12\), with \(l_{t-1}=200\), \(b_{t-1}=-4\), \(s_{t-12}=10\), and \(s_{t-11}=-6\). The new observation is \(y_t=202\). Use \(\alpha=0.2\), \(\beta=0.5\), and \(\gamma=0.25\). Find the pre-observation forecast, each updated state, and the next forecast. No probability distribution is specified or needed for this recursion.
Pre-observation forecast. The predicted level and trend sum to \(200-4=196\). Add the seasonal state for the current month: \(\hat{y}_{t\mid t-1}=200-4+10=206\). The forecast error is \(202-206=-4\).
Level. The deseasonalized observation is \(202-10=192\), and the predicted level is 196: \(l_t=0.2(192)+0.8(196)=38.4+156.8=195.2\).
Trend. The change in level is \(195.2-200=-4.8\): \(b_t=0.5(-4.8)+0.5(-4)=-2.4-2=-4.4\).
Seasonal state. The observation minus the updated level is \(202-195.2=6.8\): \(s_t=0.25(6.8)+0.75(10)=1.7+7.5=9.2\).
Next forecast and check. Month \(t+1\) uses \(s_{t-11}=-6\): \(\hat{y}_{t+1\mid t}=195.2-4.4-6=184.8\). The level identity gives \(200-4+0.2(-4)=195.2\), agreeing with the direct update. The completed results are \(\hat{y}_{t\mid t-1}=206\), \(l_t=195.2\), \(b_t=-4.4\), \(s_t=9.2\), and \(\hat{y}_{t+1\mid t}=184.8\). The negative trend and negative next-month seasonal state both lower the forecast. One common error is to use \(s_{t-12}=10\) again for the next month.
Worked Example: A Quarterly Update and Several Seasonal Forecasts
A hypothetical quarterly service series has \(m=4\), \(l_{t-1}=50\), \(b_{t-1}=2\), \(s_{t-4}=-6\), and the next three seasonal states are \(s_{t-3}=2\), \(s_{t-2}=-1\), and \(s_{t-1}=4\). The new observation is \(y_t=61\). With \(\alpha=0.3\), \(\beta=0.2\), and \(\gamma=0.5\), calculate the updated states and forecasts for the next three quarters. The method is deterministic smoothing here; no distributional assumption is being made.
Current-period forecast. The predicted level is \(50+2=52\). Add the current-season state: \(\hat{y}_{t\mid t-1}=52-6=46\). The error is \(61-46=15\).
Level. The deseasonalized observation is \(61-(-6)=67\): \(l_t=0.3(67)+0.7(52)=20.1+36.4=56.5\).
Trend. The level change is \(56.5-50=6.5\): \(b_t=0.2(6.5)+0.8(2)=1.3+1.6=2.9\).
Seasonal state. The observation minus the updated level is \(61-56.5=4.5\): \(s_t=0.5(4.5)+0.5(-6)=2.25-3=-0.75\).
Forecasts and check. The baseline \(l_t+b_t\) is \(56.5+2.9=59.4\). The next quarter uses \(s_{t-3}=2\), giving \(59.4+2=61.4\). The quarter after that uses \(s_{t-2}=-1\), and has trend extended by two periods: \(56.5+2(2.9)-1=56.5+5.8-1=61.3\). The third forecast uses \(s_{t-1}=4\): \(56.5+3(2.9)+4=56.5+8.7+4=69.2\). The level identity checks: \(50+2+0.3(15)=52+4.5=56.5\). A common mistake is to add the same seasonal state to every forecast; the seasonal adjustment changes with the quarter being forecast.
Assumptions, Interpretation, and Common Traps
The additive method is most suitable when the size of seasonal rises and falls stays roughly constant as the series level changes. The seasonal adjustment is measured in the same units as \(y_t\), so a seasonal state of 8 means an addition of about 8 units to the underlying level and trend for that season. This interpretation would be inappropriate if the seasonal effect instead grew in proportion to the series level.
The recursions require a consistent time interval and a seasonal period \(m\) that matches the cycle. The states supplied at the start must correspond to the correct times and seasons. How to estimate initial seasonal states is a separate task; the calculations here assume the starting states are already available. The smoothing parameters are typically chosen between 0 and 1, inclusive. Their values alone do not establish that the model fits well; the seasonal pattern and forecast errors should also be considered.
Seasonal states are often interpreted as deviations around zero over a complete cycle. This centering makes the level and seasonal effects easier to distinguish: otherwise, a constant amount could be shifted from every seasonal state into the level without changing fitted values. In a recursive calculation, use the supplied states as given; do not silently recenter them during an update.
| Calculation | Seasonal state to use | Reason |
|---|---|---|
| Forecast for observation \(y_t\) | \(s_{t-m}\) | It represents the season occurring at time \(t\). |
| Level update at \(t\) | \(s_{t-m}\) | Remove the current season’s effect from \(y_t\). |
| Seasonal update at \(t\) | \(s_{t-m}\) | Blend the new estimate with the prior estimate for that same season. |
| Forecast for \(t+1\) | \(s_{t-m+1}\) | The next period is in the next seasonal position. |
Three checks are especially useful under time pressure. First, the level update should use the previous season’s state to deseasonalize the observation. Second, the trend update must use the newly updated level. Third, each forecast must use the seasonal state for its target period. The level-error identity provides an additional arithmetic check: \(l_t=l_{t-1}+b_{t-1}+\alpha e_t\). These checks address frequent errors without changing the underlying method.
Check Your Understanding
For each problem, keep the seasonal indices attached to their stated periods. The calculations use point smoothing only; no probability distribution is assumed.
- A quarterly series has \(m=4\), \(l_{t-1}=80\), \(b_{t-1}=3\), \(s_{t-4}=-5\), and \(s_{t-3}=1\). The observation is \(y_t=90\), with \(\alpha=0.4\), \(\beta=0.2\), and \(\gamma=0.5\). Find the pre-observation forecast, all three updated states, and the forecast for \(t+1\). (Answer: \(\hat{y}_{t\mid t-1}=78,\ l_t=87.8,\ b_t=3.96,\ s_t=-1.4,\ \hat{y}_{t+1\mid t}=92.76\).)
- A series with \(m=3\) has \(l_{t-1}=120\), \(b_{t-1}=-2\), \(s_{t-3}=8\), and \(s_{t-2}=-3\). If \(y_t=124\), \(\alpha=0.25\), \(\beta=0.5\), and \(\gamma=0.2\), find the pre-observation forecast, updated states, and next forecast. (Answer: \(\hat{y}_{t\mid t-1}=126,\ l_t=117.5,\ b_t=-2.25,\ s_t=7.7,\ \hat{y}_{t+1\mid t}=112.25\).)
- For \(m=2\), suppose \(l_{t-1}=30\), \(b_{t-1}=1.5\), \(s_{t-2}=4\), and \(y_t=40\), with \(\alpha=0.5\). Find the forecast error and updated level in two ways: from the level equation and from the forecast-error identity. (Answer: \(\hat{y}_{t\mid t-1}=35.5,\ e_t=4.5,\ l_t=33.75\) by either calculation.)
- At time \(t\), a quarterly model has \(m=4\), \(l_t=70\), \(b_t=1.5\), and seasonal states \(s_{t-3}=-2\), \(s_{t-2}=1\), \(s_{t-1}=4\), and \(s_t=-3\). Find forecasts for \(t+1\) through \(t+4\). (Answer: \(69.5,\ 74,\ 78.5,\ 73\), respectively.)
- A hypothetical seasonal series has swings that remain near 10 units above or below its local trend as the level rises. Should its seasonal adjustments be additive or proportional to the level? Give the interpretation of a seasonal state of \(-10\). (Answer: Additive; a state of \(-10\) lowers the forecast by about 10 units for that season.)