What XYZ analysis is

XYZ analysis splits an assortment into three groups by demand stability. Unlike ABC analysis, which answers how much a product brings in, XYZ answers how evenly it sells and whether it can be trusted in a forecast.

The practical value of the method lies in the decisions that follow from it:

  • X products can be held with a minimal safety stock and ordered by formula;
  • for Z products the formula does not work — either a larger buffer, or order-on-demand, or removal from the assortment;
  • in promo planning X products give a predictable response, Z products are a lottery.

The formula: coefficient of variation

The measure of stability is the coefficient of variation (CV): the standard deviation of sales normalised by the average level of sales. Normalisation is essential, otherwise high-volume products would automatically look “less stable” than small ones.

        sigma
CV = ----------- x 100%
         mean

mean  — average sales across the periods
sigma — standard deviation of sales across the periods
        sigma = sqrt( sum(xi - mean)^2 / n )
Group Coefficient of variation Nature of demand What it means in practice
X up to ~10% Stable, flat Historical forecasting is dependable, safety stock minimal
Y ~10–25% Variable, with a trend or a season Forecasting works, but needs a buffer and regular recalculation
Z above ~25% Irregular, episodic Historical forecasting barely works, decisions are manual
⚠

The 10% and 25% thresholds are a textbook guideline, not a constant. In volatile categories — fashion, accessories, impulse goods — those thresholds leave group X almost empty and the analysis loses its meaning. It is better to look at the distribution of CV across your own catalogue and cut the groups by percentile, so that every group ends up a workable size.

A worked example

Sales of four SKUs across 6 months (units):

SKU M1 M2 M3 M4 M5 M6 Mean Sigma CV Group
Product A 100 105 98 102 100 95 100.0 3.1 3.1% X
Product B 200 190 215 205 195 210 202.5 8.5 4.2% X
Product C 80 120 95 140 110 75 103.3 22.7 21.9% Y
Product D 10 60 5 90 15 4 30.7 32.7 106.7% Z

Note products A and B: the absolute spread of B is larger (8.5 against 3.1), but relative to its own volume it sells just as evenly. That is exactly why the classification is built on CV rather than on the raw deviation.

Data requirements for a valid calculation:

Requirement Why it matters
12 periods or more On 3–4 data points the deviation estimate is statistically unstable
Exclude out-of-stock periods A zero caused by missing stock is a gap in the data, not a fall in demand
A homogeneous series A change of packaging or unit of measure, or merged SKUs, breaks comparability
Account for seasonality Otherwise a predictably seasonal product lands in Z for no useful reason
Separate new products CV is meaningless for an item with two months of history — that is a cold start, not instability

The ABC/XYZ matrix

The axes are independent, so they are combined into a 3×3 matrix. Each cell is a separate policy for stock, promotion and catalogue presence.

X (stable demand) Y (variable demand) Z (irregular demand)
A (high contribution) AX — the foundation of the business. Always in stock, auto-replenished, priority on the shelf and the home page AY — important and temperamental. Higher safety stock, manual control before peaks AZ — the risk zone. Large revenue on unpredictable demand: a supply failure or frozen stock hurts most here
B (medium contribution) BX — the workhorse. Automatic ordering, minimal manager attention BY — the main object of a category manager’s manual work BZ — candidates for order-on-demand or reduced depth
C (low contribution) CX — a cheap assortment tail to maintain, often accessories CY — keep on a residual basis, no stocking up CZ — first candidate for delisting: little contribution and impossible to plan

The practical conclusion from the matrix: management attention belongs to cells AZ and AY, not to row A as a whole. Cell AX already works — it is stable and mostly needs not to be broken. Cell CZ absorbs buying time and warehouse space and returns nothing, which is where cleaning up the product matrix starts.

How XYZ changes personalization work

Demand stability directly affects which signals work in recommendations.

X products are a dependable statistical base. They have accumulated enough even data for co-occurrence statistics to be stable: frequently-bought-together blocks and co-occurrence recommendations deliver predictable quality on the X assortment. Those products are also safe to use as an anchor in popularity blocks — they will not suddenly become irrelevant.

Z products break popularity-driven algorithms. Their sales are sparse and jagged, so any metric of the form “bought N times in the period” is statistically noisy: a spike of three orders can look like a trend to the algorithm. For the Z assortment the weight shifts towards features that do not depend on sales history:

  • content attributes of the product — category, brand, attributes, price (the content-based approach);
  • session signals — what the person is looking at right now;
  • membership of the long tail as a separate slot in the output, so the tail is not washed out by the popular core.

A practical consequence for configuring recommendation strategies: the XYZ group is convenient to export into the product feed as a separate attribute. It can then be used in rules — capping the share of Z products in a block on the product page, for example, or deliberately pushing the Z tail in similar-product blocks, where popularity is not the point anyway.

Implementation checklist

  1. Assemble the series — sales by SKU for at least 12 periods, in units rather than money, because a price change distorts the variation.
  2. Clean the data — drop out-of-stock periods, exclude products younger than 6 periods, collapse duplicate SKUs.
  3. Remove seasonality — either deseasonalise the series or calculate XYZ within the season.
  4. Calculate CV and look at its distribution across the catalogue before choosing thresholds.
  5. Set the thresholds — start from the textbook 10%/25%, then adjust for the real spread in your category.
  6. Overlay ABC and work through the nine cells, starting with AZ and CZ.
  7. Recalculate regularly — quarterly for stable categories, monthly for fashion and short-life-cycle goods.

Common mistakes:

Mistake What it leads to
Calculating CV in money rather than units Inflation and promo prices inflate the variation and push products falsely into Z
Not separating new products Half of group Z turns out to be products with no history rather than unstable demand
One set of thresholds for every category One category ends up with an empty X, another with an empty Z
A one-off calculation “just to look” The classification is stale within a quarter and stops influencing decisions
Delisting everything that lands in Z Group Z also holds accessories and image products needed for a complete catalogue