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.
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.
| 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 |
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.
| 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.
| 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 |
Every trend figure states its comparison: same period last year, or index-adjusted, or raw. Raw is never shown alone on a seasonal measure.
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.
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.
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.
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.
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.