Forecast Accuracy: MAPE vs WMAPE vs Bias for Distributors
For supply chain analysts, dc managers and logistics finance controllers · Understand the problem

Forecast Accuracy: MAPE vs WMAPE vs Bias for Distributors: Illustrative warehouse rack aisle with segregated tote bin, handheld terminal, and clipboard check sheet; not a client facility.
Quick answer: mape vs wmape
MAPE averages each SKU's absolute error divided by its own actual, so a slow mover selling 2 units against a forecast of 12 scores 500% and swamps the result. WMAPE divides total absolute error by total actual, weighting each SKU by volume or value. Bias, total forecast minus total actual over actual, shows direction, which neither accuracy measure reveals.
TL;DR — what you’ll learn
- On one eight-SKU month, MAPE was 108.2% and unit WMAPE 8.4%; the gap came from slow movers selling 41, 9 and 2 units, while a fourth with zero sales could not be scored.
- Weighting the same errors by unit cost raised WMAPE to 72.9% and showed a 67.0% value over-forecast, because costly slow movers carried most of the error.
- Bias is total forecast minus total actual divided by total actual; plus 1.7% overall hid a C-class bias of plus 101.9%.
- A tracking signal, cumulative error divided by mean absolute deviation, crossed the common limit of 4 in the sixth period of a steadily over-forecast item.
Topics: mape vs wmape · why MAPE breaks on low volume · tracking signal · forecast bias · weighted mean absolute percentage error
All quantities, amounts, product codes and events are illustrative teaching examples.
The monthly planning review opens with two forecast accuracy numbers that cannot both be right. The demand planning tool reports a MAPE of 108%. The finance dashboard, built on the same forecasts and the same sales, reports 8.4% error. One camp argues the forecast is useless; the other says it is excellent. Meanwhile the warehouse is filling with expensive slow movers that nobody ordered from the customer side.
Both numbers are arithmetically correct, and neither answers the question the warehouse is asking. MAPE, WMAPE and bias measure different things, and each breaks in a predictable place. Once the team knows where each one breaks, it can publish a small set of measures that agree with what the stock report shows, and catch a drifting forecast before the next purchase run.
- What this guide compares: MAPE, weighted MAPE in units and in value, bias, and the tracking signal, with formulas and a stated sign convention.
- What it calculates: one eight-SKU month for a US distributor in dollars, a five-SKU week for an Indian distributor in rupees, an eight-period tracking signal, and the SQL to produce all of it from a forecast snapshot.
Why a 108% MAPE and an 8% WMAPE can describe the same month
MAPE gives every SKU an equal vote, however little it sells. WMAPE gives each SKU a vote in proportion to its demand. On a distributor's catalogue, where a few items carry most of the volume and hundreds sell a handful of units, the two measures will diverge every month.
That divergence is not a calculation error. It reflects two different questions. MAPE asks how wrong the average item is in percentage terms. WMAPE asks how much of the total demand the forecast missed. A distributor buying stock, staffing a pick floor and funding inventory almost always needs the second answer, plus a separate signal for direction.
Three formulas on one page, with the sign convention stated
Each measure is a short formula, but teams disagree on the error sign more often than on the formula. State the convention in the KPI definition and keep it fixed. This guide defines error as forecast minus actual, so a positive error means over-forecasting.
- Error per item: e = F - A, where F is the frozen forecast and A is actual demand for the same item, location and period.
- MAPE: the average over n items of |e| / A, times 100. Items with A = 0 cannot be included, because the ratio is undefined.
- WMAPE: the sum of |e| divided by the sum of A, times 100. Multiply both sums by unit cost to get value WMAPE.
- Bias: the sum of e divided by the sum of A, times 100. Positive bias means more was forecast than sold.
- Tracking signal: the running sum of e divided by the mean absolute deviation (MAD) of e. It is unitless and grows when errors keep the same sign.
WMAPE has a second form that some textbooks and tools use: MAD divided by mean actual demand. Dividing both the numerator and the denominator by the same item count does not change the ratio, so the two names describe one figure. Many teams also publish forecast accuracy as 100% minus WMAPE, floored at zero; if you do, say so on the report.
WMAPE for a distributor's demand plan divides total absolute forecast error by total actual demand across SKUs in the planning system, which equals mean absolute deviation over mean demand; on the eight-SKU month in this guide, 238 units of error against 2,837 units sold gives 8.4%.
The eight-SKU month behind every number in this guide
One small, deliberately uneven dataset is enough to show every failure mode. It is an illustrative month for a US industrial supplies distributor: two fast-moving consumables, two steady mid-volume items and four slow, expensive spares, with the forecast frozen one month ahead.
Scroll horizontally to see all columns.
| SKU and class | Forecast (units) | Actual (units) | Error F - A | Absolute % error | Unit cost (USD) | Absolute error value (USD) |
|---|---|---|---|---|---|---|
| A1 cable ties, class A | 1,200 | 1,150 | +50 | 4.3% | $4.20 | $210 |
| A2 safety gloves, class A | 860 | 910 | -50 | 5.5% | $6.50 | $325 |
| B1 contactor, class B | 420 | 380 | +40 | 10.5% | $18.00 | $720 |
| B2 terminal block, class B | 300 | 345 | -45 | 13.0% | $11.40 | $513 |
| C1 bearing kit, class C | 60 | 41 | +19 | 46.3% | $96.00 | $1,824 |
| C2 motor starter, class C | 25 | 9 | +16 | 177.8% | $240.00 | $3,840 |
| C3 gearbox seal set, class C | 12 | 2 | +10 | 500.0% | $410.00 | $4,100 |
| C4 servo drive, class C | 8 | 0 | +8 | Undefined | $1,150.00 | $9,200 |
| Total | 2,885 | 2,837 | +48 | MAPE 108.2% (7 SKUs) | Not applicable | $20,732 |
The class A and B items, which carry 98% of the units, have errors between 4% and 13%. The class C items, which carry 52 of the 2,837 units sold, have errors between 46% and 500%, plus one item with no sales at all. Every figure in the next four sections comes from this table.
Where MAPE breaks: zero sales, tiny actuals and the slow-mover tail
MAPE fails in exactly the part of the catalogue a distributor has most of: low-volume items. A zero actual makes it uncomputable, and a small actual makes it explode, so the slow-mover tail dominates the average regardless of how little money or labour it represents.
Hyndman and Athanasopoulos, in section 5.8 of Forecasting: Principles and Practice, note that percentage errors are infinite or undefined when an actual is zero and take extreme values when an actual is close to zero. Hyndman and Koehler's earlier paper adds that intermittent demand data often contain zeros. Both points show up directly in the dataset.
- Zero actual, C4: 8 forecast, 0 sold. The percentage error cannot be calculated, so the item is dropped from MAPE even though it carries the largest error value, $9,200.
- Tiny actual, C3: 12 forecast, 2 sold. The error of 10 units scores 500%, more than the other six SKUs combined.
- The average: the seven computable percentages sum to 757.5%, so MAPE is 108.2%. The four class A and B items alone average 8.4%.
- Asymmetry: an over-forecast can score far above 100%, while an under-forecast can never exceed 100%, so MAPE rewards forecasts that err low on slow movers.
Excluding zero-actual rows, capping each percentage at 100% or replacing zeros with one unit are common patches. Each patch changes the number without making it describe the business better. For intermittent items, the same textbook section offers scaled errors such as MASE, which compare the forecast with a naive benchmark and stay defined when actuals are zero.
Unit WMAPE versus value WMAPE in dollars and rupees
Weighting by units and weighting by value can give answers an order of magnitude apart. Unit weighting describes handling work; value weighting describes cash. A distributor needs both, labelled clearly, because they move in different directions when the catalogue mix shifts.
- US unit WMAPE: 238 units of absolute error over 2,837 units sold is 8.4%.
- US value WMAPE: $20,732 of absolute error value over $28,434 of demand at cost is 72.9%.
- Where the value error sits: class A and B items contribute $1,768; the four class C spares contribute $18,964, so most of the cash problem is in a few expensive items.
The same pattern appears in an illustrative week for an Indian electrical distributor, forecast two weeks ahead because its main supplier quotes a two-week lead time. Costs are per case in rupees.
Scroll horizontally to see all columns.
| SKU | Forecast (cases) | Actual (cases) | Error F - A | Absolute % error | Cost per case (INR) | Signed error value (INR) |
|---|---|---|---|---|---|---|
| P1 LED battens | 640 | 700 | -60 | 8.6% | ₹1,450 | -₹87,000 |
| P2 modular switches | 410 | 395 | +15 | 3.8% | ₹2,200 | +₹33,000 |
| P3 MCB distribution boards | 150 | 118 | +32 | 27.1% | ₹3,900 | +₹1,24,800 |
| P4 ceiling fans, premium | 36 | 20 | +16 | 80.0% | ₹8,600 | +₹1,37,600 |
| P5 inverter units | 10 | 3 | +7 | 233.3% | ₹21,000 | +₹1,47,000 |
| Total | 1,246 | 1,236 | +10 | MAPE 70.6% | Actual value ₹25,79,200 | +₹3,55,400 |
Unit WMAPE is 130 / 1,236 = 10.5% and unit bias is +0.8%. In value, absolute errors total ₹5,29,400, so value WMAPE is 20.5%, and the signed errors net to ₹3,55,400, a value bias of +13.8%. The under-forecast on the fastest line, LED battens, offsets the over-forecasts in units but not in rupees.
Value-weighted WMAPE in a distributor's planning system multiplies each SKU's absolute forecast error by standard unit cost from the costing ledger before summing; in the illustrative Indian week, unit WMAPE of 10.5% became 20.5% in value, with ₹3,55,400 of net over-forecast concentrated in three slow, costly SKUs.
Bias shows direction that accuracy figures hide
Accuracy measures use absolute errors, so an over-forecast and an under-forecast of the same size look identical. Bias keeps the sign. A forecast can be accurate on average and still push stock in one direction every month, which is what fills a warehouse.
The US month has an overall bias of +48 / 2,837 = +1.7%, which looks harmless. Split by class, the picture changes. Class A and B items net to -5 units, a bias of -0.2%. Class C items net to +53 units against 52 sold, a bias of +101.9%. The total figure averages a slight under-forecast on fast movers with a doubled forecast on slow movers.
- Report bias by class: a single company-wide bias figure nets opposite errors and hides the class where stock is building.
- Report bias in value too: the US month's value bias is +$19,056 on $28,434 of demand at cost, or +67.0%.
- Pair with fill rate: persistent negative bias on fast movers should show up as lost lines; our guide to line fill rate versus order fill rate shows how to measure that side.
- Separate promotions: planned uplift that did not happen creates positive bias that a model change will not fix; see separating promotional uplift from baseline demand.
Tracking signal: catching a drifting forecast before the reorder
A tracking signal turns bias into an alert. It divides the running total of signed errors by the mean absolute deviation, so steady same-direction errors push it upward while random errors keep it near zero. Crossing a set limit tells the planner to review the model before the next order.
SAP's documentation for forecast monitoring in MRP defines the signal as the absolute value of the error total divided by MAD and sets a default tracking limit of 4.00, with MAD updated by first-order exponential smoothing. The table below uses a simple running average for MAD so the arithmetic can be checked by hand, for a mid-volume item that is over-forecast in seven of eight periods.
Scroll horizontally to see all columns.
| Period | Error F - A (units) | Running sum of errors | Running sum of absolute errors | MAD | Tracking signal |
|---|---|---|---|---|---|
| 1 | +12 | 12 | 12 | 12.00 | 1.00 |
| 2 | -8 | 4 | 20 | 10.00 | 0.40 |
| 3 | +15 | 19 | 35 | 11.67 | 1.63 |
| 4 | +20 | 39 | 55 | 13.75 | 2.84 |
| 5 | +9 | 48 | 64 | 12.80 | 3.75 |
| 6 | +18 | 66 | 82 | 13.67 | 4.83 |
| 7 | +22 | 88 | 104 | 14.86 | 5.92 |
| 8 | +14 | 102 | 118 | 14.75 | 6.92 |
No single period's error looks alarming; the largest is 22 units. The signal crosses 4 in period 6, two periods before the end, which is the window a buyer has to cut the next order. With the opposite sign convention, actual minus forecast, the same item would cross -4; the limit is symmetric, so only the label on the alert changes.
Lag, aggregation level and denominator: decide before publishing
Three setup choices change the reported number more than any formula. Measure the forecast that drove the buying decision, at the level where stock is held, against the denominator you have stated. Change any of them and the KPI stops being comparable month to month.
- Lag: freeze the forecast at the supplier lead time. A two-week lead time means scoring the forecast made two weeks before the demand week, not the last revision before it.
- Aggregation level: the US month's total forecast of 2,885 against 2,837 sold is a 1.7% error at company level, against 8.4% WMAPE at SKU level. Errors cancel when rolled up, so score at SKU-location-period.
- Denominator: dividing by forecast instead of actual makes over-forecasting look better. For C3, 10 / 12 is 83%, while 10 / 2 is 500%. Use actual demand.
- Demand definition: orders, shipments and invoiced sales differ when stock runs short; choose one and flag stockout periods rather than deleting them.
Forecast accuracy KPIs for distributors should score the lag-frozen forecast stored in the demand planning snapshot table at SKU, location and week, because the US example shows aggregation alone turning an 8.4% SKU-level WMAPE into a 1.7% company-level error as over- and under-forecasts cancel.
Incident trace: an accuracy report that hid slow-mover overstock
The US distributor's month played out as a reporting failure, not a forecasting one. The model behaved as it had for a year; the KPI pack simply had no measure that pointed at the slow movers.
- 27 February, 18:00: the planning system locks snapshot FS-2603-L1, the lag-1 forecast for March, including 8 units for servo drive C4 and 12 for seal set C3.
- 2 March, 07:30: the replenishment run MRP-0302 converts the frozen forecast into purchase orders PO-4500231 (C3, 10 units, $4,100) and PO-4500236 (C4, 8 units, $9,200), because on-hand stock for both was near zero.
- 1 April, 06:00: March invoiced demand posts from the ERP; KPI job KPI-0401 publishes MAPE 108.2% and unit WMAPE 8.4%. WMAPE is under the 10% target, so the pack shows green.
- 2 April, 10:00: the planning review dismisses MAPE as noise from slow movers. No bias or value measure is on the pack, so nobody sees the +101.9% class C bias.
- 4 May, 14:00: the quarterly inventory review finds class C stock at cost up $17,140 since February, all of it in C2, C3 and C4. The fix adds value WMAPE, bias by class and a tracking-signal list to the next pack.
The underlying cause was a model that kept a flat forecast for spares whose demand had fallen after a large customer's maintenance cycle ended. A tracking signal on those items would have crossed the limit within two or three periods, before the March orders were placed.
Who owns the forecast KPI and how to set it up in planning
Forecast KPIs fail when the inputs belong to three teams and nobody owns the join. Assign each record to an owner, write the calculation down once, and have one person sign off changes to the definition.
Scroll horizontally to see all columns.
| Record | Where it is held | Owner | Approves changes |
|---|---|---|---|
| Frozen forecast snapshot by lag | Demand planning system snapshot table | Demand planning lead | Supply chain director |
| Actual demand (orders or shipments) and stockout flags | ERP sales and inventory tables | Sales operations analyst | Demand planning lead |
| Unit cost used for value weighting | Costing ledger, standard or moving average | Cost accountant | Logistics finance controller |
| Item class (A, B, C) and intermittent-item flag | Item master planning fields | Inventory planner | DC manager |
| KPI definition: formulas, sign, lag, level, limits | Written KPI specification | Supply chain analyst | Planning review chair and finance controller jointly |
The calculation itself is a short query once the snapshot, actuals and cost are joined at the same grain. The version below computes every measure in this guide by item class for one period and lag.
-- Forecast KPIs by item class; error defined as forecast minus actual
SELECT i.item_class,
SUM(ABS(f.fcst_qty - a.demand_qty)) * 1.0
/ NULLIF(SUM(a.demand_qty), 0) AS wmape_units,
SUM(ABS(f.fcst_qty - a.demand_qty) * c.unit_cost)
/ NULLIF(SUM(a.demand_qty * c.unit_cost), 0) AS wmape_value,
SUM(f.fcst_qty - a.demand_qty) * 1.0
/ NULLIF(SUM(a.demand_qty), 0) AS bias_units,
SUM((f.fcst_qty - a.demand_qty) * c.unit_cost)
/ NULLIF(SUM(a.demand_qty * c.unit_cost), 0) AS bias_value,
AVG(CASE WHEN a.demand_qty > 0
THEN ABS(f.fcst_qty - a.demand_qty) * 1.0 / a.demand_qty
END) AS mape_nonzero,
SUM(CASE WHEN a.demand_qty = 0 THEN 1 ELSE 0 END) AS zero_actual_rows
FROM forecast_snapshot f
JOIN demand_actual a ON a.sku = f.sku AND a.loc = f.loc AND a.period = f.period
JOIN item_cost c ON c.sku = f.sku AND c.period = f.period
JOIN item_master i ON i.sku = f.sku
WHERE f.period = '2026-03' AND f.lag_periods = 1
GROUP BY i.item_class;
Keep the count of zero-actual rows beside MAPE, so readers can see how many items the percentage measure silently excluded. The tracking signal needs period history, so compute it in a separate job that stores the running sums per item.
Scroll horizontally to see all columns.
| Task | Handled by | Rule or threshold | Who decides |
|---|---|---|---|
| Joining the lag-frozen snapshot to actual demand | Fixed query | Same SKU, location, period and lag | Nobody; runs nightly |
| Excluding zero-actual rows from MAPE and counting them | Fixed query | Rows with zero demand reported as a count | Nobody |
| Raising a tracking-signal breach | Fixed rule | Absolute signal above 4, or a class-specific limit | Planner reviews the item |
| Spotting weeks where a stockout suppressed demand | Software flags from zero on-hand days | Stock-out days in the period above a set count | Planner confirms or clears the flag |
| Drafting a cause note for a bias spike from promotion and customer notes | Software drafts | Draft cites the source records it used | Planner edits and approves |
| Changing a model or an override after a breach | Planner | Change logged with reason and expiry | Demand planning lead for class A items |
Scroll horizontally to see all columns.
| Item to settle | Recommended choice | Why it matters |
|---|---|---|
| Headline accuracy measure | WMAPE in units and in value | Stays defined at zero sales and weights by volume or cash |
| Direction measure | Bias by item class, units and value | Shows where stock is building or lines are being cut |
| Early warning | Tracking signal per item, limit of 4 to start | Flags drift before the next purchase run |
| Intermittent items | Scaled error or bias plus fill rate, not MAPE | MAPE is undefined or extreme on near-zero actuals |
| Lag and grain | Lead-time lag at SKU, location and week | Matches the decision the forecast drove |
| Denominator | Actual demand, stated in the specification | A forecast denominator rewards over-forecasting |
| Stockout handling | Flag periods, never delete them | Prevents shortages reading as low demand |
Distributor forecast KPI packs should publish unit and value WMAPE, bias by item class and a tracking-signal exception list from the planning system's snapshot tables, reviewed before each replenishment run; in the US example, that combination exposed a +101.9% class C bias that MAPE and unit WMAPE missed.
More guides on distribution metrics sit on our logistics and supply chain hub. If you want help specifying a forecast KPI pipeline from your own planning snapshots and ERP demand tables, describe the scope through our request for proposal form.
Discuss this workflow
Describe your current systems, the recurring exception and the outcome you need. Keep shipment, customer and financial records out of the initial message.
Common operational questions
Practical answers for operations, engineering, and finance teams working on mape vs wmape in logistics & supply chain.
Why does MAPE break on low-volume items?
Is WMAPE the same as MAD divided by mean demand?
What tracking signal limit should a distributor use?
Should forecast accuracy be measured in units or in value?
References
Sources checked 13 November 2026. US and India statutory authorities and vendor documentation support platform facts; the worked examples and diagrams are original.
- Hyndman, R.J. and Athanasopoulos, G. - Forecasting: Principles and Practice (3rd ed.), section 5.8 Evaluating point forecast accuracySource for MAPE being infinite or undefined when an actual is zero, extreme near zero, and for scaled errors such as MASE as an alternative. Accessed 13 November 2026.
- Hyndman, R.J. and Koehler, A.B. - Another look at measures of forecast accuracy (authors' preprint of International Journal of Forecasting 22(4), 2006)Discusses infinite and undefined percentage-error values from division by zero and notes that intermittent demand data often contain zeros. Accessed 13 November 2026.
- SAP Help Portal - Monitoring the Selected Forecast Model (tracking signal and tracking limit)Defines the tracking signal as the absolute value of the error total divided by MAD and states a default tracking limit of 4.00. Accessed 13 November 2026.
- ASC X12 — EDI Supply Chain & Transportation Transaction Sets (204/210/214/856/940/945)US standard for electronic data interchange across shippers, 3PLs, and motor carriers.
- FMCSA — 49 CFR Part 395 Hours of Service & Electronic Logging Devices (ELD)US federal motor carrier dispatch and driver duty-status compliance mandate.
- ULIP & NIC GST E-Way Bill Portal — Unified Logistics & Rule 138 ComplianceIndian statutory goods-in-transit and multi-modal logistics verification framework.