Backtests
How the sims did on past games, kept separate from the live slates.
If you bet $100 on every pick, starting with $10,000
Flat $100 (1 unit) on the side the sim prefers, at the real closing price, on games the model never trained on. Each cell is where your $10,000 ends up, then profit, bets and the win-loss record. Columns: All picks = every pick; Gap 3+ pts = only when the sim and books differ by 3+ points; Gap 3-10 pts = 3-10 points (skip huge gaps). The training line shows the same rule on the games the model learned from: a real edge should be up in both. NBA props: the books' prices aren't labelled over/under, so the main number uses the worse of the two prices and the small line the better one; the true result is somewhere in between. Props are left off the charts because 17,000 bets would flatten everything else.
NBA
Every pick, 2025-10-21 to 2026-06-13. Bankroll after each day of bets.
| Market | All picks | Gap 3+ pts | Gap 3-10 pts |
|---|---|---|---|
| moneyline | -$892-$10,892 · 1,309 bets · 523-786training games: -$9,953 | -$204-$10,204 · 1,064 bets · 400-664training games: -$8,238 | $6,786-$3,214 · 499 bets · 215-284training games: -$4,174 |
| player props | -$148,177-$158,177 · 17,755 bets · 9197-8558if the better price: $154,928training games: -$408,733 | -$129,038-$139,038 · 15,485 bets · 8025-7460if the better price: $148,249training games: -$338,102 | -$48,342-$58,342 · 5,345 bets · 2694-2651if the better price: $16,063training games: -$129,478 |
| spread | $3,191-$6,809 · 1,309 bets · 650-659training games: -$6,091 | $4,245-$5,755 · 1,056 bets · 523-533training games: -$4,755 | $9,600-$400 · 508 bets · 264-244training games: -$2,000 |
| total | $6,627-$3,373 · 1,309 bets · 668-641training games: -$9,818 | $6,964-$3,036 · 1,046 bets · 532-514training games: -$9,836 | $9,818-$182 · 481 bets · 251-230training games: -$4,391 |
NFL
Every pick, 2025-09-04 to 2026-10-19. Bankroll after each day of bets.
| Market | All picks | Gap 3+ pts | Gap 3-10 pts |
|---|---|---|---|
| moneyline | $10,113+$113 · 378 bets · 163-213-2training games: -$2,833 | $9,608-$392 · 306 bets · 126-178-2training games: -$2,820 | $9,303-$697 · 165 bets · 75-89-1training games: +$103 |
| spread | $7,658-$2,342 · 378 bets · 182-189-7training games: -$928 | $8,963-$1,037 · 303 bets · 150-147-6training games: +$50 | $10,689+$689 · 168 bets · 89-74-5training games: -$210 |
| total | $6,802-$3,198 · 378 bets · 181-197training games: -$1,297 | $7,865-$2,135 · 291 bets · 141-150training games: -$692 | $7,689-$2,311 · 182 bets · 83-99training games: -$1,252 |
UFC
Every pick, 2025-01-11 to 2026-10-18. Bankroll after each day of bets.
| Market | All picks | Gap 3+ pts | Gap 3-10 pts |
|---|---|---|---|
| method of victory | -$12,817-$22,817 · 909 bets · 135-774training games: -$12,053 | $644-$9,356 · 578 bets · 100-478training games: -$3,304 | $4,816-$5,184 · 351 bets · 58-293training games: -$4,432 |
| moneyline | $4,522-$5,478 · 617 bets · 223-394training games: -$5,256 | $2,976-$7,024 · 543 bets · 180-363training games: -$4,562 | $7,334-$2,666 · 178 bets · 72-106training games: -$1,281 |
Backtest scorecard
Log-loss on game winners: lower is better. Holdout = the final test, opened once after settings were frozen.
| Sport | Period | Sim | Books | Better | Notes |
|---|---|---|---|---|---|
| NBA | train | 0.628 | 0.585 | books | props 53% vs 51% base |
| NBA | validation | 0.649 | 0.618 | books | props 52% vs 50% base |
| NBA | holdout | 0.579 | 0.524 | books | props 54% vs 54% base |
| NBA (known lineups) | train | 0.626 | 0.585 | books | props 55% vs 51% base |
| NBA (known lineups) | validation | 0.644 | 0.618 | books | props 52% vs 50% base |
| NBA (known lineups) | holdout | 0.579 | 0.524 | books | props 58% vs 54% base |
| NFL | train | 0.625 | 0.589 | books | ATS 52% on 178 picks |
| NFL | validation | 0.676 | 0.612 | books | ATS 47% on 89 picks |
| NFL | holdout | 0.620 | 0.602 | books | ATS 52% on 102 picks |
| NFL | forward_2026 | 0.664 | 0.661 | books | ATS 48% on 52 picks |
| UFC | train | 0.672 | 0.590 | books | method ROI +7.2% |
| UFC | validation | 0.667 | 0.593 | books | method ROI +4.5% |
| UFC | holdout | 0.660 | 0.587 | books | method ROI -43.2% |
Detailed breakdown by gap size and side
Betting with the sim: above vs below the book
Each row bets the side the sim prefers. The gap is how far the sim's chance sits from the book's no-vig chance (props, spreads, totals: from 50%). Cells show return per bet on games the model never trained on, with real closing prices (NBA spreads and totals at -110). NBA prop prices are not labelled over/under, so the cell shows worst-to-best price. Green only when the whole 90% range is above zero. With this many cells, a few will look good by luck alone: a pattern needs to hold in train and out of sample, then on the forward ledger.
NBA · frozen model
| Bet | gap 0-3 pts | gap 3-6 pts | gap 6-10 pts | gap 10+ pts |
|---|---|---|---|---|
| moneylinebacking the favoritetrain: -6.6% · +4.7% · -15.0% · -5.1% | -0.8%111 bets · win 69%90%: -11.6% to +9.2% | +0.7%84 bets · win 69%90%: -11.8% to +12.7% | -2.7%83 bets · win 64%90%: -15.3% to +10.9% | -13.6%91 bets · win 57%90%: -27.1% to +0.0% |
| moneylinebacking the underdogtrain: -5.8% · -14.7% · -5.3% · -8.5% | -4.5%134 bets · win 34%90%: -24.1% to +15.6% | -18.7%144 bets · win 28%90%: -38.1% to +1.6% | -1.9%188 bets · win 34%90%: -20.5% to +17.3% | -12.1%474 bets · win 28%90%: -23.5% to -0.5% |
| player propsover: sim above the linetrain: -13.6% · -10.9% · -10.8% · -10.7% | -9.7% to +1.3%1,120 bets · win 51%90%: -14.0% to -5.3% | -10.6% to +0.9%1,064 bets · win 50%90%: -15.1% to -6.1% | -13.7% to -0.8%1,430 bets · win 49%90%: -17.5% to -10.0% | -11.5% to +9.9%4,301 bets · win 51%90%: -13.6% to -9.1% |
| player propsunder: sim below the linetrain: -7.6% · -8.0% · -6.3% · -5.3% | -7.2% to +4.5%1,150 bets · win 52%90%: -11.5% to -3.1% | -7.3% to +4.6%1,214 bets · win 52%90%: -11.6% to -3.3% | -11.3% to +0.5%1,637 bets · win 50%90%: -15.0% to -7.8% | -5.4% to +15.3%5,839 bets · win 54%90%: -7.3% to -3.5% |
| spreadbacking the favoritetrain: -14.5% · -4.5% · -2.2% · +1.2% | -3.7%111 bets · win 50%90%: -19.2% to +11.8% | +3.6%94 bets · win 54%90%: -12.7% to +19.8% | -10.5%96 bets · win 47%90%: -26.4% to +5.4% | -14.8%159 bets · win 45%90%: -26.8% to -2.7% |
| spreadbacking the underdogtrain: +4.4% · -0.9% · -7.0% · -9.3% | -4.5%142 bets · win 50%90%: -16.6% to +8.9% | -0.5%142 bets · win 52%90%: -12.6% to +12.9% | +2.0%176 bets · win 53%90%: -10.0% to +13.9% | -7.7%389 bets · win 48%90%: -16.1% to -0.4% |
| totalover: sim above the linetrain: +6.1% · +1.5% · -7.0% · -5.8% | -0.5%117 bets · win 52%90%: -15.2% to +14.2% | -5.6%87 bets · win 49%90%: -23.2% to +9.7% | -8.1%106 bets · win 48%90%: -22.6% to +6.3% | +0.3%158 bets · win 53%90%: -13.0% to +12.4% |
| totalunder: sim below the linetrain: -6.3% · -15.6% · -9.9% · -12.2% | -1.9%146 bets · win 51%90%: -15.0% to +11.1% | +17.4%135 bets · win 61%90%: +3.2% to +30.1% | -7.7%153 bets · win 48%90%: -20.1% to +4.8% | -7.1%407 bets · win 49%90%: -14.6% to +0.8% |
NBA · with today's role rules (post-hoc)
| Bet | gap 0-3 pts | gap 3-6 pts | gap 6-10 pts | gap 10+ pts |
|---|---|---|---|---|
| moneylinebacking the favoritetrain: -10.9% · +5.3% · -11.1% · -8.0% | -6.9%106 bets · win 63%90%: -18.6% to +4.3% | +1.6%100 bets · win 71%90%: -10.5% to +12.7% | -7.7%71 bets · win 62%90%: -22.4% to +6.1% | -7.1%96 bets · win 60%90%: -20.1% to +5.7% |
| moneylinebacking the underdogtrain: -18.3% · -2.5% · -8.6% · -8.4% | -21.1%130 bets · win 29%90%: -39.8% to -0.9% | -12.1%148 bets · win 31%90%: -30.8% to +7.1% | +3.2%168 bets · win 33%90%: -15.9% to +24.3% | -12.1%490 bets · win 28%90%: -24.0% to -0.5% |
| player propsover: sim above the linetrain: -15.5% · -12.2% · -12.3% · -9.8% | -10.9% to +0.3%1,078 bets · win 50%90%: -15.3% to -6.3% | -12.2% to -0.0%1,085 bets · win 50%90%: -16.7% to -7.9% | -15.3% to -2.2%1,277 bets · win 48%90%: -19.3% to -11.2% | -11.4% to +9.1%4,336 bets · win 51%90%: -13.7% to -9.4% |
| player propsunder: sim below the linetrain: -8.3% · -7.8% · -6.5% · -5.9% | -9.6% to +1.7%1,130 bets · win 51%90%: -14.0% to -5.0% | -12.1% to -1.2%1,242 bets · win 50%90%: -16.2% to -7.9% | -7.5% to +4.6%1,585 bets · win 52%90%: -11.4% to -3.9% | -6.1% to +14.7%6,022 bets · win 53%90%: -7.9% to -4.2% |
| spreadbacking the favoritetrain: -11.8% · +7.9% · -9.6% · +2.4% | +2.0%116 bets · win 53%90%: -12.8% to +16.8% | -2.5%94 bets · win 51%90%: -18.8% to +13.7% | -9.7%93 bets · win 47%90%: -26.1% to +6.7% | -12.9%160 bets · win 46%90%: -24.8% to -1.0% |
| spreadbacking the underdogtrain: +11.4% · +3.6% · -10.4% · -8.9% | -2.5%143 bets · win 51%90%: -15.9% to +9.5% | +3.2%124 bets · win 54%90%: -10.7% to +17.0% | -4.5%186 bets · win 50%90%: -16.9% to +6.7% | -5.3%393 bets · win 50%90%: -13.0% to +2.0% |
| totalover: sim above the linetrain: +8.9% · -0.1% · -7.1% · -3.7% | -18.7%108 bets · win 43%90%: -34.6% to -2.8% | -12.5%96 bets · win 46%90%: -28.4% to +3.4% | +14.9%108 bets · win 60%90%: -1.0% to +29.0% | -4.5%146 bets · win 50%90%: -17.6% to +8.5% |
| totalunder: sim below the linetrain: +1.8% · -7.7% · -15.3% · -13.6% | -2.6%145 bets · win 51%90%: -15.7% to +10.6% | +3.7%127 bets · win 54%90%: -9.8% to +17.3% | -4.0%177 bets · win 50%90%: -15.9% to +7.9% | -6.0%402 bets · win 49%90%: -14.0% to +1.6% |
NFL
| Bet | gap 0-3 pts | gap 3-6 pts | gap 6-10 pts | gap 10+ pts |
|---|---|---|---|---|
| moneylinebacking the favoritetrain: +15.7% · +16.1% · · · -4.7% | +1.0%33 bets · win 67%90%: -20.9% to +20.9% | -12.2%31 bets · win 61%90%: -32.1% to +8.7% | +7.8%30 bets · win 69%90%: -14.4% to +29.4% | -6.8%23 bets · win 57%90%: -36.4% to +19.9% |
| moneylinebacking the underdogtrain: -19.3% · -33.0% · +30.1% · -33.9% | +12.1%39 bets · win 38%90%: -27.4% to +54.4% | -6.5%44 bets · win 32%90%: -44.2% to +36.2% | -4.5%60 bets · win 37%90%: -31.2% to +23.8% | +3.9%118 bets · win 32%90%: -18.9% to +27.2% |
| spreadbacking the favoritetrain: +14.0% · -24.6% · -8.6% · +11.9% | -23.5%41 bets · win 40%90%: -48.5% to -0.1% | -13.3%35 bets · win 46%90%: -40.3% to +13.4% | -6.3%42 bets · win 49%90%: -30.9% to +17.9% | -4.5%59 bets · win 50%90%: -25.5% to +16.3% |
| spreadbacking the underdogtrain: -41.2% · +22.1% · -3.6% · -6.1% | -10.0%34 bets · win 47%90%: -38.1% to +17.9% | +28.2%39 bets · win 67%90%: +3.7% to +52.8% | +6.2%52 bets · win 56%90%: -15.3% to +25.7% | -19.2%76 bets · win 42%90%: -39.0% to -1.6% |
| totalover: sim above the linetrain: +7.6% · -4.7% · -2.0% · +6.6% | +2.0%45 bets · win 53%90%: -23.2% to +24.0% | -8.9%42 bets · win 48%90%: -31.7% to +14.1% | -25.0%56 bets · win 39%90%: -45.5% to -4.4% | +8.9%63 bets · win 57%90%: -9.2% to +29.3% |
| totalunder: sim below the linetrain: -28.2% · -5.0% · -26.7% · +10.1% | -27.4%42 bets · win 38%90%: -50.2% to -4.5% | +1.6%49 bets · win 53%90%: -21.8% to +24.4% | -17.5%35 bets · win 43%90%: -44.8% to +9.7% | -8.4%46 bets · win 48%90%: -32.9% to +15.9% |
UFC
| Bet | gap 0-3 pts | gap 3-6 pts | gap 6-10 pts | gap 10+ pts |
|---|---|---|---|---|
| method of victorysim above the booktrain: -40.9% · -30.8% · -0.2% · +7.2% | -40.7%331 bets · win 11%90%: -58.7% to -21.6% | -44.0%193 bets · win 11%90%: -65.0% to -20.5% | +21.0%158 bets · win 23%90%: -14.2% to +59.7% | -18.4%227 bets · win 19%90%: -38.8% to +3.4% |
| moneylinebacking the favoritetrain: -13.9% · · · +13.4% · +15.1% | +4.3%36 bets · win 69%90%: -15.9% to +24.0% | -16.7%33 bets · win 55%90%: -38.9% to +4.4% | -7.1%36 bets · win 58%90%: -28.1% to +14.5% | -16.4%36 bets · win 50%90%: -39.7% to +6.1% |
| moneylinebacking the underdogtrain: -7.4% · -2.6% · -30.6% · -12.9% | +36.6%38 bets · win 47%90%: -4.3% to +76.5% | -7.1%48 bets · win 35%90%: -36.2% to +23.2% | -24.9%61 bets · win 26%90%: -52.5% to +5.6% | -11.5%329 bets · win 27%90%: -25.9% to +2.7% |