| Vose Software

Industry: Manufacturing
Product: ModelRisk
Application: Inventory Control


Why a 95% Service Level Plan Delivered 81%: Probabilistic Inventory in ModelRisk

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.

Lead-time demand distribution — flagship SKU

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.

Where the textbook went wrong

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.

What the simulation revealed for the flagship SKU

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.

The service-level vs holding-cost frontier

Running the simulation across a sweep of reorder points produces a curve management can actually negotiate over:

Service level vs annual holding cost — flagship SKU

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.

What actually drives stockouts

Tornado: drivers of stockout probability at r = 50,000

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.

What the model changed

  • The blanket 95% service-level target was replaced with a SKU-segmented policy (98%/95%/90%) calibrated to customer-contract economics — net inventory-cost saving $310k/year vs flat 95%.
  • Reorder points on the top 40 SKUs were raised to their simulated 95% percentiles, eliminating the previously-unexplained 14-point service-level gap.
  • Two underperforming suppliers were renegotiated, with on-time penalty clauses tied to the simulation-estimated cost of their reliability shortfall.
  • The Wilson EOQ formula was retired for the 200 highest-value SKUs and replaced with simulated optimal Q from the (Q, r) model, capturing the bulk-discount break-points the analytic formula could not handle.
  • A monthly recalibration job refits the demand distribution and the lead-time distribution from the prior 90 days, so the model tracks the supply chain rather than being a static plan.

ModelRisk Functionality Used

  • LogNormal demand fitting on 18 months of daily sell-through, replacing a Normal assumption that under-priced the right tail of lead-time demand and put the 95% reorder point ~3,800 units too low.
  • Gamma lead-time fitting on actual supplier delivery dates, capturing the holiday-season and port-congestion extensions that contract lead times do not.
  • Gaussian copula linking lead-time and demand-during-lead-time with rank correlation 0.35, calibrated to historical co-movement during launch and promotion windows.
  • Compound supplier-fulfilment process — Bernoulli(0.92) on-time, with a conditional Beta(12, 3) fill rate when partial — that priced the effective 76% on-time-in-full reality rather than the contractual 100%.
  • (Q, r) policy simulation across a sweep of reorder points, producing the service-level vs holding-cost frontier the inventory team and the CFO could negotiate against.
  • Tornado on stockout probability, surfacing the lead-time/demand correlation as the second-most-material driver and redirecting the team's process-improvement attention.

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%.