AI grocery decisions: why perishables break the order model
In grocery, the question was never how much to order. It is how much to order given spoilage, shelf-life, and the markdown clock running all day.
Most retail decision models were built for goods that wait. A sweater unsold in March is still a sweater in April — discounted, transferred, carried over, but intact. The whole apparatus of seasonal planning, end-of-season markdown, and inter-store transfer assumes inventory holds its value while you decide what to do with it.
Grocery breaks that assumption on day one. A tray of strawberries unsold by Thursday is not discounted inventory — it is a shrink line accruing by the hour. The clock that governs a fresh SKU is not a season. It is a sell-by date measured in days, sometimes hours, and a spoilage curve that bends margin toward zero whether or not anyone makes a decision.
This is why grocery is the purest case for a decision layer, and also the one most chains run worst. The decisions are continuous, perishability-constrained, and impossible to resolve from a weekly batch forecast. Yet that is exactly how most food retailers still run fresh.
The perishability math
Start with what a forecast cannot see: the spoilage curve. For a non-perishable, the cost of holding one extra unit is a small carrying charge. For a fresh SKU, the cost of holding one extra unit past its sell-by is the full landed cost, written off as shrink. Add the labour to pull it and the disposal fee on top.
Shrink is not a rounding error in food retail. Across the industry, fresh categories run shrink in the range of 8% to 10%, and a meaningful share of that is avoidable. It is product that spoiled because it was ordered in the wrong quantity, rotated badly, or marked down too late. On a category doing 50M€ a year, even two points of avoidable shrink is 1M€ that never reaches margin.
That number sits on the P&L as a single line called "shrink" or "waste", treated as a cost of doing business. It is not. It is the accumulated residue of thousands of order and markdown decisions that were each made without the spoilage curve in the equation.
The shelf-life constraint compounds it. A DLC (date limite de consommation) or sell-by date is a hard wall. There is no carry-over, no transfer to a store with slower sell-through, no end-of-season clearance. The unit either sells before the wall or it becomes waste — and the decision window to prevent that is open for hours, not weeks.
Three forces therefore act on every fresh order, simultaneously:
- Spoilage — the share of the order that will perish before it sells, a function of order size and shelf-life
- Stock-out — the lost sale and the eroded trust on a category the shopper buys daily, not seasonally
- Markdown — the margin sacrificed to clear stock before the sell-by wall, the only lever once the order is placed
A forecast gives you a demand number. It tells you none of how those three forces net out at a given order size — and netting them out is the actual decision.
Why a forecast isn't a decision in grocery
A demand forecast answers one question: how many units will sell. In a non-perishable category, that answer is most of the decision. Order roughly to the forecast, hold a safety buffer, and carrying cost punishes you gently if you are long.
Fresh inverts the payoff. Being long is not a gentle carrying cost — it is shrink at full landed cost. Being short is not a deferred sale you recover next week. It is a daily-shopped category where the customer noticed the empty shelf and may not come back for the basket around it.
So the fresh decision is not "what is demand?" It is: at what order quantity does the marginal expected shrink equal the marginal expected stock-out cost, given this product's spoilage curve and today's demand volatility? That is a constrained optimisation, not a point estimate. A forecast is an input to it, not a substitute for it.
The volatility makes it worse. Fresh demand swings on weather, on a competitor's promotion two streets over, on a sunny Saturday that empties the produce aisle by noon. A weekly batch forecast smooths exactly the daily variation that determines whether you spoil or stock out. It is averaging away the signal that matters most.
This is the same architectural failure that plagues weekly replenishment cadence, only sharper. In dry goods, a week of drift costs carrying charges and the occasional stock-out. In fresh, a week of drift is a week of spoilage on one side and empty shelves on the other. The data to prevent both arrived hours ago, not next Monday.
Intraday markdown: a different game from end-of-season
In apparel, markdown is a season-end event. You read sell-through over weeks, set a discount, and clear residual stock before the next collection. The decision is slow, periodic, and reversible in the sense that the product survives the wait.
Grocery markdown is none of those things. It is intraday and irreversible. A pack of chicken with a sell-by of tomorrow has a margin profile that decays through today. Mark it down at 9am and you sacrifice margin you might not have needed to. Wait until 7pm and you may be discounting product that will be waste in two hours regardless — or, worse, that already crossed into unsellable.
The optimal markdown in fresh is a function of the remaining shelf-life, the observed sell-through rate today, and the spoilage curve — recomputed through the day as those inputs move. It is closer to a continuous control problem than a planning decision. A 30% markdown that clears the shelf by closing beats two failures at once. It beats a 50% markdown applied too late to product that spoils anyway, and a 15% markdown that leaves a third of the tray to be binned.
Most grocers run this with a fixed rule and a human. "Yellow-sticker everything within a day of sell-by, at 30%." It is a reasonable heuristic and it leaves money on the floor in both directions. It discounts product that would have sold at full price, and under-discounts product that needed 50% to move before the wall. The rule cannot see today's sell-through rate on this SKU in this store, because no human is recomputing it hourly across thousands of fresh items.
This is why FIFO and rotation discipline matter so much in fresh, and why they are so fragile. Correct rotation is the physical execution of an inventory decision — oldest stock forward, sell-by respected, markdown triggered at the right point on the curve. When rotation is done by tired hands at the end of a shift, the spoilage curve wins. The decision layer's job is to make the right call before it reaches those hands.
What a decision layer does for fresh categories
A decision layer does not produce a better forecast. It produces a decision that already has the spoilage curve, the shrink cost, the stock-out cost, and the markdown lever inside it. And it produces that decision on the cadence the data moves, not the cadence of a weekly order meeting.
Concretely, on a fresh category, three things change.
The order quantity becomes a trade-off, not a forecast read-off. For each SKU/store pair, the layer weighs expected spoilage at that order size against expected stock-out, under that product's shelf-life and today's demand signal. It orders to the point where the two marginal costs balance — not to the demand point estimate. The buyer sets the policy (target service level on staples, acceptable shrink ceiling on indulgence lines) and the layer applies it across thousands of pairs continuously.
Markdown becomes a continuous control, not a daily rule. The layer watches remaining shelf-life and today's sell-through per SKU, and recommends the markdown depth and timing that minimises the sum of sacrificed margin and residual waste. A slow-moving tray gets marked earlier and deeper; a fast-moving one is left at full price until the data says otherwise. This is the intraday decision the yellow-sticker rule was always a crude proxy for.
Rotation and FIFO become enforced, not hoped for. Because the layer holds the sell-by state of the inventory, it can drive the execution sequence — which lot to face, which to mark, which to pull. It surfaces that sequence to the floor as an instruction, not a judgement call at end of shift.
None of this requires new data. Grocers already capture sell-through at the till, intake at the dock, and sell-by at receiving. What is missing is a layer that runs the fresh decision continuously against that data. It is the same gap that demand sensing exposes when a sharper signal lands in a system that still decides weekly. A sharper signal with nowhere to act is just a better-informed waste line.
The question worth asking
If you run fresh categories, the diagnostic question is not "is our forecast accurate enough?". It is this. Between the moment a fresh SKU's sell-through tells us it will spoil and the moment we actually mark it down, how many hours pass? And what does that gap cost in shrink and sacrificed margin?
That gap is where the money lives. It does not show up as a failed forecast or a bad order. It shows up quietly, every day, on the line called "waste" — the accumulated cost of decisions made too late against a clock that never stops.
Is your fresh margin leaking through the shrink line?
At Solya, we offer supply chain and category leaders a 30-minute diagnostic. The goal: estimate, on your own fresh categories, the avoidable shrink and sacrificed markdown margin hiding in your current cadence.
You'll walk away with:
- An order-of-magnitude estimate of avoidable shrink across your fresh assortment
- A reading of where the order-quantity and markdown-timing gaps cost the most margin
- The architectural change that moves the fresh decision onto the cadence of the data
Related articles
Size-curve decisions: why footwear retail needs its own logic
Footwear is a size-matrix problem. A style with units left but a broken size run is dead on the floor — yet most systems still count aggregate units.
Sport retail runs two inventory logics at once
The core wants continuous replenishment; the seasonal drop wants sell-through and markdown. Run both on one logic and you lose on both walls.
Big-ticket retail: slow turn inverts the playbook
In furniture and big-ticket home retail, slow turn and heavy logistics amplify the cost of every wrong allocation and late markdown.
