lesleymaore.

PROJECT 06 / MEAT DISTRIBUTION · INVENTORY & BUSINESS ANALYSIS

Invisible Demand: Inventory Simulation

A customer asks for ten kilos. You can supply six. What happens to the four kilos your sales report never sees?

Fictional data & simulated outcomesInspired by professional experiencePython · Scenario analysis · Requirements

Recording every missed request barely changed fulfilment under the baseline rule, while modelled contribution fell by about KES 5,994.

Fictional simulation · Mean of 20 paired runs · 180-day evaluation

START HERE

Selling less doesn’t always mean customers wanted less.

Imagine a meat distributor deciding tomorrow’s purchases from yesterday’s sales. When stock runs out, sales stop recording what customers wanted. A request log could make that missing demand visible.

But meat has a limited selling window. Automatically buying more can turn missed sales into excess stock and waste. The useful question is:

When does recording unmet demand help a buyer: and when does the buying rule need to change?

This is a controlled simulation of a fictional distributor. It tests an idea; it does not report Unified Meat Packers’ stock, waste or purchasing performance.

THE EXPERIENCE BEHIND THE QUESTION

From sales reporting
to a better question.

My commercial analysis and sales-management experience at Unified Meat Packers (2019–2023) inspired the reporting question behind this project.

The inventory records and outcomes here are fictional; they do not describe the employer’s operations.

HOW THE EXPERIMENT WORKS

Change the information.
Keep the comparison fair.

01 / SALES ONLY

Record what left the shelf.

The buying rule learns from fulfilled kg. Unfilled requests do not enter its demand history.

02 / PARTIAL LOGGING

Record some missed demand.

The rule sees fulfilled kg plus approximately half of unfilled kg. This is an illustrative capture level, not measured staff behaviour.

03 / COMPLETE LOGGING

Record every requested kilo.

The rule sees fulfilled plus all unfilled kg. This idealised condition shows what fuller information can change.

Each policy receives the same customer demand and supplier-delay sequence within a run. All use a trailing 28-day average and the same buying rule. I test four fictional products across five operating scenarios and 20 random seeds.

Explain the terms without the jargon
Unmet demand
Requested quantity the distributor could not supply that day.
Fill rate
The percentage of requested kilos supplied. It does not count how many complete orders were delivered.
Stock buffer
Extra stock coverage in the buying target, beyond the planned wait for replenishment and next review.
Waste rate
Expired kilos divided by opening stock plus receipts during the evaluation.
Modelled contribution
Sales less the cost of sold goods, expired goods and an assumed daily stock-holding charge. Other operating costs are excluded.

01 / THE BASELINE RESULT

The extra buying had little demand left to satisfy.

The baseline already fulfils more than 99% of requested kg. Adding the missed requests to this rule raises stock and expiry slightly, while adding very little fulfilment. More information is not the problem; automatically translating it into more buying is what we are testing.

Mean of 20 fictional runs · 180 evaluation days per run · baseline stock buffer
Information usedFill rateWaste rateAverage stockContribution (KES)
Sales only99.60%1.52%358.7 kg3,315,962
Half of unmet kg logged99.60%1.54%359.8 kg3,313,003
All unmet kg logged99.61%1.57%360.9 kg3,309,968

Rates are averages across runs. Full logging beat sales-only contribution in 0 of 20 baseline runs. These runs explore assumptions; they are not observations of real businesses.

02 / TEST THE BOUNDARY

The same information can lead to a different result under a leaner policy.

With one less buffer day, full logging increases mean fulfilment from 97.81% to 98.00%. Its contribution is higher in 13 of 20 paired runs. The average increase is small and excludes staff time spent logging.

This does not establish a best policy. It shows why a real trial needs an agreed service requirement and a waste constraint before choosing how much stock to carry.

What changes when all unmet demand is logged?
Versus sales-only, using the same scenario and random seed
Operating scenarioFill-rate changeMean contribution change (KES)Contribution wins
Baseline buffer+0.01 pp-5,9940/20
One less buffer day+0.20 pp+1,30113/20
One more buffer day+0.00 pp-4,5511/20
Two fewer shelf-life days+0.04 pp-102,6510/20
Less reliable supply+0.12 pp-11,7910/20

pp = percentage points. A positive contribution difference favours full logging under this rule. No confidence interval or real-world financial benefit is implied.

03 / TRY THE COMPARISON

Which trade-off would your stakeholder accept?

Choose an operating scenario. Compare service, waste and stock together; a single “better” number cannot choose the policy for you.

Precomputed simulation results, averaged across 20 runs. This control changes only this comparison. It does not issue purchase orders or recommend a food shelf life.

THE BUSINESS DECISION

Test the log.
Don’t automate the purchase yet.

01

Make missed requests visible.

Propose a small request log alongside existing sales records. Record requested kg, fulfilled kg, the shortfall and its reason. Audit completion and staff time so the information has a measurable cost.

02

Review shortages with stock age.

A buyer needs both the demand gap and the remaining selling window. More stock is only one possible response; investigate supply reliability and the buying rule before changing quantities.

03

Agree the guardrails before a trial.

Sales, purchasing and finance should agree an acceptable fill rate, waste constraint and comparison period. Measure service and contribution after logging costs. No target or return on investment is established by these fictional results.

TURN THE QUESTION INTO REQUIREMENTS

Capture the four kilos.
Keep the accounting honest.

One request, one record.

Acceptance: 10 kg requested and 6 kg supplied must reconcile to 4 kg unfilled. Duplicate entries are flagged.

A request is not revenue.

Acceptance: logging an unfilled request leaves invoice totals unchanged. Unknown quantities remain unknown.

A flag is not an order.

Acceptance: the log creates a buyer review item. Stock age and open purchase orders are visible before an approved purchase decision.

Proposed requirements for a fictional solution, not a workflow deployed at Unified Meat Packers.

SOURCES, METHODS & HONEST LIMITS

An established problem.
A decision worth testing.

Research already documents how stockouts hide demand. I test what recording that demand changes under a simple buying rule, including the unfavourable results.

Sachs & Minner’s censored-demand research informs the problem framing; the INSEAD publication summary on stockout timing motivates attention to what gets recorded. My code does not implement those papers’ methods.

A PAGE FROM THE EXPERIMENT

More information.
A trade-off to test.

Modelled contribution · KES
PolicyContribution
Sales only3,315,962
Half logged3,313,003
All logged3,309,968

Fictional baseline · Mean of 20 paired runs · 180 evaluation days

01

Experiment walkthrough

Read the comparisons, including unfavourable results.

THE PROPOSED WORKFLOW

A request is
not an order.

  • 01
    Record the requestRequested, fulfilled and unfilled kg
  • 02
    Review stock ageVisibility before a buying decision
  • 03
    Test the trade-offService, waste and logging costs
02

Business brief

Inspect proposed requirements and acceptance criteria.

THE RESEARCH RECORD

Ideas credited.
Assumptions visible.

  • 01
    Censored demandSales may hide unmet requests
  • 02
    Simulation boundariesFictional data and outcomes
  • 03
    No optimal-policy claimA simple buying rule is tested
03

Methods & attribution

See the assumptions and research informing the question.

What this simulation cannot prove

The records are generated, and the outcomes follow chosen assumptions. Shelf lives and prices are illustrative. The model excludes substitution, backlogs, supplier capacity limits, customer switching, logging errors and most operating costs. It cannot establish actual employer performance, food safety, savings or an optimal purchasing policy.

Full logging assumes unfulfilled requests can be observed. In practice, silent walkaways may never appear in the log. The model also counts remaining stock without forecasting its future expiry; an age-aware buying rule is a possible extension, not an implemented feature.

THE TAKEAWAY

A better record is a starting point.
A better decision still needs a test.

My job as an analyst is to explain what the information changes, and what it doesn’t, so the team can choose its next step with the trade-off in view.