NBA Model Health
Phase 3 validation — prediction accuracy, HCA/B2B calibration, FFI weight regression.2025-26 · last run 5/18/2026, 1:31:46 AM
1. Prediction Accuracy
Straight-up picks using season-end adj_net ± configured HCA. Retroactive — not held-out.
Games evaluated
1,230
completed regular-season games
Straight-up accuracy
64.3%
correct picks
Brier score
0.222
lower = better (random = 0.25)
Log-loss
0.635
lower = better (random = 0.693)
2 & 3. Empirical HCA + B2B Calibration
OLS fit: home_margin ~ β₀ + β₁·adj_net_diff + β₂·home_b2b + β₃·away_b2b. 1230 games.
OLS R²
0.135
explanatory power of the model
Empirical HCA
+1.98 pts
configured: +2.10 pts/100
Model scale (β₁)
0.898
goal ≈ 1.0 (pts ≈ pts/100 poss)
Home B2B penalty
-2.49 pts
configured: −2.1
Away B2B (home benefit)
+1.06 pts
configured: +2.1 to home
4. FFI Weight Derivation
OLS: adj_net ~ w₀ + w₁·eFG_margin + w₂·TOV_edge + w₃·OREB_edge + w₄·FTA_margin across all 30 teams. R² = 0.757.
NBA_FFI_WEIGHTS in nba/ratings_config.py after the season concludes.| Four Factor | Proposed (data-driven) | Current (configured) | Status |
|---|---|---|---|
| EFG margin | 41.1% | 48.0% | ✓ |
| TOV edge | 43.5% | 34.0% | ◄ notable |
| OREB edge | 11.3% | 12.0% | ✓ |
| FTA margin | 4.0% | 6.0% | ✓ |
Proposed weights are derived by running OLS on the current season's 30 teams and normalising positive coefficients to sum to 1. They reflect within-season patterns only and should not be adopted until multi-season validation is complete (Phase 3B).
Methodology Notes
home_court_adj in ratings_config.py, which is in pts/100 poss. At ~100 poss/game these are roughly the same scale.