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

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
229
attempts to trust the number
shrunkrawthe shrink90% CI
-5+0+5avg1Matt RyanATL · 527+5.02Kirk CousinsWAS · 592+3.83Ryan TannehillMIA · 381+3.64Sam BradfordMIN · 549+3.45Russell WilsonSEA · 528+3.36Drew BreesNO · 661+3.37Dak PrescottDAL · 455+3.08Aaron RodgersGB · 604+2.79Tom BradyNE · 428+2.610Cody KesslerCLE · 191+2.511Andy DaltonCIN · 542+2.212Brian HoyerCHI · 194+1.913Tyrod TaylorBUF · 422+1.714Nick FolesKC · 55+1.615Ben RoethlisbergerPIT · 504+1.516Alex SmithKC · 480+1.517Jameis WinstonTB · 560+1.418Derek AndersonCAR · 53+1.319Marcus MariotaTEN · 439+1.120Jimmy GaroppoloNE · 63+1.121Andrew LuckIND · 533+1.022Scott TolzienIND · 37+0.923Matt MooreMIA · 85+0.924Matt CasselTEN · 48+0.725Landry JonesPIT · 85+0.526Carson PalmerARI · 589+0.527Tom SavageHOU · 73+0.428Philip RiversLAC · 562+0.329Matthew StaffordDET · 580+0.330Derek CarrLV · 553+0.231Joe FlaccoBAL · 658+0.0

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

CPOE leaderboard for the 2016 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPosattemptsRawShrunk90% interval
1Matt RyanATLQB527+6.9+5.0+2.3+7.7
2Kirk CousinsWASQB592+5.0+3.8+1.2+6.3
3Ryan TannehillMIAQB381+5.3+3.6+0.6+6.5
4Sam BradfordMINQB549+4.5+3.4+0.7+6.0
5Russell WilsonSEAQB528+4.5+3.3+0.7+6.0
6Drew BreesNOQB661+4.2+3.3+0.8+5.7
7Dak PrescottDALQB455+4.2+3.0+0.2+5.8
8Aaron RodgersGBQB604+3.5+2.7+0.2+5.3
9Tom BradyNEQB428+3.7+2.6-0.3+5.5
10Cody Kessler◦ provisionalCLEQB191+4.7+2.5-1.1+6.1
11Andy DaltonCINQB542+2.8+2.2-0.5+4.8
12Brian Hoyer◦ provisionalCHIQB194+3.4+1.9-1.7+5.5
13Tyrod TaylorBUFQB422+2.2+1.7-1.2+4.5
14Nick Foles◦ provisionalKCQB55+5.5+1.6-2.8+5.9
15Ben RoethlisbergerPITQB504+1.9+1.5-1.2+4.2
16Alex SmithKCQB480+1.9+1.5-1.2+4.3
17Jameis WinstonTBQB560+1.7+1.4-1.3+4.0
18Derek Anderson◦ provisionalCARQB53+4.4+1.3-3.0+5.7
19Marcus MariotaTENQB439+1.4+1.1-1.7+4.0
20Jimmy Garoppolo◦ provisionalNEQB63+2.7+1.1-3.2+5.4
21Andrew LuckINDQB533+1.2+1.0-1.6+3.7
22Scott Tolzien◦ provisionalINDQB37+2.5+0.9-3.6+5.4
23Matt Moore◦ provisionalMIAQB85+1.6+0.9-3.3+5.0
24Matt Cassel◦ provisionalTENQB48+0.9+0.7-3.7+5.1
25Landry Jones◦ provisionalPITQB85+0.2+0.5-3.6+4.6
26Carson PalmerARIQB589+0.4+0.5-2.1+3.0
27Tom Savage◦ provisionalHOUQB73-0.5+0.4-3.9+4.6
28Philip RiversLACQB562+0.2+0.3-2.3+2.9
29Matthew StaffordDETQB580+0.1+0.3-2.3+2.8
30Derek CarrLVQB553-0.0+0.2-2.5+2.8
31Paxton Lynch◦ provisionalDENQB82-1.2+0.1-4.0+4.3
32Joe FlaccoBALQB658-0.2+0.0-2.4+2.5
33Jacoby Brissett◦ provisionalNEQB55-2.8-0.0-4.4+4.3
34Matt Barkley◦ provisionalCHIQB215-0.9-0.1-3.6+3.4
35Trevor SiemianDENQB472-0.5-0.1-2.9+2.6
36Shaun Hill◦ provisionalMINQB35-5.4-0.2-4.7+4.3
37Carson WentzPHIQB600-0.9-0.5-3.0+2.1
38Jay Cutler◦ provisionalCHIQB134-2.4-0.5-4.3+3.4
39Robert Griffin III◦ provisionalCLEQB146-2.7-0.7-4.4+3.1
40Eli ManningNYGQB597-1.6-1.0-3.6+1.6
41EJ Manuel◦ provisionalBUFQB26-16.5-1.1-5.7+3.5
42Case KeenumLAQB319-3.7-1.9-5.0+1.2
43Bryce Petty◦ provisionalNYJQB131-6.5-2.0-5.8+1.9
44Drew Stanton◦ provisionalARIQB45-15.9-2.1-6.5+2.4
45Josh McCown◦ provisionalCLEQB164-6.2-2.2-5.9+1.5
46Brock OsweilerHOUQB504-3.7-2.3-5.1+0.4
47Blaine Gabbert◦ provisionalSFQB159-6.7-2.4-6.1+1.4
48Ryan FitzpatrickNYJQB401-4.1-2.4-5.3+0.5
49Colin KaepernickSFQB327-4.7-2.5-5.6+0.6
50Blake BortlesJAXQB622-4.5-3.1-5.6-0.6
51Cam NewtonCARQB500-5.5-3.6-6.3-0.9
52Jared Goff◦ provisionalLAQB202-10.9-4.8-8.3-1.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).