Props Methodology
How the projections are built, priced and gradedPlayer Props Methodology
This page describes, in plain language, how the NFL player-prop projections on this site are built, priced, published and graded. It is the same document the team works from — when the model changes, this changes with it.
What the model covers
Eleven markets across four positions, each with its own model:
- Quarterbacks — passing yards, completions, pass attempts, passing touchdowns, interceptions, and passing + rushing + receiving yards combined.
- Running backs — rushing yards, rush attempts, receptions, receiving yards, and rushing + receiving yards combined.
- Receivers and tight ends — receptions, receiving yards, and (for receivers who carry the ball) rushing and combined yardage.
Two families are deliberately treated differently. Passing touchdowns and interceptions are rare events: they are projected and graded, but picks are switched off for them by default until a long run of graded results shows the model genuinely beats the market there. And longest-play markets — longest completion, longest rush, longest reception — are out of scope entirely: they live in the extreme tail of the distribution, where our sample size cannot support an honest probability.
Touchdown scorer markets are excluded on purpose. Anytime, first and last touchdown scorer, and every other scorer market, are blocked at the data-capture layer by a hard deny list. They are the noisiest, most heavily juiced props on the board, and we have nothing useful to add.
Where the data comes from
- nflverse — the public play-by-play, weekly player stats, schedules, rosters, depth charts, snap counts, injury reports and Next Gen Stats feeds. This is the backbone: usage, efficiency, role and availability all come from here.
- The Odds API — sportsbook prop lines and prices, captured on a schedule from the moment a market opens through to kickoff, so we hold the full price history rather than a single snapshot.
- Open-Meteo — forecast and archived weather for outdoor stadiums: wind, temperature, precipitation and pressure.
- PFF — a private, licensed overlay (blocking, coverage scheme, alignment and route data) used as model input only. No PFF value is ever displayed on this site, in any form, aggregated or otherwise. It influences projections; it never appears on a page.
What goes into a projection
Features are grouped into families, and every one of them is computed strictly from information available before kickoff:
- Usage and role — trailing snap share, target share, air-yards share, carry share, goal-line and red-zone work, route participation, depth-chart position, and how concentrated a backfield or target tree is.
- Availability — injury designations for the player, and *vacated usage*: the share of targets, carries and snaps belonging to teammates ruled out or doubtful for that week.
- Team context — pace, pass rate over expected, no-huddle and explosive-play rates, and red-zone tendencies, all as-of the prior week.
- Opponent context — defensive efficiency against the pass and the run, pressure rate, explosive plays allowed, and coverage tendencies.
- Game environment — the market's own spread and total translated into an implied team total and a game-script bucket, rest days, travel, primetime, divisional games, stadium roof and surface, and weather for outdoor games.
- Player baselines — prior-season and career rates, shrunk toward positional means so that small samples do not shout.
Leakage guard. Every feature window is lagged by one game, and every as-of join is checked programmatically: for each feature with a source timestamp, an automated test asserts that the source predates kickoff. The build aborts if any violation is found. This is not a convention — it is a test that runs on every feature rebuild.
The models
Different stats have different shapes, so they get different models:
- Yardage markets use a gradient-boosted quantile ensemble. Instead of predicting one number, it predicts seven points of the distribution — the 5th, 10th, 25th, 50th, 75th, 90th and 95th percentiles — which are then interpolated into a full probability curve. That curve is what lets us price *any* line, not just the one we trained near.
- Count markets — receptions, completions, attempts, carries — use a Poisson-style mean model with a separately fitted spread parameter, giving a proper discrete distribution that handles pushes on whole-number lines correctly.
- Rare-count markets — passing touchdowns, interceptions — use the same machinery with the mean shrunk toward a positional baseline, because week-to-week variance swamps the signal.
Validation
All evaluation is strictly walk-forward: to score week N, the model is trained only on weeks before it. Nothing is ever scored on data it has seen.
The evaluation sample is split in two, and the split matters:
- Real lines — seasons where we hold captured sportsbook lines for that market. These are the only rows used to fit calibration and to judge whether we beat the market.
- Synthetic lines — earlier seasons, where a stand-in line is derived from trailing averages. These help measure projection accuracy, are labelled as synthetic everywhere they appear, and are never used to calibrate probabilities or to claim market-beating skill.
Reported metrics include median-projection error, quantile coverage (does the 10th-to-90th band actually contain 80% of outcomes?), Brier score and log loss before and after calibration, and — the one that matters — Brier skill against the vig-free market probability. A market whose blend cannot beat the market's own number has its picks disabled automatically.
Calibration and blending toward the market
Two steps turn a model distribution into a number we are willing to publish.
Blending. The final projection is a weighted mix of the model's number and the market's line. The weight is not a preference; it is fit by searching a grid on out-of-sample data and keeping whatever minimises error. In practice it sits well short of full confidence in the model, which is the correct posture against a liquid market.
Calibration. Raw model probabilities are passed through a calibration curve fitted on out-of-sample real-line results (isotonic when there is enough data, a logistic fit when there is less, identity with a warning when there is very little). The published P(over) is the calibrated one. The calibration chart on the performance page is the receipt.
How the line we price against is chosen
Books post many lines for the same player — a standard line plus a ladder of alternates. We price the one whose two prices sit closest to an even market, nearest −110 on both sides. That line carries the least built-in margin, so its implied probability is the cleanest estimate of what the market actually believes.
Candidates are rejected when a side is missing, when the two-way margin exceeds a ceiling, or when the quote is stale. Ties break on distance from −110, then on distance from the standard line, then on recency. Every selection stores its candidates, its rejects and a plain-English reason, so any published number can be traced back to the exact quote it came from.
Stripping the margin from both prices gives the no-vig probability. Our edge is the gap between our calibrated probability and that number. A fair price is the American odds corresponding to our probability with no margin added — if the posted price is better than our fair price, the bet is positive expected value.
Official picks, and shadow mode
A projection is not a pick. A row becomes an official pick only if all of the following hold:
- the market is approved for picks (rare-count markets are not, by default);
- our edge clears both the probability-point threshold and the market's stat-unit threshold;
- a sharp reference book does not clearly disagree with our side;
- the posted price is not worse than −130;
- the play survives exposure caps — one pick per player per game, a cap per team and a cap per slate — and a correlation guard that blocks logically opposed pairs (a quarterback's passing over against his own receiver's receiving under, for instance) unless their combined edge is large;
- the stake, sized at a fraction of Kelly on our calibrated probability at the posted price and then capped, clears a minimum.
Everything that fails is still recorded, with the reason it was blocked.
Shadow mode governs publication. Until enough slates have been graded, and enough graded observations exist in a given market, picks are made and graded internally but not published. There is no back-dated record, no start date chosen after the fact, and no quiet deletion of a bad week. The public record starts empty and only grows.
Grading and closing line value
After a game finals, every prediction is graded against the actual stat line at the line and price captured when it was published — never at a better number found afterwards. A prediction is voided, and excluded from the record, when the player did not play, when no line existed, or when no final stat line is available.
Closing line value compares where we bought to where the market closed, three ways:
- Cents — the difference in American price between our price and the closing price.
- Units — the difference in the line itself, in stat units, on the side we took.
- Probability — the difference between the no-vig probability at our price and at the close.
CLV is the primary health metric, especially early. Prop samples are small and variance is large; a good month and a lucky month look identical in win-loss terms. Consistently buying numbers the market later moves toward is much harder to fake.
Per-player reliability
Alongside the model, we track how well our projections have actually tracked each individual player in each individual market: error against the line, whether our stated range covers the real outcomes at the rate it claims, whether we have been persistently high or low, and how volatile that player's usage is. These numbers are shrunk toward market-and-position averages, so a three-game sample does not earn a verdict.
The result appears publicly only as a confidence badge — High, Standard or Watch. Players we have modelled poorly carry no badge and produce no picks. New and low-sample players sit at Standard. The underlying metrics stay internal, because they are diagnostic tools, not a rating we want anyone betting off.
Limitations
Things this model does not do, stated plainly:
- It does not know about breaking news it has not ingested — a late scratch, a surprise game-plan change, or a coaching decision announced after the last data refresh.
- It has no view on coverage matchups at the individual-assignment level beyond what the aggregate scheme data carries.
- Rare-count markets are, and will remain, weak. Touchdown scorer markets are not modelled.
- Weather is a forecast for games more than a few hours out, and forecasts move.
- The market is sharp. Edges are small, they are found on the margins of line selection and usage projection, and most weeks the honest answer is that there is no bet.
- Small samples cut both ways: an early winning record is no more meaningful than an early losing one. Read the CLV.



























