Case study · 2023 · Retail · Supply Chain
Demand Forecasting for a Grocery Co-operative
An 18-store grocery co-op was ordering perishables the way it had for decades: last week's sheet, adjusted by feel. We built store-level demand forecasting with weather, promotion, and seasonality signals — and, just as importantly, a review workflow that keeps planners in charge, shows them why the model suggests what it does, and learns from every override.
Screens are illustrative recreations — client interfaces stay confidential.
The challenge
Perishables punished every ordering mistake twice: over-order and it became shrink, under-order and shelves sat empty through the weekend rush. Both were happening weekly, store by store, with no systematic feedback loop.
The co-op had solid POS history but no pipeline turning it into decisions — and a healthy skepticism, earned from a previous vendor tool that planners had quietly stopped using.
What we built
Feature-rich demand models
Gradient-boosted models per store and category over cleaned POS history, with calendar structure, local weather, promotions, and holiday proximity as features — retrained weekly through an automated ETL pipeline.
Explanations, not black boxes
Every suggestion ships with its drivers — "heat wave + long weekend + promo" — because the previous tool died from unexplained numbers. Planners see why before they approve.
Override-and-learn loop
Planner overrides are first-class data: tracked, compared against realized demand, and fed back into weekly model review, so the system and the planners converge instead of compete.
Shadow mode first
Eight weeks of forecasts running silently against actual orders built the accuracy evidence — store managers saw the model beat the sheet before anyone asked them to trust it.
The results
- −52%
- Stockout hours
- −14%
- Fresh-produce shrink
- 78%
- Suggestions accepted unchanged
tracked perishable SKUs, 3 months after go-live
co-op-wide vs. prior-year same period
planner review queue, steady state
MAPE measured against realized demand; manual baseline from the shadow-mode comparison period.
View the data as a table
| Model forecast | Prior manual ordering | |
|---|---|---|
| Jun | 24.2% | 26.5% |
| Jul | 19.8% | 26.5% |
| Aug | 17.5% | 26.5% |
| Sep | 15.9% | 26.5% |
| Oct | 14.2% | 26.5% |
| Nov | 13.1% | 26.5% |
- Stockout hours on tracked perishable SKUs fell 52% within three months of go-live.
- Fresh-produce shrink dropped 14% co-op-wide, with the heaviest-waste stores improving the most.
- 78% of model-suggested orders are now accepted unchanged — the review queue became a five-minute task instead of a morning of guesswork.
Client identities stay confidential; figures are rounded from end-of-engagement delivery reporting.
Stack & expertise
- Python
- LightGBM
- PostgreSQL
- SQL transforms
- AWS Batch
- React