212. Classical

Decompose a time series into four components that add up (or multiply) back to the original:

Two functional forms — additive and multiplicative — depending on whether the seasonal swing is constant in absolute units or proportional to the level.

212.0.1. Additive form

Use when the amplitude of seasonal swings is roughly constant over time, regardless of the level. Example: temperature (summer is  10°C above average whether the long-run average is 15°C or 25°C).

212.0.2. Multiplicative form

Use when the seasonal amplitude scales with the level. Example: retail sales (December peak is 30% above the trend, whether the trend is at $1M or $10M).

A multiplicative decomposition can always be converted to an additive one via — useful trick if your tools support only additive.

212.0.3. How to choose

Plot the series. If the seasonal swing grows with the level → multiplicative. If it stays roughly constant → additive. When unsure, try both and check which has more uniform residuals.

212.0.4. Procedure (additive case, integer period )

The classic step-by-step:

  1. Estimate trend via centered moving average of size . For even (typical with monthly data, ), use a 2-step MA: first an -MA, then a 2-MA. Result: .
  2. Detrend: .
  3. Estimate seasonal indices: average the detrended values within each seasonal slot (e.g., all Januaries, all Februaries, etc.). Adjust so the seasonal indices sum to zero (additive) or average to 1 (multiplicative). Result: (depends only on ).
  4. Residual / noise: .

212.0.5. Limitations of classical decomposition

For a quick first pass, classical decomposition is fine. For production forecasting, prefer STL.

Example

Given (24 months of monthly sales data, additive case):

Month Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Year 1 110 105 120 130 125 115 108 112 122 135 150
165 Year 2 120 115 130 140 135 125 118 122 132 145
160 175

Step 1 — trend via 12-MA (centered, requires 2-MA on top)

At each month (for where the centered window fits), compute the 12-month centered moving average. For January year 2 ():

(rough estimate; actual computation involves a 12-MA followed by a 2-MA at each midpoint)

Step 2 — detrend

leaves the seasonal + noise components:

Sample: (Jan year 2 is 10 below trend).

Step 3 — average detrended values per month

Pool all Januaries: , average . Pool all Decembers: . … and so on for each month.

Adjust so seasonal indices sum to 0:

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

Sum: → adjust by per month so they sum to 0 (skipped here for brevity).

Step 4 — residuals

. If the model fits well, residuals are small and structureless.

Step 5 — interpret

  • Trend:  +10 units / year (rough slope between year-1 and year-2 averages).
  • Seasonal: clear December peak, January-February through.
  • Noise: small, well-explained.

Use: forecast next month by extending the trend and adding the seasonal index. For Jan year 3: .