Blog · Forecast and pipeline · Consumer goods
Compare CPG forecasts with consumer sales and shipments by SKU and channel. Separate promotional uplift from base demand, then reconcile the difference to channel inventory.
CPG demand forecasting works best when the review separates base consumption, promotional uplift and the inventory held by each channel. Compare the supplied SKU forecast with consumer sales, then explain why shipments differed. A shipment increase alone does not establish that shoppers wanted more product.
Choose what the forecast is supposed to predict before measuring its error. A consumer-sales forecast answers how many units shoppers will buy. A shipment forecast answers how many units the brand will send into a channel. A retailer can increase the second while the first stays flat.
Keep one row per SKU, channel and week. Include the forecast approval date, base forecast, promotional increment, consumer units sold, shipments and opening and closing channel stock. Record the promotion identifier and selling dates alongside the row. Use the same pack size throughout; cases in one file and individual cans in another cannot be compared directly.
Inventory is a balance at a date. The Census Bureau's retail inventory definition describes merchandise available for sale at period end and values it at cost. This review uses physical units instead, so keep the stock quantities separate from inventory dollars.
For the wider choice of forecasting approach, see demand forecasting. The work here is the narrower commercial review: which promotion or channel explains the difference between an approved plan and the recorded result.
A US beverage brand reviews the week ended October 17, 2026. All quantities below are cases with the same case size. The grocery rows were promoted; the club and online rows were not. Assume complete consumer-sales coverage and no returns, losses or transfers during this week.
Put these columns in A:H. Column D is the supplied total forecast, with its base and promotional components retained for explanation.
| SKU / channel | Base forecast | Promotion increment | Total forecast | Consumer sales | Shipments | Opening stock | Closing stock |
|---|---|---|---|---|---|---|---|
| Citrus / grocery | 1,000 | 500 | 1,500 | 1,350 | 1,800 | 600 | 1,050 |
| Citrus / club | 800 | 0 | 800 | 820 | 900 | 300 | 380 |
| Berry / grocery | 600 | 300 | 900 | 960 | 1,100 | 350 | 490 |
| Berry / online | 400 | 0 | 400 | 370 | 400 | 120 | 150 |
| Total | 2,800 | 800 | 3,600 | 3,500 | 4,200 | 1,370 | 2,070 |
First check each forecast's composition. In I2, enter the following and fill down through I5:
=D2-B2-C2
Every result should be zero. A nonzero result means the components do not explain the supplied total, so resolve that before discussing promotion performance.
Freeze the forecast version that existed before the selling week. Forecasts produced with later information answer a different question: Forecasting: Principles and Practice distinguishes forecasts made in advance from calculations using later predictor information. Do not replace the original promotion assumption with the actual display execution and then claim better accuracy.
Define signed error as forecast minus consumer sales. Positive means the plan was too high. Use J2 for signed error and K2 for absolute error:
=D2-E2
=ABS(J2)
The results are:
| SKU / channel | Forecast minus sales | Absolute error |
|---|---|---|
| Citrus / grocery | 150 | 150 |
| Citrus / club | -20 | 20 |
| Berry / grocery | -60 | 60 |
| Berry / online | 30 | 30 |
| Total | 100 | 260 |
The net overforecast is 100 cases, but the absolute misses total 260. Weighted absolute percentage error, using consumer sales as the denominator, is 260 / 3,500 = 7.4%. Signed bias on the same denominator is 100 / 3,500 = 2.9%. Percentages are rounded to one decimal place.
=SUM(K2:K5)/SUM(E2:E5)
=SUM(J2:J5)/SUM(E2:E5)
Format both cells as percentages. Do not average the individual rows' percentage errors. Keep the signed convention in the report heading; other teams may use actual minus forecast. The SKU and site forecast-bias review explains persistent directional error in more detail.
On promoted grocery rows, planned consumption was 1,500 + 900 = 2,400 cases. Actual consumption was 1,350 + 960 = 2,310. Against the supplied baselines, estimated promotional increments were 350 and 360 cases, totaling 710 against the planned 800.
That estimate is not a causal promotion evaluation. The base forecast represents sales that cannot be observed during the promotion. Check distribution changes, competing offers, stock availability and comparable nonpromoted weeks before using the difference to set the next promotion's assumption.
Now reconcile channel stock. In L2, enter:
=H2-G2-(F2-E2)
Every row returns zero. At total level, closing stock minus opening stock is 2,070 - 1,370 = 700 cases. Shipments minus consumer sales is also 4,200 - 3,500 = 700 cases. The shipment excess is fully explained by the recorded inventory build under the example's assumptions.
This changes the commercial discussion. The brand shipped above consumer demand while its consumption forecast was slightly high. Sales should explain the channel stock target; demand planning should review the promotion assumptions. They are separate actions.
If the product is perishable, the food demand forecasting workflow adds waste and remaining selling life to this reconciliation.
Use repeated, comparable review periods before changing the planning method. Forecasting: Principles and Practice recommends evaluating forecasts on observations not used to fit them. A single promotion can identify an investigation; it cannot establish reliable future uplift by itself.
Bring your SKU and channel forecast, promotion assumptions, consumer sales and stock export to Covirage. Covirage maps the columns; its tools compute and check the comparisons, and the external AI model explains the results with every figure traced to its rows. Create a free Covirage account and bring a sample of your own data.
See Covirage for CPG brands for the broader business context.
Use consumer sales to evaluate consumption demand when reliable channel data is available. Use shipments to evaluate the shipment plan. Keep both measures because retailers can buy ahead of promotions or reduce existing inventory, causing shipments and consumption to move differently.
Subtract the estimated sales without the promotion from sales during the promotion. The baseline is an assumption, so this difference is an estimate rather than proof that the promotion caused every additional sale. Keep the original baseline and document comparable selling conditions.
Report the gap between shipments and consumer sales as an unexplained movement until inventory or adjustment records arrive. Do not call it inventory growth with certainty. Returns, transfers, reporting delays and differences in channel coverage can also produce a gap.