Case 3 · Inventory & demand¶
Data used on this page
Online Retail II - real public data · Stock, replenishment and delivery simulation - synthetic. Details on the data sources page. With synthetic data the findings illustrate the method; they are not claims about a real organisation.
Context¶
An online gift retailer sells mostly to small shops; demand peaks before Christmas. The planning team forecasts each SKU with an 8-week moving average, reviews stock every Monday and orders up to 5 weeks of forecast from suppliers with a 10-17 day lead time. The case follows the 40 best-selling SKUs plus 8 SKUs whose demand faded.
Question¶
Is our stock serving customers without tying up capital - and what breaks the balance?
KPIs · Dec 2010 - Dec 2011¶
Service (fill rate, OTIF, stockouts) and capital (cover, turnover, obsolescence) pull in opposite directions; forecast accuracy and bias sit upstream of both.
Finding¶
Show the data behind this chart
| outcome | share of orders |
|---|---|
| On time, in full | 74% |
| Short only | 11% |
| Late only | 10% |
| Short and late | 4% |
Fill rate counts units; OTIF counts orders. With 2.8 lines per order, one short line fails the whole order - that is why the two KPIs can tell such different stories.
Show the data behind this chart
| size | rows | mape | units | row_share | unit_share |
|---|---|---|---|---|---|
| 1-9 units | 62 | 49.916 | 238.0 | 0.034 | 0.000 |
| 10-49 units | 118 | 11.229 | 3300.0 | 0.064 | 0.004 |
| 50-199 units | 515 | 1.655 | 65401.0 | 0.279 | 0.077 |
| 200+ units | 1152 | 0.481 | 779740.0 | 0.624 | 0.919 |
MAPE gives every SKU-week the same vote, so small weeks - where missing by 5 units is a 100% error - dominate it. WAPE weights errors by units, which is what stock and service feel.
A single fleet-level days-of-cover number nets these two tails against each other - that is why the catalog defines it with a band and why the distribution is the recommended chart.
Decision¶
- Forecast the season, not the last 8 weeks. For seasonal SKUs use last year's same weeks × trend (or a seasonal model) from September; keep the moving average only for flat SKUs. Track bias monthly - it is the error you can fix.
- Pre-build stock before the peak for A-class seasonal SKUs, sized with the seasonal forecast and the 10-17 day lead time, instead of reacting to stockouts in November.
- Clear the 9 SKUs without sales for 180+ days (markdown, bundle or return) and add a stop-ordering rule when a SKU's demand drops for 8 weeks.
- Split OTIF failures by owner - short lines belong to planning (stock), late deliveries to logistics and the carrier. Today the largest group is 'short only', so the first conversation is with planning.
- Report WAPE and bias as the headline accuracy KPIs, MAPE only for the long tail.
How we keep measuring¶
| KPI | Owner | Cadence | Target | Trigger for action |
|---|---|---|---|---|
| Forecast bias | Demand Planner | Monthly, per SKU class (leading) | -5.0% to 5.0% | Outside ±10% for a class |
| Days of cover | Supply Planner | Weekly, per SKU | 14.0 days to 35.0 days | Below 7 days on an A SKU - expedite |
| On time in full (OTIF) | Logistics Manager | Weekly, split into short / late | ≥ 90.0% | Below 80% for 2 weeks |
| Stockout rate (SKU-days) | Supply Planner | Weekly | ≤ 3.0% | Above 6% in season |
| Obsolete stock share | Inventory Controller | Monthly | ≤ 5.0% | Above 10% of stock value |
| Forecast error (WAPE) | Demand Planner | Monthly | ≤ 30.0% | Above 45% |