NBA model performance
Walk-forward: each season is predicted by models trained only on earlier seasons. Settings were chosen on 2016-17–2020-21; the test seasons were scored once. Log loss and Brier score measure how good the probabilities are; lower is better.
Test seasons 2021-22 – 2025-26 (6575 games)
| Model | Log loss ↓ | Brier ↓ | Winner picked ↑ |
|---|---|---|---|
| Always home team (base rate) | 0.6877 | 0.2473 | 55.5% |
| Elo (logistic on rating gap) | 0.6224 | 0.2166 | 65.5% |
| Margin model (ridge regression) | 0.6186 | 0.2148 | 65.8% |
| Gradient boosting | 0.6220 | 0.2163 | 65.2% |
| Ensemble (final model) | 0.6190 | 0.2150 | 65.7% |
| Bookmaker moneyline (margin removed) | 0.5943 | 0.2045 | 68.1% |
6567 games with a pre-game line.
The final model averages elo 35%, margin 50%, gbm 15%. The betting market is better than the model on every measure, which is normal for a model without injury, lineup or rest-decision information. Bold marks the best non-market value.
Calibration on test seasons (home-win probability)
Validation seasons 2016-17 – 2020-21
| Model | Log loss ↓ | Brier ↓ | Winner picked ↑ |
|---|---|---|---|
| Always home team (base rate) | 0.6831 | 0.2450 | 57.2% |
| Elo (logistic on rating gap) | 0.6266 | 0.2186 | 64.4% |
| Margin model (ridge regression) | 0.6255 | 0.2181 | 64.7% |
| Gradient boosting | 0.6269 | 0.2187 | 64.7% |
| Ensemble (final model) | 0.6244 | 0.2176 | 64.8% |
| Bookmaker moneyline: no stored odds for these seasons | |||
Used to choose every setting, so slightly optimistic.
Log loss by season
| Season | Games | Elo | Margin | Boosting | Ensemble | Market |
|---|---|---|---|---|---|---|
| 2016-17 validation | 1309 | 0.625 | 0.623 | 0.626 | 0.622 | – |
| 2017-18 validation | 1312 | 0.616 | 0.620 | 0.619 | 0.617 | – |
| 2018-19 validation | 1312 | 0.616 | 0.613 | 0.615 | 0.613 | – |
| 2019-20 validation | 1142 | 0.632 | 0.630 | 0.632 | 0.629 | – |
| 2020-21 validation | 1165 | 0.648 | 0.643 | 0.644 | 0.643 | – |
| 2021-22 test | 1317 | 0.636 | 0.633 | 0.637 | 0.633 | 0.610 |
| 2022-23 test | 1314 | 0.647 | 0.644 | 0.645 | 0.644 | 0.626 |
| 2023-24 test | 1313 | 0.613 | 0.609 | 0.616 | 0.610 | 0.575 |
| 2024-25 test | 1315 | 0.613 | 0.606 | 0.610 | 0.607 | 0.586 |
| 2025-26 test | 1316 | 0.603 | 0.602 | 0.602 | 0.601 | 0.574 |
| 2026-27 in progress | 68 | 0.626 | 0.640 | 0.617 | 0.629 | 0.553 |
How the model works
Elo with a margin-of-victory multiplier (K = 8, home advantage 40 Elo points, 40% pulled back to average each off-season). A margin model (ridge regression) predicts the final point margin from Elo, recent point differential, points scored and allowed, home/road form, season record and rest, including back-to-backs; the margin becomes a win probability through a normal distribution. A matching model predicts total points.
A gradient-boosted classifier uses the same inputs. The final probability averages the three with weights chosen on validation seasons; the projected score combines the predicted total and margin. Betting lines are never a model input. Model v20261029-acb94a, trained Oct 29, 2026 on 15,510 games.