Seasonal ARIMA (SARIMA)
Retail sales spike every December. Electricity demand climbs every summer. Airline passenger numbers surge
each holiday season, year after year. These series carry a pattern that
ordinary ARIMA is blind to:
a value in December is tied not just to November, but to last December — a dependence that
jumps a whole period of s=12 months at a stride. Differencing month-to-month
never removes it. We need a model that reaches back a full season.
Seasonal ARIMA, written SARIMA(p,d,q)(P,D,Q)_s,
does exactly that. It bolts a second, seasonal ARIMA — operating at the seasonal lag
s instead of lag 1 — onto the ordinary one, and multiplies them together. The
lower-case orders (p,d,q) handle the short-range, month-to-month dynamics; the
upper-case orders (P,D,Q) handle the year-to-year seasonal dynamics.
Seasonal differencing and seasonal polynomials
The engine is the same
backshift operator
B, but raised to the seasonal power. The seasonal difference is
\nabla_s\, x_t = (1 - B^{s})\,x_t = x_t - x_{t-s},
the change from this month to the same month a year ago — precisely the operation that annihilates a
stable annual pattern, just as seasonal
adjustment removes it by other means. Alongside it come seasonal AR and MA
polynomials in B^{s}:
\Phi(B^{s}) = 1 - \Phi_1 B^{s} - \dots - \Phi_P B^{Ps}, \qquad \Theta(B^{s}) = 1 + \Theta_1 B^{s} + \dots + \Theta_Q B^{Qs}.
The full model simply multiplies the seasonal and non-seasonal operators on each side — a
multiplicative structure:
- The defining equation is
\Phi(B^{s})\,\phi(B)\,(1-B^{s})^{D}(1-B)^{d}\,x_t = \Theta(B^{s})\,\theta(B)\,\varepsilon_t.
- (p,d,q) are the ordinary orders (short-range dependence, lag 1);
(P,D,Q) are the seasonal orders (dependence at lags
s, 2s, \dots).
- D is the number of seasonal differences and
d the number of ordinary ones — you may need one of each to flatten both a
trend and a season.
Multiplying the polynomials out generates coefficients at lags like
1, s-1, s, s+1 automatically — the model "knows" that a shock ripples into the
neighbouring months of the next season, without you specifying each one. That parsimony is the whole point.
Seeing it work
Below, the upper curve is a monthly series with both a gentle upward trend and a strong repeating annual
wave. The lower curve is its seasonal difference
x_t - x_{t-12}. In one stroke the seasonal difference erases both the
annual wave and most of the trend, leaving a series that hovers around a constant — ready for an ordinary
ARMA to finish the job.
The seasonal fingerprint is even clearer in the autocorrelation function: a seasonal series shows big ACF
spikes at the seasonal lags s, 2s, 3s, \dots — here at 12 and
24 — riding above the ordinary short-lag structure.
Those tell-tale spikes are exactly what you read off to decide the seasonal orders, the same way the
ordinary PACF
pins down p.
Worked example: the airline model
The most famous SARIMA of all is Box and Jenkins' analysis of monthly international airline passengers —
the "airline model", SARIMA(0, 1, 1)(0, 1, 1)_{12}.
Let us read every symbol:
| Order | Value | Meaning |
| d = 1 | one ordinary difference | removes the trend in the level |
| D = 1 | one seasonal difference (lag 12) | removes the repeating annual pattern |
| q = 1 | ordinary MA(1) | month-to-month shock dependence |
| Q = 1 | seasonal MA(1), lag 12 | year-to-year shock dependence |
| p = P = 0 | no AR terms | all dynamics captured by the two MA terms |
Its equation is strikingly compact:
(1-B)(1-B^{12})\,x_t = (1 + \theta_1 B)(1 + \Theta_1 B^{12})\,\varepsilon_t.
Two differences, two MA parameters — just \theta_1 and
\Theta_1 — and it captures the behaviour of a genuinely complicated 12-year
monthly series. Because it so often fits seasonal data well with minimal parameters, the airline model is
the standard first thing to try on any monthly series and a benchmark that automated procedures still race
against.
A common slip is to read SARIMA(0,1,1)(0,1,1)_{12} as "an MA(1) plus a separate
MA(13)". It is not a sum — the seasonal and non-seasonal MA polynomials are
multiplied: (1+\theta_1 B)(1+\Theta_1 B^{12}) = 1 + \theta_1 B + \Theta_1 B^{12} + \theta_1\Theta_1 B^{13}.
Notice the cross term at lag 13 with coefficient \theta_1\Theta_1: the
multiplicative form forces a specific relationship between the lag-13 effect and the product of the
lag-1 and lag-12 effects. That constraint is a feature — it is what keeps the model parsimonious — but if
you mentally treat the terms as independent you will mis-count the parameters and misread the fitted ACF.
Not necessarily. Seasonality can be deterministic (a rock-steady pattern, best handled with
seasonal dummy variables) or stochastic (a pattern that itself drifts and evolves, which is what
the seasonal difference (1-B^{12}) is for). Over-applying seasonal differencing to
a fixed, deterministic season injects the same kind of spurious non-invertible term that ordinary
over-differencing does. The tell: if the seasonal pattern's shape and size are essentially unchanged across
years, prefer dummies; if it wanders, seasonally difference. As always, the fewest differences that do the
job.