A buyer at a major grocer gives you 20 minutes to justify why she should delist 14 SKUs, rebuild the shelf, and let you shrink the 1-liter juice bottle to 900ml at the same price. She has heard every supplier pitch this quarter. The only thing that will move her: one coherent story built from data she cannot easily dispute.
That is the job of a category captain (the manufacturer a retailer trusts to advise on managing a whole category, not just its own brands). This lesson shows how to fuse four messy data streams into that single recommendation.
Each stream answers a different question. None is enough alone.
POS (point of sale) data. Scanner data from the retailer's own tills. Tells you exactly what sold, where, and at what price, in that retailer. It is the ground truth for *this* account but blind to everything outside it.
Panel data. A recruited sample of households (or individuals) who record every purchase across all stores. Providers like Kantar and NielsenIQ run these. Panel tells you *who* buys, how loyal they are, and what they buy elsewhere. It is directional, not census-level, so small segmentssegmentsDividing a market into distinct groups of customers who share similar needs, characteristics or behaviours, so each group can be served with a tailored approach. carry sampling error.
Distribution data. Where products are physically listed and available. Key metric: weighted distribution (the share of total category sales that occurs in stores stocking your SKU, not just the raw count of stores). A SKU in 200 tiny stores can have lower weighted distribution than one in 40 superstores.
Loyalty data. Card-linked purchase histories from the retailer's loyalty program. This is the crown jewel: it links baskets to identified shoppers over time, so you can see switching, cross-shop, and repeat rates.
The skill is not any single dataset. It is reconciling them when they disagree, which they will.
Start with a decile analysis: rank every SKU in the category by sales and split into ten groups.
import pandas as pd
# pos = one row per SKU with 52-week sales and units
pos = pos.sort_values("sales_52wk", ascending=False)
pos["cum_share"] = pos["sales_52wk"].cumsum() / pos["sales_52wk"].sum()
pos["rate_of_sale"] = pos["units_52wk"] / pos["stores_stocking"]
tail = pos[pos["cum_share"] > 0.95] # candidate delist SKUsTypically the bottom decile contributes a low single-digit percentage of category sales. Those are delist candidates. But do not cut yet.
Two SKUs can have identical low sales for opposite reasons:
POS alone hides this. Divide units by stores stocking to get rate of sale, then bring in loyalty data to check the last question that matters most.
The buyer's real fear: *if I delist this SKU, do I lose that revenue, or does the shopper simply buy something else in my store?*
Loyalty data lets you estimate this. Look at shoppers whose basket contains the candidate SKU. What else do they buy in the category? If 85 percent of them also regularly buy a SKU you are keeping, the tail SKU is largely non-incremental (its sales transfer, not disappear, when it goes). If a meaningful slice buy *only* the tail SKU and nothing else in the category, delisting risks pushing them to a competitor.
This is your defense. You are not saying "these sell badly." You are saying "these sell badly *and* their shoppers will stay in your store."
For a solid primer on how these techniques underpin category management, the Category Management Association and NielsenIQ's education content are useful free starting points.
A planogram is the visual mapmapUsing software to automate repetitive marketing tasks and campaigns, enabling personalisation at scale across channels like email, web, and social.Voir la définition complète → of what goes where on the shelf. The core principle: allocate space in proportion to a SKU's sales, adjusted for a few realities.
Calculate each SKU's space-to-sale index: its share of shelf facings divided by its share of category sales. An index above 1.0 means over-spaced (giving away shelf); below 1.0 means under-spaced.
| Signal | Data source | Action |
|---|---|---|
| Space-to-sale index high | POS + shelf audit | Reduce facings |
| High rate of sale, low distribution | POS + distribution | Add facings / list wider |
| High repeat rate | Loyalty | Protect, place at eye level |
| Growing segment | Panel | Give incremental space |
Two adjustments keep this honest:
1. Days of supply. Fast sellers need enough facings to avoid going out of stock between replenishments. A pure sales-share allocation can starve a top SKU and cause lost sales.
2. Segment blocks. Shoppers navigate the shelf by need (kids juice, premium, value). Panel data on how segmentssegmentsDividing a market into distinct groups of customers who share similar needs, characteristics or behaviours, so each group can be served with a tailored approach.Voir la définition complète → are trending tells you which blocks to grow. Do not scatter a growing premium tier across the fixture.
Bring the reset to life visually. Buyers respond to a before-and-after shelf image far more than a spreadsheet.
🎬 [VIDEO: "What is Category Management?" — youtube.com — a concise explainer of the category captain role and the retailer-supplier relationship]
Price-pack architecture (PPA) is the range of pack sizes and price points a brand offers so different shoppers and occasions are served (single-serve impulse, multipack family, etc.).
Your proposal: reduce the 1-liter bottle to 900ml, holding the shelf price. This is price-pack change, sometimes called shrinkflation when done quietly. It is scrutinized, so your data case has to be airtight and your logic transparent.
Build the defense from three angles:
Price-per-liter context (panel). Show where the category's price-per-liter has moved. If input costs have risen sector-wide, a pack change may keep the entry price point accessible while protecting margin. Frame it as defending the key value item (the price point shoppers actually notice and use to judge whether a store is expensive).
Elasticity (POS). Estimate how volume responds to price. If the alternative to a pack change is a straight price rise on the 1-liter, model both. A modest pack reduction often protects volume better than a visible shelf-price increase, because shoppers anchor hard on the headline price.
Cannibalization and trade-up (loyalty). Show whether the 900ml pulls shoppers *down* from larger packs (bad, you lose volume) or holds them while improving margin. Loyalty switching data is the only clean way to see this.
A word of caution: pack downsizing carries reputational and, in some markets, regulatory disclosure risk. Several jurisdictions require clearer unit-price labeling. Present it as a transparent architecture decision, not a hidden trick, or the buyer (whose brand is on the fixture) will reject it.
Vérification des acquis
1. Why is POS data described as 'ground truth for this account but blind to everything outside it'?
2. A small shopper segment shows a surprising switching pattern in panel data. Why should you be cautious before building a recommendation on it?
3. Why can a SKU stocked in 200 tiny stores have lower weighted distribution than one in only 40 superstores?
4. Select ALL correct answers about what loyalty (card-linked) data uniquely enables that other streams cannot.
Sélectionnez toutes les réponses correctes.
5. Select ALL correct answers describing why the lesson stresses fusing four data streams rather than relying on one.
Sélectionnez toutes les réponses correctes.
The integration is the deliverable. Four streams, one narrative:
1. Delist the 14 tail SKUs. Evidence: bottom decile of POS sales *and* loyalty shows their buyers are non-incremental (they stay in the store). Projected category sales loss: minimal. Freed space: quantified in facings.
2. Reset the planogram. Reallocate the freed space to the growing premium block (panel trend) and to two under-distributed high rate-of-sale SKUs (POS plus distribution). Show before-and-after with days-of-supply check.
3. PPA change. Move 1-liter to 900ml. Evidence: category price-per-liter context, elasticity favoring pack over price, loyalty showing no downward cannibalization. Framed for shopper transparency.
The buyer's three objections are predictable. Pre-empt each with the dataset that answers it:
The credibility trick: recommend cutting or de-spacing some of your *own* SKUs where the data demands it. A captain who only ever advantages itself gets fired.
They will disagree. A SKU may look weak in this retailer's POS but strong in national panel. That usually means it is a competitor-account strength or an assortment gap here, an opportunity, not a delist. When loyalty and POS conflict on a segment, trust POS for *what sold* and loyalty for *who and why*. Always name your assumptions in the deck, buyers trust analysts who show the seams.