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

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+5avg1Russell WilsonSEA · 493+4.72Ryan TannehillTEN · 278+4.13Derek CarrLV · 481+3.84Drew BreesNO · 365+3.75Kirk CousinsMIN · 421+2.86Philip RiversLAC · 571+2.67Lamar JacksonBAL · 386+2.48Matt SchaubATL · 64+1.79Patrick MahomesKC · 470+1.710Jimmy GaroppoloSF · 465+1.611Deshaun WatsonHOU · 483+1.412Matt RyanATL · 590+1.313Matthew StaffordDET · 284+1.214Devlin HodgesPIT · 144+0.915Dak PrescottDAL · 576+0.716Sam DarnoldNYJ · 414+0.717Chase DanielCHI · 64+0.618Nick FolesJAX · 110+0.619Jameis WinstonTB · 604+0.520Aaron RodgersGB · 538+0.521Teddy BridgewaterNO · 187+0.322Matt MooreKC · 88+0.023Joe FlaccoDEN · 250+0.024Drew LockDEN · 152-0.225Robert Griffin IIIBAL · 37-0.226Ryan FitzpatrickMIA · 493-0.327Colt McCoyWAS · 27-0.328Carson WentzPHI · 596-0.429Case KeenumWAS · 240-0.430AJ McCarronHOU · 33-0.531Mason RudolphPIT · 274-0.532Kyle AllenCAR · 463-0.533Kyler MurrayARI · 517-0.9

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

CPOE leaderboard for the 2019 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPosattemptsRawShrunk90% interval
1Russell WilsonSEAQB493+7.0+4.7+2.0+7.3
2Ryan TannehillTENQB278+7.7+4.1+1.0+7.3
3Derek CarrLVQB481+5.7+3.8+1.1+6.4
4Drew BreesNOQB365+6.1+3.7+0.8+6.5
5Kirk CousinsMINQB421+4.4+2.8+0.1+5.6
6Philip RiversLACQB571+3.7+2.6+0.1+5.1
7Lamar JacksonBALQB386+3.8+2.4-0.5+5.2
8Matt Schaub◦ provisionalATLQB64+7.5+1.7-2.3+5.7
9Patrick MahomesKCQB470+2.5+1.7-1.0+4.3
10Jimmy GaroppoloSFQB465+2.4+1.6-1.1+4.3
11Deshaun WatsonHOUQB483+2.0+1.4-1.3+4.0
12Matt RyanATLQB590+1.8+1.3-1.1+3.8
13Matthew StaffordDETQB284+2.1+1.2-1.9+4.3
14Devlin Hodges◦ provisionalPITQB144+2.1+0.9-2.7+4.5
15Dak PrescottDALQB576+1.0+0.7-1.8+3.2
16Sam DarnoldNYJQB414+1.0+0.7-2.0+3.5
17Chase Daniel◦ provisionalCHIQB64+2.1+0.6-3.4+4.6
18Nick Foles◦ provisionalJAXQB110+1.5+0.6-3.2+4.4
19Jameis WinstonTBQB604+0.7+0.5-1.9+3.0
20Aaron RodgersGBQB538+0.7+0.5-2.0+3.1
21Teddy Bridgewater◦ provisionalNOQB187+0.4+0.3-3.1+3.7
22Matt Moore◦ provisionalKCQB88-0.6+0.0-3.8+3.9
23Joe Flacco◦ provisionalDENQB250-0.2+0.0-3.2+3.2
24Drew Lock◦ provisionalDENQB152-0.8-0.2-3.7+3.4
25Robert Griffin III◦ provisionalBALQB37-3.2-0.2-4.4+4.0
26Ryan FitzpatrickMIAQB493-0.5-0.3-2.9+2.3
27Colt McCoy◦ provisionalWASQB27-5.4-0.3-4.6+4.0
28Carson WentzPHIQB596-0.6-0.4-2.8+2.1
29Case Keenum◦ provisionalWASQB240-1.1-0.4-3.6+2.8
30AJ McCarron◦ provisionalHOUQB33-6.2-0.5-4.7+3.7
31Mason RudolphPITQB274-1.2-0.5-3.7+2.6
32Kyle AllenCARQB463-1.0-0.5-3.2+2.1
33Jeff Driskel◦ provisionalDETQB97-2.8-0.6-4.4+3.2
34Luke Falk◦ provisionalNYJQB72-4.0-0.7-4.7+3.3
35Eli Manning◦ provisionalNYGQB141-2.6-0.8-4.4+2.8
36Josh AllenBUFQB434-1.6-0.9-3.7+1.8
37Kyler MurrayARIQB517-1.5-0.9-3.5+1.6
38Daniel JonesNYGQB447-1.9-1.2-3.9+1.6
39Marcus Mariota◦ provisionalTENQB148-3.6-1.2-4.7+2.4
40Jared GoffLAQB607-1.8-1.2-3.6+1.3
41Will Grier◦ provisionalCARQB49-9.8-1.4-5.5+2.7
42Tom BradyNEQB580-2.1-1.4-3.9+1.1
43Mitchell TrubiskyCHIQB503-2.3-1.5-4.1+1.1
44Cam Newton◦ provisionalCARQB86-6.8-1.5-5.4+2.3
45Brian Hoyer◦ provisionalINDQB64-8.7-1.6-5.6+2.5
46Ben Roethlisberger◦ provisionalPITQB62-10.2-1.8-5.8+2.2
47Dwayne Haskins◦ provisionalWASQB196-4.7-1.9-5.3+1.5
48Baker MayfieldCLEQB513-3.0-1.9-4.5+0.7
49Jacoby BrissettINDQB424-3.3-2.0-4.7+0.8
50Matt Barkley◦ provisionalBUFQB50-13.4-2.0-6.1+2.1
51Andy DaltonCINQB504-3.3-2.1-4.7+0.5
52Gardner MinshewJAXQB451-3.8-2.4-5.1+0.3
53Brandon Allen◦ provisionalDENQB77-14.3-3.1-7.1+0.8
54Josh Rosen◦ provisionalMIAQB109-12.7-3.6-7.4+0.1
55Ryan Finley◦ provisionalCINQB84-16.0-3.8-7.7+0.1
56David Blough◦ provisionalDETQB168-13.6-5.3-8.7-1.8

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