NFL Week 7
THU · 7:15 PM
NE50.54-2
CHI-34-2
SUN · 8:30 AM
PIT-3.54-2
NO44.52-4
SUN · 12:00 PM
CIN-1.53-2
BAL48.54-2
SUN · 12:00 PM
CLE-1.54-2
TEN37.51-5
SUN · 12:00 PM
IND41.52-4
MIN-6.55-0
SUN · 12:00 PM
MIA39.50-5
NYJ-4.52-4
SUN · 12:00 PM1 Pick
NYG42.53-2-1
HOU-10.52-4
SUN · 12:00 PM2 Picks
SF-36-0
ATL49.52-4
SUN · 12:00 PM
TB44.51-5
CAR-33-2
SUN · 3:05 PM
DEN-4.54-2
ARI43.52-4
SUN · 3:25 PM1 Pick
GB53.54-2
DET-33-2
SUN · 3:25 PM
LA-4.52-4
LV48.53-3
SUN · 7:20 PM
KC42.55-0
SEA-2.53-3
MON · 7:15 PM
DAL-4.52-4
PHI44.52-4
← Models / Props Methodology

Player 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:

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

What goes into a projection

Features are grouped into families, and every one of them is computed strictly from information available before kickoff:

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:

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:

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:

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:

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: