Demand Forecast Model & Replenishment Rules
A practical, implementable demand-forecast and replenishment model for food service that combines daypart smoothing, event overlays, forecast confidence ranges, safety-stock aware reorder points, par-level logic and alert rules for sudden demand shifts. Includes inputs, formulas, tuning guidance, example calculations, integration notes, and suggested KPIs.
Purpose & When to Use
This model helps kitchens and purchasing teams match purchasing and prep to expected demand across service periods (dayparts) to reduce stockouts, emergency purchases, and excess spoilage. It's designed for perishable and fast-moving items where short lead times, daypart patterns, promotions and events strongly affect demand.
Key Outputs
- Daypart-level demand forecasts with confidence ranges
- Suggested reorder point (ROP) and recommended order quantity (Q) or par-level suggestion
- Alerts when demand shifts exceed thresholds (possible promotion, POS mapping issue, or anomaly)
- Metrics for accuracy and bias to support continuous tuning (MAPE, RMSE, Fill Rate)
Required Inputs & Data Quality
- Historical sales/consumption timestamped to at least the daypart level (POS or prep logs)
- Recipe yields and unit-of-measure normalization (sales in portions → inventory units)
- Supplier lead time (mean & variability), minimum order quantities, and pack sizes
- Current on-hand and on-order quantities
- Calendar of planned events, holidays, and known promotions
- Shelf-life constraints for perishable items
Model Components & Methods
1) Dayparting and Base Forecast
Split historical demand into consistent dayparts (e.g., breakfast, lunch, dinner). For each item-daypart pair maintain a rolling forecast. Two simple robust options:
- Moving average (window w): Forecast_t = (1/w) * sum_{i=1..w} demand_{t-i}
- Exponential smoothing (EWMA): Forecast_t = α * demand_{t-1} + (1-α) * Forecast_{t-1} — α typically 0.1–0.4
EWMA reacts faster to recent changes; moving average is more stable. Choose based on volatility and how quickly trends change in your operation.
2) Holiday & Event Overlay
Maintain an event multiplier table (e.g., +30% for local festival) applied to base forecasts. For recurring events, estimate lift from historical event-period performance and apply as an additive or multiplicative adjustment.
3) Forecast Confidence Ranges
Estimate forecast error using residuals from the model. Common approaches:
- Compute rolling standard deviation of residuals σ_resid and use a normal-approximation interval: Forecast ± z * σ_resid (z from desired service level)
- Or use mean absolute error (MAE) and convert to an approximate σ (σ ≈ 1.25*MAE) if residuals are not Gaussian
4) Reorder Point (ROP) and Safety Stock
Use the classic ROP formula adapted to perishables and short review periods:
Expected demand during lead time (DDLT) = Forecast_daily * LeadTime_days
Safety stock = z * σ_{LT}, where σ_{LT} = sqrt(LeadTime_days) * σ_daily (σ_daily from residuals)
ROP = DDLT + Safety stock
For review-period ordering or par-based approaches, compute par = Forecast_{review+lead} + safety stock and suggested order = max(0, par - (on_hand + on_order)).
5) Order Quantity Rules
- Order up to par: Q = max(0, par - on_hand - on_order)
- Respect supplier min order multiple and pack sizes (round Q up to nearest pack size)
- Constrain by shelf-life: do not order more than expected usable quantity before expiration
- Optionally include review-period optimization (EOQ style) for non-perishables
6) Alerts and Sudden Demand Shift Detection
Simple detectors you can run per item-daypart:
- Short-term vs long-term ratio: if recent mean (last 3) / baseline mean (last 28) > threshold (e.g., 1.4) raise alert
- Z-score: (recent demand - baseline mean) / baseline σ > z_alert
- CUSUM for persistent upward or downward shifts
Alerts should flag for operations: verify POS mapping, confirm promotions/events, and consider temporary parameter adjustments (higher α or increased safety stock).
Practical Example (numeric)
Item A, Dinner daypart:
- Average daily demand = 20 portions, σ_daily = 5
- Lead time = 2 days
- Desired service level = 95% → z ≈ 1.645
DDLT = 20 * 2 = 40 portions
σ_LT = sqrt(2) * 5 ≈ 7.07
Safety stock = 1.645 * 7.07 ≈ 11.6 → round up to 12
ROP = 40 + 12 = 52 portions
If current on-hand = 30 and on-order = 10 and par (review+lead) = 70 → suggested order = max(0, 70 - (30+10)) = 30 portions (then round to pack size)
Tuning & Backtesting
Always backtest the model on historical windows. Key metrics to track:
- Bias (mean forecast error) — are you consistently under- or over-forecasting?
- MAPE and RMSE — overall accuracy
- Fill rate / stockout frequency — operational impact
- Spoilage rate — waste caused by over-ordering
Adjust α, window sizes, and z based on operational priorities: reduce stockouts at cost of slightly higher waste, or tighten safety stock to reduce spoilage at some increase in stockout risk.
Integration Notes
- Map POS menu items to inventory SKUs via recipes/BOM. Track conversion factors.
- Capture events/promotions in a calendar feed so overlays are automated.
- Supplier lead time must include ordering cadence (e.g., supplier delivers only on certain days) and variability.
- Expose suggested orders to your ordering system or procurement workflow; include approval steps for large variance from normal levels.
- Store forecast inputs, parameters and outcomes in a small history table to enable continuous improvement and explainability.
Common Pitfalls & Remedies
- Pitfall: Using sales timestamps without converting to inventory units → incorrect replenishment. Remedy: normalize units via recipes.
- Pitfall: Ignoring promotions or menu changes → forecast error spikes. Remedy: maintain promo calendar and flag menu changes.
- Pitfall: Too aggressive safety stock for perishables → waste. Remedy: incorporate shelf-life cap and monitor spoilage metrics.
- Pitfall: Not monitoring forecast bias. Remedy: regularly compute bias and correct model baseline or apply bias-adjustment factors.
Next Steps & Capability Opportunities
Start simple: implement EWMA per item-daypart, add lead-time-aware ROP and a weekly par review. Then add event overlays and an alerting rule. Finally integrate with POS and procurement for automated suggestions.
Possible future enhancements: automated parameter tuning, per-location adaptation, interactive replenishment calculator, dashboards showing forecast vs actual, and agent-assisted reorder approvals.
References & KPIs to Track
- Forecast accuracy (MAPE, RMSE)
- Bias
- Stockout events per period
- Fill rate / service level
- Spoilage by item and period
Discussion
Comments and conversation will live here.