Bramwell Grocers
A demand forecasting model for a regional grocery chain that cut food waste by predicting store-level demand instead of ordering off manager intuition.

Industry
Retail & E-commerce
Timeline
14 weeks
Team
2 ML engineers, 1 data engineer
Category
AI Development
Where things stood
Bramwell's store managers ordered perishable inventory based on gut feel and last week's numbers, which meant chronic overordering on some items and stockouts on others across 40 stores.
How we got there
Store-level historical pipeline
Built a data pipeline covering two years of store-level sales, seasonality, and local events to train against, cleaning up inconsistent SKU naming across stores first.
Demand forecasting model
Trained a model to forecast store-level demand per SKU a week out, accounting for seasonality and local promotions.
Manager override loop
Gave store managers the ability to override a forecast with a reason code, feeding that feedback back into future model retraining instead of ignoring local knowledge.
What changed
~22%
Reduction in perishable food waste
40
Stores forecasting through the model
~15%
Fewer stockouts on high-turnover items
Tech stack
Python
The language for the forecasting pipeline and model training.
PyTorch
Trains the store-level demand forecasting model.
scikit-learn
Handles feature engineering and baseline forecasts used to validate the model's lift.
AWS SageMaker
Runs training and serves weekly forecasts to each store.
PostgreSQL
Stores historical sales, forecasts, and manager override reason codes.
Docker
Packages the forecasting pipeline consistently across environments.


