An Elo model vs. the market, match by match

Can a rating system beat the closing odds?

We built a chronological Elo engine for men's tennis and let it predict every Grand Slam and Masters 1000 match played in 2026 so far — then compared it to the actual closing prices bookmakers offered. Here's the scoreboard, unedited.

Elo Model
66.7%
accuracy
VS
Market (closing)
73.9%
accuracy
499 matches · 5 events · Australian Open → French Open · Jan 18 – Jun 7, 2026 · see every match & pick →

Method

No black box. Four moving parts, in order.

01 — Seed

Each player's Elo is initialized from their ATP rank points the first time they appear in the 2026 data — a stand-in for multi-year match history we couldn't pull this round.

02 — Update

Standard logistic Elo, K=32, no surface adjustment yet. Ratings move match-by-match in true chronological order — no peeking at results before they happened.

03 — Predict

For every match, the model's probability is computed before the result is folded in. That number is what gets graded.

04 — Grade

Compared against closing odds (de-vigged average across books, plus Bet365 solo) — the standard benchmark for "is this actually any good."

Tournament by tournament

EventMatchesModel acc.Market acc.Gap
Australian Open12774.0%79.5%−5.5
Indian Wells9568.4%71.6%−3.2
Monte Carlo5570.9%76.4%−5.5
Madrid9557.9%70.5%−12.6
French Open12763.0%71.7%−8.7

The model never once out-accuracies the market at event level. Madrid (clay, longer since last seed) is the worst gap — the cold-start cost shows most where rating history matters most.

Calibration — is the model at least honest?

Separate question from accuracy: when the model says 70%, does that side actually win ~70% of the time?

0–35%
28% / 26%
35–45%
40% / 38%
45–55%
50% / 50%
55–65%
60% / 62%
65–80%
71% / 73%
80–100%
85% / 90%

Bar = model's average predicted probability in that bucket. Tick = what actually happened. They track closely — the model isn't overconfident, it's just working with less information than a bookmaker who's watching warm-ups, injury news, and live money.

Would it have made money?

Flat $1 stakes, every match, both sides evaluated, filtered by how much edge the model claimed over the market price.

Edge filterBetsP&L (units)ROI
Any edge, Avg price499−74.95−15.0%
Edge > 5%, Avg price348−79.93−23.0%
Any edge, best price499−21.87−4.4%
Edge > 5%, best price348−59.72−17.2%
Flat favorite, every match499−32.16−6.4%

Every configuration loses money. Filtering for "bigger edge" makes it worse, not better — a tell that the apparent edge is model noise, not real signal the market missed.

Verdict

This is the expected result, not a failed experiment. At Grand Slam and Masters 1000 level, the betting market is priced by people watching the same rankings this model uses, plus warm-ups, injury reports, and real money moving the line in real time. A single-number rating system without that information shouldn't beat it — and didn't.

The calibration story is the actual finding worth keeping: the model knows roughly how much it doesn't know. That's the property worth building on.

Where this goes next: Challenger and ITF events, where books price more mechanically and the crowd thinns out — exactly where the original thesis pointed. No free historical odds source for that tier has turned up yet, so that backtest is still unbuilt.