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
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.
Year by year
Log loss each season. The change is the combined ratings against the archive alone; negative is better.
| Season | Priced matches | Market | Archive only | Both sources | Change |
|---|---|---|---|---|---|
| 2026 | 501 | 0.5822 | 0.6260 | 0.6259 | -0.0001 |
| 2025 | 1,326 | 0.6066 | 0.6266 | 0.6274 | +0.0008 |
| 2024 | 1,290 | 0.6246 | 0.6457 | 0.6454 | -0.0003 |
| 2023 | 1,265 | 0.6089 | 0.6254 | 0.6240 | -0.0014 |
| 2022 | 1,232 | 0.6087 | 0.6345 | 0.6298 | -0.0047 |
| 2021 | 859 | 0.6021 | 0.6242 | 0.6187 | -0.0055 |
| 2020 | 802 | 0.6168 | 0.6275 | 0.6274 | -0.0001 |
| 2019 | 963 | 0.6024 | 0.6201 | 0.6098 | -0.0104 |
| 2018 | 899 | 0.6195 | 0.6325 | 0.6359 | +0.0033 |
| 2017 | 704 | 0.5846 | 0.6120 | 0.5908 | -0.0212 |
| 2016 | 556 | 0.5767 | 0.6064 | 0.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.
$ 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.
Every figure uses only what was known before the match. Ratings are replayed in date order, never fitted on the future.
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.
If a study finds nothing, the page says so, with the numbers. Not every question has the answer people hope for.
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.
python -m ratingsvsmarketFrom the darts-ratings-vs-market repository. Priced matches need a key on any paid plan.