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.

Number format
Forecast against actual by period.
PeriodItemForecastActual

Tip: paste a rectangular range from Excel or Sheets.

Your financial data is processed locally in your browser and is not uploaded to Consilium.

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%
MAPE
7.9%
MAE
$85.0
RMSE
$87.7

Forecast bias

Tracking signal -4.59 · threshold ±4 · Bias alarm: persistent over-forecastTracking signal is noisy with fewer than 8 periods.

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.

Adds up
PeriodForecastActualErrorAbs errorSigned % of actualerror ÷ |actual|DirectionTS 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.05.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.0WAPE 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.

Bias share

|Σe| ÷ Σ|e| = |TS| ÷ n

Forecast bias as a share: the part of the total miss that did not cancel. A high share means one direction repeated rather than noise.

Limitation: It is the tracking signal divided by the period count, not a second finding. Read one or the other, not both as confirmation.

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.

Keep this analysis for later. Saving is optional.

Feedback

Save this analysis

We will store the name and this tool’s supported calculation inputs, assumptions, labels, currency and number format, plus its identifier, save dates and your account ID. Outputs are recalculated when you open it.

Chart export styling, materiality filters, monthly review datasets and connected supporting analyses are not included in account saves.

No source workbook or chart file is uploaded. Your inputs stay in the browser until you sign in and confirm saving. A temporary draft stays in this tab for up to 30 minutes while you sign in.

Saved inputs are stored on Cloudflare in Western Europe until you delete them or your account. Deleted data may remain in restricted, encrypted backups in Asia-Pacific until their 30-day expiry. A separate encrypted recovery log keeps record IDs, protected email fingerprints and deletion or unsubscribe times for 35 days so a restore does not bring deleted data back. It contains no financial inputs. Expiry runs automatically and may not remove records at the exact deadline.