Spare-parts inventory optimisation works best when each part gets a probabilistic forecast, a range of possible demand with probabilities, instead of a single number. Data Department, an applied machine learning consultancy, uses this approach with automotive and industrial distributors to set stock by the cost of a shortage versus the cost of holding, segmented by part type. It reduces holding cost while protecting availability on the parts that matter.
Why is spare-parts demand so hard to forecast?
Most spare parts sell rarely. A typical catalogue has a small group of fast movers, such as filters and brake pads, and a long tail of parts that sell a few times a year, often one unit at a time. This is called intermittent demand: many periods with zero sales, broken by occasional, irregular orders.
Intermittent demand breaks the usual forecasting tools. A moving average of a part that sold 0, 0, 3, 0, 0, 1 units says "0.67 per month", which never actually happens. The real question is different: what is the chance that one or more units are needed before the next delivery arrives, and how many?
Spare parts add three more complications. Catalogues are large, often more than 100,000 active items. Parts are superseded and substituted, so one part's history is split across several part numbers. And the cost of a shortage is high, because a missing part can keep a customer's machine or vehicle out of service.
How do Croston-type methods differ from probabilistic models?
Croston-type methods are the classic answer to intermittent demand. In plain words, they split the history into two simpler series: how big an order is when one arrives, and how many periods pass between orders. They smooth each one and divide size by interval to get an average demand rate. A variant called the SBA (Syntetos-Boylan approximation) corrects a known upward bias. These methods are simple, fast and better than a moving average. Their limitation is that they return one average rate, not a distribution. They say "about 1.1 units per lead time", but not "a 45% chance of zero and a 7% chance of four or more".
Probabilistic models predict the full demand distribution for each part: the probability of zero, one, two, three units and so on. They can use more information than the part's own history: the vehicle or machine park in each region, compatibility and substitution data, seasonality, weather and sales channel. Hierarchical Bayesian models are useful for sparse parts because they borrow strength from similar parts, so a part with very little history still gets a sensible distribution.
For stocking decisions the distribution is what matters, because the stock level depends on how much of the upper tail you want to cover.
What service level should each part have?
A service level is the share of demand, or of replenishment cycles, that you want to meet from stock. It should not be the same for every part. A useful starting point is ABC/XYZ analysis:
- ABC ranks parts by annual consumption value. A parts are the few that make up roughly 80% of value, B the next 15%, C the long tail.
- XYZ ranks parts by demand variability. X parts have steady demand, Y parts fluctuate, Z parts are sporadic and hard to predict.
Combining the two gives nine segments with different policies:
| Segment | Typical parts | Forecasting approach | Stocking policy |
|---|---|---|---|
| AX | High-value, steady | Gradient boosting with seasonality | Tight safety stock, frequent review |
| AY | High-value, fluctuating | Probabilistic, with drivers | Cost-based service level, close monitoring |
| AZ | High-value, sporadic | Conservative probabilistic, Bayesian | Case by case; consider supplier agreements |
| BX, BY | Mid-value | Probabilistic | Standard cost-based service level |
| BZ, CZ | Sporadic tail | Hierarchical Bayesian, substitution-aware | Stock only where shortage cost is high |
| CX, CY | Low-value, regular | Simple probabilistic | High service level; holding cost is small |
Add criticality as a third dimension: a cheap part that grounds a vehicle deserves a higher service level than its value suggests.
How does newsvendor logic set the stock level?
The newsvendor model is a simple rule from operations research. A newspaper seller must decide how many papers to buy before knowing demand. Unsold papers lose money; missed sales lose margin. The best quantity is where the probability of selling the last unit equals a ratio called the critical ratio:
Critical ratio = cost of being short ÷ (cost of being short + cost of excess)
You then stock up to the point where the demand distribution reaches that probability. For spare parts that are reordered repeatedly, the "cost of excess" is roughly the cost of holding one extra unit for one replenishment cycle, not the full part price.
Worked example: two parts, same forecast, different decisions
The numbers below are hypothetical, chosen to show the logic.
A probabilistic model gives the same demand distribution over the next replenishment cycle for two parts:
| Units demanded | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| Probability | 45% | 25% | 15% | 8% | 4% | 3% |
| Cumulative | 45% | 70% | 85% | 93% | 97% | 100% |
Expected demand is 1.1 units. A point forecast or a Croston-type method would say "about 1", and most systems would stock 1 unit of each.
Part A is critical. A shortage costs an estimated €100 per unit (emergency shipment plus lost margin). Holding an extra unit for a cycle costs €10. Critical ratio = 100 ÷ 110 = 0.91. The smallest stock with cumulative probability of at least 91% is 3 units.
Part B is non-critical. A shortage and an extra unit both cost about €10. Critical ratio = 10 ÷ 20 = 0.50. The answer is 1 unit.
For Part A, the expected cost per cycle is about €59.50 with 1 unit in stock and about €30.00 with 3 units. Same forecast, different decision, half the expected cost. Across tens of thousands of parts, this is where most of the savings come from.
How do substitution and supersession change the forecast?
When a part number is replaced by a newer one (supersession), or when several parts are interchangeable (substitution), the demand history is split. Forecasting each number separately underestimates the true demand for the group and leads to stock in the wrong place. The fix is to map the chains, forecast at the group level where parts are interchangeable, and allocate stock to the part number that will actually be shipped. Substitution data also helps sparse parts, because demand for a family is more stable than demand for any single number.
What results can you expect?
In a project with a large automotive distribution group holding more than 100,000 active parts, we replaced legacy point forecasts with probabilistic, segmented models: gradient boosting for frequent parts, hierarchical Bayesian models using substitution data for intermittent parts, and conservative models for high-value parts. The solution was designed for daily runs on AWS (Amazon Web Services) SageMaker, with integration into ERP (enterprise resource planning) and planning tools. Results: about 30% better forecast accuracy and about 10% lower inventory holding cost. See the spare-parts case study and why forecast accuracy is not enough.
Frequently asked questions
Is Croston's method still worth using?
Yes, as a baseline and for parts where a simple average rate is enough. For stocking decisions on critical or expensive parts, a full demand distribution gives better control over availability and cost.
How much history do we need for spare-parts forecasting?
Two to three years of order lines is a good start. Sparse parts can still be modelled by borrowing information from similar parts and from substitution groups.
Should every part have the same service level?
No. Set service levels by segment and criticality, using the cost of a shortage against the cost of holding. Uniform targets usually overstock cheap parts and understock critical ones.
Can this run inside our ERP?
The models usually run beside the ERP and write reorder points or suggested quantities back into it daily, so planners keep working in the system they know.