Store-level demand forecasting for a grocery chain, with honest backtesting
Forecast daily sales per store and product family 14 days ahead, beat a seasonal-naive baseline in a rolling backtest, and turn the forecast into order quantities.
Industry project · for FreshCart Grocers, a 38-store regional supermarket chain with a central distribution centre
FreshCart runs 38 supermarkets supplied from one distribution centre. Store managers order fresh and packaged goods by gut feel, two weeks ahead. The result: about 4.5% of fresh produce is thrown away, and on busy weekends the top 200 products run out in about 1 store in 6. Finance estimates the waste alone at 2.3% of fresh revenue.
The supply-chain head wants a forecast for each store and product family, 14 days ahead, refreshed weekly. He has been burned before: a consultant showed a model with "97% accuracy" that fell apart in its first month because it had been tested on the same period it was trained on.
You will use a public retail dataset with daily store sales, promotions, holidays and oil prices (the Kaggle "Store Sales — Time Series Forecasting" data is a good fit), treat its stores as FreshCart's, and build: - a seasonal-naive baseline (same day last week); - a gradient-boosted model with calendar, promotion and lag features; - a rolling-origin backtest with at least 6 folds of 14 days each; - a simple order rule that turns the forecast into a suggested order with a safety buffer.
The target is a weighted MAPE at least 15% lower than the baseline across the backtest, without any fold being worse than the baseline by more than 5%. Done looks like a re-runnable pipeline, a backtest report with fold-by-fold numbers, and a one-page note for store managers explaining how to read the forecast.
GitHub repo with pipeline + reports/backtest.md with fold-by-fold results + order-rule notebook + one-page store-manager note
Stack: Python, pandas, LightGBM or scikit-learn, matplotlib, Jupyter
- Honest backtest35
At least 6 rolling folds, no feature uses data after each fold's cut-off, and fold-by-fold numbers are reported for baseline and model.
- Beats the baseline25
Weighted MAPE is at least 15% lower than seasonal-naive across the backtest, or the shortfall is shown and explained.
- Order rule20
The forecast becomes a suggested order with a safety buffer, and the trade-off between waste and stock-outs is shown on backtest data.
- Communication20
The store-manager note explains the forecast and its uncertainty in plain words on one page.
Pass 60% · Merit 75% · Distinction 90%
Engineering Students
Diploma, B.Tech, B.E., BCA, MCA, or M.Tech students seeking practical experience.
Aspiring Developers
Developers who want to build proof-of-work capstone projects for tech resumes.
Job Seekers
Graduates looking for AI-evaluated code review & verified industry credentials.