2026Distribution / Planning

StockSignal

A distributor had cash tied up in parts nobody wanted and kept running out of the ones customers came for. Reordering was one buyer's memory, applied to thousands of items.

A typical item in the catalogueaverage demandSells a handful of times a year, in burstsThe average says order one.The customer wants six, once.The question is not the average. It is the risk of the spike.
Client
Industrial parts distributor
Role
Sole engineer, end to end
Engagement
Build, parallel run, handover
Scope
Sales history to reorder proposal

The Problem

Most items in the catalogue sell rarely and unpredictably, which is exactly where averages stop working.

Reordering ran on one buyer's memory. He was good, and he could hold perhaps a few hundred items in his head, out of a catalogue in the thousands. Everything else was reordered when someone noticed it had run out, which is to say after a customer had already been told no. Meanwhile the warehouse filled with parts bought because they were cheap that month.

Working capital sitting on shelves

Cash committed to slow moving stock that would take years to sell, while fast moving items were funded out of whatever was left.

Lost sales never recorded

A stockout does not appear in the sales history. The business only saw what it sold, never what it failed to sell, so the data quietly understated real demand.

Knowledge held by one person

The reordering judgement lived with a single buyer. His leave, and eventually his departure, were genuine operational risks.

Constraints

The non negotiables that ruled out the obvious approach.

Most items barely sell

The typical part moves a handful of times a year in irregular bursts. Methods that assume a steady rate produce a confident fractional forecast that is useless for a purchase decision.

The history is censored

Periods of stockout look identical to periods of no demand. Training on raw sales teaches the system to keep under ordering exactly the items that sell out.

A buyer must be able to disagree

The output is a proposal a person approves, and every quantity has to be explainable in a sentence, or the buyer overrides everything and the system is abandoned.

Accuracy is not the objective

The business cares about service level against cash tied up in stock. A more accurate forecast that recommends worse purchases is a failure.

How It Works

Group items by how they actually behave, apply a method that suits each group, and turn the result into a reorder quantity a buyer can argue with.

01

Reconstruct what demand really was

Periods when an item was out of stock are marked as unknown rather than as zero sales, so the history stops teaching the system to under order its best sellers.

02

Mark the events that distort history

Promotions, festival demand, a one off bulk order from a single customer. Left in, these become a phantom pattern that repeats in next year's plan.

03

Segment by movement, not by value

Steady movers, seasonal items, irregular slow movers and items with too little history are genuinely different problems, and each gets a method suited to it rather than one model spread across all of them.

04

Forecast a distribution, not a number

A purchase decision needs the range of plausible demand over the lead time, because the reorder quantity depends on the risk of the high end, not on the average.

05

Turn it into a buying decision

Lead time, minimum order quantity, supplier packs and shelf life turn a forecast into a quantity that can actually be ordered. This layer, not the model, is where most of the value is.

06

Explain every proposal

Each line states why: expected demand over the lead time, current cover, the service level being targeted, and what the buyer would give up by ordering less.

History to purchase orderSales historywith stockouts marked unknownRemove distortionspromotions, festivals, bulk ordersSegment itemssteady, seasonal, irregular, newForecast a rangedemand over lead timeApply constraintslead time, MOQ, pack sizeBuyer approveswith the reasoning shownnothing auto orderedThe constraints layer, not the model, decides what can be ordered

The Hard Part

The forecast is not the product. The buying decision is.

Early on I chased forecast accuracy, and improved it. The purchase proposals got no better, because for an item that sells four times a year the average is close to meaningless. What a buyer needs is the chance of demand exceeding what is on the shelf before the next delivery arrives.

Reframing the output from a number to a distribution changed the whole design. The reorder point falls out of a service level the business chooses per item group, so a critical fast moving part can be protected while a slow mover is allowed to run thin, deliberately and visibly.

That made the real trade off explicit for the first time. Higher service costs working capital, and the curve is steep at the top: the last few points of availability cost more than everything before them. Showing that curve let the finance and sales sides argue about a business decision instead of about a spreadsheet.

The censored history mattered more than any modelling choice. Treating stockout periods as zero demand had been quietly teaching the system to keep the best selling items scarce, which is the exact opposite of what the business needed. Fixing that one assumption moved the outcome more than every model change combined.

What availability costsCash tied up in stockAvailabilitychosen for fast moversthe last points cost the mostService level is set per item group, not chased to the top.Finance and sales argue about a decision, not a spreadsheet.

Technical Decisions

What was chosen, and what was not

ChoiceWhyInstead of
Segment first, then modelIrregular slow movers, steady movers and seasonal items fail in different ways. Routing each group to a method that suits it beat one model tuned across everything.A single model spread across the entire catalogue
Predict a range, not a pointA reorder quantity depends on the risk of the high end of demand over the lead time. A single expected value cannot answer that question.One expected demand figure per item per period
Stockouts marked as unknownTreating an out of stock period as zero demand trains the system to under order the fastest moving items, which is the most expensive possible error here.Training directly on recorded sales
Constraints as a separate layerLead times, minimum order quantities and supplier pack sizes change constantly and are business rules, not statistics. Keeping them out of the model kept both parts simple.Encoding purchasing rules inside the forecasting step
Service level as the reported metricThe buyer and the finance team are shown availability against stock value, which is the decision they actually own. Error metrics stayed internal to tuning.Reporting forecast error to the business

Outcome

What changed for the business.

The whole catalogue gets attention

Every item is reviewed each cycle rather than the few hundred a buyer can hold in mind, so quiet stockouts in the long tail stop happening unnoticed.

Availability became a choice

Service level is set per item group and the cost of it is visible, so protecting a critical part is a decision the business makes rather than an accident of who reordered it.

Buying knowledge left one person's head

The reasoning behind each proposal is written down, so cover during leave stopped being a risk and a new buyer can see why a quantity is what it is.

Slow movers stopped absorbing cash

Items that sell rarely are held deliberately thin, freeing working capital for stock that turns.

In Hindsight

What I would do differently.

01

I spent the first stretch improving forecast accuracy because it was measurable and satisfying. It moved the business outcome barely at all. The stockout correction and the purchasing constraints layer, both unglamorous, did nearly all of the real work.

02

I showed the buyer error metrics in the first review and lost the room. Once the same information was presented as availability against cash tied up in stock, the conversation became productive immediately. The metric you report is a product decision.

03

The parallel run should have been longer. It ran alongside the buyer for a few cycles, which was enough to build confidence in the fast movers but not enough to see a full seasonal swing before handover.

Get in Touch

Have this problem?
Let's talk