Industry: Manufacturing Product: ModelRisk Application: Inventory Control
A consumer-electronics manufacturer's inventory policy ran on the textbook safety-stock formula — SS = z × σ_LTD, with z = 1.645 for a target 95% cycle service level. Auditing six months of stockout incidents on its top 40 SKUs revealed an actual achieved service level of 81%. The textbook formula had not failed; the assumptions plugged into it had. Demand was not Normal, lead times were not independent of demand, and suppliers did not always deliver in full. The Wilson EOQ + Normal safety-stock duo, taught in every operations textbook, is a recipe whose pieces only work when the assumptions hold — and in this plant they did not.
The supply-chain team rebuilt its (Q, r) policy in ModelRisk. The new model swapped each silently-wrong assumption for an empirically-fitted distribution, modelled supplier delivery as a compound process (Bernoulli on-time × Beta fill rate), and coupled lead time to demand through a copula. The output was no longer a single safety-stock number per SKU but a service-level vs holding-cost frontier the team could choose a point on.
The corrected lead-time demand distribution above tells the whole story. Mean lead-time demand is 29,071 units. The textbook safety-stock formula — applied to the simulated standard deviation of 15,504 units — puts the reorder point at 54,575 units. But the actual 95th percentile of lead-time demand, with skew and correlation priced in, is 58,408 units. The Normal-based formula understates the reorder point by 3,833 units because it assumes a symmetric distribution that the real, right-skewed, correlation-fattened tail does not obey. That shortfall is the entire 14-point service-level gap.
Three errors in the legacy model each contributed measurably to the 14-point service-level shortfall.
Demand was lognormal, not normal. Daily demand for the flagship SKU fitted to LogNormal(μ_log = 6.7, σ_log = 0.42): mean 887 units/day, but with a right-skewed tail to over 2,400 units on launch days and post-promotion weeks. The Normal fit assumed by the textbook formula put symmetric mass around the mean; in practice, the upper tail of LogNormal-distributed demand during the procurement lead time is what eats safety stock.
Lead times were Gamma, not constant. Supplier lead time was being treated as a fixed 28 days (the contract value). Empirically it followed Gamma(shape = 6, scale = 5.2 days) — mean 31.2 days, P90 of 44 days, occasional 60-day deliveries from Chinese New Year holidays and port congestion. Using contract lead time instead of the realised distribution is the single largest source of the gap.
Supplier fulfilment was 100% in the model, not in reality. Per-order fulfilment was modelled as compound: Bernoulli(p = 0.92) for on-time delivery; conditional on a partial delivery, fill rate was Beta(α = 12, β = 3), mean 0.80. The combined effective on-time-in-full was 76%, not 100%.
Lead time and demand are not independent in the tail. The same macro events that cause demand spikes (product launches, holiday season) cause lead-time extension (carrier capacity tightens, customs back up). The team modelled this via a Gaussian copula with rank correlation ρ = 0.35 between demand-during-LT and LT itself. Treating these as independent — the textbook default — under-prices tail stockouts by roughly 8 percentage points.
The textbook formula put safety stock at 1.645 × σ_LTD ≈ 25,500 units, for a reorder point of 54,575 units. The Monte Carlo simulation, with the four corrected assumptions, said the 95th percentile of lead-time demand was 58,408 units — so the reorder point that actually delivers 95% cycle service level is r = 58,408, about 3,800 units above the Normal-based formula. The legacy system was holding far less than even the textbook number prescribed, which is what drove realised service down to 81%. Re-pricing the right tail closes the gap.
Running the simulation across a sweep of reorder points produces a curve management can actually negotiate over:
For the flagship SKU, holding cost runs about $8k/year at the current 81% service level (r ≈ 40,900), $15k/year at 95% (r ≈ 58,300), and $23k/year at 99% (r ≈ 76,100). The curve steepens sharply above 95%: the jump from 95% to 99% nearly doubles holding cost for four points of service, flat marginal value for most SKUs. Scaled across the top 40 SKUs, moving the whole portfolio from 81% to a flat 95% adds roughly $420k/year; pushing the whole portfolio to 99% would add $680k/year on top. The plant CFO and the VP of customer service finally negotiated against the same curve, and settled on a SKU-segmented policy: 98% service level on the 8 strategic SKUs that anchor major customer contracts, 95% on the next 20, and 90% on the long tail. The blended outcome reduced total inventory cost by $310k/year versus a flat 95% policy while honouring all anchor-customer SLAs.
The lead-time/demand copula correlation ρ ranks second behind only the lead-time scale parameter — confirming that the independence assumption was a costly modelling error rather than a harmless simplification. The supplier on-time probability ranks third; the team's procurement function targeted the two suppliers most responsible for the 92%-on-time figure, raising them to 96% over the next two quarters via tightened contract penalties.
The textbook safety-stock formula is not wrong; the assumptions feeding it usually are. A simulation that names every silent assumption — Normal demand, fixed lead time, perfect fulfilment, independence — and prices the cost of each one is what closes the gap between a planned 95% service level and a realised 81%.