Benchmark

How we know a version really predicts instead of just describing the past. Versions are frozen in code, settings are tuned on older seasons only, and the ranking uses the holdout season that nothing was tuned on. The forward test is the final judge: picks saved before tip-off, never recomputed.

Forward test · picks logged before tip-off

#VersionSettled picksHit rateBets wonBrierWaitingLogging since
1Elo on top of roster strength
v9-roster-strength
8160.5% ± 10.6%67.3% of 550.221111920 Oct 2026, 12:03
2v7 with a lighter injury weight
v8-lighter-injuries
8164.2% ± 10.4%66.7% of 540.226111920 Oct 2026, 12:03
3v6 with a smaller home court
v7-smaller-home-court
8164.2% ± 10.4%66.7% of 540.227111920 Oct 2026, 12:03
4Elo + rest + missing players
v3-elo-players
8163.0% ± 10.5%64.6% of 650.237111920 Oct 2026, 12:03
5Elo + back-to-backs
v2-elo-rest
8160.5% ± 10.6%64.3% of 700.238111920 Oct 2026, 12:03
6Elo + rest + travel + injury report
v5-elo-injury-report
8161.7% ± 10.6%66.2% of 650.239111920 Oct 2026, 12:03
7Elo
v1-elo
8158.0% ± 10.7%65.2% of 690.239111920 Oct 2026, 12:03
8Elo + rest + travel
v4-elo-travel
8160.5% ± 10.6%65.2% of 690.240111920 Oct 2026, 12:03
9Elo + rest + injury report (forecast only)
v6-elo-report-forecast-only
8163.0% ± 10.5%65.7% of 700.241111920 Oct 2026, 12:03
10Better record
baseline-record
8160.5% ± 10.6%61.1% of 360.244111920 Oct 2026, 12:03
11Always home team
baseline-home
8151.9% ± 10.9%—0.251111920 Oct 2026, 12:03

Every sync logs the next games for every version. Results fill in as games finish.

Forward test · against the bookmakers

VersionOur BrierBookmakers' BrierOur bets ROIEdge bets ROIGames
Elo on top of roster strength
v9-roster-strength
0.2370.202-14.0% on 30-42.8% on 2046
v7 with a lighter injury weight
v8-lighter-injuries
0.2400.202-13.4% on 29-31.6% on 2346
v6 with a smaller home court
v7-smaller-home-court
0.2410.202-10.3% on 28-31.6% on 2346
Elo + rest + missing players
v3-elo-players
0.2450.202-13.0% on 35-21.1% on 3346
Elo + back-to-backs
v2-elo-rest
0.2470.202-10.2% on 39-22.1% on 3746
Elo + rest + travel + injury report
v5-elo-injury-report
0.2440.202-10.5% on 34-15.0% on 3746
Elo
v1-elo
0.2480.202-10.2% on 39-24.2% on 3646
Elo + rest + travel
v4-elo-travel
0.2470.202-7.8% on 38-21.5% on 3646
Elo + rest + injury report (forecast only)
v6-elo-report-forecast-only
0.2500.202-7.8% on 38-19.1% on 3746
Better record
baseline-record
0.2300.202+16.1% on 16+12.8% on 1546
Always home team
baseline-home
0.2480.202—-22.1% on 1846

Bookmakers' Brier uses closing odds with the margin removed. ROI = profit per 1€ staked at closing odds. Edge bets = games where we give our pick at least 3 points more chance than the bookmakers do.

Holdout benchmark

Runs are started from the development machine with npm run benchmark.

Latest run · #3

#VersionTuning hit rateHoldout hit rateHoldout BrierBack-to-back gamesVersus next
1Elo
v1-elo
64.6% ± 2.6%67.5% ± 2.5%
1322 games
0.21164.1% ± 5.4%
301 games
too close to call vs v6-elo-report-forecast-only
2Elo + rest + injury report (forecast only)
v6-elo-report-forecast-only
67.7% ± 2.5%66.5% ± 2.5%
1322 games
0.21161.8% ± 5.5%
301 games
too close to call vs v2-elo-rest
3Elo + back-to-backsLIVE
v2-elo-rest
64.8% ± 2.6%67.8% ± 2.5%
1322 games
0.21165.1% ± 5.4%
301 games
too close to call vs v4-elo-travel
4Elo + rest + travel
v4-elo-travel
64.0% ± 2.6%67.2% ± 2.5%
1322 games
0.21164.5% ± 5.4%
301 games
too close to call vs v5-elo-injury-report
5Elo + rest + travel + injury report
v5-elo-injury-report
66.6% ± 2.5%66.0% ± 2.6%
1322 games
0.21460.8% ± 5.5%
301 games
too close to call vs v3-oracle-lineups
6Perfect injury reportBACKTEST ONLY
v3-oracle-lineups
66.7% ± 2.5%66.9% ± 2.5%
1322 games
0.21465.8% ± 5.4%
301 games
too close to call vs v3-elo-players
7Elo + rest + missing players
v3-elo-players
64.5% ± 2.6%66.3% ± 2.5%
1322 games
0.21863.5% ± 5.4%
301 games
too close to call vs baseline-record
8Better record
baseline-record
64.0% ± 2.6%66.7% ± 2.5%
1322 games
0.22166.4% ± 5.3%
301 games
clearly better than baseline-home
9Always home team
baseline-home
54.5% ± 2.7%55.5% ± 2.7%
1322 games
0.24751.5% ± 5.6%
301 games
—

Ranked by holdout Brier score. "Clearly better" means the gap holds on the same games with 95% confidence; "too close to call" means the difference could be luck.

Latest run · against the bookmakers

No closing odds saved for these games yet. Add a free key from the-odds-api.com to .env and sync daily.

History

#318 Oct 2026, 21:15Run 6: after injury report fixv1-elo · 67.5% · too close to call

Tuning 2024-10-01 → 2025-10-01 · Holdout 2025-10-01 → 2026-07-31

#VersionTuning hit rateHoldout hit rateHoldout BrierBack-to-back gamesVersus next
1Elo
v1-elo
64.6% ± 2.6%67.5% ± 2.5%
1322 games
0.21164.1% ± 5.4%
301 games
too close to call vs v6-elo-report-forecast-only
2Elo + rest + injury report (forecast only)
v6-elo-report-forecast-only
67.7% ± 2.5%66.5% ± 2.5%
1322 games
0.21161.8% ± 5.5%
301 games
too close to call vs v2-elo-rest
3Elo + back-to-backsLIVE
v2-elo-rest
64.8% ± 2.6%67.8% ± 2.5%
1322 games
0.21165.1% ± 5.4%
301 games
too close to call vs v4-elo-travel
4Elo + rest + travel
v4-elo-travel
64.0% ± 2.6%67.2% ± 2.5%
1322 games
0.21164.5% ± 5.4%
301 games
too close to call vs v5-elo-injury-report
5Elo + rest + travel + injury report
v5-elo-injury-report
66.6% ± 2.5%66.0% ± 2.6%
1322 games
0.21460.8% ± 5.5%
301 games
too close to call vs v3-oracle-lineups
6Perfect injury reportBACKTEST ONLY
v3-oracle-lineups
66.7% ± 2.5%66.9% ± 2.5%
1322 games
0.21465.8% ± 5.4%
301 games
too close to call vs v3-elo-players
7Elo + rest + missing players
v3-elo-players
64.5% ± 2.6%66.3% ± 2.5%
1322 games
0.21863.5% ± 5.4%
301 games
too close to call vs baseline-record
8Better record
baseline-record
64.0% ± 2.6%66.7% ± 2.5%
1322 games
0.22166.4% ± 5.3%
301 games
clearly better than baseline-home
9Always home team
baseline-home
54.5% ± 2.7%55.5% ± 2.7%
1322 games
0.24751.5% ± 5.6%
301 games
—
#218 Oct 2026, 21:02Run 5: v6 forecast-only injury reportv1-elo · 67.5% · too close to call

Tuning 2024-10-01 → 2025-10-01 · Holdout 2025-10-01 → 2026-07-31

#VersionTuning hit rateHoldout hit rateHoldout BrierBack-to-back gamesVersus next
1Elo
v1-elo
64.6% ± 2.6%67.5% ± 2.5%
1322 games
0.21164.1% ± 5.4%
301 games
too close to call vs v2-elo-rest
2Elo + back-to-backsLIVE
v2-elo-rest
64.8% ± 2.6%67.8% ± 2.5%
1322 games
0.21165.1% ± 5.4%
301 games
too close to call vs v4-elo-travel
3Elo + rest + travel
v4-elo-travel
64.0% ± 2.6%67.2% ± 2.5%
1322 games
0.21164.5% ± 5.4%
301 games
too close to call vs v6-elo-report-forecast-only
4Elo + rest + injury report (forecast only)
v6-elo-report-forecast-only
67.7% ± 2.5%66.0% ± 2.6%
1322 games
0.21463.1% ± 5.5%
301 games
too close to call vs v3-oracle-lineups
5Perfect injury reportBACKTEST ONLY
v3-oracle-lineups
66.7% ± 2.5%66.9% ± 2.5%
1322 games
0.21465.8% ± 5.4%
301 games
too close to call vs v3-elo-players
6Elo + rest + missing players
v3-elo-players
64.5% ± 2.6%66.3% ± 2.5%
1322 games
0.21863.5% ± 5.4%
301 games
too close to call vs v5-elo-injury-report
7Elo + rest + travel + injury report
v5-elo-injury-report
66.2% ± 2.6%64.9% ± 2.6%
1322 games
0.22063.5% ± 5.4%
301 games
too close to call vs baseline-record
8Better record
baseline-record
64.0% ± 2.6%66.7% ± 2.5%
1322 games
0.22166.4% ± 5.3%
301 games
clearly better than baseline-home
9Always home team
baseline-home
54.5% ± 2.7%55.5% ± 2.7%
1322 games
0.24751.5% ± 5.6%
301 games
—
#118 Oct 2026, 20:38First real NBA datav1-elo · 67.5% · too close to call

Tuning 2024-10-01 → 2025-10-01 · Holdout 2025-10-01 → 2026-07-31

#VersionTuning hit rateHoldout hit rateHoldout BrierBack-to-back gamesVersus next
1Elo
v1-elo
64.6% ± 2.6%67.5% ± 2.5%
1322 games
0.21164.1% ± 5.4%
301 games
too close to call vs v2-elo-rest
2Elo + back-to-backsLIVE
v2-elo-rest
64.8% ± 2.6%67.8% ± 2.5%
1322 games
0.21165.1% ± 5.4%
301 games
too close to call vs v4-elo-travel
3Elo + rest + travel
v4-elo-travel
64.0% ± 2.6%67.2% ± 2.5%
1322 games
0.21164.5% ± 5.4%
301 games
too close to call vs v3-oracle-lineups
4Perfect injury reportBACKTEST ONLY
v3-oracle-lineups
66.7% ± 2.5%66.9% ± 2.5%
1322 games
0.21465.8% ± 5.4%
301 games
too close to call vs v3-elo-players
5Elo + rest + missing players
v3-elo-players
64.5% ± 2.6%66.3% ± 2.5%
1322 games
0.21863.5% ± 5.4%
301 games
too close to call vs v5-elo-injury-report
6Elo + rest + travel + injury report
v5-elo-injury-report
66.2% ± 2.6%64.9% ± 2.6%
1322 games
0.22063.5% ± 5.4%
301 games
too close to call vs baseline-record
7Better record
baseline-record
64.0% ± 2.6%66.7% ± 2.5%
1322 games
0.22166.4% ± 5.3%
301 games
clearly better than baseline-home
8Always home team
baseline-home
54.5% ± 2.7%55.5% ± 2.7%
1322 games
0.24751.5% ± 5.6%
301 games
—

Frozen versions

Always home teambaseline-home · frozen 2026-10-18

Picks the home team every game. Anything worth using must beat this.

Better recordbaseline-record · frozen 2026-10-18

Picks the team with the better win rate this season.

Elov1-elo · frozen 2026-10-18

Elo ratings with home court and margin of victory, no rest days.

Elo + back-to-backsv2-elo-rest · frozen 2026-10-18

v1 plus a 45 Elo point penalty for a team playing the day after a game.

Elo + rest + missing playersv3-elo-players · frozen 2026-10-18

v2 minus the value of regulars who sat out the team’s previous game (NBA.com box scores).

Perfect injury reportv3-oracle-lineups · frozen 2026-10-18 · backtest only

Same as v3 but knows exactly who played. Backtest only: the most an injury feed could add.

Elo + rest + travelv4-elo-travel · frozen 2026-10-18

v2 plus distance since the last game, time zones crossed, 3 games in 4 nights and altitude.

Elo + rest + travel + injury reportv5-elo-injury-report · frozen 2026-10-18

v4 plus missing players from the official NBA injury report published before tip-off, falling back to v3’s guess when no report is usable.

Elo + rest + injury report (forecast only)v6-elo-report-forecast-only · frozen 2026-10-18

v2 ratings learn as usual; the injury report adjustment only shifts the prediction, at 7.5 Elo per Game Score point (weight picked on the 2024-25 tuning season with npm run diagnose:players).

v6 with a smaller home courtv7-smaller-home-court · frozen 2026-10-19

Same as v6, with 35 Elo of home court instead of 100. Picked on the 2019-20 warm-up season only (best Brier between 30 and 40, home teams won 55.2%), after npm run diagnose:market showed we gave home teams 62% while they won 55%.

v7 with a lighter injury weightv8-lighter-injuries · frozen 2026-10-20 · live

Same as v7, with 5 Elo per Game Score point of missing players instead of 7.5. Picked on 2016-17 to 2019-20 from data/tuning.sqlite only (npm run tune): 5 was best with both actual lineups and last-game lineups, 7.5 was clearly worse with last-game lineups.

Elo on top of roster strengthv9-roster-strength · frozen 2026-10-20

Each team also gets the summed value of its 8 most used current players (Game Score above replacement, slow-moving form), at 5 Elo per point; Elo learns only what the roster does not explain, with K 10. Missing players count 3 Elo per point. Trades and signings move a team as soon as the player has played once. Picked on 2016-17 to 2019-20 from data/tuning.sqlite only (npm run tune).