Skip to content
Rank Tracer

Notes  ·  Reading

Seasonality in Rank Data

Catalogue-wide demand swings move everyone's rank at once. Failing to account for it produces confident conclusions about individual products every January.

Marketplace demand is strongly seasonal, and because rank is relative, seasonal swings move every product simultaneously. Most analysis run across a seasonal boundary is wrong.

The cycles

Annual peak. The end-of-year trading period dominates most consumer categories. Volumes rise across the catalogue, which compresses ranks: absolute sales rise everywhere, so a given rank represents more units than usual.

The January reversal. Volumes collapse after the peak. Products holding steady sales appear to improve sharply because everything around them fell.

Category-specific seasons. Textbooks around academic terms. Garden equipment in spring. Fitness in January. Tax software in the filing season. Each produces a period where that category's ranks are systematically different.

Weekly cycles. Weekday and weekend demand differ, by category and by marketplace. A weekly rhythm in a rank series is usually this rather than anything about the product.

Payday effects, visible in some categories and markets.

What it breaks

Year-over-year comparisons taken at a single point are meaningless unless the point is seasonally matched, and even then the catalogue has grown.

Campaign measurement across a seasonal boundary. A campaign run in early January will look successful because the whole category's ranks improved.

Launch assessment in December. A product launching into peak season shows a rank that will not hold in January, and the drop afterwards looks like failure.

Rank-to-sales conversion. A given rank represents more units during peak than in a quiet period, because more of everything is selling. Tables built on annual averages understate peak and overstate troughs.

Controlling for it

The basket, again. Track a set of comparable products and compare against their median. Seasonal movement affects the basket too and cancels out.

Year-over-year at matched points, rather than period-over-period. Compare this January to last January, not January to December.

Use a seasonal index if you have enough history: compute the basket median by week across two or more years, and express each observation relative to its seasonal expectation.

At minimum, annotate the seasons on every chart. An audience seeing a December peak marked as a December peak does not attribute it to the campaign.

The two-year requirement

Meaningful seasonal adjustment needs at least two full cycles, preferably three.

With one year of data you cannot separate seasonality from trend. A rise into December is either seasonal or growth, and one year cannot distinguish them.

This is a strong argument for starting collection early, before you need the analysis. History cannot be acquired retrospectively for most marketplaces — the data was not stored by anyone who will give it to you.

Where you lack history, say so. An analysis based on eight months of data across one peak is a provisional analysis and should be labelled as one.

Peak period distortions worth knowing

Rank compression at the top. During peak, many products sell heavily and rank differences at the top narrow. Small sales differences produce large rank movements.

Long tail expansion. Products that sell nothing most of the year sell one unit in December and leap thousands of places.

New product flooding. Categories receive large numbers of new listings before peak, pushing established products down.

Promotional events compress a large share of the season's activity into a few days, producing extreme rank movement that is entirely expected.

The practical position

Never interpret a rank movement without knowing where you are in the season.

Never compare across a seasonal boundary without a basket.

Never present a peak-period rank as representative of a product's normal position.

Collect through at least two full cycles before making seasonal claims, and say so when you have less.

Most of the bad rank analysis that reaches decision-makers is seasonal movement misread as a product event, and the correction costs nothing but a comparison set.

Building a seasonal profile

With two or more years of basket data, the profile is straightforward to construct and worth the effort once.

Compute the basket median by week, across all available years.

Average the weekly values across years to get a seasonal index.

Express each observation as a ratio to its seasonal expectation.

Plot the deseasonalised series alongside the raw one.

The deseasonalised view answers "is this product improving" in a way the raw series cannot across a seasonal boundary.

Caveats worth stating: two years is thin for this, catalogue growth contaminates the multi-year comparison, and a category whose seasonality changed will be mismodelled.

Even a crude profile beats none, and the main benefit is often simply knowing when the season starts, which is frequently earlier than the trade believes.