Model
Basketball: how well the predictions actually do, and what they were built from
Is the model any good?
Backtests
| Model | Matches | Log loss | Baseline | Edge | Brier | Accuracy | Settings | Run |
|---|---|---|---|---|---|---|---|---|
| nba-normal-oos | 410 | 0.6178 | 0.6915 | +0.0738 | 0.4256 | 65.6% | WNBA | sport=basketball target=xg xi=0.008 reg=1.0 step=30 | margin MAE 9.98 (naive 11.26) | total MAE 14.68 (naive 16.19) | 4 Sep 03:46 |
| nba-normal-oos | 9031 | 0.5548 | 0.6682 | +0.1134 | 0.3776 | 70.5% | NCAAB | sport=basketball target=xg xi=0.008 reg=1.0 step=300 | margin MAE 9.18 (naive 11.15) | total MAE 13.69 (naive 15.19) | 4 Sep 03:45 |
| nba-normal-oos | 8725 | 0.4794 | 0.6782 | +0.1988 | 0.3201 | 75.4% | NCAAW | sport=basketball target=xg xi=0.008 reg=1.0 step=300 | margin MAE 9.72 (naive 14.22) | total MAE 12.95 (naive 14.81) | 4 Sep 03:45 |
| nba-normal-oos | 8032 | 0.5510 | 0.6642 | +0.1132 | 0.3755 | 70.5% | NCAAB | sport=basketball target=xg xi=0.008 reg=1.0 step=300 | margin MAE 9.15 (naive 11.12) | total MAE 13.63 (naive 15.19) | 4 Sep 03:15 |
| nba-normal-oos | 7724 | 0.4800 | 0.6767 | +0.1968 | 0.3212 | 75.4% | NCAAW | sport=basketball target=xg xi=0.008 reg=1.0 step=300 | margin MAE 9.78 (naive 14.26) | total MAE 12.93 (naive 14.85) | 4 Sep 03:14 |
| nba-normal-oos | 410 | 0.6178 | 0.6915 | +0.0738 | 0.4256 | 65.6% | WNBA | sport=basketball target=xg xi=0.008 reg=1.0 step=30 | margin MAE 9.98 (naive 11.26) | total MAE 14.68 (naive 16.19) | 4 Sep 03:01 |
| nba-normal-oos | 4082 | 0.6132 | 0.6888 | +0.0757 | 0.4252 | 66.0% | NBA | sport=basketball target=xg xi=0.008 reg=1.0 step=50 | margin MAE 11.29 (naive 12.73) | total MAE 15.09 (naive 16.19) | 4 Sep 01:03 |
| sweep-r60.0-x0.014 | 4082 | 0.6521 | 0.6888 | +0.0367 | 0.4598 | 63.4% | NBA | sport=basketball target=goals xi=0.014 reg=60.0 step=50 | margin MAE 12.05 (naive 12.73) | total MAE 15.59 (naive 16.19) | 4 Sep 01:02 |
| sweep-r60.0-x0.008 | 4082 | 0.6445 | 0.6888 | +0.0444 | 0.4525 | 64.4% | NBA | sport=basketball target=goals xi=0.008 reg=60.0 step=50 | margin MAE 11.90 (naive 12.73) | total MAE 15.52 (naive 16.19) | 4 Sep 01:02 |
| sweep-r60.0-x0.004 | 4082 | 0.6390 | 0.6888 | +0.0498 | 0.4476 | 64.5% | NBA | sport=basketball target=goals xi=0.004 reg=60.0 step=50 | margin MAE 11.79 (naive 12.73) | total MAE 15.45 (naive 16.19) | 4 Sep 01:02 |
| sweep-r25.0-x0.014 | 4082 | 0.6321 | 0.6888 | +0.0567 | 0.4413 | 64.8% | NBA | sport=basketball target=goals xi=0.014 reg=25.0 step=50 | margin MAE 11.68 (naive 12.73) | total MAE 15.30 (naive 16.19) | 4 Sep 01:02 |
| sweep-r25.0-x0.008 | 4082 | 0.6268 | 0.6888 | +0.0620 | 0.4364 | 65.2% | NBA | sport=basketball target=goals xi=0.008 reg=25.0 step=50 | margin MAE 11.56 (naive 12.73) | total MAE 15.25 (naive 16.19) | 4 Sep 01:02 |
| sweep-r25.0-x0.004 | 4082 | 0.6274 | 0.6888 | +0.0614 | 0.4373 | 65.5% | NBA | sport=basketball target=goals xi=0.004 reg=25.0 step=50 | margin MAE 11.54 (naive 12.73) | total MAE 15.27 (naive 16.19) | 4 Sep 01:02 |
| sweep-r10.0-x0.014 | 4082 | 0.6180 | 0.6888 | +0.0708 | 0.4292 | 65.5% | NBA | sport=basketball target=goals xi=0.014 reg=10.0 step=50 | margin MAE 11.41 (naive 12.73) | total MAE 15.11 (naive 16.19) | 4 Sep 01:02 |
| sweep-r10.0-x0.008 | 4082 | 0.6166 | 0.6888 | +0.0722 | 0.4279 | 65.9% | NBA | sport=basketball target=goals xi=0.008 reg=10.0 step=50 | margin MAE 11.36 (naive 12.73) | total MAE 15.11 (naive 16.19) | 4 Sep 01:01 |
| sweep-r10.0-x0.004 | 4082 | 0.6226 | 0.6888 | +0.0663 | 0.4333 | 65.7% | NBA | sport=basketball target=goals xi=0.004 reg=10.0 step=50 | margin MAE 11.44 (naive 12.73) | total MAE 15.20 (naive 16.19) | 4 Sep 01:01 |
| sweep-r5.0-x0.014 | 4082 | 0.6137 | 0.6888 | +0.0751 | 0.4257 | 65.8% | NBA | sport=basketball target=goals xi=0.014 reg=5.0 step=50 | margin MAE 11.33 (naive 12.73) | total MAE 15.06 (naive 16.19) | 4 Sep 01:01 |
| sweep-r5.0-x0.008 | 4082 | 0.6139 | 0.6888 | +0.0749 | 0.4258 | 66.0% | NBA | sport=basketball target=goals xi=0.008 reg=5.0 step=50 | margin MAE 11.30 (naive 12.73) | total MAE 15.08 (naive 16.19) | 4 Sep 01:01 |
| sweep-r5.0-x0.004 | 4082 | 0.6215 | 0.6888 | +0.0674 | 0.4325 | 65.7% | NBA | sport=basketball target=goals xi=0.004 reg=5.0 step=50 | margin MAE 11.42 (naive 12.73) | total MAE 15.19 (naive 16.19) | 4 Sep 01:01 |
| sweep-r1.0-x0.014 | 4082 | 0.6132 | 0.6888 | +0.0756 | 0.4251 | 65.8% | NBA | sport=basketball target=goals xi=0.014 reg=1.0 step=50 | margin MAE 11.32 (naive 12.73) | total MAE 15.10 (naive 16.19) | 4 Sep 01:01 |
| sweep-r1.0-x0.008 | 4082 | 0.6132 | 0.6888 | +0.0757 | 0.4252 | 66.0% | NBA | sport=basketball target=goals xi=0.008 reg=1.0 step=50 | margin MAE 11.29 (naive 12.73) | total MAE 15.09 (naive 16.19) | 4 Sep 01:01 |
| sweep-r1.0-x0.004 | 4082 | 0.6211 | 0.6888 | +0.0678 | 0.4321 | 65.8% | NBA | sport=basketball target=goals xi=0.004 reg=1.0 step=50 | margin MAE 11.41 (naive 12.73) | total MAE 15.19 (naive 16.19) | 4 Sep 01:01 |
| sweep-test | 4082 | 0.6139 | 0.6888 | +0.0749 | 0.4258 | 66.0% | NBA | sport=basketball target=goals xi=0.008 reg=5.0 step=50 | margin MAE 11.30 (naive 12.73) | total MAE 15.08 (naive 16.19) | 4 Sep 01:00 |
| sweep-r60.0-x0.008 | 4082 | 0.6445 | 0.6888 | +0.0444 | 0.4525 | 64.4% | NBA | sport=basketball target=goals xi=0.008 reg=60.0 step=50 | margin MAE 11.90 (naive 12.73) | total MAE 15.52 (naive 16.19) | 4 Sep 00:59 |
| sweep-r60.0-x0.004 | 4082 | 0.6390 | 0.6888 | +0.0498 | 0.4476 | 64.5% | NBA | sport=basketball target=goals xi=0.004 reg=60.0 step=50 | margin MAE 11.79 (naive 12.73) | total MAE 15.45 (naive 16.19) | 4 Sep 00:59 |
Log loss is the average negative log probability the model gave to what actually happened — lower is better. Baseline is the same score for a model that always predicts the league's base rate of home/draw/away, and edge is how much the model beats it by. An edge at or below zero means the model has learned nothing worth having.
Stored predictions
| Model | Predictions | On upcoming fixtures | Generated |
|---|---|---|---|
| deep | 28 | 28 | 21 Oct 2026 18:10 |
| nba-normal-oos | 22248 | 0 | 4 Sep 2026 03:46 |
| nba-normal | 4875 | 4875 | 4 Sep 2026 03:45 |
Data behind it
Covering 2022-10-01 to 2027-04-11.
Source: Understat, via the soccerdata scraper.
Calibration
When the model claimed a probability in each band, how often was it actually right? A negative gap means overconfidence — the model promises more than it delivers, and every pick in that band is marked down before it is ranked. Bands with fewer than 60 past results are hidden as too thin to read anything into.
| Market | Band | Claimed | Actually won | Gap | Sample | |
|---|---|---|---|---|---|---|
| Century marks | 35%–40% | 37.5% | 35.9% | -1.6 | 1344 | |
| Century marks | 40%–45% | 42.5% | 41.9% | -0.6 | 1268 | |
| Century marks | 45%–50% | 47.5% | 46.9% | -0.5 | 1178 | |
| Century marks | 50%–55% | 52.5% | 52.3% | -0.2 | 1200 | |
| Century marks | 55%–60% | 57.5% | 56.3% | -1.2 | 1282 | |
| Century marks | 60%–65% | 62.6% | 61.8% | -0.8 | 1472 | |
| Century marks | 65%–70% | 67.5% | 63.7% | -3.8 | 1635 | |
| Century marks | 70%–75% | 72.5% | 72.3% | -0.2 | 1973 | |
| Century marks | 75%–80% | 77.6% | 76.9% | -0.6 | 2163 | |
| Century marks | 80%–85% | 82.5% | 79.2% | -3.3 | 2428 | |
| Century marks | 85%–90% | 87.6% | 85.0% | -2.6 | 2737 | |
| Century marks | 90%–95% | 92.5% | 90.3% | -2.2 | 3103 | |
| Century marks | 95%–100% | 97.1% | 94.8% | -2.2 | 2170 | |
| H1 result | 35%–40% | 37.5% | 37.8% | +0.3 | 5490 | |
| H1 result | 40%–45% | 42.5% | 42.7% | +0.2 | 5734 | |
| H1 result | 45%–50% | 47.5% | 47.3% | -0.2 | 5980 | |
| H1 result | 50%–55% | 52.4% | 51.8% | -0.6 | 5734 | |
| H1 result | 55%–60% | 57.5% | 57.3% | -0.2 | 5462 | |
| H1 result | 60%–65% | 62.4% | 62.2% | -0.2 | 4912 | |
| H1 result | 65%–70% | 67.4% | 68.3% | +0.9 | 3985 | |
| H1 result | 70%–75% | 72.4% | 73.0% | +0.6 | 3065 | |
| H1 result | 75%–80% | 77.4% | 79.2% | +1.9 | 2211 | |
| H1 result | 80%–85% | 82.2% | 83.6% | +1.4 | 1503 | |
| H1 result | 85%–90% | 87.4% | 88.7% | +1.4 | 995 | |
| H1 result | 90%–95% | 92.3% | 93.5% | +1.2 | 567 | |
| H1 result | 95%–100% | 97.1% | 98.8% | +1.7 | 256 | |
| H1 total | 35%–40% | 37.8% | 37.3% | -0.5 | 50355 | |
| H1 total | 40%–45% | 42.4% | 41.8% | -0.6 | 29994 | |
| H1 total | 45%–50% | 47.6% | 47.4% | -0.2 | 79623 | |
| H1 total | 50%–55% | 52.4% | 52.6% | +0.2 | 79623 | |
| H1 total | 55%–60% | 57.6% | 58.2% | +0.6 | 29994 | |
| H1 total | 60%–65% | 62.2% | 62.7% | +0.5 | 50355 | |
| H1 total | 65%–70% | 68.0% | 67.4% | -0.6 | 45899 | |
| H1 total | 70%–75% | 71.8% | 73.5% | +1.7 | 21330 | |
| H1 total | 75%–80% | 78.1% | 77.4% | -0.7 | 46655 | |
| H1 total | 80%–85% | 81.6% | 82.5% | +0.9 | 16299 | |
| H1 total | 85%–90% | 88.0% | 87.7% | -0.3 | 34404 | |
| H1 total | 90%–95% | 90.4% | 90.8% | +0.4 | 1415 | |
| H2 result | 35%–40% | 37.5% | 41.3% | +3.7 | 5270 | |
| H2 result | 40%–45% | 42.5% | 43.6% | +1.0 | 5444 | |
| H2 result | 45%–50% | 47.5% | 47.1% | -0.4 | 5745 | |
| H2 result | 50%–55% | 52.5% | 51.2% | -1.3 | 5437 | |
| H2 result | 55%–60% | 57.5% | 55.0% | -2.5 | 5205 | |
| H2 result | 60%–65% | 62.4% | 58.8% | -3.6 | 4711 | |
| H2 result | 65%–70% | 67.4% | 62.7% | -4.7 | 4082 | |
| H2 result | 70%–75% | 72.4% | 67.5% | -4.9 | 3086 | |
| H2 result | 75%–80% | 77.3% | 73.9% | -3.5 | 2361 | |
| H2 result | 80%–85% | 82.3% | 79.5% | -2.9 | 1743 | |
| H2 result | 85%–90% | 87.4% | 84.0% | -3.3 | 1140 | |
| H2 result | 90%–95% | 92.3% | 89.2% | -3.1 | 719 | |
| H2 result | 95%–100% | 97.1% | 95.3% | -1.8 | 363 | |
| H2 total | 35%–40% | 38.1% | 38.4% | +0.2 | 46487 | |
| H2 total | 40%–45% | 42.2% | 42.7% | +0.4 | 32423 | |
| H2 total | 45%–50% | 47.6% | 47.6% | +0.0 | 81393 | |
| H2 total | 50%–55% | 52.4% | 52.4% | -0.0 | 81393 | |
| H2 total | 55%–60% | 57.8% | 57.3% | -0.4 | 32423 | |
| H2 total | 60%–65% | 61.9% | 61.6% | -0.2 | 46487 | |
| H2 total | 65%–70% | 67.6% | 66.4% | -1.2 | 53394 | |
| H2 total | 70%–75% | 72.6% | 72.2% | -0.4 | 15545 | |
| H2 total | 75%–80% | 77.3% | 75.8% | -1.5 | 50869 | |
| H2 total | 80%–85% | 82.7% | 81.8% | -0.9 | 11948 | |
| H2 total | 85%–90% | 87.1% | 85.2% | -1.9 | 33754 | |
| H2 total | 90%–95% | 90.3% | 87.6% | -2.8 | 161 | |
| Half time | 35%–40% | 37.5% | 37.9% | +0.3 | 3846 | |
| Half time | 40%–45% | 42.5% | 42.8% | +0.3 | 4054 | |
| Half time | 45%–50% | 47.5% | 47.2% | -0.3 | 4270 | |
| Half time | 50%–55% | 52.4% | 51.9% | -0.6 | 4061 | |
| Half time | 55%–60% | 57.5% | 56.9% | -0.5 | 3850 | |
| Half time | 60%–65% | 62.4% | 62.5% | +0.1 | 3417 | |
| Half time | 65%–70% | 67.4% | 68.4% | +1.1 | 2782 | |
| Half time | 70%–75% | 72.4% | 73.5% | +1.1 | 2161 | |
| Half time | 75%–80% | 77.4% | 79.7% | +2.4 | 1595 | |
| Half time | 80%–85% | 82.3% | 83.3% | +1.1 | 1111 | |
| Half time | 85%–90% | 87.4% | 89.5% | +2.2 | 772 | |
| Half time | 90%–95% | 92.3% | 94.1% | +1.8 | 459 | |
| Half time | 95%–100% | 97.2% | 98.7% | +1.5 | 227 | |
| Handicap | 35%–40% | 37.5% | 38.1% | +0.6 | 49523 | |
| Handicap | 40%–45% | 42.5% | 42.9% | +0.4 | 48554 | |
| Handicap | 45%–50% | 47.5% | 47.6% | +0.1 | 48004 | |
| Handicap | 50%–55% | 52.5% | 52.4% | -0.1 | 48004 | |
| Handicap | 55%–60% | 57.5% | 57.1% | -0.4 | 48554 | |
| Handicap | 60%–65% | 62.5% | 61.9% | -0.6 | 49523 | |
| Handicap | 65%–70% | 67.5% | 66.7% | -0.8 | 50710 | |
| Handicap | 70%–75% | 72.5% | 71.6% | -0.9 | 52632 | |
| Handicap | 75%–80% | 77.5% | 76.5% | -1.1 | 55822 | |
| Handicap | 80%–85% | 82.5% | 81.1% | -1.4 | 60224 | |
| Handicap | 85%–90% | 87.6% | 85.9% | -1.7 | 67356 | |
| Handicap | 90%–95% | 92.6% | 91.1% | -1.5 | 80812 | |
| Handicap | 95%–100% | 98.2% | 97.4% | -0.7 | 153713 | |
| Highest scoring half | 40%–45% | 43.4% | 47.4% | +4.1 | 4082 | |
| Highest scoring half | 45%–50% | 49.5% | 52.7% | +3.1 | 410 | |
| Highest scoring half | 50%–55% | 50.5% | 47.3% | -3.1 | 410 | |
| Highest scoring half | 55%–60% | 56.6% | 52.6% | -4.1 | 4082 | |
| Highest scoring half | 65%–70% | 69.5% | 71.7% | +2.2 | 587 | |
| Highest scoring half | 70%–75% | 72.3% | 67.0% | -5.3 | 8163 | |
| Highest scoring half | 75%–80% | 77.9% | 71.6% | -6.2 | 14616 | |
| Highest scoring half | 80%–85% | 81.0% | 71.4% | -9.5 | 3418 | |
| Highest scoring quarter | 35%–40% | 35.4% | 28.4% | -7.0 | 1398 | |
| HT/FT | 35%–40% | 37.5% | 37.8% | +0.3 | 3168 | |
| HT/FT | 40%–45% | 42.5% | 41.0% | -1.5 | 2935 | |
| HT/FT | 45%–50% | 47.5% | 46.6% | -0.9 | 2773 | |
| HT/FT | 50%–55% | 52.5% | 51.1% | -1.4 | 2571 | |
| HT/FT | 55%–60% | 57.4% | 56.8% | -0.6 | 2259 | |
| HT/FT | 60%–65% | 62.4% | 62.3% | -0.1 | 1955 | |
| HT/FT | 65%–70% | 67.5% | 68.3% | +0.8 | 1658 | |
| HT/FT | 70%–75% | 72.4% | 73.2% | +0.8 | 1335 | |
| HT/FT | 75%–80% | 77.4% | 78.1% | +0.7 | 1126 | |
| HT/FT | 80%–85% | 82.3% | 84.6% | +2.3 | 826 | |
| HT/FT | 85%–90% | 87.3% | 89.2% | +1.9 | 650 | |
| HT/FT | 90%–95% | 92.3% | 94.1% | +1.8 | 425 | |
| HT/FT | 95%–100% | 97.2% | 98.6% | +1.4 | 222 | |
| Moneyline | 35%–40% | 37.5% | 39.4% | +1.9 | 2385 | |
| Moneyline | 40%–45% | 42.5% | 44.8% | +2.4 | 2446 | |
| Moneyline | 45%–50% | 47.5% | 49.0% | +1.6 | 2577 | |
| Moneyline | 50%–55% | 52.5% | 51.0% | -1.6 | 2577 | |
| Moneyline | 55%–60% | 57.5% | 55.2% | -2.4 | 2446 | |
| Moneyline | 60%–65% | 62.5% | 60.6% | -1.9 | 2385 | |
| Moneyline | 65%–70% | 67.5% | 64.4% | -3.1 | 2444 | |
| Moneyline | 70%–75% | 72.5% | 68.7% | -3.8 | 2317 | |
| Moneyline | 75%–80% | 77.5% | 75.0% | -2.4 | 2228 | |
| Moneyline | 80%–85% | 82.4% | 80.9% | -1.6 | 2028 | |
| Moneyline | 85%–90% | 87.5% | 85.5% | -2.0 | 1888 | |
| Moneyline | 90%–95% | 92.5% | 90.6% | -1.9 | 1813 | |
| Moneyline | 95%–100% | 97.9% | 97.5% | -0.4 | 2119 | |
| Odd/Even | 45%–50% | 49.5% | 49.5% | +0.0 | 66733 | |
| Odd/Even | 50%–55% | 50.5% | 50.5% | -0.0 | 66737 | |
| Overtime | 90%–95% | 93.4% | 94.0% | +0.6 | 15855 | |
| Overtime | 95%–100% | 96.6% | 97.0% | +0.4 | 6390 | |
| Q1 result | 35%–40% | 37.7% | 38.3% | +0.6 | 2800 | |
| Q1 result | 40%–45% | 42.6% | 42.9% | +0.4 | 3405 | |
| Q1 result | 45%–50% | 47.5% | 47.6% | +0.1 | 3743 | |
| Q1 result | 50%–55% | 52.5% | 52.6% | +0.2 | 3360 | |
| Q1 result | 55%–60% | 57.4% | 57.3% | -0.1 | 2708 | |
| Q1 result | 60%–65% | 62.4% | 64.9% | +2.6 | 1925 | |
| Q1 result | 65%–70% | 67.4% | 72.4% | +5.0 | 1312 | |
| Q1 result | 70%–75% | 72.3% | 73.8% | +1.6 | 803 | |
| Q1 result | 75%–80% | 77.2% | 80.1% | +2.8 | 527 | |
| Q1 result | 80%–85% | 82.2% | 86.2% | +3.9 | 282 | |
| Q1 result | 85%–90% | 87.2% | 92.7% | +5.5 | 151 | |
| Q1 result | 90%–95% | 92.1% | 92.6% | +0.5 | 68 | |
| Q1 total | 35%–40% | 36.8% | 38.3% | +1.5 | 10097 | |
| Q1 total | 40%–45% | 43.1% | 41.4% | -1.7 | 14931 | |
| Q1 total | 45%–50% | 47.5% | 47.3% | -0.2 | 24062 | |
| Q1 total | 50%–55% | 52.5% | 52.7% | +0.2 | 24062 | |
| Q1 total | 55%–60% | 56.9% | 58.6% | +1.7 | 14931 | |
| Q1 total | 60%–65% | 63.2% | 61.7% | -1.5 | 10097 | |
| Q1 total | 65%–70% | 67.4% | 67.6% | +0.2 | 15393 | |
| Q1 total | 70%–75% | 72.5% | 72.7% | +0.2 | 12376 | |
| Q1 total | 75%–80% | 77.4% | 76.9% | -0.5 | 14401 | |
| Q1 total | 80%–85% | 82.5% | 82.8% | +0.3 | 9791 | |
| Q1 total | 85%–90% | 88.2% | 87.4% | -0.8 | 16125 | |
| Q1 total | 90%–95% | 90.3% | 91.1% | +0.8 | 1750 | |
| Q2 result | 35%–40% | 37.6% | 35.7% | -1.9 | 2868 | |
| Q2 result | 40%–45% | 42.6% | 43.9% | +1.3 | 3454 | |
| Q2 result | 45%–50% | 47.5% | 47.0% | -0.5 | 3834 | |
| Q2 result | 50%–55% | 52.5% | 51.4% | -1.1 | 3427 | |
| Q2 result | 55%–60% | 57.4% | 59.4% | +2.0 | 2752 | |
| Q2 result | 60%–65% | 62.4% | 61.9% | -0.5 | 1939 | |
| Q2 result | 65%–70% | 67.4% | 68.4% | +1.0 | 1288 | |
| Q2 result | 70%–75% | 72.3% | 75.3% | +3.0 | 774 | |
| Q2 result | 75%–80% | 77.2% | 81.0% | +3.8 | 484 | |
| Q2 result | 80%–85% | 82.2% | 85.3% | +3.1 | 273 | |
| Q2 result | 85%–90% | 87.2% | 93.5% | +6.3 | 123 | |
| Q2 result | 90%–95% | 91.9% | 95.4% | +3.5 | 65 | |
| Q2 total | 35%–40% | 36.8% | 39.3% | +2.5 | 10125 | |
| Q2 total | 40%–45% | 43.1% | 41.8% | -1.3 | 14880 | |
| Q2 total | 45%–50% | 47.5% | 47.3% | -0.2 | 24128 | |
| Q2 total | 50%–55% | 52.5% | 52.7% | +0.2 | 24128 | |
| Q2 total | 55%–60% | 56.9% | 58.2% | +1.3 | 14880 | |
| Q2 total | 60%–65% | 63.2% | 60.7% | -2.5 | 10125 | |
| Q2 total | 65%–70% | 67.4% | 67.4% | -0.0 | 15551 | |
| Q2 total | 70%–75% | 72.5% | 72.0% | -0.5 | 12230 | |
| Q2 total | 75%–80% | 77.4% | 76.8% | -0.6 | 14350 | |
| Q2 total | 80%–85% | 82.4% | 83.0% | +0.6 | 9725 | |
| Q2 total | 85%–90% | 88.2% | 87.3% | -0.8 | 16235 | |
| Q2 total | 90%–95% | 90.3% | 90.8% | +0.5 | 1702 | |
| Q3 result | 35%–40% | 37.6% | 38.8% | +1.2 | 2763 | |
| Q3 result | 40%–45% | 42.6% | 42.3% | -0.3 | 3315 | |
| Q3 result | 45%–50% | 47.5% | 47.6% | +0.0 | 3655 | |
| Q3 result | 50%–55% | 52.4% | 52.7% | +0.2 | 3256 | |
| Q3 result | 55%–60% | 57.3% | 56.8% | -0.5 | 2652 | |
| Q3 result | 60%–65% | 62.3% | 60.8% | -1.5 | 1912 | |
| Q3 result | 65%–70% | 67.3% | 66.7% | -0.7 | 1300 | |
| Q3 result | 70%–75% | 72.2% | 73.1% | +0.9 | 904 | |
| Q3 result | 75%–80% | 77.4% | 81.8% | +4.4 | 576 | |
| Q3 result | 80%–85% | 82.2% | 86.0% | +3.8 | 343 | |
| Q3 result | 85%–90% | 87.2% | 87.4% | +0.1 | 182 | |
| Q3 result | 90%–95% | 91.9% | 95.6% | +3.7 | 91 | |
| Q3 total | 35%–40% | 36.7% | 38.1% | +1.4 | 9983 | |
| Q3 total | 40%–45% | 43.1% | 41.6% | -1.5 | 14952 | |
| Q3 total | 45%–50% | 47.5% | 47.7% | +0.2 | 24410 | |
| Q3 total | 50%–55% | 52.5% | 52.3% | -0.2 | 24410 | |
| Q3 total | 55%–60% | 56.9% | 58.4% | +1.5 | 14952 | |
| Q3 total | 60%–65% | 63.3% | 61.9% | -1.4 | 9983 | |
| Q3 total | 65%–70% | 67.2% | 67.8% | +0.6 | 15758 | |
| Q3 total | 70%–75% | 72.7% | 71.8% | -0.9 | 12479 | |
| Q3 total | 75%–80% | 77.2% | 77.3% | +0.1 | 14667 | |
| Q3 total | 80%–85% | 82.9% | 82.3% | -0.6 | 8491 | |
| Q3 total | 85%–90% | 87.7% | 87.2% | -0.5 | 17900 | |
| Q3 total | 90%–95% | 90.2% | 90.9% | +0.7 | 286 | |
| Q4 result | 35%–40% | 37.6% | 42.5% | +4.8 | 2782 | |
| Q4 result | 40%–45% | 42.6% | 43.1% | +0.5 | 3359 | |
| Q4 result | 45%–50% | 47.5% | 47.6% | +0.1 | 3732 | |
| Q4 result | 50%–55% | 52.4% | 51.4% | -1.0 | 3307 | |
| Q4 result | 55%–60% | 57.3% | 52.0% | -5.4 | 2684 | |
| Q4 result | 60%–65% | 62.3% | 57.7% | -4.6 | 1897 | |
| Q4 result | 65%–70% | 67.4% | 60.4% | -6.9 | 1281 | |
| Q4 result | 70%–75% | 72.2% | 66.0% | -6.3 | 873 | |
| Q4 result | 75%–80% | 77.3% | 71.1% | -6.3 | 560 | |
| Q4 result | 80%–85% | 82.2% | 73.8% | -8.4 | 321 | |
| Q4 result | 85%–90% | 87.2% | 82.7% | -4.5 | 179 | |
| Q4 result | 90%–95% | 92.0% | 82.5% | -9.5 | 80 | |
| Q4 total | 35%–40% | 36.7% | 38.6% | +1.8 | 12188 | |
| Q4 total | 40%–45% | 43.3% | 41.6% | -1.6 | 14044 | |
| Q4 total | 45%–50% | 47.5% | 47.5% | +0.0 | 25596 | |
| Q4 total | 50%–55% | 52.5% | 52.5% | -0.0 | 25596 | |
| Q4 total | 55%–60% | 56.7% | 58.4% | +1.6 | 14044 | |
| Q4 total | 60%–65% | 63.3% | 61.4% | -1.8 | 12188 | |
| Q4 total | 65%–70% | 67.0% | 67.4% | +0.4 | 15282 | |
| Q4 total | 70%–75% | 72.9% | 71.5% | -1.4 | 14695 | |
| Q4 total | 75%–80% | 76.6% | 76.9% | +0.3 | 10817 | |
| Q4 total | 80%–85% | 82.8% | 82.0% | -0.8 | 11054 | |
| Q4 total | 85%–90% | 86.7% | 85.6% | -1.1 | 15250 | |
| Team total | 35%–40% | 37.6% | 38.8% | +1.2 | 68845 | |
| Team total | 40%–45% | 42.8% | 42.9% | +0.1 | 40516 | |
| Team total | 45%–50% | 47.6% | 47.7% | +0.2 | 104660 | |
| Team total | 50%–55% | 52.4% | 52.3% | -0.2 | 104660 | |
| Team total | 55%–60% | 57.2% | 57.1% | -0.1 | 40516 | |
| Team total | 60%–65% | 62.4% | 61.2% | -1.2 | 68845 | |
| Team total | 65%–70% | 67.8% | 66.4% | -1.4 | 52728 | |
| Team total | 70%–75% | 72.1% | 70.7% | -1.4 | 63001 | |
| Team total | 75%–80% | 77.5% | 75.1% | -2.4 | 67339 | |
| Team total | 80%–85% | 82.6% | 80.7% | -1.9 | 36126 | |
| Team total | 85%–90% | 86.6% | 83.9% | -2.7 | 54680 | |
| Team total | 90%–95% | 91.5% | 86.3% | -5.2 | 1187 | |
| Team total | 95%–100% | 98.4% | 72.4% | -26.0 | 308 | |
| Total points | 35%–40% | 37.4% | 38.5% | +1.1 | 46085 | |
| Total points | 40%–45% | 42.5% | 43.5% | +1.0 | 44207 | |
| Total points | 45%–50% | 48.0% | 47.7% | -0.3 | 65046 | |
| Total points | 50%–55% | 52.0% | 52.3% | +0.3 | 65046 | |
| Total points | 55%–60% | 57.5% | 56.5% | -1.0 | 44207 | |
| Total points | 60%–65% | 62.6% | 61.5% | -1.1 | 46085 | |
| Total points | 65%–70% | 67.4% | 65.9% | -1.6 | 41578 | |
| Total points | 70%–75% | 72.8% | 70.8% | -1.9 | 30410 | |
| Total points | 75%–80% | 77.0% | 75.6% | -1.4 | 22878 | |
| Total points | 80%–85% | 83.2% | 80.6% | -2.6 | 25845 | |
| Total points | 85%–90% | 87.1% | 85.0% | -2.1 | 29334 | |
| Total points | 90%–95% | 91.7% | 88.8% | -2.8 | 27840 | |
| Total points | 95%–100% | 95.7% | 91.8% | -3.9 | 452 | |
| Win both halves | 35%–40% | 37.4% | 36.3% | -1.1 | 2445 | |
| Win both halves | 40%–45% | 42.4% | 40.6% | -1.8 | 2005 | |
| Win both halves | 45%–50% | 47.4% | 45.8% | -1.6 | 1529 | |
| Win both halves | 50%–55% | 52.4% | 50.3% | -2.0 | 1297 | |
| Win both halves | 55%–60% | 57.4% | 57.8% | +0.4 | 983 | |
| Win both halves | 60%–65% | 62.4% | 60.6% | -1.8 | 855 | |
| Win both halves | 65%–70% | 67.5% | 66.8% | -0.7 | 641 | |
| Win both halves | 70%–75% | 72.5% | 72.0% | -0.6 | 478 | |
| Win both halves | 75%–80% | 77.3% | 77.1% | -0.2 | 401 | |
| Win both halves | 80%–85% | 82.4% | 82.3% | -0.1 | 327 | |
| Win both halves | 85%–90% | 87.4% | 86.0% | -1.4 | 221 | |
| Win both halves | 90%–95% | 92.3% | 93.2% | +0.9 | 162 | |
| Win both halves | 95%–100% | 97.3% | 96.4% | -0.9 | 110 | |
| Winning margin | 35%–40% | 37.6% | 40.2% | +2.7 | 251 | |
| Winning margin | 40%–45% | 42.5% | 48.9% | +6.4 | 184 | |
| Winning margin | 45%–50% | 47.4% | 47.5% | +0.1 | 139 | |
| Winning margin | 50%–55% | 52.2% | 48.4% | -3.9 | 124 | |
| Winning margin | 55%–60% | 57.5% | 64.7% | +7.2 | 85 | |
| Winning margin | 60%–65% | 62.6% | 70.5% | +7.9 | 78 | |
| Winning margin | 65%–70% | 67.5% | 72.3% | +4.8 | 65 |
How the model works
Each team carries an attack and a defence rating on
the log scale. The goals a home side is expected to score are
exp(attackhome + defenceaway + home advantage), and the away side's
are exp(attackaway + defencehome). Those two numbers feed a pair of
Poisson distributions, combined into a full scoreline matrix from which every market —
1X2, over/under, both teams to score, exact score — is read off.
Two departures from the textbook version matter:
- Time decay. Each historical match is weighted
exp(−xi · days ago), so recent form counts for more than a result from two seasons back. - An xG target. Fitting on expected goals rather than goals removes finishing variance, which is mostly noise. In the backtest this improved accuracy without hurting log loss.
The rho parameter is Dixon and Coles' correction to the
low-scoring cells (0-0, 1-0, 0-1, 1-1), where treating the two scores as independent is known to misfit.