Inventory Planning

Demand Is Not a Bell Curve

Dan Malka · Updated:

Somewhere in your planning process there is a dial. You set a service level, say 95%, and the system converts it into a buffer quantity for each item. That conversion is textbook mathematics and it is not controversial. What is worth an hour of your attention is the picture of your business hiding inside it, because that picture is wrong for a meaningful slice of a typical catalogue, and it is wrong in a way that concentrates on the items that hurt.

What is your safety stock formula quietly assuming?

It is assuming your demand looks like a neat bell curve: mostly clustered around the average, falling away evenly on both sides, no surprises. The multiplier the system applies to your service level, which your planners may call the service factor or z, is not a general caution setting. It is the bell curve doing the work.

Three claims are bundled into that, and each one is a place where reality can walk away. That demand is symmetric around its average. That each period is independent of the one before it. And that the pattern held still over whatever window you measured.

The same assumption usually enters the chain twice, and the second time is easier to spot. Before any buffer is calculated, something has to produce a demand figure and some sense of the uncertainty around it, and Hyndman and Athanasopoulos are direct about what that step assumes by default: “Most time series models produce normally distributed forecasts”, by which they mean, in their words, that “we assume that the distribution of possible future values follows a normal distribution” (Forecasting: Principles and Practice, 3rd edition). They are describing the forecast, not the safety stock formula, so this is not the same statement about the same equation. It is the same bell curve entering one step upstream, which means an operation can inherit the assumption twice without ever consciously agreeing to it once.

This is not a stupid assumption. The bell curve is genuinely correct in an enormous number of settings, it needs only two numbers any spreadsheet can produce, and it is what makes a single service-level dial possible at all. It earned its place. The problem is that nobody rechecks whether the item in front of them qualifies.

Why does that break on your spiky items?

Because demand cannot be negative, and a bell curve can.

A bell curve runs off to infinity in both directions. Fit one to a demand history and you have quietly assigned some probability to customers returning goods they never ordered. For a fast, steady item that probability is too small to care about. For a spiky one it is not small at all, and you can work out exactly how bad it is with one spreadsheet column.

The number that decides it is one your planners already track: how big the swings are compared with the average, calculated as the standard deviation of demand divided by average demand. Planners and vendors call it the coefficient of variation, or CV. Under a bell-curve model, the amount of probability sitting below zero depends only on that ratio, and you can read it straight out of Excel with NORM.S.DIST(-1/CV, TRUE):

How spiky the item is (CV) Share of the model that sits below zero
0.3 under 0.1%
0.5 about 2.3%
0.7 about 7.7%
1.0 about 15.9%
1.2 about 20.2%

Read the bottom rows again. On an item whose swings are as large as its average, the model setting your stock is putting roughly a sixth of its expectation on something that cannot physically happen. That is not a rounding error. It is the model having the wrong shape, in exactly the region you are asking it to work.

The reason is structural rather than accidental. Demand has a floor at zero and no ceiling, so the real picture is squashed on one side and stretched on the other. Quantities built by multiplying effects together rather than adding them behave this way across many fields; the standard reference is Limpert, Stahel and Abbt, BioScience 51(5), 2001.

What makes this hard to catch is that the error does not run in one predictable direction. A symmetric model laid over a lopsided reality is too generous in one region and too thin in another, and which one you land in depends on the service level you dialled in and how pronounced the lopsidedness is. Either way you are not buying the service level printed on the dial. You are buying an unknown one, and you find out which after the quarter closes.

What about the items that sell nothing most weeks?

For slow movers the bell curve is not slightly wrong. It is the wrong kind of object.

If an item sells in only a minority of weeks, its history is mostly zeros with occasional orders. Planners call that intermittent demand, and lumpy demand when the orders themselves vary wildly in size. There is no bell curve anywhere in that picture: the most likely week is a zero week, and the average weekly demand that the whole formula rests on is a quantity the item never actually experiences.

This is well-charted ground, not an exotic edge case. The standard first method splits the history into two questions, how big the orders are and how far apart they come, and handles each separately: J. D. Croston, “Forecasting and stock control for intermittent demands”, Operational Research Quarterly 23(3), 1972, described with its own limitations in Hyndman and Athanasopoulos, Forecasting: Principles and Practice.

You do not need to implement any of that. The point is that a catalogue is not one population, and running a single rule calibrated on your fast movers across all of it is the mistake. The slow tail is usually most of your item count and a serious share of your working capital.

What should you use instead?

In rising order of effort:

Read the answer off your own history. You do not need to know what shape your demand follows if you have enough history to look it up directly. Line up demand across windows the length of your lead time, sort them, and take the 95th value out of 100. That is your 95% cover level, measured rather than assumed, and it respects the floor at zero automatically because none of your own history is negative. The cost is that you need enough windows for it to mean anything, and it assumes next year broadly resembles last year.

Ask for a forecast with a range, not a point. A forecast of 1,000 units tells you nothing about buffers. A forecast that says most likely 1,000, with an 80% chance of landing between 700 and 1,500, is directly usable: the buffer is the distance from your plan to the top end you have chosen to cover. This only helps if the range itself was not manufactured on the same bell-curve assumption, which, as above, is the default. The remedy is named in the same source: “When a normal distribution for the residuals is an unreasonable assumption, one alternative is to use bootstrapping, which only assumes that the residuals are uncorrelated with constant variance.” Bootstrapping resamples the forecast’s own historical misses instead of assuming a shape for them, and the consequence is the one that matters to you: “Because there is no normality assumption, the prediction intervals are not symmetric.” A lopsided range is the honest answer for a quantity with a floor and no ceiling, and asking a vendor which of the two kinds they produce is a fair and revealing question.

Match the treatment to the item, not to the catalogue. Fast, steady items really are close to a bell curve and the standard rule is fine for them. Say so, keep it, and spend the effort where the shape is wrong.

One reframe worth carrying into that conversation: the right stock level was never the average anyway. It depends on what a stockout costs you against what a pallet of dead stock costs you, and those two numbers are almost never equal. Once they are unequal, the correct answer sits above or below the average by design, before anyone argues about distributions.

How do you check your own item file?

An afternoon, an ERP export, and a spreadsheet.

  1. Pull two to three years of demand by item and by period, using a period length that matches how you actually reorder rather than what the calendar suggests.
  2. Add two columns. The spikiness ratio from above (standard deviation divided by average demand), and the share of periods with no demand at all. The second one separates your intermittent items from your continuous ones far more reliably than the ABC class does.
  3. Sort by spikiness, descending, and cross-reference against inventory value. Everything at the top is being served by a rule whose assumption it violates, and now you have a ranked list of where the money is.
  4. For your ten most valuable items, run the honest comparison. Put the buffer your current rule gives you next to the number your own history gives you, using the percentile from the previous section. Where they diverge widely, the formula and your history disagree about your business, and only one of them has evidence.

That is three columns and one comparison. It will not tell you what to do, but it will tell you, using nobody’s numbers but your own, which part of your catalogue is being planned with the wrong picture in mind.

If you want that assessment run properly across a full item file, that is the first stage of how our per-item inventory work starts, before any modelling commitment. Two companion guides cover the neighbouring mistakes: why your average is lying to you on the flat number hiding a moving business, and what forecast accuracy metrics hide on why a healthy accuracy score can sit on top of the wrong items being wrong.