Supply chain analytics · Portfolio project

Know what to order.
Before it hurts.

A complete inventory control workflow built on two years of synthetic operating history — ABC-XYZ segmentation, economic order quantity, service-level safety stock, demand forecasting, Monte Carlo stockout risk, and supplier lead-time exposure.

60
SKUs · 12 suppliers
24 mo
Operating history
20k
Monte Carlo runs / SKU

One operating picture

Executive overview · ABC-XYZ heatmap, working capital, risk queue, and supplier performance.

Open full preview →
Executive inventory dashboard showing KPI cards, an ABC-XYZ heatmap, a reorder queue, holding-cost concentration, and supplier performance. Open live preview
Built from the seed-42 pipeline outputs · 1440 × 900 executive layout Static HTML preview of the Tableau workbook specification

From raw demand to a replenishment decision.

The pipeline is deliberately database-optional and fully reproducible. Each layer answers a different planning question and feeds the next.

01 · SEGMENT

Which SKUs matter most?

Value-based ABC classes meet calendar-complete demand variability (XYZ), exposing the high-value, hard-to-forecast items that deserve planner attention.

ABC-XYZ
02 · SET POLICY

How much should we hold?

EOQ sets the economic order quantity. Service-level safety stock and reorder points are calculated at 90%, 95%, and 99%, with the target policy applied per SKU.

EOQ · SS · ROP
03 · QUANTIFY RISK

What could go wrong?

ETS and Holt-Winters forecasts feed a 20,000-run lead-time demand simulation. The output is a stockout probability, revenue exposure, and a suggested action.

Forecast · Monte Carlo

Reproduce the run

Python 3.11+. Deterministic seed. No database required for the core pipeline.

# install, regenerate, validate python -m pip install -e ".[dev]" python -m inventory_opt.pipeline --regenerate python -m pytest # interactive dashboard streamlit run app.py
pandasNumPystatsmodelsSciPy PlotlyStreamlitPostgreSQLTableau

Built to be inspected.

Source code, tests, SQL, dashboard specification, and the full analytical narrative are public. The dataset is synthetic and clearly labeled.