In CPG, promotions are not noise around a stable baseline. They are the baseline. For most categories, trade promotions drive somewhere between thirty and seventy percent of total volume, with the highest concentrations in beverages, snacks, frozen, and personal care. Run a pure statistical forecast across that demand and the model will average promo weeks with non-promo weeks, smooth out the lifts, and produce a forecast that is wrong on every period — overshooting non-promo weeks and undershooting promo weeks.
This is the single most common failure pattern in CPG demand forecasting, and it is not a model selection problem. No statistical method, ensemble, or off-the-shelf ML model fixes it by itself. The fix is structural: separate baseline demand from promo demand, forecast each separately, and combine them.
What “promo breaks statistical models” actually means
A typical CPG SKU under a TPR (temporary price reduction) lifts two to five times its baseline volume during the promo period and often pulls forward demand from the periods around it, producing a post-promo dip. Across a year, the same SKU might have ten to twenty promotional events, each with different mechanics — discount depth, ad support, display, end cap, multi-buy — and different lifts.
A statistical model that does not know about the promo calendar sees this as random demand variation. It fits a smoothed trend somewhere between the promo peaks and the baseline troughs, and the resulting forecast is biased high on baseline weeks and biased low on promo weeks. The aggregate MAPE looks tolerable, but the period-by-period error is large in both directions, and the inventory consequences are real — overstock between promos, stockouts during them.
The baseline/promo decomposition framework
The framework that works in practice has four steps. Step 1: Tag the historical data. Every week of historical demand needs to be tagged with promo state — was this SKU on promo, with what mechanic, at what depth, with what ad support. Step 2: Compute baseline demand. For each SKU, identify the non-promoted weeks and compute the underlying demand pattern from those — trend, seasonality, and any structural shifts. Step 3: Compute promo lifts. For each historical promo, compute the lift over baseline. Cluster these by mechanic, depth, and ad support to get a lift coefficient per promo type per SKU. Step 4: Forecast both, separately. The baseline forecast uses statistical or ML methods on the non-promo demand pattern. The promo forecast uses the forward promo calendar combined with the lift coefficients to project incremental volume. The final forecast is baseline plus promo for each period. The same baseline-plus-lift structure carries over to retail demand planning at the store-SKU level.
Where the framework breaks
Promo cannibalization. A promo on Brand A often pulls volume from Brand B in the same category and the same shopper basket. Baseline forecasts on Brand B during Brand A’s promo period overshoot because they do not see Brand A’s promo. Fix: extend the promo calendar to include competitive promos at the category and shopper segment level.
Promo pull-forward. Heavy promo periods often pull volume from the surrounding weeks — shoppers stock up during the deal and skip the next purchase. The post-promo dip is real demand variation that the framework should capture, not noise to smooth over. Model the pull-forward explicitly as a negative lift in the periods following the promo.
New product introductions. New SKUs have no baseline and no promo history. Use the analog SKU approach — model the new SKU off a similar predecessor or sister SKU until enough history accumulates.
Promo mechanic drift. The lift coefficients computed off historical promos assume the future promos will behave similarly. Refresh the coefficients quarterly, not annually, and watch for systematic drift in the post-promo residual.
These promo dynamics are specific to consumer demand. Regulated categories break differently — see pharma demand planning, where formulary decisions and expiry, not promotions, drive the structural breaks.
The role of external signals
The framework above is “structured statistical.” A more advanced version blends in external signals — point-of-sale data, weather, macro indicators, retail media spend, e-commerce traffic, search trends — into the baseline or promo forecast. When the data pipeline is built and maintained, the lift over pure structured statistical is real, typically two to five points of WAPE on the relevant SKUs.
The honest middle path: get the baseline/promo decomposition right first, prove the lift, then incrementally add external signals where the data is available and the SKUs are big enough to justify the engineering.
A practical metric stack for CPG
Three metrics that should be on every CPG demand review: WAPE on baseline forecast (non-promo weeks), tracked weekly; promo lift accuracy (forecast incremental vs actual incremental), tracked per promo event; forecast bias at portfolio level, tracked weekly, separated by promo state. Reporting WAPE on baseline and promo lift accuracy separately surfaces whether the problem is in the baseline model, the promo response model, or the promo calendar itself.
The forecasting API fit
Geneva runs forty-five algorithms and picks the best fit per series. For CPG, this works well on the baseline component — the non-promo demand pattern is closer to stationary and statistical methods produce reliable forecasts when the demand regime is clean. The cleanest pattern we see in CPG: Geneva forecasts the baseline, the promo team owns the promo calendar and the lift coefficients, and the planning sheet combines them.
For CPG teams that want a structured assessment of the baseline/promo gap and the dollars sitting in the gap, Contact RoadMap. We run CPG forecast diagnostics in two to three weeks against your data and the syndicated POS feed.
Leave a Reply