Projections
Overview
2025-26 Regular Season · backtest BT-1.0 · models C1-baseline-1.1, C2-context-1.0
Model leaderboard
Lower MAE/RMSE is better. Bias = mean(predicted − actual): positive = overprediction.
| Model | MAE | RMSE | Bias | Median AE | Matched N | MAE vs benchmark |
|---|---|---|---|---|---|---|
| Season-to-Date Average | 8.042 | 10.339 | -0.744 | 6.562 | 23,022 | reference |
| C1 Baseline | 7.927 | 10.185 | -0.363 | 6.505 | 23,022 | +1.43% |
| C2 Context-Awarelowest MAE | 7.914 | 10.168 | -0.363 | 6.506 | 23,022 | +1.59% |
Lowest MAE by statistic: PTS C2 Context-Aware · REB Season-to-Date Average · AST Season-to-Date Average · STL Season-to-Date Average · BLK Season-to-Date Average · 3PM Season-to-Date Average · TOV Season-to-Date Average · FPTS C2 Context-Aware. Different models lead different statistics, so no overall winner is declared. Differences of a few hundredths are small relative to per-game noise.
MAE change vs Season-to-Date
(benchmark MAE − model MAE) / benchmark MAE · positive = fewer errors
Bias by model
Mean signed error · negative = underprediction
FPTS error distribution
Count of player-games by predicted − actual FPTS (5-point bins, clipped at ±30)
Opponent adjustment (C2 vs C1)
Same matched player-games; C2 only changes PTS (and therefore FPTS)
| Stat | C2 better | C2 worse | Equal | MAE C1 | MAE C2 |
|---|---|---|---|---|---|
| PTS | 11,728 | 10,778 | 516 | 4.735 | 4.726 |
| FPTS | 11,973 | 10,533 | 516 | 7.927 | 7.914 |
The adjustment is small (about a tenth of a point on average), so the MAE difference is small too. One season of conditional-on-playing data is initial evidence, not proof of future performance. No significance test was run.
Segments
MAE by group, assigned from pregame information only
| Group | N | Bench PTS / FPTS | C1 PTS / FPTS | C2 PTS / FPTS |
|---|---|---|---|---|
| 10–19 games | 4,196 | 4.68 / 7.88 | 4.71 / 7.86 | 4.70 / 7.85 |
| 20+ games | 15,640 | 4.86 / 8.17 | 4.81 / 8.00 | 4.80 / 7.99 |
| 3–9 games | 3,186 | 4.41 / 7.64 | 4.42 / 7.64 | 4.41 / 7.64 |
Boundaries: history 3–9 / 10–19 / 20+ prior games; expected minutes <20 / 20–30 / 30+; minutes CV over the last 10 games ≤0.25 vs >0.25. *Position is the player's current ESPN position (G/F/C) — an approximation; historical positions are not verified.
Player results
Players with 10+ evaluated games · MAE per model
| Player | Teams (in games) | Games | PTS MAE B / C1 / C2 | FPTS MAE B / C1 / C2 | C1 FPTS bias |
|---|---|---|---|---|---|
| 4592479 | — | 80 | 5.18 / 5.24 / 5.20 | 7.84 / 8.09 / 8.08 | -0.19 |
| 4395723 | — | 80 | 4.91 / 4.97 / 4.93 | 7.05 / 6.88 / 6.86 | +0.06 |
| 4602025 | — | 79 | 3.29 / 3.25 / 3.26 | 5.90 / 5.83 / 5.83 | +0.26 |
| 2596112 | — | 79 | 3.73 / 3.95 / 3.95 | 7.04 / 7.43 / 7.42 | -0.26 |
| 4709138 | — | 79 | 5.22 / 5.22 / 5.20 | 7.99 / 7.94 / 7.91 | -0.73 |
| 4711272 | — | 79 | 4.78 / 4.95 / 4.96 | 9.09 / 9.34 / 9.32 | -0.33 |
| 4065731 | — | 79 | 4.58 / 4.73 / 4.69 | 8.30 / 8.41 / 8.37 | -1.49 |
| 2991139 | — | 79 | 3.49 / 3.55 / 3.55 | 5.94 / 5.95 / 5.94 | -0.25 |
| 4592691 | — | 79 | 5.34 / 5.02 / 5.02 | 8.90 / 8.77 / 8.77 | +0.02 |
| 3934673 | — | 79 | 4.80 / 4.97 / 4.96 | 6.99 / 7.16 / 7.14 | +0.47 |
| 5144091 | — | 79 | 5.61 / 5.20 / 5.19 | 9.32 / 9.12 / 9.09 | -1.71 |
| 3147657 | — | 79 | 4.95 / 5.02 / 4.99 | 8.36 / 7.54 / 7.50 | +1.26 |
| 4065670 | — | 79 | 3.79 / 3.79 / 3.79 | 7.11 / 7.33 / 7.32 | -0.56 |
| 4066320 | — | 79 | 6.64 / 6.90 / 6.89 | 8.16 / 8.69 / 8.70 | -0.35 |
| 4601023 | — | 79 | 3.39 / 3.45 / 3.41 | 7.69 / 7.19 / 7.18 | -1.13 |
| 4431736 | — | 79 | 4.98 / 5.14 / 5.12 | 7.24 / 7.53 / 7.52 | -0.18 |
| 4432241 | — | 79 | 3.62 / 3.83 / 3.84 | 6.69 / 6.71 / 6.72 | +0.04 |
| 4845374 | — | 79 | 4.24 / 3.90 / 3.91 | 6.48 / 6.25 / 6.25 | -0.71 |
| 5061575 | — | 78 | 5.80 / 5.74 / 5.75 | 8.16 / 8.29 / 8.29 | -0.28 |
| 4869780 | — | 78 | 5.55 / 5.58 / 5.59 | 10.41 / 9.83 / 9.84 | -1.22 |
| 4278580 | — | 77 | 4.73 / 4.75 / 4.72 | 8.29 / 8.42 / 8.41 | -0.68 |
| 2528210 | — | 77 | 5.54 / 5.80 / 5.83 | 6.77 / 6.79 / 6.83 | -0.25 |
| 4278585 | — | 77 | 5.49 / 5.65 / 5.65 | 8.32 / 8.28 / 8.23 | +0.24 |
| 4433134 | — | 77 | 5.05 / 4.80 / 4.75 | 10.06 / 10.04 / 10.07 | +0.49 |
| 4066354 | — | 76 | 7.09 / 7.58 / 7.56 | 8.54 / 9.06 / 9.04 | +0.03 |
| 3064514 | — | 76 | 6.15 / 6.19 / 6.16 | 7.95 / 7.76 / 7.72 | +1.09 |
| 4684740 | — | 76 | 5.17 / 5.15 / 5.09 | 7.34 / 7.57 / 7.51 | -1.32 |
| 4278039 | — | 75 | 5.39 / 5.57 / 5.58 | 7.32 / 7.67 / 7.66 | -0.71 |
| 4065804 | — | 75 | 5.05 / 4.99 / 5.00 | 6.67 / 6.18 / 6.18 | -0.45 |
| 2583632 | — | 75 | 3.70 / 3.86 / 3.85 | 7.13 / 7.50 / 7.48 | +0.38 |
| 4683771 | — | 75 | 3.89 / 3.89 / 3.88 | 6.00 / 6.05 / 6.05 | +0.53 |
| 3202 | — | 75 | 5.55 / 5.87 / 5.86 | 8.23 / 8.44 / 8.39 | -0.54 |
| 4397475 | — | 75 | 5.28 / 5.11 / 5.13 | 6.98 / 6.49 / 6.51 | -0.58 |
| 4277847 | — | 75 | 4.56 / 4.55 / 4.52 | 6.88 / 6.94 / 6.93 | +0.26 |
| 3913174 | —— | 75 | 4.41 / 4.40 / 4.39 | 7.33 / 7.41 / 7.40 | -0.76 |
| 6578 | — | 75 | 5.15 / 4.97 / 4.94 | 6.61 / 6.28 / 6.27 | +0.39 |
| 4065663 | — | 75 | 3.87 / 3.55 / 3.57 | 7.11 / 6.70 / 6.70 | +0.57 |
| 4712863 | — | 74 | 3.66 / 3.54 / 3.53 | 7.67 / 7.69 / 7.68 | +0.52 |
| 4593841 | — | 74 | 3.85 / 3.59 / 3.60 | 7.53 / 6.63 / 6.64 | -1.74 |
| 3078576 | — | 74 | 6.02 / 5.88 / 5.93 | 9.03 / 8.53 / 8.52 | +0.94 |
| 4396971 | — | 74 | 5.38 / 5.49 / 5.48 | 8.22 / 8.25 / 8.23 | -0.26 |
| 4711294 | — | 74 | 5.27 / 5.41 / 5.40 | 8.94 / 9.19 / 9.16 | -0.98 |
| 4432582 | — | 74 | 4.28 / 4.53 / 4.54 | 7.06 / 6.88 / 6.87 | -0.16 |
| 3978 | — | 74 | 7.25 / 7.58 / 7.57 | 9.83 / 10.11 / 10.12 | +0.69 |
| 3157465 | — | 74 | 4.17 / 4.33 / 4.31 | 5.93 / 6.03 / 6.01 | -0.15 |
| 4432639 | — | 74 | 4.16 / 4.27 / 4.26 | 6.54 / 6.70 / 6.71 | -0.38 |
| 3913176 | — | 74 | 6.19 / 6.56 / 6.52 | 8.21 / 8.32 / 8.28 | -0.02 |
| 5105623 | — | 74 | 5.34 / 5.24 / 5.21 | 10.80 / 10.16 / 10.13 | -0.01 |
| 4683692 | — | 74 | 4.42 / 4.58 / 4.58 | 8.35 / 8.26 / 8.24 | +0.40 |
| 4702382 | — | 74 | 5.26 / 5.31 / 5.28 | 7.68 / 7.63 / 7.62 | -0.00 |
| 4066383 | — | 74 | 6.08 / 5.77 / 5.74 | 9.37 / 9.37 / 9.33 | +1.11 |
| 5105565 | — | 74 | 4.84 / 5.05 / 5.02 | 10.03 / 10.51 / 10.49 | -0.86 |
| 4684793 | — | 74 | 5.14 / 4.78 / 4.79 | 10.85 / 10.28 / 10.30 | -1.80 |
| 4869342 | — | 73 | 4.36 / 4.66 / 4.66 | 8.85 / 9.08 / 9.09 | -1.27 |
| 2490149 | —— | 73 | 6.01 / 6.27 / 6.28 | 6.99 / 7.53 / 7.51 | -0.90 |
| 4397424 | — | 73 | 3.81 / 4.17 / 4.13 | 8.27 / 8.81 / 8.78 | -0.47 |
| 5106060 | — | 73 | 4.65 / 4.24 / 4.26 | 8.52 / 7.17 / 7.15 | -0.70 |
| 5106258 | — | 73 | 4.22 / 4.24 / 4.25 | 6.35 / 6.30 / 6.30 | +0.87 |
| 3032976 | — | 73 | 4.19 / 4.41 / 4.38 | 8.90 / 9.25 / 9.24 | -0.49 |
| 3136195 | — | 73 | 6.03 / 6.01 / 6.01 | 8.91 / 9.21 / 9.18 | +0.24 |
Showing 60 of 430. Teams are the ones each player actually played for in the evaluated games. Individual results are noisy; this is not a ranking.
Methodology & data integrity
Reconstruction. For every regular-season game a player actually played in 2025-26 Regular Season, C1 (C1-baseline-1.1) and C2 (C2-context-1.0) are re-run with their unchanged code, plus a Season-to-Date Average benchmark (mean of the same prior games C1 uses). Weights were not tuned on these results.
Leakage prevention. A prior game counts only if it tipped off at least 4 hours before the target tipoff (results of a game that just started are not assumed known). Opponent points allowed and the league baseline use the same cutoff. The target game supplies only the actual result. Historical injury status is not available, so it is not used (no current-report leakage).
Identity. Team, opponent and home/away come from the player's own game record for that game — not from today's roster — so traded players are credited to the team they played for.
Exclusions. insufficient pregame history: 1,435 · not played (0 or missing minutes): 9 · duplicate result: 0. Also left out before evaluation: 63 All-Star rows, preseason, play-in and playoff games. 129 current-roster players have no 2025-26 Regular Season game log (rookies, players who did not play). Players no longer on an NBA roster are not covered.
Metrics. MAE = mean |predicted − actual|; RMSE = √mean(predicted − actual)²; Bias = mean(predicted − actual). FPTS use Loop & Jump's default Points scoring (PTS 1, REB 1.2, AST 1.5, STL 3, BLK 3, TOV −1); category leagues are judged on the per-stat errors above. No "accuracy %" is shown.
Storage. Results are computed offline by the backtest script and shipped as a versioned file (BT-1.0); the page does not rerun thousands of predictions. Rerunning the script with new code produces a new version.
Model Reliability
Are the small error differences real? Paired comparison with a game-clustered bootstrap
2025-26 Regular Season · 23,022 matched player-games · 1189 games · 473 players · models C1-baseline-1.1, C2-context-1.0 · backtest BT-1.0. Development season — C2 opponent weights were not tuned on it, but C3 conclusions were first drawn here.
| Comparison | Stat | ΔMAE | 95% interval | Evidence |
|---|---|---|---|---|
| C1 vs Season-to-Date | PTS | -0.027 | [-0.050, -0.005] | C1 lower error |
| C1 vs Season-to-Date | FPTS | -0.115 | [-0.152, -0.075] | C1 lower error |
| C1 vs Season-to-Date | REB | +0.010 | [+0.001, +0.019] | Season-to-Date lower error |
| C1 vs Season-to-Date | AST | +0.002 | [-0.004, +0.009] | No reliable difference |
| C2 vs Season-to-Date | PTS | -0.036 | [-0.059, -0.014] | C2 lower error |
| C2 vs Season-to-Date | FPTS | -0.128 | [-0.166, -0.087] | C2 lower error |
| C2 vs Season-to-Date | REB | +0.010 | [+0.001, +0.019] | Season-to-Date lower error |
| C2 vs Season-to-Date | AST | +0.002 | [-0.004, +0.009] | No reliable difference |
| C2 vs C1 | PTS | -0.009 | [-0.011, -0.006] | C2 lower error |
| C2 vs C1 | FPTS | -0.013 | [-0.015, -0.010] | C2 lower error |
| C2 vs C1 | REB | +0.000 | [+0.000, +0.000] | No reliable difference |
| C2 vs C1 | AST | +0.000 | [+0.000, +0.000] | No reliable difference |
▼ first model reliably lower error · ▲ reliably higher · · interval includes zero.
16 non-neutral games have no change because C1 projected 0 PTS (factor × 0 = 0). Tolerance 1e-9.
Method. ΔMAE = MAE(first) − MAE(second) on the same player-games; negative favours the first model. 95% percentile interval from 2000 bootstrap resamples of whole games (1189 clusters, fixed seed 20261009). Every player in a sampled game is kept.
Limits. Intervals are estimates, not guarantees. Clustering by game does not fully account for the same player appearing all season. Conditional-on-playing historical evaluation. Players were found from current rosters, so players who left the league are missing. Seasons are shown separately, never pooled. No weights were changed.