XYZ analysis — classify demand stability and pair it with your ABC data
XYZ analysis inventory method: classify SKUs by demand stability — X steady, Y seasonal, Z lumpy. Compute CV and read the ABC×XYZ matrix per cell.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
XYZ analysis classifies every SKU by how stable its demand is: X items sell at a steady, predictable rate, Y items swing with season or promotion, and Z items are lumpy — long silences punctuated by bursts. It answers the question ABC can't: two SKUs can both be class-A revenue drivers, but one sells 3 units every single day while the other sells 40 in a week and nothing for a month — and they need completely different buying methods. This article gives you the CV calculation, the ABC×XYZ matrix, and what each cell deserves.
The classification: coefficient of variation
XYZ is computed from demand variability, usually via the coefficient of variation (CV): the standard deviation of periodic demand divided by its mean. Take a demand window (weekly buckets over 12 weeks works for most catalogs), compute mean and standard deviation per SKU, then CV = σ ÷ mean.
Common cutoffs — treat them as conventions, not laws, and recalibrate against your own catalog:
| Class | CV (weekly demand) | Character | Examples |
|---|---|---|---|
| X | ≤ 0.5 | Steady, predictable | Everyday consumables, staples |
| Y | 0.5–1.0 | Variable, patterned | Seasonal goods, promo-driven items |
| Z | > 1.0 | Lumpy, erratic | Big-ticket sporadic buys, new products, fads |
Worked example, three SKUs from an aquarium supply store, 12 weekly buckets (illustrative data):
| SKU | Weekly sales (12 wks) | Mean | Std dev | CV | Class |
|---|---|---|---|---|---|
| FILTER-CARB-3PK | 22, 20, 24, 21, 19, 23, 22, 20, 21, 24, 22, 20 | 21.5 | 1.6 | 0.08 | X |
| HEATER-100W | 8, 3, 2, 1, 2, 4, 14, 18, 15, 9, 4, 2 | 6.8 | 5.9 | 0.86 | Y |
| TANK-75GAL | 0, 0, 2, 0, 0, 0, 1, 0, 0, 3, 0, 0 | 0.5 | 1.0 | 2.00 | Z |
Same store, three different planning problems. FILTER-CARB-3PK can run on a plain reorder point. HEATER-100W needs a seasonal buy pattern. TANK-75GAL should not have an automated reorder at all — its demand is events, not a rate.
One correction before you compute: use demand that excludes dark days. A SKU that was out of stock for three of the twelve weeks shows artificially low (and artificially variable) demand — the same censoring error that corrupts velocity generally (the in-stock-only correction). Where you know the dark weeks, either exclude them or interpolate the rate; where you don't, read Z classifications on fast-movers with suspicion, because frequent unavailability can masquerade as lumpiness.
The ABC×XYZ matrix
ABC ranks importance (typically by revenue or profit contribution — the spreadsheet method is owned by ABC inventory analysis); XYZ ranks predictability. Cross them and every SKU lands in one of nine cells, and each cell has a natural method:
| X (steady) | Y (seasonal) | Z (lumpy) | |
|---|---|---|---|
| A (top value) | The cash engine. Tight reorder points, modest safety stock, frequent counts. Automate attention. | The managed risk. Seasonal buys planned backward from peak; deeper safety stock through the swing window. | The white whale. Hand-buy each order; consider preorders or deposits; never let a formula own it. |
| B (middle) | Low effort, keep the routine. | Standard planning with a seasonal overlay. | Order-to-demand where possible; hold shallow stock. |
| C (tail) | Candidates for min/max automation; near-zero attention. | Buy shallow, clear fast, don't carry over. | The elimination zone. Question why it exists at all — this cell feeds rationalization. |
Two cells deserve special attention:
- A×Z is where money is made or lost. High value, unpredictable demand — the worst combination. The methods that work are human judgment per order, customer commitments (preorders, deposits), and refusal to carry deep speculative stock. If a third of your capital sits in A×Z, that's the store's central planning problem.
- C×Z is the quiet bleed. Low value and lumpy demand means every unit bought is a small bet you'll never notice losing. These SKUs are natural candidates for pruning or made-to-order handling.
What each class gets operationally
- X items: trust the math. A standard reorder point with modest safety stock sized to their low variance is sufficient; over-buffering X items is the most common waste in stores that just added buffers everywhere.
- Y items: the method is calendar-driven, not rate-driven. Plan the seasonal buy backward from the demand window, and recompute CV on in-season weeks only — a full-year CV blends two different products (in-season and off-season) into one meaningless number.
- Z items: turn off automated triggers. Event-based buying, explicit forecast bets you can audit later, or exit. Measure forecast quality on these separately if you try to forecast them at all (MAPE and bias) — a blended catalog MAPE mostly measures Z-item noise.
Before/after: what the classification changes
Before, one undifferentiated rule — "reorder at 2 weeks of cover" — applied to all three example SKUs. The results:
- FILTER-CARB-3PK: fine, by luck. Steady demand makes almost any rule look OK.
- HEATER-100W: the rule buys 2 weeks of cover in September, right before the winter run — every year, a repeat gap during the exact weeks that matter.
- TANK-75GAL: the rule triggers a reorder after the 3-unit burst in week 10, ordering stock that sits for months until the next burst.
After XYZ: the filter runs on autopilot with minimal buffer; the heater gets a planned seasonal buy starting September at deeper cover; the tank has no trigger at all — it's hand-bought against the events that create demand. Same catalog, same effort ceiling, three appropriate methods instead of one wrong one applied three ways.
Doing it in a spreadsheet, quickly
- Export 12 weeks of sales by SKU (weekly buckets).
- Compute mean and sample STDEV (STDEV.S) per row, then CV = STDEV.S ÷ mean.
- Apply the class cutoffs with an IFS formula; blank or zero-mean SKUs go straight to Z pending review.
- Join with your ABC classes (value ranking) and pivot the 3×3 matrix; sort within cells by inventory value to see where the capital actually sits.
- Refresh quarterly — classifications drift as catalogs and demand patterns shift.
Common questions
What is XYZ analysis in inventory management? XYZ analysis classifies SKUs by demand stability: X items have steady, low-variability demand (CV typically ≤ 0.5), Y items fluctuate with season or promotions (0.5–1.0), and Z items are lumpy and erratic (> 1.0). The class determines which planning method — automated reorder, seasonal planning, or hand-buying — fits the SKU.
How do you calculate XYZ classification? Bucket demand into consistent periods (usually weeks) over a window like 12 weeks, compute the mean and standard deviation per SKU, and divide: CV = standard deviation ÷ mean. Apply your class cutoffs to the CV. Exclude or correct out-of-stock periods first, or unavailability will masquerade as instability.
What's the difference between ABC and XYZ analysis? ABC ranks SKUs by importance — usually revenue or profit contribution; XYZ ranks them by demand predictability. ABC decides where attention goes; XYZ decides which method each item gets. Combined in the 3×3 matrix, they assign both an attention level and a planning approach to every SKU.
What should I do with Z items? Stop applying rate-based reorder rules to them. Buy Z items event-by-event against real orders or known occasions, use commitments like preorders where the item is valuable enough, and prune the low-value Z cell — low-value lumpy SKUs are the classic rationalization candidates.
How often should I re-run XYZ classification? Quarterly is a sensible default — class memberships drift as products mature and seasons rotate. Re-run sooner after major catalog changes, new product introductions (which always start as Z), or a demand-shifting event like a new channel.
Your next step
Run the CV calculation on your top 50 SKUs by revenue this week — they hold most of your capital, so their X/Y/Z labels matter most. Cross-tab against your existing ABC classes, then read the A×Z and C×Z cells first: one needs a hand-buying policy, the other needs a pruning review, and both are sitting there in your own data.