Tags: analytics statistics concept
Seasonality
Date: 2026-08-17
The recurring pattern underneath a trend. Almost every “something’s wrong” alarm in commerce analytics is a period being compared against a period that isn’t like it — and the fix is nearly always comparing like with like rather than adjacent.
Seasonality is variation in a metric that repeats on a fixed calendar cycle — daily, weekly, monthly or annually — independent of any underlying trend.
The four cycles, stacked
Commerce data usually carries all of these at once:
INTRADAY lunchtime and evening peaks; mobile skews evening
WEEKLY the strongest cycle in most commerce. Sunday evening peaks,
Saturday troughs, B2B inverts it entirely
MONTHLY payday effects — end of month, and the 25th–28th in the UK
where most salaries land
ANNUAL Black Friday, Christmas, January sales, summer trough,
back-to-school, plus category-specific peaks
Weekly is the one that causes daily reporting to be useless. A Tuesday-versus-Monday comparison is measuring the day of the week.
The comparison that fixes most of it
✗ yesterday vs the day before measures day-of-week
✗ this month vs last month measures month length and paydays
(February vs March is −10% of days)
✗ this week vs last week better, but a bank holiday ruins it
✓ same day, previous week controls day-of-week
✓ same period, previous year controls annual season
✓ trailing 7-day vs prior 7-day smooths the weekly cycle entirely
✓ year-on-year, aligned by WEEKDAY the one that handles Easter
rather than by date
The last one matters more in the UK than people expect. Easter moves by up to five weeks, Black Friday’s date shifts, and bank holidays fall on different dates each year. Comparing 24 December to 24 December compares a Wednesday to a Sunday.
Decomposition
Splitting a series into its parts makes both the pattern and the anomaly legible.
observed = trend × seasonal × residual (multiplicative)
observed = trend + seasonal + residual (additive)
Use multiplicative for commerce. Seasonal effects scale with volume — Black Friday is “3× normal”, not “+40,000 orders” — so an additive model will under-fit peaks in a growing business and over-fit them in a shrinking one.
Sunday orders, observed 2,840
trend (centred moving average) 2,200
seasonal index for Sunday 1.24
──────
expected = 2,200 × 1.24 = 2,728
residual = 2,840 − 2,728 = +112 ← +4%, ordinary variation
In plain terms: the seasonal index says “Sundays run 24% above the underlying level”. Once you divide that out, what’s left is the part worth investigating. A raw figure 24% above Wednesday isn’t news; a figure 4% above what Sunday normally does isn’t either.
Seasonally adjusted figures are the observed value divided by the seasonal index — the number with the predictable pattern removed, so trend changes become visible. Worth computing once and reusing everywhere rather than eyeballing it per report.
Building the indices
You need enough history, and this is the constraint people hit:
cycle minimum history comfortable
weekly ~8 weeks 6 months
monthly ~2 years 3 years
annual 2 years 3–5 years
Two years is the practical minimum for annual seasonality, and one of those years may have been abnormal. Businesses under two years old should not attempt annual adjustment — use category benchmarks as a sanity check and accept the uncertainty — Benchmarking.
Exclude known anomalies before fitting. An outage, a site migration or a one-off campaign inside the training window gets baked into the index and then distorts every future comparison against that period — Annotation and Change Logs.
Where it bites in practice
- Test duration. Running fewer than full weeks reweights the sample towards whichever days were included — Test Duration, Seasonality in Tests
- Alerting. A fixed threshold fires every Sunday night and never fires on a broken Tuesday. Alert against the same hour last week — Alerting on Metrics, Anomaly Detection
- Forecasting and stock. Seasonal index times trend is the entire basis of most demand forecasts — Stockouts and Availability
- Cohort comparison. A January cohort and a November cohort are different populations, not the same population at different times — the November one is full of gift-buyers who never return — Cohort Analysis, Retention Curves
- Attribution windows. A 30-day window spanning Black Friday captures a different mix from one that doesn’t — Attribution Windows
Seasonality versus a real change
The diagnostic order when a number looks wrong:
1 is this the same day-of-week as the comparison?
2 is this period the same LENGTH?
3 did a bank holiday, payday or campaign fall in one and not the other?
4 what does the same period last year look like?
5 is the residual — after adjustment — actually outside normal variance?
6 only now: is something broken?
Steps 1–4 explain the large majority of alarms, and they’re free. The interesting explanations are reached far too early — the symptom list.
Where it interacts
- Anomaly Detection — seasonality is the thing that has to be removed before anomaly means anything
- Metric Drift — a slow definitional change looks like a seasonal shift and is diagnosed by whether it repeats
- Promotional Cadence — much apparent seasonality is self-inflicted: your own campaign calendar, repeated annually until it looks like customer behaviour
- Benchmarking — industry seasonal curves are one of the few benchmark comparisons that’s usually valid