skip to content

What does an ACF with large spikes at lags 12 and 24 tell you about monthly data?

level: middleimportance: should knowfreq 45%

answer

  1. the lag axis is in sampling intervals
  2. 12 months back, then 24
  3. spikes at multiples of one number
  4. trend decays everywhere, seasonality peaks
  5. period m spikes at m, 2m, 3m

basics

~20 s

Spikes at lags 12 and 24 on monthly data mean each month resembles the same month one and two years earlier: an annual cycle of period 12. A seasonal period shows up at its multiples.

solid answer

~50 s

That is the seasonal signature. On monthly data, lag 12 is the same month one year back and lag 24 is two years back, so significant autocorrelation at both says the series repeats on an annual cycle of period 12. The same pattern on daily data appears at lags 7 and 14 — a weekly cycle — and on quarterly data at lags 4 and 8. Read the spikes as evidence of a seasonal *period*, and let the strength of the spike at 24 relative to 12 tell you how persistent that cycle is: a slow decay across 12, 24, 36 indicates a stable seasonal pattern, while a strong spike at 12 that has nearly vanished by 24 suggests the cycle is drifting. Distinguish this from a trend, which produces large autocorrelation at *all* short lags decaying slowly, not isolated spikes at multiples of one number.

go deeper

for a junior

Know that the lag axis counts sampling intervals, so lag 12 on monthly data means one year earlier. Recognising repeated spikes at 12 and 24 as an annual cycle is the expected answer here.

for a middle

Explain the general rule that a period m shows up at m, 2m, 3m, and map it across monthly, quarterly, daily and hourly data. Be ready to contrast the seasonal shape with the slow uniform decay a trend produces.

for a senior

Demonstrate judgment about evidence quality: how many complete cycles you need before a seasonal spike is credible, what the decay from m to 2m says about whether the cycle is stable or drifting, and why a trend can bury the seasonal bumps until the series is leveled.

for a principal

Own the question of whether seasonality should be modelled explicitly at all for a given forecasting problem, weighing a stable annual pattern against drifting cycles, moving holidays and the cost of a model nobody on the team can interpret.

## Reading the spacing The lag axis of a correlogram is measured in observation intervals, so its meaning depends entirely on the sampling frequency of the series. On monthly data, lag 12 compares each observation with the same calendar month a year earlier. Lag 24 compares it with the same month two years earlier. A pronounced autocorrelation at both — bars well outside the significance bands, typically taller than most of their neighbours — is the direct fingerprint of an **annual seasonal cycle**: December looks like last December, and like the December before that. The general rule is that a seasonal cycle of period m announces itself as autocorrelation at lags m, 2m, 3m and so on. The common cases: | Data frequency | Seasonal period m | Lags to check | |---|---|---| | Monthly | 12 | 12, 24, 36 | | Quarterly | 4 | 4, 8, 12 | | Daily, weekly cycle | 7 | 7, 14, 21 | | Hourly, daily cycle | 24 | 24, 48, 72 | A series can carry more than one period at once — hourly data often shows spikes at 24 (daily rhythm) *and* at 168 (weekly rhythm), which is why the plotted lag range must be long enough to reach the periods you suspect. A correlogram truncated at 20 lags simply cannot show a weekly cycle in hourly data. ## Seasonality versus trend The most common misread is confusing a seasonal signature with a trend. They look different: - **Seasonality**: bars near lags 1, 2, 3 may be modest, then a distinct spike stands up at lag m and again at 2m. The plot has a scalloped shape with peaks at multiples of m and often troughs at the half-period. - **Trend**: every short lag is large and positive, and the bars decay slowly and monotonically across the whole plotted range with no isolated peaks. Nearby observations are correlated simply because a trending series spends long stretches above or below its overall mean. The two frequently occur together, in which case the correlogram shows slowly decaying bars *with* bumps at multiples of m superimposed. When a strong trend is present it can dominate the plot to the point that the seasonal bumps are hard to see; leveling the series first makes the seasonal structure legible. ## What the decay across multiples tells you Compare the height of the spike at lag m with the one at 2m and 3m. - **Slow decay** (12 large, 24 nearly as large, 36 still visible) indicates a *persistent* seasonal pattern — the shape of the year is stable, so knowledge of a month three years ago still carries information. - **Fast decay** (12 large, 24 much smaller, 36 inside the bands) indicates a seasonal cycle whose shape is drifting year to year. Recent seasons are informative, distant ones much less so. - **A spike at m with nothing at 2m at all** on a short series is worth suspicion. With only three or four full cycles in the data, the lag-2m autocorrelation is estimated from very few overlapping pairs and is correspondingly noisy. ## Sample size caveats Detecting a seasonal cycle of period m requires several complete cycles. With three years of monthly data you have 36 observations and only three independent looks at each calendar month; the lag-12 autocorrelation is a genuinely weak estimate. As a working rule, expect to want on the order of several full periods before you take a seasonal spike seriously, and be aware that the significance band at `+/- 1.96/sqrt(n)` is wide on short series, so a real but moderate seasonal effect may fail to clear it. ## Related patterns not to confuse with seasonality **Calendar effects that are not fixed-period.** Holidays that move (a lunar-calendar festival, an Easter-linked shift) smear across adjacent months, so their autocorrelation does not land cleanly on a single lag and the spike is blunter than a fixed monthly cycle. **Cycles that are not seasonal.** A business cycle repeating roughly every few years is not a *seasonal* pattern, because its length is not fixed by the calendar. It produces broad, wandering humps in the correlogram rather than sharp spikes at exact multiples of a constant m. **Aliasing from aggregation.** If daily data with a weekly rhythm is aggregated to weekly totals, the weekly cycle disappears from the correlogram entirely — the sampling interval and the cycle length now coincide. The seasonal structure a correlogram can reveal is bounded by the frequency at which the data were recorded. ## Also check the PACF The partial autocorrelation function at seasonal lags helps distinguish whether the pattern at 24 is a genuine two-year-back link or an echo of the one-year link. If the seasonal spike is direct at lag 12 and the lag-24 partial value drops away, the annual dependency is a single step repeated; if strong partial values appear at both, the seasonal structure is richer.

  • Where would the same seasonal signature appear on daily retail data?
    At lags 7, 14 and 21 — the day-of-week cycle, since each Saturday most resembles previous Saturdays. Daily data can also carry an annual cycle, which would land near lag 365, so the correlogram must be plotted out far enough to reach it. Plotting only 20 lags on daily data hides everything longer than three weeks.
  • How do you tell a seasonal correlogram from one produced by a trend?
    A trend makes every short lag large and positive with a slow, smooth decay across the whole range and no isolated peaks. Seasonality produces distinct spikes standing above their neighbours at multiples of the period. When both are present you see the slow decay with bumps superimposed at the seasonal lags.
  • You have only 30 monthly observations and see a spike at lag 12. How much do you trust it?
    Not much on its own. Thirty months gives barely two and a half annual cycles, so the lag-12 autocorrelation rests on very few overlapping pairs and the significance band is wide at roughly plus or minus 0.36. I would treat it as a hypothesis, check whether an annual cycle is plausible for the domain, and look for it to persist as more data arrives.

saying these in an interview costs you the question

  • Reading lag numbers without knowing the sampling frequency
  • Calling a slowly decaying correlogram seasonal when it is a trend
  • Expecting a weekly cycle at lag 12 on daily data
  • Declaring annual seasonality from two years of monthly data
  • Plotting too few lags to reach the suspected period

context