409. Fill Rate

409.1. Fill Rate (Type II, 𝛽)

The expected fraction of demand satisfied directly from on-hand inventory. Counts units, not events.

Fill rate=𝛽=𝐸[units served]𝐸[units demanded]=1𝐸[units short]𝐸[units demanded]

409.1.1. Why fill rate, not CSL?

Cycle service level (CSL) treats every stockout — small or large — as a single failure. Fill rate is unit-weighted: a cycle that’s 1 unit short is treated very differently from a cycle that’s 100 units short. Most operational service-level promises to customers (e.g., “we fulfill 99% of unit demand”) refer to fill rate.

CSL → frequency of stockout incidents. Fill rate → fraction of demand met.

409.1.2. Computing fill rate (continuous demand)

For a (Q, r) policy with normal lead-time demand:

Expected shortage per cycle=𝐸[(𝐷𝐿𝑟)+]=𝜎𝐿𝐿(𝑧)

where 𝑧=(𝑟𝜇𝐿)/𝜎𝐿 and 𝐿(𝑧)=𝜑(𝑧)𝑧(1Φ(𝑧)) is the standard normal loss function (see [newsvendor expected_profit](../newsvendor/expected_profit.typ) for the derivation).

Each cycle covers 𝑄 units of demand on average. So:

𝛽=1𝐸[shortage per cycle]𝐸[demand per cycle]=1𝜎𝐿𝐿(𝑧)𝑄

Equivalently:

Required𝜎𝐿𝐿(𝑧)=(1𝛽)𝑄

To hit fill rate 𝛽, choose 𝑟 such that 𝐿(𝑧)=(1𝛽)𝑄/𝜎𝐿.

409.1.3. Why fill rate is usually higher than CSL

For the same 𝑟:

Whenever 𝑄 is much larger than 𝜎𝐿, the fill rate exceeds the CSL. Reason: most cycles run no stockout at all (contributing 100% fill); the few that do stock out are usually short by only a few units (each contributing > 99% fill on its own cycle).

Practical ranges:

409.1.4. Setting 𝑟 for target fill rate

Iterative or table-based. Algorithm:

  1. Given target 𝛽, solve 𝐿(𝑧)=(1𝛽)𝑄/𝜎𝐿 for 𝑧.
  2. Use a normal loss function table (or numerically solve 𝑧).
  3. Set 𝑟=𝜇𝐿+𝑧𝜎𝐿.

Most software does this automatically.

Example

Given (same params as CSL example):

  • 𝑄=775, 𝜇𝐿=462, 𝜎𝐿=18.7
  • Target fill rate: 𝛽=99% (more demanding than CSL = 95%)

Step 1 — required loss-function value

𝐿(𝑧)=(1𝛽)𝑄𝜎𝐿=(10.99)77518.7=0.414

Step 2 — invert the loss function

Looking up: 𝐿(0.10)0.351, 𝐿(0.05)0.378, 𝐿(0.00)0.399, 𝐿(0.05)0.421.

So 𝑧0.04 gives 𝐿(𝑧)0.414. (For high fill rate, we’d usually expect 𝑧>0 — but since 𝑄 is much larger than 𝜎𝐿, even a small safety stock yields high fill rate. In some cases 𝑧 even goes negative for moderate fill rates.)

Step 3 — reorder point

𝑟=𝜇𝐿+𝑧𝜎𝐿=462+(0.04)18.7461

Almost no safety stock! Setting 𝑟461 achieves 99% fill rate because the order quantity 775 is so large compared to lead-time variability 18.7 that stockouts are rare and small.

Step 4 — same setup, target CSL = 95%

Compare: CSL 95% would set 𝑟=493 (safety stock 31). Fill rate at 𝑟=493:

𝑧=49346218.71.66,𝐿(1.66)0.0207𝛽=118.70.020777510.000599.95%

Implication: setting CSL to 95% gives a fill rate of essentially 100% in this regime. The CSL target is much more demanding than the fill-rate target for moderate-Q regimes.

This explains why retailers usually quote fill rate (99%) rather than CSL (which would have to be e.g. 70% to give the equivalent operational meaning).