Decisions
A line-free directional call per player and stat: over when the model's prediction exceeds the player's last-10-game mean by more than a threshold, under when it falls short by more, otherwise no call. There are no sportsbook lines on this page (the paper ledger is where real lines enter). A call resolves against the same last-10 mean once the box score exists. Thresholds and the bands around each prediction were chosen per population on the 2025-26 replay rows, so the hit rates below are in-sample policy-fit results, not out-of-sample validation or demonstrated betting performance; the full coverage curve is shown so any other threshold can be read off.
Today's calls
No slate today, so no calls.
The nightly job writes decisions only on days with a slate, and the 2026-27 season starts in October. The last replayed date was 2026-04-12 (2025-26 replay). Until then this page shows the replay evaluation of the policy.
Checked https://huggingface.co/datasets/cbratkovics/nba-game-logs/resolve/main/decisions/latest.json (HTTP 404).
Replay evaluation, training population (22,075 rows)
Population: the training population: replayed rows with a box score, at least 10 minutes and both baselines defined. Two causal baselines are scored on the rows the model calls: a coin flip (50% by definition, with its 95% band at that many calls) and the sign of the player's season-to-date mean minus the last-10 mean, which is also known before tip-off. Both are scored on exactly the rows the model resolved, one n per comparison; where the season-mean sign has no side (a tie with the last-10 mean, or no season mean on a season debut) it is scored as a coin flip, 0.5, and those abstentions are counted. Threshold rule: the largest grid value that still calls at least 25% of the rows.
On the training population the model's pts calls hit 66.7% of 6,680 resolved calls, above the season-mean sign (59.1% on the same rows) and outside the coin flip's 95% band (0.5 ± 0.012). On the training population the model's reb calls hit 66.0% of 6,516 resolved calls, above the season-mean sign (59.0% on the same rows) and outside the coin flip's 95% band (0.5 ± 0.012). On the training population the model's ast calls hit 63.3% of 5,914 resolved calls, above the season-mean sign (59.5% on the same rows) and outside the coin flip's 95% band (0.5 ± 0.013).
| Target | Threshold | Coverage | Resolved calls | Model hit rate | Season-mean sign, same rows | Coin flip 95% band | Beats both |
|---|---|---|---|---|---|---|---|
| Points | 1.75 | 30.6% (6,748 of 22,075) | 6,680 (68 pushes) | 66.7% | 59.1% (356 abstentions) | 50% ± 1.2 | yes |
| Rebounds | 0.70 | 30.0% (6,623 of 22,075) | 6,516 (107 pushes) | 66.0% | 59.0% (357 abstentions) | 50% ± 1.2 | yes |
| Assists | 0.50 | 27.4% (6,041 of 22,075) | 5,914 (127 pushes) | 63.3% | 59.5% (310 abstentions) | 50% ± 1.3 | yes |
Coverage curve
Bands: residual quantiles (actual minus prediction)
| Target | q10 | q25 | q75 | q90 | Inside 50% band | Inside 80% band |
|---|---|---|---|---|---|---|
| Points | -7.05 | -4.11 | +3.60 | +7.98 | 50.0% | 80.0% |
| Rebounds | -2.86 | -1.70 | +1.41 | +3.28 | 50.0% | 80.0% |
| Assists | -2.00 | -1.21 | +1.00 | +2.41 | 50.0% | 80.0% |
Source: gold/mart_policy_metrics.json in the dataset repo (the warehouse's gold export, exported 2026-10-11 on target motherduck) and mart_policy_sweep.json, 2025-26 replay rows; the dbt tests assert_policy_metrics_reconcile_to_policy_report and assert_policy_sweep_reconciles_to_policy_report hold these rows to the committed artifact reports/policy_2025-26.json (counts exact, rates within 1e-6), which supplies the thresholds, the band quantiles and the verdict text.
Replay evaluation, all rows (26,031 rows)
Population: every replayed row with a box score and a last-10 baseline (all rows). Two causal baselines are scored on the rows the model calls: a coin flip (50% by definition, with its 95% band at that many calls) and the sign of the player's season-to-date mean minus the last-10 mean, which is also known before tip-off. Both are scored on exactly the rows the model resolved, one n per comparison; where the season-mean sign has no side (a tie with the last-10 mean, or no season mean on a season debut) it is scored as a coin flip, 0.5, and those abstentions are counted. Threshold rule: the largest grid value that still calls at least 25% of the rows.
On all rows the model's pts calls hit 54.7% of 6,890 resolved calls, but the season-mean sign hits 56.6% on the same rows; the model policy is not recommended there. On all rows the model's reb calls hit 53.8% of 6,780 resolved calls, but the season-mean sign hits 56.5% on the same rows; the model policy is not recommended there. On all rows the model's ast calls hit 53.7% of 8,108 resolved calls, but the season-mean sign hits 56.4% on the same rows; the model policy is not recommended there.
| Target | Threshold | Coverage | Resolved calls | Model hit rate | Season-mean sign, same rows | Coin flip 95% band | Beats both |
|---|---|---|---|---|---|---|---|
| Points | 2.25 | 26.8% (6,982 of 26,031) | 6,890 (92 pushes) | 54.7% | 56.6% (762 abstentions) | 50% ± 1.2 | no |
| Rebounds | 0.90 | 26.7% (6,943 of 26,031) | 6,780 (163 pushes) | 53.8% | 56.5% (714 abstentions) | 50% ± 1.2 | no |
| Assists | 0.50 | 32.3% (8,399 of 26,031) | 8,108 (291 pushes) | 53.7% | 56.4% (731 abstentions) | 50% ± 1.1 | no |
Coverage curve
Bands: residual quantiles (actual minus prediction)
| Target | q10 | q25 | q75 | q90 | Inside 50% band | Inside 80% band |
|---|---|---|---|---|---|---|
| Points | -7.30 | -5.11 | +2.77 | +7.31 | 50.0% | 80.0% |
| Rebounds | -3.18 | -2.10 | +1.07 | +2.98 | 50.0% | 80.0% |
| Assists | -2.04 | -1.28 | +0.77 | +2.18 | 50.0% | 80.0% |
Source: gold/mart_policy_metrics.json in the dataset repo (the warehouse's gold export, exported 2026-10-11 on target motherduck) and mart_policy_sweep.json, 2025-26 replay rows; the dbt tests assert_policy_metrics_reconcile_to_policy_report and assert_policy_sweep_reconciles_to_policy_report hold these rows to the committed artifact reports/policy_2025-26.json (counts exact, rates within 1e-6), which supplies the thresholds, the band quantiles and the verdict text.
Provenance
Thresholds and bands were chosen on the 2025-26 replay rows they are evaluated on; the hit rates are in-sample. The coverage curve is published so any other threshold can be read off; the next untouched season is the out-of-sample test. Artifact reports/policy_2025-26.json (sha256 6f7d8191b668), written 2026-09-16 at code commit 4da1938 for model commit 50a3b2e / HF fb427de. The warehouse's decisions mart applies the same thresholds to every prediction and recomputes these numbers; a test fails on any disagreement. The model policy is not recommended on all rows. Holdout results.