NBA Four-Factors Composite

Ledger

Every game the model scored, graded against the final score and the market: one unit on the model's lean each game. Judge each ROI against its null (about −4%, the market's hold), not zero, and against the market favourite on the same games. Forward rows and rebuilt history are never pooled.

How to read these numbers Judge every ROI against its null: the ROI if the market's no-vig prices were exactly right. That is about −4% (the hold: Kalshi's taker fee and spread, or the bookmaker's margin), not zero. Market is Kalshi's last pre-tip price wherever a game has one (2025-26 on), else the sportsbook close; the hypotheses stay on the sportsbook prices they were registered on. ± is one standard error (1 SE). Colour marks only gaps of at least 2 SE from the null: green above, red below; everything else is left plain. Shaded columns are the ones to read first.
Glossary
Lean
The side the model gives ≥ 50% (as recorded on the row).
Value side
The side where the model's probability beats the market's no-vig probability. Graded only through the pre-registered hypotheses; the blanket value bet is retired (see the note under the hypotheses).
Model %
The picked side's mean model win probability.
Market %
The picked side's mean no-vig market probability (q): the price with the bookmaker's margin removed.
Win %
How often the picked side actually won.
Break-even
The win rate the posted price needs to pay back; above q by about the hold.
ROI
Profit per 1-unit bet.
Null
The ROI expected if the market is right (q × payout − 1). vs null = ROI − null.
z
(ROI − null) ÷ SE. Across many cells, about one in twenty shows |z| ≥ 2 by chance.
EV
Win % − break-even; its null is q − break-even.
Fav ROI
1u on the market favourite of the same games at the same price: the same-row baseline a pick rule has to beat (a tie at 50% goes to home).
Log loss, Brier
Proper scores of the probabilities; lower is better. Compared with the close on the same games.
Native
Written before tip and frozen: the forward test.
Reconstructed
Scored afterwards with that season left out of the fit and graded at the close: hindsight, never forward evidence.

Pre-registered hypotheses — the forward test

Rules frozen before any native rows; every result is reported here, win or lose. Native is the forward test; hindsight is the same rule on the rebuilt seasons.

RuleNative nROINullvs null (± 1 SE)Hindsight nROINullvs null (± 1 SE)
H1Games 1–9
value side · model P − no-vig q ≥ 0.08
0 at the pregame———115 at the close+17.8%-4.0%+21.8 ± 12.8
H2Games 10+
value side that is the favourite
0 at the pregame———987 at the open+0.6%-4.1%+4.7 ± 2.2
H3Games 10+
value side · model P − no-vig q ≥ 0.12
0 at the pregame———260 at the open+19.0%-4.2%+23.2 ± 8.7
H4Games 10+
value side · model P − no-vig q ≥ 0.12
0 at the first snapshot———260 at the open+19.0%-4.2%+23.2 ± 8.7
H2·FGames 10+
value side that is the favourite
0 at the first snapshot———987 at the open+0.6%-4.1%+4.7 ± 2.2
About these hypotheses — dates, prices, what was retired

H1–H3 fixed on 2026-09-30, H4 and amendment A1 (H2·F: H2's rule at the first snapshot) on 2026-10-01, all before any native rows; the thresholds are frozen and every result is reported here, win or lose. Native bets are graded at a price that could have been bet: the pregame snapshot is the last one before tip (near the close); the first snapshot is the earliest priced one, with the model probability written then (H4 is H3's rule at the early price, where the hindsight edge appeared). Hindsight is the same rule on the reconstructed rows at the price the scan found it (pooled over both seasons and books, as registered), recomputed on the current reconstructed model; one season of native rows is not a verdict.

Retired 2026-10-06: the blanket value bet (every game, the side with model P > no-vig q) and its ATS twin. On the reconstructed rows at the close its claimed EV was +11 to +16% in every book and season while it returned −6 to −11% (null about −4%; ATS −3 to −7% vs −4.5%). The value-side rules still under test are the frozen hypotheses in this table.

Forward record Native · forward

No native rows yet. The daily build writes one before each tip, starting with the first regular-season slate; this section fills in as those games are graded.

Rebuilt history Reconstructed · hindsight

The current model replayed on past seasons, each season left out of its own fit and graded at the close. Hindsight, not a track record: the model was designed after these games were played.
ESPN BET close · 2024-25825–384 · ROI -3.5% · null -4.2% · fav -4.3%

Scored afterwards with this season left out of the fit · 1209 graded games on 159 slates.

Probabilities vs the close (log loss)
Market better
by 2.4 SE · model − market +0.0118 ± 0.0050 (1 SE)
0.5940 vs 0.5821 · n=1209
Lean bets · 1u at the close
-3.5% ROI
vs null (-4.2%): +0.7 ± 2.0 — not resolved (z = +0.3)
825–384 · won 68.2%, break-even 70.8%
market fav, same games: -4.3%

ROI — one unit on every pick

At the closing price.

Lean — the model's favourite

PicksnW–LROINullvs null (± 1 SE)Win %Break-evenModel %Market %Fav ROI
All picks1209825–384-3.5%-4.2%+0.7 ± 2.068.2%70.8%69.1%67.8%-4.3%
Games 10+1071732–339-3.9%-4.2%+0.3 ± 2.168.3%71.0%69.0%68.0%-3.6%
Games 1–9 (carryover)13893–45-0.4%-4.2%+3.8 ± 6.567.4%69.5%69.4%66.6%-10.1%
ROI by price band — one unit on every pick, by the picked side's moneyline

Graded at the closing price. With 8 cells per section, a |z| near 2 somewhere happens by chance about one section in three. Bands are descriptive monitoring dimensions, not a filter: a band that looks good here is a hypothesis to test forward, and the hypotheses under test are the pre-registered ones at the top of this page (the earlier DraftKings −249 to −130 lean band is retired).

Lean — the model's favourite

Picked pricenW–LROINullvs null (± 1 SE)zWin %Break-evenEV (pp)EV null (pp)Model %Market %
≤ -250594467–127-5.0%-4.4%-0.5 ± 2.1-0.378.6%82.5%-3.9-3.777.4%78.9%
-249 to -175243156–87-4.5%-4.0%-0.5 ± 4.6-0.164.2%67.2%-3.0-2.764.8%64.6%
-174 to -130195118–77+1.1%-3.9%+5.0 ± 5.9+0.960.5%59.9%+0.6-2.360.4%57.6%
-129 to -1008747–40+0.8%-4.4%+5.2 ± 10.0+0.554.0%53.6%+0.5-2.357.5%51.2%
+100 to +1295422–32-13.0%-4.1%-8.9 ± 14.4-0.640.7%47.3%-6.5-1.955.9%45.3%
+130 to +1742413–11+33.8%-3.9%+37.6 ± 25.7+1.554.2%40.5%+13.7-1.655.3%38.9%
+175 to +249102–8-43.5%-4.0%-39.5 ± 37.7-1.020.0%34.1%-14.1-1.456.0%32.7%
≥ +25020–2-100.0%-3.8%-96.2 ± 0.0—0.0%28.2%-28.2-1.159.6%27.1%
Against the spread — one unit on every pick at the closing spread

Lean ATS — the model's moneyline favourite against the spread

PicksnW–L–PROINullvs null (± 1 SE)Cover %Break-evenModel cover %Market cover %
All picks1208606–602–0-4.3%-4.5%+0.2 ± 2.750.2%52.4%52.2%50.0%

Only rows with a recorded closing spread (same book as the moneyline close). Model cover % maps the model's win probability to a margin with σ = 13.5 pts; it is a display mapping, not a new prediction. Cover % is covers ÷ (covers + misses); pushes refund. The null is minus the spread hold.

Game by game — latest 60 of 1209, newest first
DateAway @ HomeLeanModel %Market %Close MLFinal (away–home)Lean · P/L (1u)
2025-04-13DEN @ HOUDEN76.6%67.6%-240126–111W +0.42u
2025-04-13DAL @ MEMMEM59.2%44.7%+11597–132W +1.15u
2025-04-13UTA @ MINMIN96.6%95.4%-7500105–116W +0.01u
2025-04-13OKC @ NOPOKC82.2%84.2%-800115–100W +0.12u
2025-04-13TOR @ SASSAS60.5%61.4%-175118–125W +0.57u
2025-04-13LAC @ GSWGSW56.9%60.2%-170124–119L -1.00u
2025-04-13LAL @ PORLAL56.1%34.9%+17581–109L -1.00u
2025-04-13PHO @ SACSAC73.1%86.4%-100098–109W +0.10u
2025-04-13ORL @ ATLATL68.0%39.8%+140105–117W +1.40u
2025-04-13CHO @ BOSBOS95.2%81.1%-60086–93W +0.17u
2025-04-13NYK @ BRKNYK73.3%63.0%-190113–105W +0.53u
2025-04-13IND @ CLECLE74.2%32.1%+200126–118L -1.00u
2025-04-13WAS @ MIAMIA90.4%74.8%-360119–118L -1.00u
2025-04-13CHI @ PHICHI65.2%73.3%-320122–102W +0.31u
2025-04-13DET @ MILDET52.1%76.9%-400133–140L -1.00u
2025-04-11HOU @ LALLAL81.8%88.1%-1200109–140W +0.08u
2025-04-11SAS @ PHOPHO68.2%67.3%-23098–117W +0.43u
2025-04-11GSW @ PORGSW82.8%88.8%-1400103–86W +0.07u
2025-04-11LAC @ SACLAC64.8%70.4%-275101–100W +0.36u
2025-04-11OKC @ UTAOKC92.4%76.2%-400145–111W +0.25u
2025-04-11BRK @ MINMIN93.1%93.2%-400091–117W +0.03u
2025-04-11MEM @ DENDEN76.7%71.7%-290109–117W +0.34u
2025-04-11TOR @ DALDAL60.2%81.1%-600102–124W +0.17u
2025-04-11WAS @ CHICHI81.4%85.4%-90089–119W +0.11u
2025-04-11MIA @ NOPMIA84.6%86.4%-1000153–104W +0.10u
2025-04-11CHO @ BOSBOS90.5%93.2%-400094–130W +0.03u
2025-04-11CLE @ NYKNYK58.4%58.8%-155108–102L -1.00u
2025-04-11MIL @ DETMIL50.3%40.1%+140125–119W +1.40u
2025-04-11ORL @ INDIND70.7%60.7%-170129–115L -1.00u
2025-04-11ATL @ PHIATL67.9%83.5%-750124–110W +0.13u
2025-04-10MIN @ MEMMIN61.1%54.3%-130141–125W +0.77u
2025-04-10NOP @ MILMIL92.3%89.4%-1600111–136W +0.06u
2025-04-10ATL @ BRKATL73.4%84.2%-800133–109W +0.12u
2025-04-10NYK @ DETNYK51.5%40.9%+135106–115L -1.00u
2025-04-10CLE @ INDIND64.1%78.3%-450112–114W +0.22u
2025-04-09HOU @ LACLAC54.3%81.1%-600117–134W +0.17u
2025-04-09SAS @ GSWGSW83.9%90.5%-1800114–111L -1.00u
2025-04-09OKC @ PHOOKC78.7%70.0%-270125–112W +0.37u
2025-04-09DEN @ SACDEN58.1%63.0%-190124–116W +0.53u
2025-04-09POR @ UTAPOR71.2%68.9%-265126–133L -1.00u
2025-04-09MIA @ CHIMIA59.5%53.7%-130111–119L -1.00u
2025-04-09CHO @ TORTOR77.1%80.2%-55096–126W +0.18u
2025-04-09LAL @ DALLAL67.3%63.9%-200112–97W +0.50u
2025-04-09BOS @ ORLBOS63.7%26.6%+26076–96L -1.00u
2025-04-09PHI @ WASPHI62.8%57.1%-145122–103W +0.69u
2025-04-08SAS @ LACLAC84.0%83.5%-750117–122W +0.13u
2025-04-08GSW @ PHOGSW67.8%78.6%-450133–95W +0.22u
2025-04-08MIN @ MILMIN70.3%65.8%-220103–110L -1.00u
2025-04-08LAL @ OKCOKC79.4%76.9%-400120–136W +0.25u
2025-04-08NOP @ BRKBRK53.9%51.1%-115114–119W +0.87u
2025-04-08BOS @ NYKBOS61.2%55.3%-135119–117W +0.74u
2025-04-08MEM @ CHOMEM80.9%88.1%-1200124–100W +0.08u
2025-04-08CHI @ CLECLE85.3%88.1%-1200113–135W +0.08u
2025-04-08WAS @ INDIND93.2%92.6%-300098–104W +0.03u
2025-04-08ATL @ ORLORL55.8%64.3%-200112–119W +0.50u
2025-04-07PHI @ MIAMIA77.7%80.8%-525105–117W +0.19u
2025-04-07SAC @ DETDET58.8%63.0%-190127–117L -1.00u
2025-04-06HOU @ GSWGSW54.7%65.8%-220106–96L -1.00u
2025-04-06MIL @ NOPMIL71.9%66.9%-230111–107W +0.43u
2025-04-06IND @ DENDEN59.9%67.9%-240125–120L -1.00u

The full record is in the CSV under data/.

Kalshi close · 2025-26834–375 · ROI -0.9% · null -3.2% · fav -3.3%

Scored afterwards with this season left out of the fit · 1209 graded games on 160 slates.

Probabilities vs the close (log loss)
Market better
by 2.9 SE · model − market +0.0159 ± 0.0055 (1 SE)
0.5837 vs 0.5677 · n=1209
Lean bets · 1u at the close
-0.9% ROI
vs null (-3.2%): +2.3 ± 2.1 — not resolved (z = +1.1)
834–375 · won 69.0%, break-even 69.9%
market fav, same games: -3.3%

ROI — one unit on every pick

At the closing price.

Lean — the model's favourite

PicksnW–LROINullvs null (± 1 SE)Win %Break-evenModel %Market %Fav ROI
All picks1209834–375-0.9%-3.2%+2.3 ± 2.169.0%69.9%68.0%67.8%-3.3%
Games 10+1071739–332-1.9%-3.1%+1.3 ± 2.269.0%70.4%68.3%68.4%-3.7%
Games 1–9 (carryover)13895–43+6.7%-3.5%+10.2 ± 6.968.8%65.4%65.8%63.3%+0.0%
ROI by price band — one unit on every pick, by the picked side's moneyline

Graded at the closing price. With 8 cells per section, a |z| near 2 somewhere happens by chance about one section in three. Bands are descriptive monitoring dimensions, not a filter: a band that looks good here is a hypothesis to test forward, and the hypotheses under test are the pre-registered ones at the top of this page (the earlier DraftKings −249 to −130 lean band is retired).

Lean — the model's favourite

Picked pricenW–LROINullvs null (± 1 SE)zWin %Break-evenEV (pp)EV null (pp)Model %Market %
≤ -250594480–114-1.6%-2.2%+0.6 ± 2.0+0.380.8%82.0%-1.2-1.876.4%80.3%
-249 to -175218143–75-2.5%-3.4%+0.9 ± 4.8+0.265.6%67.1%-1.5-2.364.1%64.8%
-174 to -130185114–71+2.9%-4.0%+6.9 ± 6.0+1.261.6%59.8%+1.8-2.459.1%57.4%
-129 to -1008738–49-18.2%-4.5%-13.7 ± 10.0-1.443.7%53.5%-9.9-2.456.2%51.2%
+100 to +1297438–36+8.8%-5.0%+13.7 ± 12.4+1.151.4%47.2%+4.2-2.456.7%44.8%
+130 to +1743614–22-4.5%-5.6%+1.1 ± 20.3+0.138.9%40.4%-1.5-2.355.1%38.1%
+175 to +249126–6+53.8%-6.5%+60.2 ± 46.6+1.350.0%32.8%+17.2-2.154.2%30.6%
≥ +25031–2+109.7%-8.7%+118.3 ± 209.7+0.633.3%18.7%+14.7-1.560.2%17.1%
Against the spread — one unit on every pick at the closing spread

Lean ATS — the model's moneyline favourite against the spread

PicksnW–L–PROINullvs null (± 1 SE)Cover %Break-evenModel cover %Market cover %
All picks1209610–599–0-3.6%-4.5%+0.9 ± 2.850.5%52.3%50.7%50.0%

Only rows with a recorded closing spread (same book as the moneyline close). Model cover % maps the model's win probability to a margin with σ = 13.5 pts; it is a display mapping, not a new prediction. Cover % is covers ÷ (covers + misses); pushes refund. The null is minus the spread hold.

Game by game — latest 60 of 1209, newest first
DateAway @ HomeLeanModel %Market %Close MLFinal (away–home)Lean · P/L (1u)
2026-04-12CHI @ DALDAL53.0%64.5%-199128–149W +0.50u
2026-04-12MEM @ HOUHOU90.3%89.5%-967101–132W +0.10u
2026-04-12NOP @ MINMIN69.3%60.5%-168126–132W +0.60u
2026-04-12PHO @ OKCOKC68.1%72.8%-306135–103L -1.00u
2026-04-12DEN @ SASSAS80.7%79.3%-404128–118L -1.00u
2026-04-12UTA @ LALLAL79.8%90.5%-1087107–131W +0.09u
2026-04-12GSW @ LACLAC61.3%59.5%-161110–115W +0.62u
2026-04-12SAC @ PORPOR80.4%94.5%-2042110–122W +0.05u
2026-04-12ORL @ BOSBOS69.8%14.5%+529108–113W +5.29u
2026-04-12WAS @ CLECLE85.7%80.5%-458117–130W +0.22u
2026-04-12DET @ INDDET84.5%90.5%-1087133–121W +0.09u
2026-04-12ATL @ MIAMIA65.4%78.7%-430117–143W +0.23u
2026-04-12CHO @ NYKNYK53.7%12.4%+625110–96L -1.00u
2026-04-12MIL @ PHIPHI77.0%92.4%-1236106–126W +0.08u
2026-04-12BRK @ TORTOR90.2%97.5%-5268101–136W +0.02u
2026-04-10PHO @ LALLAL54.0%44.5%+11473–101W +1.14u
2026-04-10LAC @ PORPOR51.7%53.5%-12697–116W +0.79u
2026-04-10GSW @ SACGSW59.3%81.5%-489118–124L -1.00u
2026-04-10MIN @ HOUHOU65.6%80.5%-458136–132L -1.00u
2026-04-10MEM @ UTAUTA55.8%63.5%-191101–147W +0.52u
2026-04-10OKC @ DENOKC86.0%43.9%+119107–127L -1.00u
2026-04-10ORL @ CHIORL78.5%90.5%-1087127–103W +0.09u
2026-04-10BRK @ MILMIL73.7%80.5%-458108–125W +0.22u
2026-04-10DAL @ SASSAS90.9%93.5%-1684120–139W +0.06u
2026-04-10NOP @ BOSBOS88.7%94.4%-1684118–144W +0.06u
2026-04-10PHI @ INDPHI60.7%88.6%-967105–94W +0.10u
2026-04-10TOR @ NYKNYK72.4%70.5%-26395–112W +0.38u
2026-04-10DET @ CHODET58.6%35.1%+166118–100W +1.66u
2026-04-10MIA @ WASMIA79.1%91.5%-1236140–117W +0.08u
2026-04-10CLE @ ATLCLE57.2%24.5%+280102–124L -1.00u
2026-04-09LAL @ GSWGSW59.8%52.5%-121119–103L -1.00u
2026-04-09PHI @ HOUHOU76.2%69.5%-251102–113W +0.40u
2026-04-09IND @ BRKIND57.6%59.9%-168123–94W +0.60u
2026-04-09BOS @ NYKNYK53.8%60.5%-168106–112W +0.60u
2026-04-09MIA @ TORTOR59.0%60.9%-175114–128W +0.57u
2026-04-09CHI @ WASCHI54.5%71.5%-276119–108W +0.36u
2026-04-08OKC @ LACOKC77.5%75.7%-360128–110W +0.28u
2026-04-08DAL @ PHOPHO80.9%85.5%-660107–112W +0.15u
2026-04-08POR @ SASSAS71.9%58.9%-161101–112W +0.62u
2026-04-08MEM @ DENDEN92.4%97.5%-5268119–136W +0.02u
2026-04-08ATL @ CLECLE62.2%61.5%-175116–122W +0.57u
2026-04-08MIN @ ORLORL61.5%81.5%-489120–132W +0.20u
2026-04-08MIL @ DETDET91.1%95.5%-2580111–137W +0.04u
2026-04-07HOU @ PHOHOU55.0%52.5%-121119–105W +0.83u
2026-04-07OKC @ LALOKC89.0%94.5%-2042123–87W +0.05u
2026-04-07DAL @ LACLAC85.4%84.5%-609103–116W +0.16u
2026-04-07SAC @ GSWGSW82.2%89.5%-967105–110W +0.10u
2026-04-07CHO @ BOSBOS72.6%63.5%-191102–113W +0.52u
2026-04-07UTA @ NOPNOP69.2%69.5%-251137–156W +0.40u
2026-04-07MIL @ BRKMIL57.9%53.0%-12190–96L -1.00u
2026-04-07MIA @ TORTOR57.0%56.5%-14295–121W +0.70u
2026-04-07CHI @ WASCHI53.5%68.5%-239129–98W +0.42u
2026-04-07MIN @ INDMIN72.5%86.5%-719124–104W +0.14u
2026-04-06POR @ DENDEN76.2%72.5%-290132–137W +0.34u
2026-04-06CLE @ MEMCLE74.0%88.5%-869142–126W +0.12u
2026-04-06PHI @ SASSAS81.9%76.5%-360102–115W +0.28u
2026-04-06NYK @ ATLNYK55.0%48.5%-103108–105W +0.97u
2026-04-06DET @ ORLDET63.6%51.0%-116107–123L -1.00u
2026-04-05HOU @ GSWHOU70.5%61.5%-175117–116W +0.57u
2026-04-05LAC @ SACLAC81.0%86.5%-719138–109W +0.14u

The full record is in the CSV under data/.

Built 2026-10-19 07:42 UTC. Win probabilities from prior-game four factors, roster talent and the NBA injury report; the market is a benchmark only and never enters the model. Full statistics: ledger_report.txt · model tags and coefficients: Model. Not betting advice.