# Invisible Demand: Inventory Simulation

A fictional meat-distribution experiment by Lesley Maore: **does recording unfilled requests improve a buying decision, or simply create more stock?**

[Read the case study](https://lesleymaore.pages.dev/projects/invisible-demand/) · [Executed learning notebook](notebook.html)

## Experience connection
Inspired by my commercial analysis and sales-management experience: Commercial Data Analyst & Sales Manager, Unified Meat Packers, September 2019–January 2023. This experience inspired the question. The data and outcomes are fictional and do not reconstruct or verify employer performance.

## The experiment
Three information policies: sales only, half of unfilled kg logged, all unfilled kg logged: use the same simple buying rule. Test four fictional products for 240 days, score the last 180, and repeat on 20 seeds in five operating scenarios. All 300 policy runs are retained.

The baseline result challenges the initial expectation: full logging slightly improves fulfilment but lowers modelled contribution in all 20 baseline runs. With one less buffer day, the contribution difference becomes slightly positive on average and positive in 13 of 20 runs. Better information does not automatically justify buying more under the existing rule.

No real-world savings, inventory performance or optimal policy is claimed. Review [methodology](docs/methodology.md), [business brief](docs/business-brief.md) and [research attribution](docs/research-and-attribution.md).

## Reproduce
Python 3.10+; simulation and validation require only the standard library:

```sh
python3 simulate.py
python3 verify.py
```

Outputs:
- `data/synthetic_demand.csv`: 960 fictional product-day requests and supplier lead outcomes for seed 0.
- `data/daily_ledger.csv`: 2,880 product-day-policy records for baseline seed 0; opening, receipts, sold, expired and closing kg reconcile.
- `data/batch_receipts.csv`: received replenishment batches for baseline seed 0. Orders still in transit at the end are not received stock.
- `data/sensitivity.csv`: all 300 scenario-seed-policy metric rows.
- `data/analysis.json`: reviewed aggregates, policy assumptions and parameter values.

`analysis.ipynb` reruns the simulation, checks it against the published snapshot, runs the independent SQL checks and charts the comparisons. Notebook rendering uses Jupyter and Matplotlib. Saved outputs and a readable HTML export are included.

## What makes the treatment useful
The project separates better reporting from better purchasing, retains adverse results and proposes acceptance criteria. It applies established censored-demand research; no academic novelty is claimed.

## Project scope

The simulation tests a reporting question under explicit fictional assumptions. It does not establish employer performance, food safety, an optimal buying policy or realised financial benefits. Logging costs and an agreed service requirement would need to be included in a real trial.

## Credits

**Project author.** Lesley Maore. Invisible Demand is part of my data analytics portfolio, inspired by my commercial analysis and sales-management experience.

**Data and simulation.** The distributor, inventory records and simulated outcomes are fictional materials created for this experiment. They are not employer operating data.

**Research and inspiration.** Sachs and Minner’s censored-demand research, the INSEAD stockout-timing summary and the other literature and portfolio examples are acknowledged in the research-and-attribution record. Their framing is distinguished from this simulation’s code and results.

AI-assisted project.
