Skip to main content

3. Capturing Unconstrained Demand (Not Sales)

Teaching rewrite — the Data step of the framework. Original wording; examples and numbers are illustrative.

Introduction​

Lesson 2 established that we must forecast demand, not sales. The hard part is that most systems only record sales: what was shipped, when, and how much. As long as stock is available, that is fine — every request becomes a sale. The trouble starts with shortages: demand keeps arriving, but the data stops showing it.

Unconstrained demand means the customer’s originally requested product, quantity, and delivery date — what, how much, when — not what you shipped, how much you shipped, and when you shipped or invoiced it.

This lesson covers four techniques to recover demand when stock runs out:

  1. Order collection and management — keep recording orders during shortages
  2. Shortage censoring — tell the model which periods are constrained
  3. Demand drivers — estimate lost demand from data unaffected by stock
  4. Aggregate forecasting — cope with substitution and cannibalization

(A fifth — customer collaboration — comes in a later lesson.)

Perfect demand data is usually impossible. But better data → better forecast, and more data → better forecast. Unconstraining demand also lets you estimate lost sales and their revenue impact.

Case snapshot: the missing 5%​

A consultant tuned a forecasting model for a manufacturer, chasing every 0.1% of accuracy. Then it emerged that the model was trained on data from a new IT system while results were reported from the old one. Comparing the two showed a gap of about 5% across all products; reconciliation brought it to 1%, but the rest stayed unexplained. Lesson: fix the data before polishing the model — a 5% data error dwarfs a 0.1% model gain.


3.1 Order collection and management​

If customers can still place orders during a shortage, an order management system keeps recording demand even while shipments drop. Track these order types:

Order typeWhat it isRisk if mishandled
Open ordersRecorded but not yet delivered (often due to shortage). Keep a backlog and tell customers when to expect deliveryCustomers re-order → duplicates
Duplicated ordersThe same need ordered several times because the customer never heard backInflated demand
Cancelled ordersOrders dropped because delivery was too lateDemand vanishes from data unless recorded with original date and reason
Substitution ordersCustomer accepts another product insteadDemand credited to the wrong product
Uncollected ordersCustomer never ordered because stock was visibly missing (e.g. abandoned online carts)Invisible demand — hardest to measure

Good practice:

  • Record each order’s initially requested delivery date — not the entry, shipping, or invoice date.
  • Use a small set of cancellation reasons (price too high, delay too long, no longer needed, took a substitute) — not a vague “customer cancelled”.
  • Let the system propose substitutes automatically and log the original request; manual workarounds lose information.
  • Prevent data/KPI hacking — e.g. customer service editing requested dates so service levels look higher.

Worked example: cleaning order data​

During a 3-week shortage the order log for item A shows 260 order lines. Investigation finds:

FindingLinesTreatment
Duplicates of earlier open orders (inside the 260)40Remove
Cancelled after delay (inside the 260)30Keep — real demand at its requested date
Substitutions: customers asked for A but were logged as orders for B (not in the 260)25Add to A (and remove from B)

Unconstrained demand for A ≈ 260 − 40 + 25 = 245 lines. Raw orders (260) would overstate it; shipments alone would understate it badly.


3.2 Shortage censoring​

Many B2C (and some B2B) businesses cannot collect orders during shortages — the customer simply leaves. But when stock is available, sales = demand. So track inventory alongside sales and mark periods where stock was out:

Period statusWhat the data showsUse in the model
In stockTrue demandLearn from it
Out of stockConstrained sales (often zero)Censor — don’t treat as low demand

Censoring tells the model: “sales here were limited by supply; ignore or adjust these values.” Most forecasting engines ignore inventory data even when it is readily available — a missed opportunity.

Censor even when the system shows stock if the item was effectively unavailable:

  • Inaccurate inventory records (ERP says 3 units; shelf is empty)
  • Stock present but not displayed to customers (in the back room)
  • Ultra-fresh products whose quality drove customers to competitors

Worked example: censored average​

Daily sales over 10 days; the item was out of stock on days 4–6:

Day12345678910
Sales12911000101387
In stock?✓✓✓✗✗✗✓✓✓✓
  • Naive average of all days: 70 / 10 = 7.0 per day
  • Censored average (in-stock days only): 70 / 7 = 10.0 per day
  • Estimated lost sales: 3 days × 10 = 30 units

The naive forecast is 30% too low — exactly how the vicious circle begins.

Using demand drivers to estimate lost demand​

Some data is not affected by your stock — weather, web traffic, store footfall, number of customers served. Use it to reconstruct demand during shortages.

Ice-cream example: normally 1 in 5 customers buys a waffle cone. Waffle cones ran out at 2 pm; 25 customers were served between 2 pm and 6 pm. Estimated lost waffle-cone demand ≈ 25 / 5 = 5 cones, added to the morning’s actual sales.


Checkpoint: orders and censoring​

Quiz

Checkpoint — sections 3.1 and 3.2

1 / 4

Which date should be recorded to capture demand timing?

Pick an answer to see if you are right.


3.3 Substitution and cannibalization​

EffectTriggerData distortion
SubstitutionItem A is out of stock; customers buy similar item BB’s sales > B’s demand; A’s sales < A’s demand
CannibalizationA promotion or new launch on B pulls demand away from AA’s sales and demand fall; B’s rise

If you forecast sales, you will over-forecast the product that benefited and under-forecast the one that lost.

Aggregate (top-down) forecasting​

One remedy: forecast at the family level (all ice creams) rather than per flavour, then split down to SKUs. Within a family, substitution moves volume around but the total stays closer to true demand.

Not a silver bullet:

  • Defining families is hard. Fruit vs non-fruit? Premium vs budget? Cone vs cup? Products in one family must truly substitute for each other.
  • Splitting the family forecast is risky. If the split is based on recent sales, a recently out-of-stock SKU gets a smaller share → less stock deployed → more shortages: the vicious circle again. Base split ratios on censored, in-stock history.

Worked example: a fair split​

A family forecast is 1,000 units for next month. Last month (with SKU A out of stock for half the month):

SKULast month salesIn-stock share of monthCensored monthly rateSplit by raw salesSplit by censored rate
A15050%150 / 0.5 = 3001,000 × 150/1,000 = 1501,000 × 300/1,150 ≈ 261
B500100%500500≈ 435
C350100%350350≈ 304
Total1,0001,1501,0001,000

The raw split would starve SKU A; the censored split restores its share. (B’s sales were probably inflated by substitution from A, so its share falls.)


Checkpoint: substitution and aggregation​

Quiz

Checkpoint — section 3.3

1 / 4

Chocolate runs out and vanilla sales jump. This is…

Pick an answer to see if you are right.


Rank: improving demand data​

Quiz

Sequence demand-data improvements

1 / 2

Rank these data sources from MOST to LEAST faithful to unconstrained demand during a shortage.

OrderDrag the handle to rearrange — top should be first.

  1. 1Raw invoiced sales
  2. 2Order log without cancellation or substitution tracking
  3. 3Order log with requested dates, cancellations with reasons, and logged substitutions
  4. 4Shipments with stock-out periods flagged (censored)

Drag items into the correct order (or use ↑↓), then check.


Check: capturing unconstrained demand​

Quiz

Capturing unconstrained demand

1 / 6

When is tracking sales instead of demand acceptable?

Pick an answer to see if you are right.


Takeaways​

Remember
  • Demand = requested what, how much, when — record the original requested date
  • Manage open, duplicated, cancelled, substitution, and uncollected orders deliberately
  • If you can’t capture orders, censor stock-out periods using inventory data (and effective unavailability)
  • Use stock-independent drivers (traffic, footfall, weather) to estimate lost demand
  • Substitution (shortage) and cannibalization (promotion/launch) distort item-level sales
  • Top-down forecasting helps, but split with censored shares to avoid the vicious circle
  • Fix data before polishing the model

Further Reading​