Sign in

Blog · Forecast and pipeline

Seasonality in sales measures: same period last year, not the trailing average

How seasonality distorts every trend-based measure, run rate, dormancy, surge, forecast bias, and the two comparisons that handle it: same period last year, and a seasonal index from the company's own history. When each applies, how the index is built per segment and per account, the accounts whose seasonality is their own, the rule that the comparison is stated on the line, and the four measures where the trailing average is simply wrong.

The short answerA trailing average compares this month to the last few, and in a seasonal business that compares the peak to the shoulder and calls it growth, or the trough to the peak and calls it collapse. Two comparisons handle it: this period against the same period last year, which needs one year of history and states the change as year on year; and a seasonal index, the company's own share of annual revenue by month, which deseasonalises the trailing figure. Both are per segment and, for accounts whose seasonality is their own, per account. The comparison used is stated on every line, and four measures should never use the raw trailing average at all.

A beverage distributor's July run rate, annualised, says the business is growing forty percent. Its January run rate says it is collapsing. Neither is true; both are the trailing average reading the season. This guide sets out the two comparisons that handle seasonality, when each applies, the index per segment and per account, and the four measures that need it most.

Two comparisons

Comparison Formula Needs Says
Same period last year this period ÷ same period last year − 1 One year of history Year-on-year change
Seasonal index this period ÷ index for the period Three years, per segment Deseasonalised level and trend

Building the index

Per segment, from three years:

Index for month m = mean share of annual revenue in month m ÷ (1 ÷ 12)

Month Share of year Index
January 5.1% 0.61
April 8.0% 0.96
July 12.0% 1.44
October 9.2% 1.10

July's raw run rate divided by 1.44 is the deseasonalised figure, and it is the one to compare to April's divided by 0.96.

Accounts with their own season

Account Segment index, July Own index, July Used
2207, a school caterer 1.44 0.15 Own: it closes in summer
4471, a resort 1.44 2.10 Own
9034, a hospital 1.44 1.02 Own: flat

An account whose pattern differs from its segment's by more than a stated amount gets its own index, and its dormancy threshold and surge baseline use it.

The four measures that need it

Measure Raw trailing average says With seasonality
Run rate July annualised is +40% Deseasonalised: +3%
Dormancy The school caterer is dormant in August Own calendar: on schedule
Ticket surge Every retailer surges in November Against November's baseline: normal
Forecast bias The rep is always high in Q1 Bias measured against the seasonal expectation: unbiased

The rule

Every trend figure states its comparison: same period last year, or index-adjusted, or raw. Raw is never shown alone on a seasonal measure.

Where it goes wrong

Trailing average on a seasonal business. Growth in July; collapse in January.

One index for every account. The school caterer dormant every August.

Index from a benchmark. The company's own months land its own way.

Comparison unstated. Year-on-year and index-adjusted mixed on one chart.

Every period, the comparison stated

Mapped once, the ledger's history produces the segment and account indexes, and every trend figure is shown year on year and index-adjusted with the comparison named. Covirage builds this from the exports as they are. The forecast analysis solution describes the setup, and the dormancy by industry hub covers the seasonal trap in each industry's dormancy rule.

Questions people ask

Which comparison should be the default?

Same period last year, because it needs no model and everyone understands it. The seasonal index is for when a year-on-year comparison is not available, a new account or a new product, or when the trend within the year matters. Both are shown where both exist.

How is the seasonal index built?

From the company's own history: each month's share of annual revenue, averaged over three years, per segment. A month at 12 percent of the year against an even 8.3 has an index of 1.44. The trailing figure divided by the index is the deseasonalised figure. Per account where the account's own pattern differs from its segment's, and the report says which was used.

Which accounts have their own seasonality?

The ones whose monthly pattern over two or more years differs from their segment's by more than a stated amount: a school supplier's summer, a garden centre's spring, a ski resort's winter. Those accounts get their own index, and their dormancy threshold is against their own calendar.