Skip to main content
DoneThat

AI Adoption GuideRetailClear

Slow-Moving Inventory Root Cause Analysis

ML explains slow-moving inventory by separating price, placement, assortment, supply timing, local demand, competitive, and execution factors.

Retail processPlanBuyPriceStockSellFulfillReturnClear

By Don, DoneThat’s AI coach · updated

Why slow movers need cause attribution before action

Slow-moving inventory is not one problem. The same weeks-of-supply spike can come from an overpriced pack size, a dead planogram pocket, a duplicate SKU that stole demand, a late inbound wave that missed the peak window, a local demand shift the forecast never saw, a competitor promo that pulled traffic, or a store that never put the product on the shelf. If you treat every aged unit as a markdown candidate, you cut margin on items that were never price-sensitive and leave the real failure untouched.

Category managers diagnosing aged inventory need a disciplined split between symptoms and causes. Sell-through rate, weeks of supply, and aged-unit counts tell you that a SKU is stuck. They do not tell you why. Root-cause analysis for slow movers is the step that turns a clearance queue into a set of merchandising decisions: price, placement, assortment, replenishment timing, localization, competitive response, or store execution.

This page is for that diagnostic job. It assumes you already know which items are slow. The question is what to change first, and what not to change at all.

What the model separates

A useful attribution model does not output a single “root cause” label and stop. It estimates how much of the observed underperformance is explained by each factor family, using history that is already in the retail stack.

Price and offer. Relative price versus category peers, recent price changes, pack architecture, and promo depth all shape whether shoppers walk past an otherwise healthy item. Attribution here asks whether the item looks expensive in context, not whether it is “on sale enough.”

Placement. Fixture zone, eye-level versus bottom shelf, adjacency, and endcap or lobby exposure drive discovery. An item that sells in stores where it has strong placement but stalls where it sits in a quiet bay is a placement problem, not a product problem.

Assortment. Overlap with near-substitutes, depth within a brand family, and SKUs that compete for the same need state create cannibalization. Slow movement can mean the assortment already covers the shopper’s choice elsewhere.

Supply timing. Receipts that land after the seasonal peak, after a planned promo, or in a volume that exceeds the remaining sellable window inflate aged inventory even when demand was real for a short period. Timing failures look like demand failures if you only look at ending stock.

Local demand. Catchment demographics, weather, events, and neighborhood mix shift what sells by store cluster. A national “slow mover” can be healthy in one cluster and dead in another. Attribution should surface that split before you apply a chain-wide markdown.

Competitive pressure. Comp pricing, promo calendars, and new entrants in the same need state pull volume. Without competitive context, price and demand factors get blamed for losses that were external.

Execution. Out-of-stocks that never scanned as available, planogram compliance gaps, missing tags, and delayed resets suppress sales even when every other factor is fine. Execution is often the cheapest fix and the easiest to misclassify as weak demand.

Inputs the diagnosis needs

The model needs enough history to compare the slow SKU against itself and against peers under similar conditions. At minimum that means:

  • Sales and inventory positions over time, at item and store (or cluster) grain, long enough to cover seasonality and recent resets
  • Price and promo history for the item and close substitutes
  • Placement and planogram history: zone, fixture, facing counts, and known reset dates
  • Receipt and on-order timing relative to sellable windows
  • Competitive price or promo signals where you collect them
  • Execution signals: on-hand versus available, compliance audits, or shelf-scan exceptions

When sales history, price history, or placement history is missing for the item and stores in scope, the system should return empty output rather than a guessed cause. Partial attribution that silently drops a major factor is worse than no attribution: it steers merchandising toward the wrong lever with false confidence.

If only some stores have complete placement or price trails, limit the diagnosis to those stores or clusters. Do not invent chain-wide causes from a thin sample.

How category managers use the output

The useful output is an attributed explanation per item (and often per cluster), ranked by contribution, with enough evidence to decide the next action. Typical patterns:

  • High placement contribution plus healthy sell-through where facings are strong → reset or relocate before touching price
  • High assortment contribution with overlapping substitutes → exit or swap the SKU rather than markdown forever
  • High supply-timing contribution with a known late receipt → transfer, hold for the next window, or negotiate differently next season; avoid treating it as a permanent demand failure
  • High local-demand contribution → localize assortment or price by cluster instead of a national clearance
  • High execution contribution → fix availability and compliance first; remeasure before clearance creative goes live

Human-in-the-loop stays mandatory. The model attributes causes from observational history. Merchandising still chooses the action: markdown depth, transfer, delist, reset, or no change. Attribution is decision support, not an automated clearance trigger.

Pair the diagnosis with the next clear-stage steps when the cause is exit or markdown: Clearance Copy and Creative Generator for messaging once you have decided to clear, Clearance Markdown Optimizer for depth and cadence once price is the chosen lever, and End-of-Season Transfer Optimizer when the fix is moving units to demand rather than cutting price in place.

What good looks like in practice

A working process starts from the aged or slow-mover list, runs attribution only where input history is complete, and routes each item to a primary lever with a secondary check. Reviewers challenge attributions that conflict with known events (a missed truck, a delayed reset, a competitor’s flash promo) and override the model when ground truth is clearer than the features.

Re-run after the chosen action lands. If placement was the top factor and you reset, sell-through should move before you escalate to markdown. If it does not, revisit assortment and competitive factors. Closed-loop review is how the team learns which factor families are trustworthy in which categories.

Keep the vocabulary stable across category reviews: price, placement, assortment, supply timing, local demand, competitive, and execution. Shared labels make cross-category patterns visible and stop every meeting from inventing a new taxonomy for the same failures.

Limits and failure modes

Attribution quality collapses when planogram history is stale, when promo flags are incomplete, or when store clusters mix very different shopper bases. Competitive data that is sparse or delayed will understate external pressure and overstate own-price or demand weakness.

Do not treat the top-ranked factor as destiny. Factors interact: a late receipt into a weak placement pocket is both supply timing and placement. The point of separation is prioritization, not false precision. When uncertainty is high, prefer low-cost levers (execution, placement) before irreversible ones (deep markdown, permanent delist).

Empty output on missing sales, price, or placement history is a feature. Force-filling causes trains the organization to trust noise. Better to flag the data gap, fix the history, and diagnose once the evidence exists.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first