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 · 2017

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
230
attempts to trust the number
shrunkrawthe shrink90% CI
-5+0+5avg1Josh McCownNYJ · 386+3.42Alex SmithKC · 491+3.43Drew BreesNO · 529+3.24Jameis WinstonTB · 435+3.25Russell WilsonSEA · 524+3.26Tom BradyNE · 578+2.67Jimmy GaroppoloSF · 176+2.68Case KeenumMIN · 475+2.49Ben RoethlisbergerPIT · 556+2.010Matt RyanATL · 516+2.011Sam BradfordMIN · 43+1.612Landry JonesPIT · 28+1.613Deshaun WatsonHOU · 202+1.014Tyrod TaylorBUF · 414+0.815Philip RiversLAC · 565+0.716Mike GlennonCHI · 139+0.617Kirk CousinsWAS · 534+0.618Paxton LynchDEN · 45+0.619Marcus MariotaTEN · 443+0.420Matthew StaffordDET · 560+0.421Aaron RodgersGB · 234+0.422David FalesMIA · 42+0.423Patrick MahomesKC · 34+0.324Carson WentzPHI · 436+0.225Kevin HoganCLE · 74+0.026Carson PalmerARI · 266-0.127Matt MooreMIA · 123-0.128Dak PrescottDAL · 482-0.229Derek CarrLV · 510-0.230Jay CutlerMIA · 420-0.3

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 · 2017 · full board

CPOE leaderboard for the 2017 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPosattemptsRawShrunk90% interval
1Josh McCownNYJQB386+5.5+3.4+0.5+6.4
2Alex SmithKCQB491+5.0+3.4+0.6+6.1
3Drew BreesNOQB529+4.7+3.2+0.6+5.9
4Jameis WinstonTBQB435+4.9+3.2+0.3+6.0
5Russell WilsonSEAQB524+4.6+3.2+0.5+5.9
6Tom BradyNEQB578+3.7+2.6+0.1+5.2
7Jimmy Garoppolo◦ provisionalSFQB176+6.0+2.6-1.1+6.2
8Case KeenumMINQB475+3.6+2.4-0.4+5.1
9Ben RoethlisbergerPITQB556+2.9+2.0-0.6+4.7
10Matt RyanATLQB516+3.0+2.0-0.7+4.7
11Sam Bradford◦ provisionalMINQB43+10.9+1.6-2.8+6.1
12Landry Jones◦ provisionalPITQB28+15.3+1.6-3.0+6.1
13Deshaun Watson◦ provisionalHOUQB202+2.3+1.0-2.5+4.5
14Tyrod TaylorBUFQB414+1.3+0.8-2.1+3.7
15Philip RiversLACQB565+1.0+0.7-1.9+3.3
16Mike Glennon◦ provisionalCHIQB139+1.7+0.6-3.2+4.4
17Kirk CousinsWASQB534+0.8+0.6-2.1+3.2
18Paxton Lynch◦ provisionalDENQB45+3.8+0.6-3.9+5.0
19Marcus MariotaTENQB443+0.7+0.4-2.4+3.3
20Matthew StaffordDETQB560+0.6+0.4-2.2+3.0
21Aaron RodgersGBQB234+0.8+0.4-3.0+3.8
22David Fales◦ provisionalMIAQB42+2.8+0.4-4.1+4.8
23Patrick Mahomes◦ provisionalKCQB34+3.1+0.3-4.2+4.8
24Carson WentzPHIQB436+0.4+0.2-2.6+3.1
25Kevin Hogan◦ provisionalCLEQB74+0.4+0.0-4.2+4.2
26Carson PalmerARIQB266-0.0-0.1-3.4+3.2
27Matt Moore◦ provisionalMIAQB123-0.1-0.1-4.0+3.8
28Dak PrescottDALQB482-0.2-0.2-2.9+2.6
29Derek CarrLVQB510-0.3-0.2-2.9+2.5
30Jay CutlerMIAQB420-0.4-0.3-3.2+2.6
31Matt Cassel◦ provisionalTENQB41-1.4-0.3-4.7+4.2
32EJ Manuel◦ provisionalLVQB42-2.8-0.5-4.9+3.9
33Jared GoffLAQB469-0.9-0.6-3.4+2.1
34Ryan Fitzpatrick◦ provisionalTBQB161-1.6-0.7-4.4+3.0
35Geno Smith◦ provisionalNYGQB35-5.8-0.8-5.4+3.7
36Joe FlaccoBALQB543-1.2-0.9-3.5+1.8
37Trevor SiemianDENQB340-1.5-0.9-4.0+2.1
38Sean Mannion◦ provisionalLAQB37-6.6-1.0-5.5+3.5
39Nick Foles◦ provisionalPHIQB98-3.2-1.0-5.1+3.0
40Andy DaltonCINQB474-1.7-1.2-3.9+1.6
41Cam NewtonCARQB483-2.3-1.6-4.3+1.1
42Brett HundleyGBQB312-3.0-1.8-4.9+1.4
43Nathan Peterman◦ provisionalBUFQB47-11.0-1.9-6.3+2.5
44Blake BortlesJAXQB513-2.9-2.0-4.7+0.7
45Tom Savage◦ provisionalHOUQB220-4.2-2.1-5.5+1.4
46Eli ManningNYGQB567-3.6-2.6-5.2-0.0
47Brock Osweiler◦ provisionalDENQB166-6.2-2.6-6.3+1.0
48Jacoby BrissettINDQB454-4.5-3.0-5.8-0.2
49Brian Hoyer◦ provisionalNEQB208-6.3-3.0-6.5+0.5
50T.J. Yates◦ provisionalHOUQB93-10.4-3.0-7.1+1.0
51Blaine Gabbert◦ provisionalARIQB169-7.4-3.2-6.9+0.5
52Mitchell TrubiskyCHIQB326-5.4-3.2-6.3-0.1
53Drew Stanton◦ provisionalARIQB156-8.3-3.4-7.1+0.3
54C.J. Beathard◦ provisionalSFQB221-7.1-3.5-7.0-0.1
55DeShone KizerCLEQB470-6.3-4.3-7.1-1.5
56Bryce Petty◦ provisionalNYJQB109-14.4-4.7-8.7-0.7

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).