Forecasting
Forecast Accuracy & Bias Analyzer
Compare forecast vs actual for every period. Measure how close the forecast came, and whether the misses cancel out or all lean the same way. Random error is a different problem from forecast bias.
Input data
One row per period. Paste forecast and actual columns straight from a spreadsheet. Fill Item to also see accuracy by item.
| Period | Item | Forecast | Actual | |
|---|---|---|---|---|
Tip: paste a rectangular range from Excel or Sheets.
Forecast accuracy 92.3%. Bias alarm: persistent over-forecast.
Forecast accuracy
92.3%
Accuracy score = 1 - WAPE. WAPE weights misses by the size of the actual.
The forecast for revenue was 92.3% accurate (1 - WAPE) across 6 periods.
- WAPE
- 7.7%
- Accuracy score
- 92.3%
- MAPE
- 7.9%
- Mean error
- -$65.0
- MAE
- $85.0
- RMSE
- $87.7
- Bias share
- 76.5%
- Tracking signal
- -4.59
Forecast bias
Mean error -$65.0 a period (over-forecast revenue, optimistic). 76.5% of the absolute error did not cancel (bias share). Tracking signal -4.59, outside ±4 - bias alarm. Forecast above actual in 5 of 6 periods, below in 1. n = 6, so the alarm is provisional.
Naive benchmark (MASE) 0.73: the forecast was closer than repeating the previous period’s actual.
Alarm threshold
Forecast vs actual by period
Actual less forecast. Bars above the line are under-forecasts; below, over-forecasts. The table is the accessible version of this chart.
| Period | Forecast | Actual | Error | Abs error | Signed % of actualerror ÷ |actual| | Direction | TS to dateerror to date ÷ MAE to date |
|---|---|---|---|---|---|---|---|
| M1 | $1,000.0 | $900.0 | -$100.0 | $100.0 | -11.1% | Over-forecast revenue | -1.00 |
| M2 | $1,100.0 | $1,000.0 | -$100.0 | $100.0 | -10.0% | Over-forecast revenue | -2.00 |
| M3 | $1,200.0 | $1,150.0 | -$50.0 | $50.0 | -4.3% | Over-forecast revenue | -3.00 |
| M4 | $1,000.0 | $1,060.0 | +$60.0 | $60.0 | 5.7% | Under-forecast revenue | -2.45 |
| M5 | $1,300.0 | $1,200.0 | -$100.0 | $100.0 | -8.3% | Over-forecast revenue | -3.54 |
| M6 | $1,400.0 | $1,300.0 | -$100.0 | $100.0 | -7.7% | Over-forecast revenue | -4.59 |
| Total | $7,000.0 | $6,610.0 | -$390.0 | $510.0 | WAPE 7.7% | ||
Reuse the analysis
Copy the summary, or export the periods and the chart.
Transparent by design
How forecast accuracy and bias are calculated
There is one sign convention and it is named everywhere: error is actual less forecast. A negative error means the forecast was above the actual. It is stated in the column heading, here, and in the CSV header.
Worked example — the six months in the table
Every figure below is the built-in example run through the same code the page runs. Check them with a calculator.
- Total forecast
- $7,000.0
- Total actual
- $6,610.0
- Summed error
- -$390.0
- Summed absolute error
- $510.0
- WAPE
- 7.7%
- Accuracy score
- 92.3%
- Mean error
- -$65.0
- Bias share
- 76.5%
- Tracking signal
- -4.59
Error
e = A − F
Actual less forecast, every time. It is named that way in the column heading, here, and in the CSV header.
Limitation: The sign is a direction, not a verdict. Whether a miss helped is the reader’s call.
WAPE
Σ|e| ÷ Σ|A|
Weighting each miss by the size of the actual stops one small period with a large percentage miss dominating the answer.
Limitation: Undefined when total absolute actual is zero. WAPE is the error rate itself; the accuracy score card is the one that takes it away from one.
Accuracy score
1 − WAPE
One number for how close the run came, on the same weighting as WAPE.
Limitation: Not a hit rate: it does not say what share of periods were right. Where WAPE passes 100% it goes negative, and the headline shows WAPE instead.
MAPE
mean of |e| ÷ |A|, eligible rows only
The figure most forecasting teams report, shown beside WAPE so the difference between them is visible.
Limitation: One near-zero actual can dominate it. Rows with no percentage are excluded from this figure and from nothing else.
Mean error and MAE
ME = Σe ÷ n · MAE = Σ|e| ÷ n
ME is the bias in currency; MAE is the size of the typical miss. MAE is also called MAD.
Limitation: ME can sit near zero while MAE is large, because misses either way cancel in the first and not in the second.
RMSE
√(Σe² ÷ n)
The misses squared before they are averaged, so one bad period weighs more than several small ones.
Limitation: It is never below MAE, and the gap between them is a measure of how uneven the misses were — not of accuracy.
Tracking signal
Σe ÷ MAE
The conventional check on persistent drift. Beyond the threshold, the misses are running one way rather than scattering.
Limitation: This uses cumulative MAE, not a smoothed one. It is weak below eight periods, and the threshold is a convention rather than a finding.
Naive benchmark (MASE)
MAE ÷ mean |Aᵢ − Aᵢ₋₁|
MAE against the error of simply repeating the previous period’s actual. Below one, the forecast beat that.
Limitation: Shown only where the periods parse into ascending order and there are at least three of them. Otherwise there is no series to step along, and nothing is claimed.
Suppressed percentages
A = 0, or F and A on opposite sides of zero
An actual of zero has no base to divide by, and a percentage between two figures either side of zero describes nothing.
Limitation: The currency error of those periods still counts in every total, in WAPE’s numerator and in the mean error.
Reconciliation
ΣF + Σe = ΣA
The two column totals and the summed error must close, and the check is run rather than assumed.
Limitation: Any residual is shown as a residual. Nothing is ever plugged into a total to make the identity hold.
Series type
wording and colour only
What the series measures changes what an over-forecast means to a reader — optimistic revenue, or spend that came in under.
Limitation: It changes no arithmetic. Error stays actual less forecast whatever the type, and no direction is coloured as good or bad news.