Prop Streak Lab ← Back to site

Methodology

How the model works

Prop Streak Lab turns a player's recent games into a calibrated chance of clearing any line, compares it with what the market charges, and records every pick before the game so the results can be checked in public.

NFL · NBA · NHL · MLB Rebuilt every 10 minutes Every pick graded from the box score

Overview

Every number on the site comes from one small, published model — the same code runs in your browser and in the job that records picks every 10 minutes. There is no hidden tuning per pick and no human override. The model is backward-looking: it knows a player's game log, the opponent, and (for the NFL) the Vegas line, snap counts and the injury report. It does not know about weather, a coaching change, or who else is out.

Where the data comes from

SportGame logsSchedule & context
NFLnflverse weekly player stats (regular season and playoffs), with ESPN box scores for games nflverse hasn't posted yetnflverse schedule with Vegas spread and total; official injury reports; rosters; snap counts
NBAESPN public box scoresESPN schedule with game totals and spreads; opponent defense
NHLESPN public box scores (skaters and goalies)ESPN schedule with game totals and spreads; opponent defense
MLBESPN public box scores and play-by-playESPN schedule; opposing pitching staff or lineup; postseason flag

Prices come from Polymarket US and Kalshi, side by side. Since October 21, 2026 the NFL props themselves are listed from Polymarket US too: the global Polymarket book stopped listing them. Polymarket US doesn't let anyone buy the under of an NBA player prop (it shows a price, but that side can't be traded), so NBA unders are priced on Kalshi only.

Polymarket and Kalshi, side by side (since October 7, 2026). Every pick shows what its side costs on both exchanges when either lists that exact prop at that line. The cheaper of the two is the price the edge, Top 25 Surest and Value are judged on, and every pick records which exchange that was, so the record shows it. Kalshi lists props as "N+" too (2+ hits = over 1.5): the over is its Yes ask and the under its No ask. A price on a different line is never substituted. Kalshi prices refresh with every update (about every 10 minutes); on the NFL board, Polymarket US also refreshes live in your browser. Prices shown are before each exchange's trading fees.

Injuries: next man up (NFL, since October 8, 2026). When a back or receiver is ruled out (ESPN's injury report, the NFL's official report, or injured reserve), the model looks at who inherits his work. We tested this on every game of the last two seasons where a regular sat after playing the week before, and the honest result is that who takes over is often a surprise: handing the backups a starter's full workload predicted worse than ignoring the injury. A quarter of a back's carries to his real backups predicted a little better, so that's what the model does; for receivers no hand-off helped (targets scatter), so it doesn't.

Trades (NFL, since October 18, 2026). When a quarterback, back, receiver or tight end who played for a team this season is now on another (traded, released and signed elsewhere, claimed off waivers), his old team has lost him for good. We find these from the data, comparing the team in each of his games with his team on the current roster. His old teammates' past games with him are rebuilt as if he had sat them, handing on half his carries and targets to the players at the positions that take them (backs for carries, receivers and tight ends for a receiver's targets), split by how they shared the work, and a quarter of a quarterback's passes and runs to the quarterbacks left. Unlike an injury, this helped when we tested it: on 45 mid-season moves in 2024–26, scoring the old team's remaining games, it predicted receiving props better (log loss 0.6211 → 0.6174) and rushing props better (0.6467 → 0.6405); handing on all of it overshot. Quarterback moves were too few to measure, hence the cautious quarter. The player who moved is projected from his own game log in his new team's games (its Vegas line, its opponent). His new teammates are left as they are. A player's page shows it as Volume ▲ with who left (for example "Marvin Harrison Jr. (now HOU)").

Waiting on injury news (every sport, since October 8, 2026). A prop is left off Top 25 Surest and Value while the news it depends on isn't settled: the player himself is questionable, doubtful or day-to-day (or out), or a teammate in his position group with a real role is. Position groups: in the NFL a quarterback holds the whole passing game, a back the other backs, a receiver or tight end the receivers, tight ends and backs' catches; in the NBA guards, forwards and centers; in the NHL forwards, defensemen and goalies; in MLB the lineup. A real role: 10%+ of his group's work in his last 3 games (NFL), 20+ minutes a game (NBA), 12+ minutes a game or 3 of the last 5 starts in goal (NHL), 3 of his last 5 games in the lineup (MLB), so a deep backup on the report holds nobody else. The hold lifts on the first update after the news settles: ruled out — his own props stay off, his teammates' come back on the model's numbers — or cleared, per ESPN's injury report (in the NFL, game-day inactives come out 90 minutes before kickoff) and, in MLB, the posted lineup (a hitter not in it is off too). News that never settles before a game keeps those props off that game's lists. The player's page marks a held NFL prop "Waiting on news".

Never 100%. No prop is certain, so no chance on the site goes above 99% (or below 1% for the other side). The model is capped there, and picks recorded before the cap show 99% at most.

Enough money at the price (since October 7, 2026). A price is only as good as what's offered at it: in a near-empty market a bet buys up the best price and then worse ones, so you'd pay more than the site showed. A price counts for Top 25 Surest and Value only when at least $25 is offered to buy that side at it or within 2¢, read from each exchange's order book. If the cheaper exchange is too thin, the other one's price is used; if neither has $25 there, the pick is shown but left off both lists. A Polymarket price with less than $25 behind it isn't shown at all (it reads not enough offered): on Polymarket US one side of a prop sometimes has only a dollar or two offered, so that number isn't a price you could really get. Polymarket's global book doesn't count toward Value on the NFL board: US users can't trade it, and its NFL props are mostly empty.

NHL goal unders aren't Top 25 picks. They hit about 93% of the time at prices around 95¢, so they lost a little money on the list; assist and point unders stay.

MLB Value spots are unders only. MLB overs have lost money across the record, so the MLB Value list takes unders only, and its Value record and Past picks count unders. MLB overs also aren't featured anywhere else the site recommends picks (Today's picks on the home page, Pick of the Day, hot streaks, moving markets, the daily email); they stay on the MLB board for research.

Units only count real prices. A handful of early picks were recorded at a price that can't have been a real one: under 10¢, or 35¢ or more away from where the pick was first priced (a stale or pulled market minutes before the game). Those picks still count in every win–loss record, but not in the units or ROI, since nobody could have bet them at that price.

Live prices on every board (since October 14, 2026). While a sport page is open, the Polymarket price of each upcoming Top 25 and Value pick refreshes about once a minute in your browser, and the price shown is again the cheaper of Polymarket and Kalshi. This is display only: which list a pick is on, and the price it is recorded and graded at, still come from the 10-minute update, and a locked pick keeps the price it locked at.

Sudden price jumps wait for a second look (since October 11, 2026). Before a game, a market's price sometimes jumps for a few minutes when its order book empties or goes stale, for example from 52¢ to 2¢. A pick's price is the one it's graded at, so a move of 30¢ or more between two updates is held at the old price until the next update, about 10 minutes later, shows the same new price (within 5¢). Only then is it taken. A price under 5¢ is never taken. A few early picks were recorded at prices like that, and they stay in the record as they are.

The model, step by step

  1. Take the player's recent games for that stat: up to the last 30 in the NFL, the last 82 in the NBA and NHL and for MLB hitters, and the last 20 starts for MLB pitchers (fewer if the player has fewer). For MLB, hitting props use lineup starts and pitching props use starts, so a pinch-hit appearance doesn't drag a starter's numbers down.
  2. Weight recent games more. A game's weight halves every 8 games back in the NFL, every 10 in the NBA, every 30 in the NHL, every 40 for MLB hitters and every 6 for MLB pitchers. These were chosen on a walk-forward backtest: every past game predicted from only the games before it, scored on two halves of the data separately. A short memory chased hot and cold streaks; for pitchers, a recent workload says more about how deep they'll go.
  3. Smooth the values into a distribution instead of counting hits. "Cleared 7 of 10" is noisy; a smoothed distribution uses how far over or under each game was, which is steadier. Each stat has a minimum amount of smoothing. For rare events on a 0.5 line (NHL goals, NBA threes and blocks, homers, anytime touchdowns) it's kept small. Too much spreads a scoreless game over the line: until September 30, 2026 the NHL model gave the average skater a 27% chance to score when it happened 15% of the time.
  4. Read off the chance of clearing the line — the share of the distribution above it (for an over) or below it (for an under).
  5. Shrink thin samples toward 50/50. A player with four games can't be 95%; the fewer the effective games, the more the chance is pulled toward a coin flip.
  6. Give a range. Every chance comes with an 80% range — where the true chance most likely sits. A wide range means less to go on.

On the Player tab, "Why this number" shows each of these steps with the running probability, and "Show the math" prints the full chain.

Adjusting for the matchup

Before reading off the chance, the player's distribution is scaled for this game:

  • NFL: the Vegas implied team points (from the total and the spread) against the player's usual, and how much the opponent allows to that position against the league average. The strengths were fitted on the backtest and checked on held-out weeks — they're deliberately small: implied points to the 0.25 power; defense to the 0.75 power for passing, 0.5 for receiving, 0.25 for rushing. The NFL model also reads each player's role from snap counts: the share of offensive snaps over the last two games against their usual, to the 0.5 power — so a back who just took over the job, or a starter who lost it, moves before the box score catches up. On held-out weeks that improved the model in every stat family (log loss 0.5960 → 0.5924 over 16,993 cases). Outside passing stats, each past game is put on the recent share using that game's own snap share, so a receiver back on a snap count doesn't have the low-snap games already played cut a second time (log loss 0.5547 → 0.5543 on odd weeks, 0.5571 → 0.5564 on even). It's skipped when the injury adjustment already raises that stat, so the same news isn't counted twice.
  • NBA: the team's implied points from the game total and spread, against the player's usual, and the opponent's defense against that stat (to the 0.65 power). It also reads the player's role from minutes: the last three games against the usual, to the 0.5 power, so a player who just moved into or out of the rotation moves before the averages catch up. Tested on halves of last season it wasn't fitted to, it improved every stat (log loss 0.6238 → 0.6222 over 122,805 props).
  • NHL: the team's implied goals from the game total and spread, and the opponent's defense against that stat. For points, goals and assists it also reads ice time (the last two games against the usual, to the 0.5 power: a player moved up the lineup gets more chances before his points show it) and takes 5% off on the second night of a back-to-back (teams scored 4.9% fewer goals on those last season). Both are small; they were kept because they improved both halves of the backtest.
  • MLB: the opposing pitching staff (for hitters) or lineup (for pitchers). Hitters' hits, total bases, H+R+RBI, runs, RBIs and homers are also scaled for tonight's probable starter: how many hits and walks he allows per out against all starters, pulled toward average until he has a few starts, to the 0.5 power. In the postseason, pitching props are also scaled down 10%, because starters get pulled earlier in October.
  • Tested and left out because they didn't improve the backtest on both halves: rest and back-to-backs (NBA, NFL short weeks and byes), the opponent being on a back-to-back, NBA pace, home field in every sport, and MLB batting-order spot (no gain even knowing the real one).

The multiplier is shown on the Player tab, and a checkbox turns the adjustment off so you can see the raw history.

Calibration

A model can be right about order and wrong about size — saying 90% for things that happen 80% of the time. So the raw chance goes through two last steps.

  • A correction per prop, fitted on the backtest. Left alone, the smoothed distributions read most overs a few points high (MLB total bases said 49% when 44% happened; NHL assists 17% vs 14%), and some props were over- or under-confident. Each prop's chance is corrected by two numbers fitted on half the past games and checked on the other half. It's used only for the props where it helped on both halves; passing props in the NFL and PRA-type combos in the NBA are left as they were. On the 580 graded NFL picks that had a Polymarket price, this took the model's log loss from 0.6545 to 0.6475. The market's own price is still better at 0.6305.
  • A calibration temperature learned from the site's own graded record, which pulls over-confident chances back toward what actually happened. It's learned only from picks made by the current version of the model, so it starts fresh (no change) after a model update until enough new picks are graded.

You can check the result yourself: the Past picks tab on every board has a calibration chart — "when the model said 80%, how often did it hit?" — built from every graded pick.

Prices and edge

On Polymarket a share pays $1 if the bet wins, so a price of 43¢ is also the market's chance: 43%.

  • Edge = the model's chance minus the market's, in points. Model 71% against a 43¢ price is +28.
  • Payout = $1 ÷ price. At 43¢, that's 2.33× your stake back if it wins.
  • A price is only ever compared with the same line. Where Polymarket lists a prop at a different number, the site says so and shows no edge — an edge against a different bet is meaningless.

Model vs. market — what the record says

We test the model against the market on every graded pick that had a Polymarket price, and publish the result, including when it's unflattering. As of September 30, 2026 (910 priced, graded picks, NFL and NHL):

  • The market has predicted better than the model. On the Brier score (squared error; lower is better) the Polymarket price scored 0.196 and the model 0.212. Prices react to injuries, role changes and news that a game log can't see.
  • The value rule is roughly break-even so far. Picks clearing both value rules returned +8% over 118 bets — but the margin of error at that sample size is about ±9 points, so that's not evidence of an edge in either direction.
  • The model's own percentages are close to honest. Recalibrating it on live results didn't improve its accuracy on picks it hadn't seen, so we didn't ship one.
  • Overs have done worse than unders. On priced NFL picks, overs hit 47% against a model average of 61% and a price of 53¢; unders hit about what the model said. Most of that gap came in week 1, when a player's history is mostly last season. A stricter bar for overs, tested one week at a time on weeks it wasn't fitted to, would have lost more than it saved, so the rules are unchanged — but it's worth knowing before you take an over early in a season.

The fair chance

Because of that, every card that shows a price also shows a fair chance: the model blended with the market, w × model + (1 − w) × price, where w is the mix that has predicted the graded picks best. It's refit on every run; right now it's about 10% model, 90% market. It's the most realistic number on the card — and the gap between it and the price is the realistic edge, which is usually small.

Value spots and Top 25 Surest

Value spots — both rules have to be true

  1. The market gives it at least a 30% chance (a price of 30¢ or more, the cheaper of Polymarket and Kalshi). This keeps penny longshots off the list: a 6¢ price against an 11% model chance is a big percentage edge and still a bad bet.
  2. The model puts it at least 15 points higher. A 30¢ price needs 45%, 50¢ needs 65%, 70¢ needs 85%. On the NFL board, no more than 18 points higher (since October 21, 2026; 20 from October 8): on the record to October 8, NFL Value picks 15–20 points up hit 56% (+7.3 units, 43 picks) while bigger gaps hit 42% (−6.5 units, 54 picks), and after that, picks 18–20 points up went 8–15 (−4.7 units) in weeks 5–6. A gap that big has more often been the model missing a role change the market already priced than a real edge, so when any line of a prop is more than 20 points up, no line of that prop is listed. The NFL board also lists one line per player-prop, the rung with the biggest edge, as the MLB and NHL boards already did.

Both sides of every market are tested, so unders qualify as often as overs. A prop also needs 6+ effective games of history. Everything that clears both rules is listed, ranked by edge. (Until September 30, 2026 each hourly scan recorded at most 50, which left 27 qualifying NFL picks out of the week 3 record; every one is recorded now, and earlier results stay exactly as they were recorded.) These are the model's biggest disagreements with the market — leads to research, not sure things (see above).

Top 25 Surest

The props with the highest model chance on the board, whatever they pay — on the NFL and NBA boards, the 25 highest; on the NHL and MLB boards, up to 25 that the model gives 90% or more. Every board needs a live Polymarket or Kalshi price with at least $25 offered near it (on the NFL and NBA boards since October 8, 2026: before that, their Top 25 had no price requirement, and most NFL picks in it had no tradeable price). One line per player-prop (its surest). On the NFL and NBA boards, a prop the model is more than 20 points off the market on, on any line, is left off Top 25 (on the NFL board, off Value too): that gap has more often been a role change the model missed. Likely isn't certain: these still lose sometimes, and at 85–97¢ a single loss wipes out several wins.

On the Player tab, the verdict card applies the same rules — Value when both value rules pass, Skip when the price is above the model's chance, Fair in between — and shows the fair chance next to them, so you see the realistic edge as well as the model's.

Simple and Pro views

The sport pages open in Simple. Each pick card shows who, the line, the model's chance, the Polymarket and Kalshi prices (and what the pick pays) and the last 10 games. Pro adds every number behind it: the model's edge, the opening price and how it has moved, sorting, the full rules for each list and the Tools tab (the streak leaderboard and parlay tools; it also shows in Simple once you track a bet, for My bets). Both views show the same picks, recorded and graded the same way; tap any pick for its full breakdown in either. New visitors choose after the 18+ check, and the Simple | Pro buttons at the top of each sport page switch at any time. The choice is saved on your device.

How picks are recorded and graded

  • An automated job runs every 10 minutes. It records every modeled prop on the Polymarket board — with the model's chance and the price at that moment — before the game starts, and refreshes it until the pick locks: when its game starts within 30 minutes, so 20–30 minutes before kickoff, tip-off, puck drop or first pitch. After that it is frozen. The boards mark it 🔒 Locked, and its Top 25 / Value status, chance and price no longer change. Locking at least 10 minutes ahead means the last update before the game can't change a pick you've already seen.
  • Once the game is final and the box score is in, each pick is graded hit, miss or push. A player who doesn't play is marked DNP and left out of the record, and so is a pick whose game wasn't played that day (postponed, canceled, or a playoff game the series didn't need).
  • Profit is counted at the recorded price: 1 unit on every pick, a win at 43¢ returns +1.33 units, a loss is −1.
  • The backtest (NFL 2025) shows what the model would have said before each past game using only earlier games. It has no market prices, and it's never mixed into the live record.

Everything — wins and losses — is on the Past picks tab of each board, with filters, the calibration chart and the running profit.

When and why picks lock

  • When: the same rule in every sport. A pick locks once its game starts within 30 minutes. The site updates about every 10 minutes, so that's 20–30 minutes before kickoff, tip-off, puck drop or first pitch.
  • What freezes: whether the pick is on Top 25 Surest or Value, the model's chance, and its price, which is the price it's graded at. No new picks are added for that game.
  • Why: the track record has to match what people saw before the game. If picks kept updating to the last second, a pick could drop off the list or change price after you'd acted on it, and the record could quietly improve itself. Prices also get least reliable right before the start, when order books thin out.
  • How it looks: on the NFL, NBA, NHL and MLB pages and the home page's picks, a locked pick has a 🔒 Locked strip across the top of its card, with a note under the list. Live prices stop updating for it; it keeps the price it locked at.
  • Top 25 spots: a locked Top 25 pick keeps its spot until its game starts, so late in the day fewer new picks can join the list.
  • Pick of the Day works a little differently: from 11 AM ET each slot is filled once and locked the moment it's posted, whatever the price does afterward. Its game has to start today, at least 45 minutes after it's picked; a slot still empty at 7:30 PM ET shows "No bet today".
  • Not a lock, but related: if a price jumps 30¢ or more between two updates, the old price is kept until the next update confirms it, so a glitchy, empty order book can't set a pick's price.

Honest limits

  • Backward-looking. The model can't know about weather, a coaching change, or a teammate's injury unless it's in the data.
  • Markets are hard to beat. The market already prices the line and the matchup, so real edges are smaller than they look against the site's own seeded lines.
  • New players appear in search right away but have no chance until their first box score.
  • Prices move. Board prices refresh about once a minute on the NFL board and every 10 minutes elsewhere; a locked pick keeps the price it had when it locked. Always check the price before you trade.
  • Where the price started. Every pick keeps the Polymarket price it was first recorded at. Cards show it under the current price (opened 40¢ ▲5), and Past picks shows first price → last price before the pick locked (before the game, for picks recorded before October 7, 2026). A price that rises means the market moved toward the pick. Across many picks, that closing line value is the quickest honest test of whether the model sees anything before the market does, and it's shown next to each list's live record (price moved its way on X of Y). Tracking started September 30, 2026; earlier picks have no first price.
  • Calibration is measured, not promised. Look at the Past picks tab before trusting a number.

Research and entertainment, not betting advice. For adults 18+. If gambling stops being fun, call 1-800-522-4700 or visit ncpgambling.org.