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

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
271
attempts to trust the number
shrunkrawthe shrink90% CI
-5+0+5avg1Aaron RodgersGB · 501+5.12Russell WilsonSEA · 532+5.03Josh AllenBUF · 548+4.84Deshaun WatsonHOU · 523+4.75Kirk CousinsMIN · 485+3.46Teddy BridgewaterCAR · 469+3.07Gardner MinshewJAX · 309+2.98Tom BradyTB · 590+2.89Kyle AllenWAS · 79+2.810Patrick MahomesKC · 570+2.311Ryan FitzpatrickMIA · 264+2.312Baker MayfieldCLE · 453+2.213Ryan TannehillTEN · 464+2.114Derek CarrLV · 491+2.115Brett RypienDEN · 37+2.116Kyler MurrayARI · 528+1.917Joe BurrowCIN · 392+1.818Chad HenneKC · 37+1.619Nick FolesCHI · 299+1.520Drew BreesNO · 379+1.521Matt RyanATL · 603+1.222Mitchell TrubiskyCHI · 293+1.223Lamar JacksonBAL · 363+1.124Jared GoffLA · 525+1.025Chase DanielDET · 41+0.926Philip RiversIND · 527+0.927Jimmy GaroppoloSF · 138+0.928Marcus MariotaLV · 26+0.929Mason RudolphPIT · 42+0.930Tyrod TaylorLAC · 29+0.931Dak PrescottDAL · 218+0.832Justin HerbertLAC · 580+0.433Andy DaltonDAL · 318+0.434Alex SmithWAS · 238+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 · 2020 · full board

CPOE leaderboard for the 2020 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPosattemptsRawShrunk90% interval
1Aaron RodgersGBQB501+7.2+5.1+2.5+7.7
2Russell WilsonSEAQB532+6.8+5.0+2.4+7.5
3Josh AllenBUFQB548+6.6+4.8+2.3+7.3
4Deshaun WatsonHOUQB523+6.5+4.7+2.2+7.3
5Kirk CousinsMINQB485+4.6+3.4+0.8+6.0
6Teddy BridgewaterCARQB469+4.0+3.0+0.4+5.6
7Gardner MinshewJAXQB309+4.3+2.9-0.1+5.8
8Tom BradyTBQB590+3.6+2.8+0.4+5.3
9Kyle Allen◦ provisionalWASQB79+8.0+2.8-1.0+6.6
10Patrick MahomesKCQB570+2.8+2.3-0.1+4.8
11Ryan Fitzpatrick◦ provisionalMIAQB264+3.4+2.3-0.8+5.4
12Baker MayfieldCLEQB453+2.8+2.2-0.4+4.9
13Ryan TannehillTENQB464+2.7+2.1-0.5+4.8
14Derek CarrLVQB491+2.6+2.1-0.5+4.7
15Brett Rypien◦ provisionalDENQB37+8.2+2.1-2.0+6.2
16Kyler MurrayARIQB528+2.2+1.9-0.6+4.4
17Joe BurrowCINQB392+2.1+1.8-1.0+4.5
18Chad Henne◦ provisionalKCQB37+4.4+1.6-2.4+5.7
19Nick FolesCHIQB299+1.7+1.5-1.5+4.5
20Drew BreesNOQB379+1.6+1.5-1.4+4.3
21Matt RyanATLQB603+1.2+1.2-1.2+3.7
22Mitchell TrubiskyCHIQB293+1.1+1.2-1.8+4.2
23Lamar JacksonBALQB363+1.0+1.1-1.7+4.0
24Jared GoffLAQB525+0.9+1.0-1.5+3.6
25Chase Daniel◦ provisionalDETQB41-1.1+0.9-3.1+5.0
26Philip RiversINDQB527+0.7+0.9-1.6+3.4
27Jimmy Garoppolo◦ provisionalSFQB138+0.2+0.9-2.6+4.4
28Marcus Mariota◦ provisionalLVQB26-2.7+0.9-3.2+5.1
29Mason Rudolph◦ provisionalPITQB42-1.3+0.9-3.1+5.0
30Tyrod Taylor◦ provisionalLACQB29-2.5+0.9-3.2+5.0
31Dak Prescott◦ provisionalDALQB218+0.3+0.8-2.4+4.1
32Colt McCoy◦ provisionalNYGQB66-1.4+0.7-3.2+4.6
33C.J. Beathard◦ provisionalSFQB97-0.9+0.7-3.1+4.4
34Ryan Finley◦ provisionalCINQB32-6.0+0.5-3.6+4.6
35Justin HerbertLACQB580+0.0+0.4-2.0+2.9
36John Wolford◦ provisionalLAQB37-5.8+0.4-3.7+4.5
37Andy DaltonDALQB318-0.4+0.4-2.6+3.3
38Garrett Gilbert◦ provisionalDALQB37-6.4+0.3-3.8+4.4
39Alex Smith◦ provisionalWASQB238-0.8+0.3-2.9+3.4
40PJ Walker◦ provisionalCARQB56-5.1+0.2-3.8+4.1
41Joe Flacco◦ provisionalNYJQB124-2.3+0.1-3.5+3.7
42Tua TagovailoaMIAQB281-1.2-0.0-3.0+3.0
43Cam NewtonNEQB355-1.0-0.0-2.9+2.8
44Jeff Driskel◦ provisionalDENQB62-5.9-0.1-4.0+3.8
45Ben DiNucci◦ provisionalDALQB41-9.9-0.2-4.3+3.8
46Matthew StaffordDETQB510-1.0-0.2-2.8+2.3
47Jarrett Stidham◦ provisionalNEQB38-11.4-0.3-4.4+3.8
48Ben RoethlisbergerPITQB606-1.1-0.3-2.8+2.1
49Brandon Allen◦ provisionalCINQB139-3.6-0.4-3.9+3.1
50Sam DarnoldNYJQB338-1.9-0.5-3.4+2.4
51Mike Glennon◦ provisionalJAXQB171-3.7-0.7-4.1+2.7
52Nick MullensSFQB319-2.6-0.8-3.8+2.1
53Daniel JonesNYGQB432-2.2-0.9-3.6+1.8
54Carson WentzPHIQB417-3.5-1.6-4.4+1.1
55Dwayne Haskins◦ provisionalWASQB234-5.5-1.9-5.1+1.3
56Jalen Hurts◦ provisionalPHIQB134-8.3-1.9-5.5+1.6
57Jake Luton◦ provisionalJAXQB105-10.5-2.0-5.7+1.7
58Drew LockDENQB426-5.5-2.9-5.6-0.2

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