NFL · Empirical Bayes

True-Talent Leaderboards

A raw single-season rate is a noisy guess at a player’s real ability, and the noise is worst for the smallest samples — so a naïve leaderboard is topped by whoever got lucky in the fewest tries. This one shrinks every rate toward its position-group prior by how much the sample can be trusted, and shows a 90% credible interval instead of a point. Toggle raw vs. shrunk to watch the flukes fall back to the pack.

CPOE · 2025

Completion % over expected (accounts for depth & situation).

Beats raw by
17.9%
lower out-of-sample error
RMSE raw → shrunk
4.9 → 4.0
odd vs. even weeks
Split-half reliability
0.35
how repeatable the raw stat is
Stabilizes at
255
attempts to trust the number
shrunkrawthe shrink90% CI
-5+0+5+10avg1Drake MayeNE · 472+7.22Brock PurdySF · 272+4.13Jordan LoveGB · 411+3.74Sam DarnoldSEA · 451+3.65Malik WillisGB · 35+3.26Tyler HuntleyBAL · 65+3.27Joe BurrowCIN · 248+2.68Josh AllenBUF · 445+2.59Jalen HurtsPHI · 427+2.210Mac JonesSF · 278+2.211Marcus MariotaWAS · 210+1.812Dak PrescottDAL · 584+1.713Daniel JonesIND · 373+1.614Mitchell TrubiskyBUF · 34+1.515Mason RudolphPIT · 50+1.516Spencer RattlerNO · 245+1.517Tua TagovailoaMIA · 369+1.518Jared GoffDET · 546+1.419Andy DaltonCAR · 36+1.420Matthew StaffordLA · 580+1.321Jacoby BrissettARI · 457+1.322Justin HerbertLAC · 494+1.323Lamar JacksonBAL · 290+1.224Tyler ShoughNO · 315+1.225Josh JohnsonWAS · 48+0.926Bryce YoungCAR · 444+0.927Carson WentzMIN · 161+0.828Tanner McKeePHI · 37+0.829Quinn EwersMIA · 82+0.730Geno SmithLV · 428+0.7

Each row is a player: the solid dot is the shrunk estimate, the hollow dot the raw rate, joined by the red pull of regression; the grey bar is the 90% credible interval. A hollow shrunk dot means the sample is below the stabilization line — the number is mostly the position prior. Switch to Raw rank and watch the small-sample names climb.

CPOE · 2025 · full board

CPOE leaderboard for the 2025 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPosattemptsRawShrunk90% interval
1Drake MayeNEQB472+10.8+7.2+4.6+9.9
2Brock PurdySFQB272+7.2+4.1+0.9+7.2
3Jordan LoveGBQB411+5.5+3.7+0.9+6.4
4Sam DarnoldSEAQB451+5.2+3.6+0.9+6.3
5Malik Willis◦ provisionalGBQB35+22.0+3.2-1.0+7.4
6Tyler Huntley◦ provisionalBALQB65+12.9+3.2-0.8+7.2
7Joe Burrow◦ provisionalCINQB248+4.7+2.6-0.6+5.8
8Josh AllenBUFQB445+3.5+2.5-0.2+5.2
9Jalen HurtsPHIQB427+3.2+2.2-0.5+5.0
10Mac JonesSFQB278+3.7+2.2-0.9+5.3
11Marcus Mariota◦ provisionalWASQB210+3.2+1.8-1.5+5.1
12Dak PrescottDALQB584+2.2+1.7-0.8+4.2
13Daniel JonesINDQB373+2.3+1.6-1.2+4.5
14Mitchell Trubisky◦ provisionalBUFQB34+7.8+1.5-2.7+5.7
15Mason Rudolph◦ provisionalPITQB50+5.8+1.5-2.6+5.6
16Spencer Rattler◦ provisionalNOQB245+2.4+1.5-1.7+4.7
17Tua TagovailoaMIAQB369+2.0+1.5-1.4+4.3
18Jared GoffDETQB546+1.8+1.4-1.1+3.9
19Andy Dalton◦ provisionalCARQB36+6.6+1.4-2.8+5.6
20Matthew StaffordLAQB580+1.6+1.3-1.2+3.8
21Jacoby BrissettARIQB457+1.6+1.3-1.4+4.0
22Justin HerbertLACQB494+1.6+1.3-1.3+3.9
23Lamar JacksonBALQB290+1.8+1.2-1.8+4.3
24Tyler ShoughNOQB315+1.6+1.2-1.8+4.2
25Josh Johnson◦ provisionalWASQB48+2.0+0.9-3.2+5.0
26Bryce YoungCARQB444+1.0+0.9-1.8+3.6
27Carson Wentz◦ provisionalMINQB161+1.1+0.8-2.7+4.3
28Tanner McKee◦ provisionalPHIQB37+1.4+0.8-3.4+4.9
29Quinn Ewers◦ provisionalMIAQB82+1.0+0.7-3.2+4.6
30Geno SmithLVQB428+0.7+0.7-2.0+3.4
31Jake Browning◦ provisionalCINQB120+0.4+0.6-3.1+4.3
32C.J. StroudHOUQB401+0.4+0.5-2.3+3.3
33Patrick MahomesKCQB473+0.3+0.5-2.2+3.1
34Aaron RodgersPITQB472+0.0+0.3-2.4+2.9
35Cooper Rush◦ provisionalBALQB51-1.9+0.2-3.9+4.3
36Kyler Murray◦ provisionalARIQB157-0.5+0.2-3.3+3.7
37Jaxson DartNYGQB329-0.2+0.2-2.8+3.1
38Tyrod Taylor◦ provisionalNYJQB127-0.9+0.1-3.5+3.8
39Russell Wilson◦ provisionalNYGQB109-1.5+0.0-3.7+3.8
40Jameis Winston◦ provisionalNYGQB63-3.1-0.1-4.1+3.9
41Chris Oladokun◦ provisionalKCQB52-3.9-0.1-4.2+4.0
42Max Brosmer◦ provisionalMINQB68-3.5-0.2-4.2+3.8
43Riley Leonard◦ provisionalINDQB64-3.9-0.2-4.3+3.8
44Kenny Pickett◦ provisionalLVQB44-6.5-0.4-4.5+3.7
45Justin Fields◦ provisionalNYJQB194-1.9-0.4-3.8+2.9
46Philip Rivers◦ provisionalINDQB90-3.7-0.5-4.3+3.4
47Bo NixDENQB583-1.2-0.6-3.1+1.8
48Jayden Daniels◦ provisionalWASQB174-2.7-0.7-4.2+2.7
49Brandon Allen◦ provisionalTENQB30-13.1-0.8-5.0+3.5
50Trey Lance◦ provisionalLACQB50-9.8-1.1-5.1+3.0
51Kirk CousinsATLQB255-2.8-1.1-4.2+2.1
52Trevor LawrenceJAXQB544-1.9-1.1-3.6+1.5
53Baker MayfieldTBQB527-2.1-1.2-3.8+1.3
54Joe FlaccoCINQB386-2.8-1.4-4.3+1.4
55Michael Penix Jr.ATLQB264-3.6-1.5-4.7+1.6
56Cam WardTENQB499-2.9-1.7-4.3+0.9
57Shedeur Sanders◦ provisionalCLEQB195-5.0-1.8-5.2+1.6
58Davis Mills◦ provisionalHOUQB152-6.6-2.1-5.6+1.5
59Caleb WilliamsCHIQB526-3.5-2.1-4.7+0.4
60J.J. McCarthy◦ provisionalMINQB238-5.7-2.4-5.6+0.8
61Dillon Gabriel◦ provisionalCLEQB181-7.5-2.7-6.2+0.7
62Brady Cook◦ provisionalNYJQB148-10.0-3.3-6.8+0.3

How the shrinkage works

Two estimators

Rate stats (completion %, success rate, catch rate) use a beta-binomial model: a Beta(α, β) prior fit by marginal likelihood over each position group, then a Beta posterior per player. Per-play averages (EPA, CPOE, yards) use a normal-normal model with DerSimonian–Laird between-player variance. Both pull each player toward their group by exactly how thin their sample is.

Does it help? & the fine print

The trust panel’s numbers come from a leakage-free odd/even-week holdout: fit on odd weeks, predict even-week raw. Shrinkage lowers out-of-sample error for every stat. Priors are fit per season and per position (WR and TE separately), so a TE’s baseline isn’t a skill. Regular season only, 2016–2025. Rushing and receiving efficiency are heavily scheme-driven — read the wide bands as the honesty they are.

Source: nflverse play-by-play. Counted and computed deterministically — never modeled by a language model. Built by build_nfl_leaderboards.py (byte-reproducible).