Learn

Plate 14 of 19 · Business analytics

Seasonal forecasting with Holt-Winters

About 7 minutes to read, then three questions that count toward your mastery.

A seasonal series has a level, a trend and a pattern that repeats every year. Holt-Winters tracks all three, updating each as new figures arrive, and a fair test tells you whether to trust it.

The idea

Split the series into three parts. The level is where sales are now, the trend is how much they grow each period, and the seasonal part is the repeating pattern within the year, such as a December peak. A forecast adds them up: level, plus trend for each period ahead, plus that period’s seasonal effect.

After each new figure, every part moves part of the way toward what the surprise suggests. Three smoothing weights between 0 and 1 set how far: α for the level, β for the trend, γ for the season. High weights react fast but chase noise; low weights are steady but slow to notice change. If the seasonal swings grow as sales grow, they are multiplicative: model the logarithm, where they become constant.

Before trusting a forecast, hold back the last season, forecast it from the rest, and compare the errors with seasonal naive: simply repeating last season. That baseline is free and often hard to beat; a model has to earn its complexity against it.

The formula

ŷt = ℓt−1 + bt−1 + st−m, et = yt − ŷt, ℓt = ℓt−1 + bt−1 + αet, bt = bt−1 + αβet, st = st−m + γet

ℓ, b, s
level, trend per period, and seasonal effect
m
the season length: 4 for quarters, 12 for months
et
the surprise: actual minus forecast
α, β, γ
smoothing weights for level, trend and season, chosen to minimise one-step errors

Forecasting h periods ahead: ℓ + h × b + the seasonal effect for that period. The 95% interval widens with h.

A worked example

Plate 14

A shop’s quarterly sales ($k) end last year with level 200, trend +5 a quarter and seasonal effects of −30, −10, 0 and +40 for quarters 1–4. The weights are α = 0.3, β = 0.1, γ = 0.2. First-quarter sales come in at 181.

  1. The forecast was 200 + 5 − 30 = 175, so the surprise is 181 − 175 = +6.
  2. Update: level 200 + 5 + 0.3 × 6 = 206.8; trend 5 + 0.3 × 0.1 × 6 = 5.18; the first quarter’s seasonal effect −30 + 0.2 × 6 = −28.8.
  3. Next quarter: 206.8 + 5.18 − 10 = 202.0.
  4. The same quarter next year, four quarters ahead: 206.8 + 4 × 5.18 − 28.8 = 198.7.

One good quarter nudged all three parts up a little, not all the way. Over many quarters, those small corrections are how the model learns the business’s rhythm.

Try it

The shop above. The forecast for the first quarter was 175; set what actually happened and how strongly the model reacts. The trend weight β stays at 0.1.

$181k
0.30
0.20

Watch one update

$202.0kforecast for next quarter
Surprise this quarter
+$6k
New level
$206.8k
First quarter’s seasonal effect
−$28.8k
Same quarter next year
$198.7k

A moderate weight: the model moves part of the way toward each surprise.

The common mistake

Using additive seasonality when the swings grow with the level

December runs 40% above a level of 100, so +40. When the level reaches 200, a multiplicative season predicts 200 × 1.4 = 280; an additive one still adds 40, forecasting 240 and missing by 14%. If the peaks grow as sales grow, model the logarithm (the forecasting tool tries both and keeps the better fit).

Remember

  • Level, trend and season: the seasonal component carries the repeating pattern within the year.
  • Swings that grow with the level are multiplicative; on a log scale they become constant.
  • Hold back the last season and beat repeating last season before trusting a forecast.

Check yourself

Three questions from the Learn room’s bank. Your answers update your mastery of this skill, the same as in Practise.

Use it on real numbers

Open Forecast, in Business analytics › Forecasting and try the idea on your own numbers.