We’re a model, not a take artist. Every pick comes from the same pipeline: play-by-play data goes in, a tier-graded pick comes out, the result gets logged whether we won or lost. Here’s every step.
Every pick starts with NFL play-by-play from the same public source the analytics community uses (nflfastR / nfl_data_py). That gets us, for every play of every game since 1999:
From that raw stream we compute weekly team-strength estimates: offensive EPA per play, defensive EPA per play, success rates split by pass and rush. We don’t use power rankings from elsewhere. We don’t use last week’s box score. We use the play-by-play.
Three logistic regression classifiers, each trained on a different rolling window (24, 33, and 64 games) of every NFL game since 2002. They vote. Majority wins. Features include:
Each model outputs a win probability. The ensemble takes the majority vote and averages the confidence. That gets converted to a fair-line price and compared against the live market to flag value. The tier, though, comes from the ensemble itself: how unanimously the three models vote and how large a margin they project — not the size of the gap to the Vegas line.
Not every pick is created equal. We grade confidence on a 5-tier scale so you know when to lean in vs. lay off:
| TIER | CRITERIA | HIT RATE |
|---|---|---|
| S | Unanimous 3-0 vote, 10+ pt predicted margin | 83.7% (76-91%) |
| A+ | Unanimous 3-0 vote, 7+ pt predicted margin | 75.1% (69-81%) |
| A | Unanimous 3-0 vote, 65%+ win probability | 68.0% (59-77%) |
| B | Unanimous 3-0 vote | 66.3% (63-70%) |
| C | Split 2-1 vote — lean only | 58.3% (53-63%) |
Hit rates show the point estimate with a 95% bootstrap confidence interval, computed by the validation engine over every completed pick. The bands update as games go final.
On top of the straight-up call for every game, the model flags a curated set — the Edge — the plays it would actually bet. That flagged set, and the betting strategy behind it, is reserved for Pro members. The full straight-up prediction record stays public.
Every pick we’ve ever published is on the results page. We don’t delete losses. We don’t edit screenshots. The full ledger is 1,615 games on file at 66.5% accuracy.
You can also pull the data programmatically:
GET /api/picks.json-- this week’s slateGET /api/picks/[season]/[week].json -- any historical week with results/rss.xml -- RSS of the last 50 completed gamesTheory is nice. Numbers are better. Here’s the model’s performance, with 95% bootstrap confidence intervals on the validated metrics:
When all three sub-models agree, accuracy jumps to 68.8%. When they split 2-1, we still pick the majority side but accuracy drops to 58.3%. The gap validates the ensemble design.
A well-calibrated model’s 70% confidence picks should win about 70% of the time. Below: predicted confidence (x) vs actual win rate (y) for the raw ensemble. Points near the diagonal mean the model knows what it knows.
Each dot represents a confidence bucket from the validated calibration engine. The dashed line is perfect calibration. Points above the line mean the model was underconfident (winning more than predicted); below means overconfident. Expected Calibration Error (ECE) is the average gap between predicted and actual across buckets — lower is better.
The raw ensemble runs a few points underconfident in the middle buckets: the pick is a hard 3-model vote while the shown probability is the mean of three probabilities, and the vote carries information the mean doesn’t. So the confidence we displayis corrected with a per-season Platt calibration (fit only on prior seasons, frozen within a season, and clamped so it can never flip which side we picked). The displayed number is the honest one; this chart shows the raw model it’s built from.
NoPunt runs three independent logistic regression models. Each casts a vote. Unanimous (3-0) picks historically hit at a higher rate than split (2-1) decisions.
How often does the model output high-confidence picks vs close calls? A top-heavy distribution means the model is decisive; a flat one means most games look like coin flips.
Bar height = number of picks in each confidence bucket. Win rates shown below each bar. The model concentrates picks in the 55-65% range with selective high-confidence calls at higher tiers.
That’s the methodology. If something here doesn’t add up, tell us -- every pick is publicly verifiable.