How accurate are MatchEdge forecasts?
Loading the settled forecasts.
Scores against two baselines
Calibration: do 70 in 100 forecasts come true 70 times in 100?
Coverage: matches with a forecast published before kickoff
The full forecast log
How the forecasts are made and checked
Goals first, results second
For football, MatchEdge fits a Dixon–Coles model. Every team gets an attacking and a defensive strength, and the goals each side scores are modelled as counts that follow a Poisson distribution, with a correction for low scores (0–0, 1–0, 0–1, 1–1) that plain Poisson models misjudge. From the grid of possible scorelines we add up the cells for a home win, a draw and an away win, and for markets such as Over 2.5 goals. Older results are weighted down with an exponential time decay, so a match played a year ago counts for about half as much as one played today.
Comparing teams across leagues
Clubs from different leagues rarely meet, so their league-level strengths cannot be compared directly. An Elo bridge puts them on one scale, using Elo ratings and league-strength tiers. This matters most for European competitions. A model that uses nothing but Elo ratings is also one of the two baselines below.
NFL and NBA
For American football and basketball the model simulates each game 20,000 times. The share of simulations a team wins is its win probability, and the simulated scores give the spread and the total.
Draws
Every football forecast has three numbers: home win, draw and away win. A draw is rarely the single most likely result of a match, and that is expected for this kind of model, so the table above puts the share of draws the model forecast next to the share that happened. The most likely result is never presented as a recommendation.
How accuracy is scored
Brier score. For each forecast, compare the probabilities with what happened (1 for the result that occurred, 0 for the others), square each gap, add them up, and average over all forecasts. Lower is better. A 1X2 forecast that gives every result one chance in three scores 0.667.
Log-loss. The average of minus the logarithm of the probability given to what happened. It punishes confident misses hard. Lower is better.
Calibration error (ECE). Forecasts are grouped into bands by probability. For each band, ECE compares the average forecast with the share that came true, then averages the gaps weighted by band size. An ECE of 0.050 means forecasts were off by five percentage points on average. Lower is better.
Ranked probability score (RPS). Football 1X2 only. Like the Brier score, but it respects the order home win, draw, away win, so missing a draw by a little costs less than missing it by a lot. Lower is better.
Baselines. (1) Base rates: the home, draw and away shares of the league over its last five seasons, used as the forecast for every match. (2) Elo only: a model that uses Elo ratings and nothing else. If MatchEdge does not beat both over 300 or more settled forecasts in a league, the league is marked experimental.
Intervals. The vertical lines in the calibration charts are 95% Wilson intervals: the range of true frequencies that fits what was observed in the band. Bands with few forecasts have long lines.
Minimum sample. No score for a league and market is published before 300 settled forecasts, because a few weeks of results can look good or bad by chance. Until then the page shows how many forecasts have settled.
Fixed before kickoff
After the 06:00 UTC run, the day’s forecasts are written to one file in a canonical form (sorted keys, four decimals, UTC timestamps). Its SHA-256 hash is stored with the forecasts and committed, with the file, to a separate public repository before the first kickoff of the day. The commit time on that repository is a timestamp we do not control, and its history is never rewritten. If a forecast changes after publication (late team news) the change is a new version with a new hash; the old one stays in the log. A forecast is scored with the last version published before kickoff, and versions published after kickoff are ignored.
Check a day yourself
Download the day’s file and its hash file from the forecast log (folders are YYYY/MM/YYYY-MM-DD.json and .sha256), then run this in a terminal in the folder with the download:
sha256sum YYYY-MM-DD.json
The result must be identical to the text in the .sha256 file, and the commit time in the repository must be before the first kickoff of that day.
What this page does not show
Accuracy over many forecasts says nothing certain about any single match. Probabilities are estimates and can be wrong. This page reports how good the probabilities are, not what anyone could have done with them.