Ratings against the closing price

How close does a rating model built only from results get to the betting market?

Market log loss
0.6062
The closing price, the bar to beat
Best rating
0.6234
Ratings, both sources
Market's edge reached
80%
Of its lead over a coin toss
Priced matches
10,397
2016 to 2026, rerun daily
What it found

The market wins, by 0.0172

Scored on the same 10,397 matches, the closing price is the better forecast, which is what it should be: the market prices in injuries, travel, form and money that no results table carries. Results alone still reach 80% of the market's edge over a coin toss.

  • 19% of the gap closed by adding 74,573 results from the live results layer
  • 9 of 11 years better with them, so the API serves the archive-only ratings until the gain holds every year
  • 86.0% of matches where the ratings and the market picked the same favourite

Log loss on 10,397 priced matches

Lower is better. Every figure is out of sample.

Closing pricethe market, the bar to beat
0.6062
Ratings, both sourcesarchive plus live results
0.6234
Ratings, archive onlyresults from the archive alone
0.6275
Coin tossfifty-fifty on every match
0.6931
0.560.630.7

Year by year

Log loss each season. The change is the combined ratings against the archive alone; negative is better.

SeasonPriced matchesMarketArchive onlyBoth sourcesChange
20265010.58220.62600.6259 -0.0001
20251,3260.60660.62660.6274 +0.0008
20241,2900.62460.64570.6454 -0.0003
20231,2650.60890.62540.6240 -0.0014
20221,2320.60870.63450.6298 -0.0047
20218590.60210.62420.6187 -0.0055
20208020.61680.62750.6274 -0.0001
20199630.60240.62010.6098 -0.0104
20188990.61950.63250.6359 +0.0033
20177040.58460.61200.5908 -0.0212
20165560.57670.60640.5911 -0.0153

Method

Fixed before the tool touched the data.

Every result is replayed oldest first into an Elo-style rating, so each match is priced from ratings as they stood before it was played. That chance, carried to the match's length, is scored against the closing price on every match that had one, by log loss and Brier score. The rating is built twice, from the archive alone and with the live results layer added, on the same priced matches.

Last run 12 Oct 2026, 05:10 UTC.

Run it yourself

One command fetches, caches and reports. Priced matches need a key on any paid plan.

darts-ratings-vs-market
$ python -m ratingsvsmarket
  asks for your key once and keeps it in .key
  checks it against /v1/usage before any work
  caches what it fetches under data/, never fetched twice
  add --json for the result as a document

The rules every study keeps

Darts research is easy to flatter. These keep ours honest.

No look-ahead

Every figure uses only what was known before the match. Ratings are replayed in date order, never fitted on the future.

Out of sample

Anything tuned is tuned on one period and scored on another. A result that only holds in the data it was built on is not published as one.

Failures published

If a study finds nothing, the page says so, with the numbers. Not every question has the answer people hope for.

API only

The tools read the public endpoints, nothing else, so what you run at home is exactly what produced the page.

Got a question for the archive?

Suggest a study and we will tell you whether the data can answer it. The good ones become the next page here, with your question at the top.

Run the live study yourself
python -m ratingsvsmarket
From the darts-ratings-vs-market repository. Priced matches need a key on any paid plan.