Benchmark / Range review forecasting / August 2026

EggAI · Range review forecasting · launches and delists

Customer forecasts inside every range review

Replace the two guesses in a range scenario, new-product sales and delist transfer, with forecasts built from real shopper behaviour.

New launches
47%vs 27% launches forecast within 2×
Delist risk
2×more accurate delist risk
Range changes tested
2112 launches · 9 delists
Panel
100kloyalty card households · real receipts, no IDs

Amity · tested on held-out data from the retailer's loyalty card, 2026.

01

Every range scenario rests on two guesses

Every range scenario starts from current sales, takes away the delisted products, then adds two numbers nobody really knows: how much of the lost sales transfers to other products, and how much the new products will sell. Neither guess knows which customers buy the products involved.

100Current sales−20Delisted products+7Sales transfer+10New products97Projected salesGuess: one sliderGuess: avg × L/M/H

Illustrative sales bridge of a typical range-optimisation scenario. Neither guess knows which customers buy the products involved.

02

What we tested on: real launches and delists

We tested on real range changes from the retailer: product launches and delists, each with the real outcome known.

21range changes in the test12 launches · 9 delists. Section 04 uses 19 (two atypical events left out).
1,446other range changes to learn from1,144 launches · 302 delists, with different products and different shoppers.
2,143storesHypermarket (230), Supermarket (181) and Mini supermarket (2,165) in the panel.
100kloyalty card householdsReal receipts, Jan–Aug 2026. 21 test SKUs; 1,446 SKUs in the learning pool.

Dates

8 weeks before → inputsEvent day8 weeks after → answer

Test events fall between 2 Mar and 1 Jun 2026. Learning and test events cover the same months; they are kept apart by product and by shopper.

LaunchDetail
ProductColgate Total Enamel Strength 150 g
Category and launchToothpaste · 119 THB · launched 27 Apr 2026 · sold in 877 stores
Target list1,000 target shoppers, across 579 stores
Busiest storeHypermarket · 15 target shoppers
What happened15 bought it within 8 weeks
Our forecast19.6 buyers
DelistDetail
ProductMeiji Greek Style Yoghurt Mango 500 g
Category and delistYoghurt · 89 THB · delisted 18 May 2026 · was sold in 537 stores
Target list300 recent buyers, across 236 stores
Busiest storeHypermarket · 8 buyers
What happened95 left the category within 8 weeks
Our forecast103.5 leavers

Retailer's loyalty card 100k-household panel. Store = where the shopper bought the delisted product, or their home store for launches.

03

We forecast every shopper, then add them up by store

One forecast per shopper (a chance, e.g. 31%), added up per product (sections 07–08), per store group (05–06) or per format in THB (04).

1 · Pick the shoppers

From the 100k loyalty card households. A launch: 1,000 shoppers of the category. A delist: the product's recent buyers (up to 300).

2 · Describe each one

12 facts from their last 8 weeks of receipts: trips, spend, discounts, category trips, spend and recency, the product's price.

3 · Forecast each one

Our model gives every shopper a chance: will they buy the new product, or leave the category? It learned from 1,446 past range changes. No retraining per product.

4 · Add up by store

Sum the chances per store and format = expected buyers or leavers. × spend per buyer = THB, the bars in section 04.

Real example · delisted 18 May 2026 · 3 of its 300 recent buyers (low, middle and high forecast)

Meiji Greek Style Yoghurt Mango 500 gShopper AShopper BShopper C
Usual storeHypermarketHypermarketMini super
Trips, last 8 weeks14128
Spend, last 8 weeks5,700 THB29,900 THB4,400 THB
Yoghurt trips931
Yoghurt spend1,410 THB370 THB90 THB
Yoghurt products bought831
Days since last yoghurt21450
Our forecast: leaves yoghurt3%31%75%
What happened (8 weeks)stayedstayedleft

All 300 buyers added up: forecast 104 leave · actual 95

Real receipts from the retailer's 100k-household panel; values rounded, no customer IDs. The model learned from other products and other shoppers than the ones it forecasts.

04

Real stores, real range changes: forecast vs actual

Store-level forecasts for 19 real range changes against what actually happened. Each card shows the net change in sales (delisted products, transfer to other products, new launches) and how far each method missed it.

Hypermarket
226 stores with a delist · 228 with a launch

Delisted sales, actual -121.9k · Net change, actual -32.5k

Miss on net change (THB, shorter is better)
Our model
1.1k
GBDT (standard ML)
8.0k
Tool rule
8.8k
Supermarket
150 stores with a delist · 178 with a launch

Delisted sales, actual -34.3k · Net change, actual -9.8k

Miss on net change (THB, shorter is better)
Our model
1.3k
GBDT (standard ML)
2.7k
Tool rule
3.4k
Mini supermarket
476 stores with a delist · 1646 with a launch

Delisted sales, actual -25.0k · Net change, actual +0.2k

Miss on net change (THB, shorter is better)
Our model
0.4k
GBDT (standard ML)
3.3k
Tool rule
1.2k
Our modelGBDT (standard ML)Tool rule (slider · avg × L/M/H)

Why the totals look small: they count only the 19 products that changed (11 launches, 8 delists, Jan–Jun 2026), over 8 weeks, for a sample: the 100k-household panel, 1,000 shoppers per launch and up to 300 buyers per delist. Scoring every customer gives real store totals; the error rates carry over. Transfer = the delisted product's sales from shoppers who stayed in the category. Tool rule = one flat transfer rate and the group-average adoption. GBDT = LightGBM on the same inputs, calibrated. Left out: a deli-counter roast chicken and a fabric-softener basket.

05

Launches by store group: half the miss

New-product sales in the 8 weeks after launch (THB), split by format and by store group. 11 real launches. Actual = what really sold.

Store groupActualOur modelGBDT (standard ML)Tool rule
Hypermarket · 228 stores
Busiest 62 stores · 2,501 shoppers2.7k3.5k +30%4.9k +82%4.7k +72%
Other 166 stores · 2,523 shoppers4.2k3.7k -12%4.9k +16%4.7k +11%
Supermarket · 178 stores
Busiest 46 stores · 741 shoppers0.6k1.1k +72%1.4k +121%1.4k +119%
Other 132 stores · 752 shoppers1.1k1.2k +10%1.4k +36%1.4k +32%
Mini supermarket · 1,645 stores
Busiest 414 stores · 2,241 shoppers3.6k3.4k -5%4.2k +17%4.2k +17%
Other 1,231 stores · 2,242 shoppers2.7k3.4k +25%4.2k +55%4.2k +56%
Total miss over the 6 store groups
Shorter bar = better · ours closest in 5 of 6 groups
Our model
2.7k THB
GBDT
6.1k
Tool rule
5.6k

Busiest = the fewest stores holding half of the format's target shoppers. Shoppers counted at their home store. Tool rule = average adoption × spend per buyer of the other test launches. In buyer counts the three are closer (miss 36 / 61 / 40 buyers). Totals are small because they cover only the launched SKUs in a panel sample (see section 04).

06

Delists by store group: less than half the miss

Customers who left the category within 8 weeks of the delist, split by format and by store group. 8 real products cut. Actual = what really happened.

Store groupActualOur modelGBDT (standard ML)Tool rule
Hypermarket · 226 stores
Busiest 67 stores · 688 shoppers242223 -8%192 -21%188 -22%
Other 159 stores · 689 shoppers215217 +1%189 -12%189 -12%
Supermarket · 150 stores
Busiest 39 stores · 195 shoppers5761 +6%54 -6%53 -7%
Other 111 stores · 199 shoppers6164 +5%56 -7%55 -11%
Mini supermarket · 477 stores
Busiest 184 stores · 292 shoppers8070 -12%64 -19%82 +2%
Other 293 stores · 293 shoppers7471 -4%67 -9%83 +12%
Total miss over the 6 store groups (customers)
Shorter bar = better · 729 really left · ours closest in 4 of 6 groups
Our model
40
GBDT
106
Tool rule
100

Busiest = the fewest stores holding half of the format's buyers of the product. Shoppers counted where they bought it. Tool rule = one exit rate for every product (the average of the other test delists). In THB of sales walking out: miss ours 4.0k · GBDT 7.8k · tool 9.7k. Totals are small because they cover only the delisted SKUs in a panel sample (see section 04).

07

Forecasting how many will buy a brand-new product

A second, larger test: 30 brand-new SKUs, Jan–Jun 2026, scored against the whole 100k panel.

Learn

70 earlier launches from the retailer, Feb–Oct 2025

Test

30 new SKUs launched Jan–Jun 2026, each in 50+ stores

Forecast

Every one of the 100k households scored for every launch, from their 8 weeks before

Check

Real buyers of the exact SKU in the 8 weeks after: 281 in total, about 9 per launch

Launches forecast within 2× of the real buyers
A hit = forecast between half and double the real number (real 10 → 5 to 20) · axis 0 – 50%
Tool rule
27%
GBDT (LightGBM)
33%
Logistic regression
33%
Our model
47%
Buyers forecast, all 30 launches together
Actual = 281 real buyers
Tool rule
917
GBDT
630
Logistic
504
Actual
281
Ours
175

Why it matters: the tool rule and standard ML forecast 2–3× too many buyers (overstock). Ours runs ~40% low but steadily: one monthly level check fixes it.

A separate, larger test from sections 02–06: brand-new SKUs, the whole 100k panel. Average miss per launch: ours 7.7 buyers per 100k households, GBDT 16.7, logistic 14.1. All methods learned from the same 70 launches. Tool rule = average existing SKU in the same category × a factor learned from those 70 launches.

08

We can tell which products are safe to cut

Real products the retailer cut in 2026. For each, the share of its recent buyers who left the category, against what really happened. Axis 0 – 60%.

Safe to cut
House-brand x Collon Strawberry Bread 75 g
Bread · 29 THB · cut 27 Apr 2026 · 300 recent buyers in the panel · share who left the category
Actual
13%
Our model
17%
GBDT
18%
Slider (one value for all)
30%

Busiest store: Hypermarket · 4 buyers, 2 left · ours 1.7 · slider 1.2

Some loss
Bucher Duo Cheese Sausage 585 g
Sausage · 179 THB · cut 30 Mar 2026 · 300 recent buyers in the panel · share who left the category
Actual
35%
Our model
37%
GBDT
35%
Slider (one value for all)
27%

Busiest store: Hypermarket · 8 buyers, 4 left · ours 3.1 · slider 2.2

Risky to cut
TGM Cottage Bacon-Wrapped Cocktail Sausage
Sausage · 149 THB · cut 1 Jun 2026 · 261 recent buyers in the panel · share who left the category
Actual
54%
Our model
44%
GBDT
37%
Slider (one value for all)
25%

Busiest store: Hypermarket · 6 buyers, 4 left · ours 2.7 · slider 1.5

ActualOur modelGBDTSlider (one value for all)

How far off, on average · all 8 products · shorter bar = better

Average miss (percentage points)
Slider
13 pts
GBDT
8 pts
Our model
6 pts
Lost customers counted wrong
729 really left
Slider
307
GBDT
178
Our model
139

Left = no purchase in the category in the 8 weeks after the cut. Slider = one value for every product, the average of the other test delists, all categories (25–30%). Same 8 delists as sections 04 and 06; busiest store = most buyers of the product. A store has only a handful of buyers, so single stores are noisy.

09

Ranking buyers is a tie; sizing the launch is our edge

How to read this section. Ranking score: pick one real buyer and one non-buyer at random; how often does the model score the buyer higher? 0.5 = coin flip, 1.0 = perfect. Size error: how far the forecast number of buyers is from the real number.

Who buys a brand-new product · TIE
Ranking score · the 30 launches in section 07 · bars start at 0.5 (coin flip)
Our model
0.792
GBDT (standard ML)
0.785
Who buys a newly ranged SKU · AHEAD OF GBDT
Ranking score · 20 launches, Jan–Jun 2026 · bars start at 0.5 (coin flip) · logistic 0.696
Our model
0.716
GBDT (standard ML)
0.608
How many will buy · HALF THE ERROR
Size error, buyers per 100k households · the 30 launches in section 07 · shorter bar = better
Our model
7.7
GBDT (standard ML)
16.7

So what: for picking who to target, standard ML is about as good. For how many will buy, the number a retailer plans stock and space with, ours has half the error (sections 04–08).

Ranking score = AUC, averaged per launch. A simple logistic model is close on newly ranged products (0.696) and ranks delist leavers slightly better than ours (0.733 vs 0.702).

10

Sampling evaluation: three real delist events

Three real delist events, forecast of the sales that stay in the section (transfer) against what the retail analytic platform's own range tool predicted and what actually happened.

Delist: Dutchmill Delight Non Fat Milk 830 ml · All the retailer's hypermarkets (228 stores) · 2026-04-20

Actual transfer: 194,574 THB

ModelTransfer predict (THB)Miss (THB)% missRanking (AUC)
Retail analytic platform128,670−65,904−34%—
EggAI-v0.1 Pretrained Model214,799+20,225+10%0.761
EggAI-v0.1 (with our harness)202,515+7,940+4%0.771
EggAI-v0.2 Pretrained Model with Thinking - Low205,949+11,375+6%0.749
EggAI-v0.2 Pretrained Model with Thinking - High204,268+9,694+5%0.788

Delist · 4,120 loyalty card buyers · transfer measured 20 Apr – 14 Jun 2026. Transfer = sales of the delisted product kept because buyers still bought Dairy & Drinks at any of the retailer's stores in the 8 weeks after the cut (actual 61.9% of 314,502 THB). EggAI-v0.1 (with our harness): strict version, everything the model saw is dated before 20 Apr 2026. EggAI-v0.1 Pretrained Model and EggAI-v0.2 with Thinking learn from 8 other delist events, some measured after 20 Apr.

Delist: Orange Laundry Basket · All the retailer's hypermarkets (215 stores) · 2026-03-02

Delist · 5,439 loyalty card buyers · transfer measured 2 Mar – 26 Apr 2026

Actual transfer: 1,008,193 THB

ModelTransfer predict (THB)Miss (THB)% missRanking (AUC)
Retail analytic platform592,690−415,503−41%—
EggAI-v0.1 (with our harness)877,040−131,153−13%0.724
EggAI-v0.2 (with our harness)909,616−98,577−10%0.780

Within ±10% of actual is good, off by more than 20% is poor; highlighted = closest to actual. Retail analytic platform = transfer from the retailer's range tool. Transfer = sales of the delisted product kept because buyers still bought the same section at any of the retailer's stores in the 8 weeks after the cut. EggAI-v0.1 / v0.2 (with our harness): strict versions, everything the model saw is dated before the event date (learned from ~100 older delist events whose outcomes were known by then).

Delist: Meiji Greek Style Yoghurt Mango 500 g · All the retailer's hypermarkets (228 stores) · 2026-05-18

Delist · 4,800 loyalty card buyers · transfer measured 18 May – 12 Jul 2026

Actual transfer: 356,907 THB

ModelTransfer predict (THB)Miss (THB)% missRanking (AUC)
Retail analytic platform399,070+42,163+12%—
EggAI-v0.1 (with our harness)370,991+14,084+4%0.729
EggAI-v0.2 (with our harness)371,266+14,359+4%0.747

Within ±10% of actual is good, off by more than 20% is poor; highlighted = closest to actual. Retail analytic platform = transfer from the retailer's range tool. Transfer = sales of the delisted product kept because buyers still bought the same section at any of the retailer's stores in the 8 weeks after the cut. EggAI-v0.1 / v0.2 (with our harness): strict versions, everything the model saw is dated before the event date (learned from ~100 older delist events whose outcomes were known by then).

EggAI · Range review forecasting · 2026 · Amity