Forecast accuracy formula using WAPE and MAPE

Score the forecast that drove the decision, at the level where a missed unit affects the plan.

Kartik Deshpande··5 min read

At the demand review, you have the forecast that set last month’s build and a newer version revised during the month. Use the frozen version as the forecast accuracy formula’s input. For weighted absolute percentage error (WAPE), sum the absolute misses across item and period rows, divide by the sum of absolute actuals, and multiply by 100. The result measures missed units relative to observed volume.

Mean absolute percentage error (MAPE) averages the percentage miss on each row. That gives a low-volume row the same weight as a high-volume row (and leaves the percentage undefined when actual demand is zero). Both formulas compare a forecast to actuals, but they can point you toward different items to investigate.

Calculate both metrics from the same rows

Use WAPE to quantify the total unit miss relative to volume across a group with a common unit. Use MAPE when the question concerns the relative miss on a typical eligible row, and review the effect of very small actuals. Amazon Forecast documents the two calculations in its predictor accuracy reference.

In this hypothetical example, each SKU has one monthly row, all quantities are individual units, and actuals are fulfilled demand. The forecast was saved before the month started. Use signed error = forecast minus actual, so a positive number means you forecast too high. Take the absolute value only after calculating the signed difference for each row.

SKUActual unitsForecast unitsSigned errorAbsolute errorAbsolute percentage error
Standard10080-202020%
Specialty1015+5550%
Service05+55Undefined

WAPE = (20 + 5 + 5) ÷ (100 + 10 + 0) × 100 = 27.3%. The five-unit miss on the Service item stays in the numerator. WAPE is undefined if the whole group has zero actuals, so keep the absolute miss visible in units in that case. Rob J. Hyndman explains this denominator behavior in his WAPE note.

MAPE on the nonzero rows = (20% + 50%) ÷ 2 = 35%. Label it “MAPE on nonzero actuals” and report coverage of two out of three rows. If you want to compare the two methods with identical coverage, WAPE on those same two rows is 25 ÷ 110 × 100 = 22.7%. Both the weighting rule and the excluded Service row explain why the full-group WAPE and filtered MAPE differ.

WAPE and MAPE use different denominators
WAPE
Divide total absolute error by total absolute actuals
MAPE
Divide each absolute error by its absolute actual, then average
Carry the count of eligible rows beside MAPE so a change in coverage is visible when you compare periods.

Keep item-level misses visible in the rollup

If you add the forecasts and actuals first, this group looks only ten units short. That difference answers whether the total plan was high or low. It cancels the five-unit overforecast on each of two SKUs against the twenty-unit underforecast on Standard, even though the items could not substitute for each other. Take absolute errors at the SKU and period level before summing when the buyer needs to act at that level.

Keep signed bias beside WAPE. With forecast minus actual as the sign convention, the example’s net error is -10 units, or -9.1% of actual volume. WAPE shows 30 missed units across the rows. A buyer can use the signed rows to see where exposure comes from, then check whether the shortfall on Standard resulted in an availability problem. The stockout article covers that separate check.

If your reporting convention presents accuracy as 100% minus WAPE, this example shows 72.7%. Label the transform and keep WAPE beside it. An error greater than 100% produces negative accuracy under that convention, so preserve the underlying value instead of clipping it and making different misses look alike.

Keep absolute units beside the percentage when volume changes. If the same 30-unit miss occurs in a group with 150 actual units, WAPE falls to 20% even though the number of missed units holds steady. Show both figures before crediting a process change. For low-volume service parts, keep a separate view if a missed unit has an operational consequence the volume-weighted group score would hide.

Pin the forecast version and the actuals cutoff

Save one forecast value per item, site, target period, and version, with an issued date and horizon. If purchasing committed four weeks out, compare the forecast available at that decision with the eventual actual. Scoring the last revision before period close answers a different question because the later forecast may contain information the buyer lacked. Hyndman and Athanasopoulos describe how to match evaluation to forecast horizons.

Record whether actual means orders, shipments, or another agreed measure and when those records are considered complete. If shipments were constrained by a stockout, a shipment-based error describes the gap to fulfilled volume. Flag those rows before treating the score as evidence about unconstrained demand. Treat a missing or late feed as unknown and record the excluded coverage, since substituting zero changes both metrics.

Start the review by showing forecast version, cutoff, and coverage next to the headline error. When the score moves, split the change by item and compare like horizons before changing the build plan. A SIOP review gives that evidence a place alongside the demand and supply decisions it might affect.

Inspect one forecast snapshot

Start with a supported data source and check which version, item, and target-period fields are present in your export.

Where Permute fits in forecast measurement

Permute is the context layer we sell between business data and the AI tools people already use. We can match a versioned forecast in Excel with eligible shipment records from NetSuite using the item, site, period, and unit mappings your team supplies.

We use your declared actuals definition, horizon, and zero-row rules in a repeatable calculation. With saved versions and source timestamps, the same review can be rerun without pulling a later forecast into an earlier decision.

A demand planner using Claude, ChatGPT, or Copilot can ask which SKUs contributed most to the month’s miss and inspect the contributing forecast and actual rows within their permissions.

Keep forecast generation and policy with planning

We supply governed inputs and calculate measures from connected data. Forecast generation stays with your planning process. We read connected records for this workflow, and forecast changes and approvals stay in the planning system. If no decision-time snapshot exists, show that coverage gap in the review.

Take the score back to the build decision

Start with the forecast that set the build and calculate misses at the level where you can act. Use WAPE to put the unit miss in context, and label the eligible rows when you report MAPE. In the example, the group’s ten-unit shortfall masks different errors on Standard, Specialty, and Service. Bring those rows and the version behind them to the demand review.

Review the evidence behind your forecast score

Bring a saved forecast and the actuals extract you use at review time so we can inspect how the rows match.

Questions about scoring a demand forecast

Can I average site WAPE percentages for a company score?

Pool the absolute error numerators and absolute actual denominators to calculate company WAPE, assuming the rows share a common unit and scope. Averaging the site percentages gives each site equal weight and answers a different question.

Can I compare a rolling error score with a calendar-month score?

Compare them only with the window and horizon identified. A rolling score can retain rows from the previous month, so a difference may come from the evaluation window even when the shared rows agree.