Inventory Optimization: 5 Ways to set Service Level and Safety Stock Targets

What are the best practices to set up safety stock targets in a supply chain?

Nicolas Vandeput
8 min readJul 19, 2021


As a supply chain consultant, I often help my clients to create better inventory models. It is a difficult task — primarily because of data quality and misaligned forecasts. When launching an inventory optimization initiative, it is essential to understand where we start and where we want to go. This will allow you to build up the right expectations, understand what data is required and how much complexity to expect.

Inventory Maturity Level: 5 Stages. Copyright: Nicolas Vandeput

Based on my consultancy experience, many supply chain companies are still stuck on maturity levels 2 or 3 — often struggling to get the safety stock formula from Stage #3 right.

Stage #1: Flat Stock Coverage for all Items

The simplest way to set safety stock targets is to use a one-size-fits-all approach where all products receive the same coverage.

We keep 2 weeks of stock for all our products

This is the worst way you can set safety stock targets. Flat stock coverages do not consider any single driver that should push your inventory requirements up or down. Let’s review the main inventory drivers:

  • product’s demand variation (or forecast error),
  • lead times, review periods, and risk-horizon,
  • costs of overstocking and understocking.
Safety stock drivers. Copyright: Nicolas Vandeput

See my previous article for more info about these drivers and how they influence optimal inventory policies.

Stage #2: Set Safety Stocks Based on ABC/XYZ

One-size-fits-all is a Bad Idea

A refinement of Stage #1 would be to set stock targets based on a few rules. In other words, you could create a few product categories, each with specific stock coverage requirements.

ABC XYZ Classification

The usual way — but not the optimal way— to categorize products is to use ABC XYZ classification.

ABC XYZ Classification. Simple, arbitrary technique to categorize products based on 2 axis. Products are allocated to an ABC category (axis 1) and an XYZ category (axis 2).

For example, you can use ABC/XYZ to classify items from low to high volumes (ABC, horizontal axis) and low to high supply risks (XYZ, vertical axis). You can then easily allocate your products to a category and get a safety stock target (as shown in the Figure below).

Using ABC XYZ classification to set safety stock targets.

2 Reasons Why ABC XYZ is a Poor Tool

ABC/XYZ matrices have two issues:

  1. A limited number of dimensions. By definition, ABC/XYZ only takes two aspects into account to categorize your products. Whereas your products — and supply chains in general — are much more complex than a 2-dimensional representation.
    In our example above, we don’t consider profitability, client criticality, shelflife, holding costs, etc. Would you trust a model that omits so many relevant aspects?
  2. Arbitrary, limited thresholds. An ABC XYZ matrix contains only two arbitrary thresholds per dimension.
    In our example above, supply lead times should play a significant role in setting inventory targets. However, only distinguishing three types of lead times won’t provide satisfying safety stock settings. We need more granularity.

⚠️💣💥 Forecastability: Demand Volume vs. COV vs. Benchmarks

In the above example, ABC classification is done based on demand volume (usually computed as the historical demand average). The implicit assumption is that high-volume items are easier to forecast and should henceforth get a lower inventory coverage.
This is not always correct: forecast accuracy is not always correlated to volume. Some high-volume items can be challenging to forecast. Whereas some low (or medium) volume items can enjoy a good forecast accuracy. If you want to track forecastability, do not use demand volume or coefficient of variability (COV). Instead, use the forecast accuracy achieved by a forecast benchmark (such as a moving average).

Stage #3: Same service level for all items

Instead of setting safety stock targets based on a classification, you can set service level targets and let an equation determine the required safety stock target for each product.

By doing so, each product will (theoretically) get the right safety stock coverage to guarantee this service level (we just solved the lack of granularity from Stage #2).

Safety stock formula (x_t is the risk-horizon). ⚠️Do not forget to include the review period (R) in the square root.

The usual safety stock formula [Ss = z σ √(R+L)] takes as input

  • the demand variation over the risk-horizon (= the sum of the review period and the lead time)
  • a service level target (which is transformed into the z factor, see the table below).

This simple formula suffers from a few assumptions. Still, it should already be helpful to get an idea of how much inventory is needed.

Computing z (source:

⚠️💣💥 Cycle Service Level

Pay attention that the service level factor (z) is based on the cycle service level, which is a (very) specific metric (no one is monitoring it in practice). The cycle service level is defined as the probability of not running out of stock between two delivery cycles (which could be every week or month based on your supply chain). In practice, most supply chains track KPIs such as the fill rate or % of orders delivered in time in full.

More info about cycle service level, fill rate, and their respective pro & con here.


I have seen multiple companies failing to apply this simple safety stock formula. There is no point in moving on to Stage #4 until you master it.

If your actual service level is very different from your theoretical one (as inputted in the equation), that’s a symptom that you are not using this formula properly. (For example, one of my clients was inputting a 99.99% service level target in this equation… Hoping to get 85% in practice).

These are the usual mistakes:

  1. Review Period. A widespread mistake is to forget to include the review period (R) in the formula: Ss = z σ √(R+L). I like to call R+L the risk-horizon: the longer the review period, the longer the risk-horizon.
  2. Demand variation/Forecast Error. Many companies compute the demand variation/forecast error at the wrong aggregation level. For example, computing the forecast error per month, whereas the risk-horizon is a few weeks. Or per country when you need to set safety stock targets per warehouse.

Stage #4: Service level based on ABC/XYZ

Using the same service level target for each product is a poor idea. It will result in a suboptimal safety stock allocation: some products deserve more service level than others.

To segregate products and allocate service levels, we could use another ABC/XYZ matrix. The critical decision is to correctly choose the 2 axes: what are the two most crucial service level drivers?

Service level drivers

A good tradeoff would be forecastability vs. profitability.

Again, using an ABC/XYZ classification comes with limitations:

  1. A limited number of axis. Suppose you have products with short shelf lives or with erratic supply. In that case, the above profitability vs. forecastability classification won’t be good enough.
  2. ABC/XYZ Thresholds are arbitrary (and limited).

Stage #5: Optimized Service Levels

Instead of using a limited, arbitrary classification method to allocate service level targets to your products, we could rely on product-by-product optimization. When optimizing something — here the service level — you should decide what your objective is. In a supply chain, our goal is to maximize profitability.

In my book, I show that you can compute the optimal service level for any product by comparing its backordering cost (how much do you lose if you miss one product — often close to the product margin) and its holding cost.

Optimal service level (alpha) based on the holding costs (h) and the backorder costs (b). Source:

The intuition behind these formulas is that you need to make a tradeoff between your products’ profitability and holding costs. The higher the profitability, the more service level you should offer — you don’t want to miss any sales opportunity. On the other hand, the higher the holding costs, the less service level you can offer reasonably to your clients — you don’t want to be left with some extra inventory.

Bonus: Multi-Echelon Inventory Optimization

In this maturity framework, I didn’t discuss multi-echelon vs. single-echelon inventory optimization (MEIO vs. SEIO). However, unlocking MEIO will allow your supply chain to reduce its stock by 10 to 30% (these numbers are backup by academic research, various business cases, and my personal experience).

On the other side, MEIO has often be seen as challenging to implement— requiring massive, complicated software. However, this is not always true. For example, if you have a distribution supply chain — with a few productions plants delivering multiple local warehouses — you can easily achieve state-of-the-art MEIO with a simple model (which is beyond the scope of this article).

Let’s connect on LinkedIn



Nicolas Vandeput

Consultant, Trainer, Author. I reduce forecast error by 30% 📈 and inventory levels by 20% 📦. Contact me: