Tonight's board
— games, — picks at a — cover bar. Experimental: no edge proven against closing lines yet.
Matchups
Spreads are from the home team's side. Our line is the player and minutes model; the DARKO line uses the same rotations with DARKO's ratings. Open a matchup for rotations and injuries.
Injury report
Everyone listed for tonight's teams. Out players get no minutes; Doubtful, Questionable and Probable keep a share of their usual minutes (shares on the Method page).
| Game | Team | Player | Status | Our rating | DARKO |
|---|
Record
Every game is graded after it ends: the last prediction made before tip, against the final score and the last line saved before tip. Closing-line value (CLV) is how many points the line moved toward our side after we took it. It is the earliest honest sign of an edge, well before win-loss records mean anything.
Every game, pick or not
A lean is the side a line favors against the market, whether or not it clears the pick bar. Leans grade on every game, so they build evidence fastest. The DARKO lean uses the same rotations with DARKO's ratings. Brier score measures how well cover probabilities match results (0.25 is a coin flip; lower is better).
- Our leans W–L
- —–—
- Our lean CLV
- —
- DARKO leans W–L
- —–—
- DARKO lean CLV
- —
- Brier score
- —
Graded games
Lines are from the home team's side. Results are graded at the line the prediction used.
| Date | Game | Final | Pick | Our price | Close | Result | CLV | Our lean | DARKO lean |
|---|
Ratings
Our player ratings track DARKO at a correlation of — across — rotation players, and DARKO never feeds them.
Team strength
Points better than an average team on a neutral court, with today's injuries and projected minutes.
Our ratings vs DARKO
Players projected for 20 or more minutes. Points on the dashed line are rated the same by both.
Teams
| Team | Our model | DARKO | Players out |
|---|
Players
Everyone who has played this season. Ratings are points per 48 minutes above average: a box-score part plus a plus-minus part.
Backtest
Walk-forward against verified closing lines at −110: every season is predicted with settings fit only on earlier seasons.
The best rule, —, won — of — bets against a break-even of —. That is within normal luck, so no rule has a proven edge yet.
Three models, same games
Average miss is against the final margin (root mean square, points). The information test asks whether the model knows something the closing line doesn't: a t-value above about two means it does.
| Model | Average miss | Info slope | Info t-value | Games |
|---|
Average miss by season
Lower is better. The closing line is the bar to beat.
Betting rules
Edge rules bet whenever our line differs from the closing line by at least that much. Blended rules bet when the blended cover probability clears the bar. Return is per unit risked at −110.
| Rule | Bets | Won | Lost | Push | Win rate | Return | vs break-even (z) |
|---|
Method
How the line is built, what feeds it, and what it can't see.
- Version
- —
- Fit on seasons
- —
- Weight on our line
- —
- Cover bar
- —
- Box-score prior scale
- —
- Back-to-back penalty
- —
How it works
Each game's line is home court, plus rest, plus the two teams' ratings, plus the sum over each team's projected rotation of minutes times player rating.
Player ratings
A player's rating has two parts. The box-score part reads his recent per-minute stats (points, shot attempts, free throws, threes, rebounds, assists, steals, blocks, turnovers, fouls), pulled toward league average until he has a few hundred minutes. Its weights come from a regression of box stats on on-court plus-minus, refit each season on earlier seasons only. The plus-minus part learns after every game from the final score and each player's on-court plus-minus.
Minutes
Projected minutes are each player's recent average, scaled down by injury status and then up so each team plays a full 240 minutes.
From line to pick
Our line is pulled toward the market by a weight chosen walk-forward from past seasons, turned into a cover probability, and called a pick only when that probability clears the bar and every input is fresh. A game with a missing line, stale scores, an old injury report or a short roster is marked degraded and never picked.
What it can't see
- Late scratches after the last injury report capture.
- Minutes limits for players returning from injury, and rotation changes after trades.
- Anything about a rookie beyond his first games.
Box-score weights
Rating points per standard deviation of each per-minute stat, before the prior scale.
Injury status
Share of a player's usual minutes kept for each status on the injury report.
| Status | Minutes kept |
|---|
Data
| What | Count | Source |
|---|
Sources and terms
- Scores and closing lines: the Sportsbook Review archive (via a public GitHub copy) through January 2026; after that, the last DraftKings line this pipeline saves before tip from ESPN's public scoreboard.
- Box scores: NBA box scores (via a public GitHub copy) through 2023-24; ESPN game summaries since.
- Injury report: ESPN's injuries feed. The official NBA report refuses automated downloads, so it isn't used.
- DARKO: DPM ratings from darko.app by Kostya Medvedovsky, shown with attribution. DARKO is not used to fit our model; the DARKO line is logged and graded going forward, not backtested.
- Display type: Gloock, under the SIL Open Font License.