Why Multiplicative Seasonality Matters
Seasonal variation can grow as a series grows. A hypothetical portfolio might have larger absolute swings in quarterly claim counts when its overall volume is higher, while the busy quarter remains about 20% above the underlying level. In that setting, a fixed seasonal adjustment does not capture the pattern well: the seasonal effect is better described as a proportional factor.
Multiplicative Holt-Winters smoothing tracks three changing components: a level, a trend, and a seasonal factor. Each observation is first interpreted relative to its seasonal factor when updating the level; the seasonal factor is then updated relative to the level. The method is designed for positive data and a stable seasonal cycle.
The level update blends the deseasonalized observation with the previous level projected forward by one trend step. The trend update smooths the change in level. The seasonal update blends the observed ratio \(y_t/l_t\) with the seasonal factor from the same phase of the previous cycle.
A seasonal factor of 1 represents no seasonal adjustment; a factor of 1.20 means the observation for that seasonal position is about 20% above the underlying level, and a factor of 0.80 means it is about 20% below. Seasonal factors are relative multipliers, not dollar amounts or fixed additions. They are commonly represented on a scale whose average over a cycle is 1.
How the Updates Follow from the Multiplicative Pattern
The central modeling idea is that the observation is approximately the underlying level-and-trend value multiplied by a seasonal factor. For time \(t\), the previous level projected forward is \(l_{t-1}+b_{t-1}\), and the seasonal factor for the same position in the previous cycle is \(s_{t-m}\). Thus the component representation is approximately
Dividing by \(s_{t-m}\) removes that period's proportional seasonal effect, giving a value on the underlying level scale. The level update is an exponentially weighted blend of this deseasonalized value and the previous projected level. The weights \(\alpha\) and \(1-\alpha\) sum to 1, so the update lies between the two values when \(0\leq\alpha\leq1\).
After updating the level, the ratio \(y_t/l_t\) estimates the seasonal factor: it compares the observation with the current underlying level. Blending that ratio with the previous factor for the same seasonal position gives the seasonal update. This explains why the level equation divides by a seasonal factor, while the seasonal equation divides the observation by the updated level.
The equations are smoothing recursions, not a guarantee that every observation equals the component product exactly. Their interpretation depends on a positive series, a meaningful fixed seasonal period, and seasonal variation that is reasonably proportional to the series level. They are not suitable without modification for zero or negative observations, because ratios and multiplicative factors are then undefined or inappropriate.
Worked Example: Updating All Three Components
A hypothetical quarterly measure has period \(m=4\). Before the current quarter, the level is \(l_{t-1}=100\), the trend is \(b_{t-1}=4\), and the seasonal factor for the current quarter is \(s_{t-4}=1.20\). The observed value is \(y_t=126\). Use \(\alpha=0.50\), \(\beta=0.25\), and \(\gamma=0.40\) to update the level, trend, and seasonal factor.
Method and deseasonalized observation. First divide the observation by its seasonal factor:
The previous projected level is \(l_{t-1}+b_{t-1}=100+4=104\). Therefore,
Trend update. The level change is \(l_t-l_{t-1}=104.5-100=4.5\). Hence,
Seasonal update. The observation-to-level ratio is \(126/104.5\approx1.205742\). Updating the previous factor gives
Check. The level, 104.5, is between the deseasonalized observation 105 and projected level 104. The updated seasonal factor is slightly above 1.20 because the observed ratio is slightly above 1.20. The mistake to avoid is applying the seasonal factor in the wrong direction: multiplying 126 by 1.20 would increase the observation instead of removing its seasonal effect.
Forecasting with Seasonal Factors
Once the components have been updated through time \(t\), the level-and-trend part of the forecast \(h\) periods ahead is \(l_t+h b_t\). The seasonal factor must match the seasonal position of the forecast period. For the next \(m\) periods, use the seasonal factors in their chronological order after time \(t\); when the forecast passes another complete cycle, repeat that sequence.
Here \(r\) identifies the position within the next cycle, from 1 to \(m\). This formula assumes that the seasonal pattern repeats, while the level and trend continue forward linearly. It produces a point forecast; it does not by itself describe forecast uncertainty.
Worked Example: Matching Factors to Six Forecast Horizons
A quarterly model has just been updated after the fourth quarter. Its level is \(l_t=120\), its trend is \(b_t=5\) per quarter, and the seasonal factors for the next four quarters are 0.80, 1.00, 1.20, and 1.00, in that order. Find the forecasts for the next six quarters.
The underlying level-and-trend values for horizons 1 through 6 are \(120+5h\): 125, 130, 135, 140, 145, and 150. The factors for the first four horizons are 0.80, 1.00, 1.20, and 1.00; the next two repeat 0.80 and 1.00.
Check. Each forecast equals its projected underlying value multiplied by the factor for its quarter. The fifth-quarter forecast uses the first seasonal factor again, not the fourth-quarter factor. The factors are proportional: the third-quarter forecast is 20% above its underlying value of 135, giving 162.
Updating Through Consecutive Periods
Each new observation updates the components and becomes part of the seasonal history. When using the recursions repeatedly, keep track of which factor corresponds to each seasonal position. A factor updated in one period is used again when that same position returns one cycle later; it is not automatically used for the immediately following period.
Worked Example: Two Updates and a Forecast
A hypothetical semiannual series has \(m=2\), with \(l_{t-1}=100\), \(b_{t-1}=10\), and seasonal factors \(s_{t-2}=0.80\) for the current season and \(s_{t-1}=1.20\) for the other season. The observations are \(y_t=96\) and \(y_{t+1}=153\). Use \(\alpha=0.50\), \(\beta=0.50\), and \(\gamma=0.50\). Update through \(t+1\), then forecast \(t+2\).
Update at \(t\). Deseasonalize the observation: \(96/0.80=120\). The projected level is \(100+10=110\), so
The trend becomes \(b_t=0.50(115-100)+0.50(10)=7.5+5=12.5\). The updated seasonal factor for this season is
Update at \(t+1\). The previous projected level is \(115+12.5=127.5\). The applicable previous seasonal factor is 1.20, so the deseasonalized observation is \(153/1.20=127.5\). Thus \(l_{t+1}=0.50(127.5)+0.50(127.5)=127.5\). The trend is \(b_{t+1}=0.50(127.5-115)+0.50(12.5)=6.25+6.25=12.5\). Since \(153/127.5=1.20\), the seasonal update is \(s_{t+1}=0.50(1.20)+0.50(1.20)=1.20\).
Forecast \(t+2\). This is the same seasonal position as \(t\), so use \(s_t\), not \(s_{t+1}\). The projected underlying value is \(127.5+12.5=140\). Therefore,
Check. The observation at \(t+1\) equals its projected level multiplied by its seasonal factor: \(127.5(1.20)=153\). At \(t+2\), the factor below 1 reduces the projected underlying value. The common mistake is to use the immediately preceding seasonal factor, 1.20, for every forecast; the seasonal position must be matched to the forecast period.
Interpretation, Limits, and Exam Traps
The seasonal factor is a proportional adjustment to the level-and-trend forecast. If the underlying value is 200 and a seasonal factor is 1.15, the corresponding forecast is \(200(1.15)=230\), or 15% above the underlying value. If the underlying value later becomes 400 with the same factor, the seasonal increase is 60 rather than 30. This scaling behavior is the defining distinction from a fixed seasonal amount.
Multiplicative Holt-Winters is most useful when the series is positive and seasonal swings tend to increase or decrease in proportion to its level. It is less appropriate when the seasonal amplitude is roughly constant in the original units, when the seasonal cycle changes substantially, or when observations include zero or negative values. The model's forecasts also rely on the trend continuing linearly over the forecast horizons; a rapidly changing trend can make that assumption poor.
Keep these checks in mind when applying the equations:
- Deseasonalize by division. For the level update, use \(y_t/s_{t-m}\), not \(y_t s_{t-m}\).
- Update seasonality using the updated level. The ratio is \(y_t/l_t\), not \(y_t/l_{t-1}\).
- Keep the trend in the same time unit. If observations are quarterly, \(b_t\) is a change per quarter and the \(h\)-step projection uses \(h b_t\).
- Match the factor to the seasonal position. A forecast beyond one complete cycle repeats the factor sequence in order.
- Interpret the factor relative to 1. A factor of 0.90 indicates a 10% reduction from the underlying value, not a subtraction of 0.90 units.
These checks make the method's multiplicative structure visible at every step: remove the seasonal factor to update the level, estimate the factor from an observation-to-level ratio, then multiply the projected level by the correctly aligned seasonal factor to forecast.
Check Your Understanding
For each problem, keep the seasonal position and the units of the trend explicit.
- A quarterly series has \(y_t=180\), \(s_{t-4}=1.50\), \(l_{t-1}=110\), and \(b_{t-1}=10\). With \(\alpha=0.25\), \(\beta=0.40\), and \(\gamma=0.50\), calculate the updated level, trend, and seasonal factor. (Answer: \(l_t=120\), \(b_t=10\), \(s_t=1.50\).)
- A model just updated after season 2 has level 80 and trend 3 per period. The next four seasonal factors, for seasons 3, 4, 1, and 2, are 1.10, 0.90, 1.20, and 1.00. Find the next two forecasts. (Answer: 91.3 and 77.4.)
- Given \(y_t=93\), \(s_{t-m}=0.90\), \(l_{t-1}=100\), \(b_{t-1}=5\), and \(\alpha=0.50\), calculate the updated level. (Answer: \(l_t\approx104.1667\).)
- An observation is 84, the updated level is 70, the old seasonal factor for that position is 1.10, and \(\gamma=0.30\). Calculate the new seasonal factor. (Answer: \(s_t=1.13\).)
- For a period-3 series, \(y_t=110\), \(s_{t-3}=1.00\), \(l_{t-1}=90\), and \(b_{t-1}=6\). Use \(\alpha=0.50\), \(\beta=0.25\), and \(\gamma=0.40\) to update all three components. If the factor for the next period is 0.90, also forecast one period ahead. (Answer: \(l_t=103\), \(b_t=7.75\), \(s_t\approx1.027184\), and the next forecast is 99.675.)