Skip to main content

4. Safety Stocks

So far, the inventory models treated demand and supplier timing as predictable. Real demand varies, and suppliers do not always arrive exactly on schedule. A safety stock is a planned buffer against that uncertainty. It is not a substitute for diagnosing a poor forecast, unreliable process, or unrealistic lead-time assumption.

This chapter starts with one source of uncertainty: normally distributed demand over a known protection period. It uses a specified cycle service level as the target. Later models can add uncertain lead time, discrete demand, and economic service-level choices.

Choose the service measure first​

“Service level” can refer to different events and denominators. Define the metric before choosing a target or comparing software results.

MeasureWhat is counted?Example interpretation
Cycle service level α\alphaReplenishment cycles with no stockout, divided by cyclesChance that available inventory covers demand until the next replenishment
Period service level αp\alpha_pTime periods with no stockout, divided by periodsShare of days or weeks in which every demand unit was available
Fill rate β\betaDemand units supplied immediately from stock, divided by total demand unitsShare of requested units customers receive without waiting
Client service / OTIFComplete customer orders delivered on time and in full, divided by ordersShare of orders that meet the agreed delivery promise

These measures are not interchangeable, and there is no universal ranking that holds for every measurement window and customer mix. A business can have a high unit fill rate while still missing many small orders, or a strong cycle service rate while having a poor result on an unusually busy day.

A short service-score example​

A shop begins each day with 6 units of a limited-release product. On day one, customers request 10 units; 6 are supplied immediately. The next day, demand is 1 unit and is fully supplied.

  • Fill rate: 7/11≈63.6%7/11 \approx 63.6\% of units were filled immediately.
  • Period service: day one had a stockout and day two did not; over these two days, 1/2=50%1/2=50\% of periods had no stockout.
  • Cycle service: if each day is one replenishment cycle, one of the two cycles had no stockout, also 50%50\% here.
  • OTIF: cannot be inferred without defining customer orders and whether each whole order arrived on time.

The numbers happen to match for period and cycle service in this two-day example. That does not make the definitions identical. Change the cycle length, bucket size, or customer-order mix and the measurements can diverge.

Model demand with a Normal distribution​

Let demand in one time bucket have mean μd\mu_d units and standard deviation σd\sigma_d units. The first model assumes:

d∼N(μd,σd2)d \sim \mathcal{N}(\mu_d,\sigma_d^2)

The mean describes the expected demand; the standard deviation describes its spread. From nn observations dtd_t, estimate the spread with the sample standard deviation:

sd=∑t=1n(dt−dˉ)2n−1s_d = \sqrt{\frac{\sum_{t=1}^{n}(d_t-\bar d)^2}{n-1}}

The Normal assumption is a useful first model, not a claim that real demand is continuous or perfectly bell-shaped. It can assign probability to negative demand, which is especially concerning when the mean is small relative to the standard deviation. Inspect the data and check whether the approximation is reasonable for the item and horizon.

For X∼N(μ,σ2)X \sim \mathcal{N}(\mu,\sigma^2), the density is:

fX(x)=1σ2πexp⁡(−(x−μ)22σ2)f_X(x)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)

The cumulative distribution function gives the probability of demand being at or below a threshold xx:

FX(x)=P(X≤x)F_X(x)=P(X\le x)

For a standard Normal variable Z∼N(0,1)Z\sim\mathcal{N}(0,1), write its CDF as Φ(z)\Phi(z). Its inverse Φ−1(α)\Phi^{-1}(\alpha) returns the threshold that leaves probability α\alpha below it. A density height is not itself a probability; probability is area under the curve.

Turn a cycle service target into safety stock​

Suppose the inventory at the start of a protection period must cover one bucket of demand, and management chooses cycle service target α\alpha. Set the inventory threshold to the α\alpha quantile of demand:

ι=F−1(α;μd,σd)=μd+zασd,zα=Φ−1(α)\iota = F^{-1}(\alpha;\mu_d,\sigma_d) = \mu_d + z_\alpha\sigma_d, \qquad z_\alpha=\Phi^{-1}(\alpha)

The mean demand μd\mu_d is the expected-use portion of the threshold. The amount above it is safety stock:

SS=zασdSS = z_\alpha\sigma_d

For a 95% cycle service target, zα≈1.645z_\alpha\approx1.645. If mean demand is 100 units per period and standard deviation is 25, the target is approximately 100+1.645(25)=141.1100+1.645(25)=141.1 units, of which about 41.1 units are safety stock.

The service factor grows nonlinearly as the target approaches 100%. Moving from 90% to 95% requires a smaller additional buffer than moving from 95% to 99%. A 100% target would require an unbounded threshold in this continuous Normal model; operationally, every chosen target still carries residual risk.

Match the variability to the protection period​

The demand standard deviation must correspond to the same time bucket used by the protection period. If the replenishment lead time is LL buckets under continuous review, then under independent, identically distributed bucket demand:

ROP=Lμd+zασdLROP = L\mu_d + z_\alpha\sigma_d\sqrt{L}

The safety-stock portion is zασdLz_\alpha\sigma_d\sqrt{L}. For periodic review every RR buckets, the protection window includes both the wait until the next review and supplier lead time. With fixed lead time and the same independence assumption:

S=(L+R)μd+zασdL+RS = (L+R)\mu_d + z_\alpha\sigma_d\sqrt{L+R}

Here SS is an order-up-to target for inventory position. The square-root term is not a generic time conversion; it follows from adding variances of independent periods:

∑t=1τdt∼N(τμd,τσd2),στ=σdτ,SS=zασdτ\sum_{t=1}^{\tau} d_t \sim \mathcal{N}(\tau\mu_d,\tau\sigma_d^2), \qquad \sigma_\tau=\sigma_d\sqrt{\tau}, \qquad SS=z_\alpha\sigma_d\sqrt{\tau}

For four independent weeks with weekly standard deviation 25 units, the four-week standard deviation is 254=5025\sqrt{4}=50 units, not 100. At a 95% cycle service target, the corresponding safety stock is about 1.645(50)=82.31.645(50)=82.3 units.

Forecast errors as the variability input​

If the mean demand forecast already reflects trends and seasonality, safety stock can be based on forecast error rather than raw demand variation. Define error as forecast minus actual demand, et=ft−dte_t=f_t-d_t. When the forecast is unbiased, the error mean is near zero; use the standard deviation of those errors at the same bucket size as the protection window:

SS=zασeSS=z_\alpha\sigma_e

For multiple independent buckets, scale by τ\sqrt{\tau} as above. A biased forecast should be corrected rather than hidden by inflating the safety factor.

Independence and correlation matter​

The square-root rule assumes demand in different buckets is independent. If high-demand periods tend to follow high-demand periods, the variance over the protection window is larger than τσd2\tau\sigma_d^2; the simple rule can understate the buffer. Negative correlation can have the opposite effect. Prefer forecast errors measured at the same time aggregation as the actual lead time and review interval, and test the aggregation assumption before relying on it.

Correlation also matters when combining related products or markets. For two demand streams XX and YY:

Var(X+Y)=σX2+σY2+2ρσXσY\mathrm{Var}(X+Y)=\sigma_X^2+\sigma_Y^2+2\rho\sigma_X\sigma_Y

For example, if two color variants have standard deviations of 25 and 75 units and correlation ρ=0.5\rho=0.5, the combined standard deviation is:

252+752+2(0.5)(25)(75)≈90.1\sqrt{25^2+75^2+2(0.5)(25)(75)}\approx90.1

Assuming independence would give about 79.1 units instead, understating the combined variation in this example. Pooling demand does not make correlation disappear.

Practice: select, calculate, and explain​

Concept check​

Quiz

Service levels and safety stock

1 / 7

Which metric is the fraction of requested units supplied immediately from on-hand stock?

Pick an answer to see if you are right.

Rank the safety-stock calculation​

Put the planning steps in order for a Normal-demand protection period with a specified cycle service target.

Quiz

Calculate a protection-period buffer

1 / 1

The target is cycle service level α; τ periods of demand protect the inventory position.

OrderDrag the handle to rearrange — top should be first.

  1. 1Convert α to zα = Φ⁻¹(α), then calculate SS = zαστ.
  2. 2Confirm α is the intended cycle-service metric and define the protection window τ.
  3. 3Aggregate the mean to μτ = τμd and standard deviation to στ = σd√τ under independence.
  4. 4Estimate per-period mean μd and standard deviation σd from data at a matching time bucket.
  5. 5Add safety stock to expected protection-period demand to set the reorder point or order-up-to target.

Drag items into the correct order (or use ↑↓), then check.

Takeaways​

  • Name the service metric before setting its target; cycle service, period service, fill rate, and OTIF have different denominators.
  • For a Normal protection-period demand with cycle target α\alpha, use SS=zαστSS=z_\alpha\sigma_\tau and add it to expected demand.
  • Under independent, equal-variance buckets, στ=σdτ\sigma_\tau=\sigma_d\sqrt{\tau}; correlated demand needs a covariance-aware model.
  • Align demand or forecast-error variability with the actual protection-period bucket.
  • Treat the Normal distribution and fixed-lead-time assumptions as model choices to validate, not facts guaranteed by the supply chain.

Previous: When Should I Order?.

Next: Inventory Policies with Safety Stock — apply buffers to continuous and periodic replenishment.