Loading NFL data...
Loading NFL data...
Drive-based Bayesian ratings from EPA and points, QB and rest adjustments, a capped market blend, and an honest backtest
The NFL model produces weekly power ratings, spreads and totals for all 32 teams. The engine is a Bayesian regression refit from scratch every Tuesday on the season's play-by-play: no Elo chain, nothing carried by hand. Around it sit a starting quarterback adjustment, an offseason prior, and a capped blend toward the betting market that sets the published line, total, projected scores and team ratings. The pure and blended lines are both graded against the closing spread, and picks go into a frozen ledger at a flat one unit.
The next recommended pick on the slate, rebuilt from its frozen row. Once every game has kicked off it shows the most recently settled pick instead.
Buffalo Bills @ Las Vegas RaidersTotal
Sun, Oct 18, 1:25 PM PT · nfl-picks-v5
Pick: Under 53.5 at -105 (DraftKings), one unit. Settled loss, final Buffalo Bills 33 at Las Vegas Raiders 30 (-1.00u).
■ wins: 53 or fewer total points ■ loses
Football data comes from the open source nflverse project: play-by-play with expected points added (EPA), schedules with closing lines, depth charts and injury reports, from 2015 on. Prices come from The Odds API. Garbage time is excluded from every rating input: the lead threshold shrinks by quarter, and a whole drive is kept or dropped based on the score when it started.
Each team carries an offense and a defense rating in points per drive, plus a pace rating in drives per game, with a fitted home-field parameter (prior of two points). The model is a conjugate Gaussian ridge, a closed-form Bayesian update: the posterior mean gives the fitted ratings and the posterior covariance gives their uncertainty, with no sampling. The ratings shown on the site are these fitted ratings shifted to the week's published lines, as described under Market Blend.
The target fuses points per drive, what the scoreboard said, with EPA per drive, closer to how the team played. The two channels are weighted by their residual covariance, so the fusion weights are estimated, not hand-picked. Each fit uses only games that started before the forecast, with a calibrated recency half-life of six weeks. Projections come out as a Student-t distribution over the game margin and total.
Totals get one extra step: league scoring and pace keep a preseason prior that fades with a six-week half-life, and a linear correction fitted on 2016 through 2021 pulls extreme totals toward 45. On 2022 through 2025 that cut total error from 10.62 to 10.54 points. That is the model's own total; the published total then moves halfway toward the sportsbook total, as described under Market Blend.
Team ratings already absorb the quarterback play that happened, so the QB layer exists for one case: the projected starter differs from the quarterback baked into the rating. Every quarterback carries a value in points per game from EPA per dropback, shrunk toward replacement level by sample size and decayed with two half-lives: 1,000 dropbacks and 52 calendar weeks. The adjustment is the starter's value minus the value embedded in the team's rating window. The usual weight is 0.25; it rises to 0.50 when the quarterback with the largest share of the recent rating window is listed Out or Doubtful and a different player is expected to start. The absence weight was selected on 2016-2021 absence games and checked separately on 2022-2025 retrospective games. Starters come from dated depth charts and injury reports, with a manual override for game-day news. Historical evaluation uses each game's pre-kickoff availability; an undated prior-week chart cannot override a newer actual starter.
A rest adjustment for byes and short weeks is wired in, but calibration tunes its coefficient to zero: the market line in the blend already carries that information.
The published line is an even blend of the pure model margin and the market line. The weight is hard-capped at one half so the model can never become an echo of the market, and calibration landed on the cap. The pure line stays on the site wherever a number is labeled Pure. The market never touches the fit: the engine's ratings are estimated with no market input, and market information enters only at the output layer.
The published total and projected scores are blended the same way. The model total moves halfway toward the sportsbook total posted when the forecast was made, and the two published scores are the pair whose difference is the published line and whose sum is the published total.
Published team ratings are the fitted ratings shifted so that, for every game a team plays that week, the rating difference plus home field equals the published line exactly. Each game's gap is split evenly between its two teams, offense and defense each take half of a team's shift, and the size of the shift is stored per team. A team with no game that week keeps its fitted rating.
The Compare tab on the Ratings page follows from this. When the selected away team, home team and venue match a published game, it shows that game's published forecast: the line, the market line at forecast time and the projected score. For any other pairing or venue it shows a ratings-based line: away rating minus home rating minus home-field advantage, which is zero on a neutral field.
Spread and moneyline probabilities use a discrete margin distribution, because NFL margins pile up on three and seven and a smooth curve cannot price a push. Per-margin multipliers learned from the development seasons sit on top of each game's location and scale. Totals are priced on the plain Student-t.
Week one has no games to learn from, so the preseason prior blends two signals equally: last season's final ratings regressed halfway toward the league mean, and a rating implied by the sportsbook season win-total market, which prices offseason change that reversion cannot see. Both weights were selected on the development seasons. The prior also seeds the in-season fits, and the data takes over as games accumulate.
The Units view shows opponent-adjusted ratings for rushing and passing offense and defense, pass and run blocking, and special teams, in points per game above league average. They are there for reading a team; the engine does not consume them. The line ratings are proxies: charted pressure rate corrected for the quarterback's time to throw, and the short-area yards of each carry.
Every backtest number is walk-forward: each week was projected using only information available at the time. Hyperparameters were selected on 2016 through 2021. Seasons 2022 through 2025 were not used for selection, but I have looked at them repeatedly, so I call them retrospective validation rather than a clean holdout. The first prospective test is the 2026 season, graded live.
On 2022 through 2025 the blended line runs about a tenth of a point behind the closing spread's mean absolute error, and the pure model about four tenths behind. Beating the close consistently is rare enough that I would suspect leakage before skill, so the gap is the number I report. Interval coverage on those seasons sits at the nominal rates.
Picks come from a versioned policy, currently nfl-picks-v5, that selects at most one side per game and market across moneylines, spreads and totals. A pick needs the priced line to sit at least two points beyond the offered price's break-even line, plus positive estimated EV. An edge in points holds favorites and underdogs to the same standard.
Spreads are priced off the published margin. Moneylines start from the market line and move only 20 percent of the way toward the pure model, because on 2019 through 2025 the model added nothing to the market on who wins outright. Totals use the published total, the model total moved halfway toward the sportsbook total. All three use the spread of actual results around the priced line (12.8 points on margins, 13.3 on totals), not the engine's wider uncertainty. If fewer than five picks clear the gate in a week, the highest-edge positive-EV offers fill the slate and are recorded as floor picks.
Each pick freezes its exact line, price, book and decision time and settles on that contract: pushes return the stake and moneyline ties are void. The database rejects late insertions and edits. A game with a missing quote, a stale forecast or an unidentified starting quarterback is a No Play, never backfilled. The gate has not been tuned on live outcomes, and estimated EV does not establish a real betting advantage. Record and ROI are on the Performance page.
Season win projections simulate each remaining game from its published margin: games that already have a sportsbook line use the blended margin, and games without a line yet use the model's own margin. The 10th, 50th and 90th percentiles come from 100,000 season draws that share the engine's team-strength uncertainty across games. Ratings and starters are held fixed, so future injuries are not modeled, and the ranges have not been coverage-calibrated. Preseason ratings already use the sportsbook win totals, so differences from that market are not edges.
The awards board is a separate pipeline for MVP, Offensive and Defensive Player of the Year, the two Rookie awards, Comeback Player and Coach of the Year. Each award has its own regularized winner-choice model, trained only on earlier seasons at the same point in the year, with official winners from 2010 onward as labels. Offensive value is EPA credit split between passer and receiver; defensive value is a box-score index, not a coverage grade. Comeback Player is a sourced injury-return watchlist, because the criteria changed in 2024 and there is too little comparable history to fit.
The model does not know about injuries beyond the starting quarterback, weather, mid-season coaching changes, or motivation. Weeks one through four lean heavily on the preseason prior. The published line's accuracy partly reflects the market's; the pure line is the model alone. The picks ledger is a few weeks old, so its record is a small sample. Nothing here is betting advice.