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.

EPA per target · 2024

Mean EPA per target, shrunk within position.

Beats raw by
24.4%
lower out-of-sample error
RMSE raw → shrunk
0.38 → 0.29
odd vs. even weeks
Split-half reliability
0.13
how repeatable the raw stat is
Stabilizes at
126
targets to trust the number
shrunkrawthe shrink90% CI
-0.20.00.20.40.6WR avg1Amon-Ra St. BrownDET · 141+0.482Terry McLaurinWAS · 118+0.423A.J. BrownPHI · 97+0.424DeVonta SmithPHI · 90+0.415Ladd McConkeyLAC · 113+0.416Rashod BatemanBAL · 72+0.397Adam ThielenCAR · 62+0.388Tee HigginsCIN · 110+0.379Alec PierceIND · 69+0.3710Devaughn VeleDEN · 55+0.3711Ja'Marr ChaseCIN · 175+0.3612Puka NacuaLA · 107+0.3613Jayden ReedGB · 76+0.3614Chris Godwin Jr.TB · 62+0.3615Jalen CokerCAR · 46+0.3516Justin JeffersonMIN · 154+0.3417Jaylen WaddleMIA · 85+0.3418Khalil ShakirBUF · 100+0.3419Jalen NailorMIN · 42+0.3320Nico CollinsHOU · 99+0.3321Allen LazardNYJ · 61+0.3322Brian Thomas Jr.JAX · 135+0.3323Darnell MooneyATL · 106+0.3324Tylan WallaceBAL · 12+0.3225Justin WatsonKC · 32+0.3226Jameson WilliamsDET · 91+0.3227Mack HollinsBUF · 50+0.3228Zay FlowersBAL · 117+0.3129Jauan JenningsSF · 113+0.3130Jordan WhittingtonLA · 28+0.3131Rashee RiceKC · 29+0.3132Keon ColemanBUF · 58+0.3133Kalif RaymondDET · 22+0.3034Tim PatrickDET · 45+0.3035KhaDarel HodgeATL · 12+0.2936Malik HeathGB · 13+0.29

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.

EPA per target · 2024 · full board

EPA per target leaderboard for the 2024 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Amon-Ra St. BrownDETWR141+0.68+0.48+0.31+0.65
2Terry McLaurin◦ provisionalWASWR118+0.60+0.42+0.25+0.59
3A.J. Brown◦ provisionalPHIWR97+0.64+0.42+0.24+0.60
4DeVonta Smith◦ provisionalPHIWR90+0.63+0.41+0.23+0.59
5Ladd McConkey◦ provisionalLACWR113+0.58+0.41+0.23+0.58
6Rashod Bateman◦ provisionalBALWR72+0.62+0.39+0.19+0.58
7Adam Thielen◦ provisionalCARWR62+0.65+0.38+0.19+0.58
8Tee Higgins◦ provisionalCINWR110+0.51+0.37+0.20+0.55
9Alec Pierce◦ provisionalINDWR69+0.58+0.37+0.18+0.56
10Devaughn Vele◦ provisionalDENWR55+0.64+0.37+0.17+0.57
11Ja'Marr ChaseCINWR175+0.44+0.36+0.21+0.52
12Puka Nacua◦ provisionalLAWR107+0.49+0.36+0.18+0.54
13Jayden Reed◦ provisionalGBWR76+0.54+0.36+0.17+0.55
14Chris Godwin Jr.◦ provisionalTBWR62+0.57+0.36+0.16+0.55
15Jalen Coker◦ provisionalCARWR46+0.63+0.35+0.15+0.56
16Justin JeffersonMINWR154+0.42+0.34+0.18+0.50
17Jaylen Waddle◦ provisionalMIAWR85+0.47+0.34+0.15+0.53
18Khalil Shakir◦ provisionalBUFWR100+0.44+0.34+0.16+0.52
19Jalen Nailor◦ provisionalMINWR42+0.58+0.33+0.13+0.54
20Nico Collins◦ provisionalHOUWR99+0.43+0.33+0.15+0.51
21Allen Lazard◦ provisionalNYJWR61+0.49+0.33+0.13+0.53
22Brian Thomas Jr.JAXWR135+0.40+0.33+0.16+0.50
23Darnell Mooney◦ provisionalATLWR106+0.41+0.33+0.15+0.50
24Tylan Wallace◦ provisionalBALWR12+1.06+0.32+0.09+0.55
25Justin Watson◦ provisionalKCWR32+0.60+0.32+0.11+0.54
26Jameson Williams◦ provisionalDETWR91+0.41+0.32+0.14+0.50
27Mack Hollins◦ provisionalBUFWR50+0.49+0.32+0.11+0.52
28Zay Flowers◦ provisionalBALWR117+0.38+0.31+0.14+0.49
29Jauan Jennings◦ provisionalSFWR113+0.38+0.31+0.14+0.49
30Jordan Whittington◦ provisionalLAWR28+0.59+0.31+0.09+0.53
31Rashee Rice◦ provisionalKCWR29+0.57+0.31+0.09+0.53
32Keon Coleman◦ provisionalBUFWR58+0.44+0.31+0.11+0.51
33Romeo Doubs◦ provisionalGBWR73+0.41+0.31+0.12+0.50
34Quentin Johnston◦ provisionalLACWR91+0.38+0.31+0.12+0.49
35Josh Palmer◦ provisionalLACWR67+0.41+0.31+0.11+0.50
36Kalif Raymond◦ provisionalDETWR22+0.60+0.30+0.08+0.53
37Jaxon Smith-NjigbaSEAWR138+0.35+0.30+0.14+0.47
38Calvin Austin III◦ provisionalPITWR58+0.42+0.30+0.10+0.50
39Marvin Mims Jr.◦ provisionalDENWR53+0.42+0.30+0.10+0.50
40Tim Patrick◦ provisionalDETWR45+0.44+0.30+0.09+0.51
41Olamide Zaccheaus◦ provisionalWASWR64+0.39+0.30+0.10+0.49
42Andrei Iosivas◦ provisionalCINWR61+0.39+0.30+0.10+0.50
43Mike Evans◦ provisionalTBWR110+0.35+0.30+0.12+0.47
44Jordan Addison◦ provisionalMINWR100+0.35+0.30+0.12+0.48
45KhaDarel Hodge◦ provisionalATLWR12+0.69+0.29+0.06+0.52
46Malik Heath◦ provisionalGBWR13+0.64+0.29+0.06+0.52
47Mike Williams◦ provisionalPITWR35+0.42+0.29+0.07+0.50
48Christian Watson◦ provisionalGBWR54+0.37+0.29+0.08+0.49
49Jalen Tolbert◦ provisionalDALWR79+0.32+0.28+0.09+0.47
50Kayshon Boutte◦ provisionalNEWR69+0.30+0.27+0.07+0.46
51Tutu Atwell◦ provisionalLAWR62+0.30+0.27+0.07+0.47
52Josh Reynolds◦ provisionalJAXWR24+0.35+0.27+0.05+0.49
53Sterling Shepard◦ provisionalTBWR52+0.30+0.27+0.06+0.47
54Courtland SuttonDENWR135+0.28+0.26+0.10+0.43
55Stefon Diggs◦ provisionalHOUWR64+0.28+0.26+0.07+0.46
56George Pickens◦ provisionalPITWR103+0.27+0.26+0.08+0.44
57Malik NabersNYGWR172+0.27+0.26+0.10+0.42
58Derius Davis◦ provisionalLACWR17+0.32+0.26+0.03+0.49
59Tank Dell◦ provisionalHOUWR81+0.27+0.26+0.07+0.45
60Jerry JeudyCLEWR148+0.26+0.26+0.09+0.42
61Brandon Aiyuk◦ provisionalSFWR47+0.27+0.26+0.05+0.46
62Mecole Hardman◦ provisionalKCWR14+0.31+0.26+0.03+0.49
63Marquise Brown◦ provisionalKCWR15+0.28+0.25+0.03+0.48
64Trey Palmer◦ provisionalTBWR22+0.27+0.25+0.03+0.48
65Parker Washington◦ provisionalJAXWR53+0.25+0.25+0.05+0.45
66Jakobi MeyersLVWR130+0.25+0.25+0.08+0.42
67Nelson Agholor◦ provisionalBALWR29+0.24+0.25+0.03+0.47
68Ryan Miller◦ provisionalTBWR20+0.24+0.25+0.03+0.47
69Bub Means◦ provisionalNOWR15+0.22+0.25+0.02+0.48
70Devin Duvernay◦ provisionalJAXWR16+0.21+0.25+0.02+0.47
71DeAndre Hopkins◦ provisionalKCWR80+0.24+0.25+0.06+0.44
72Jake Bobo◦ provisionalSEAWR18+0.21+0.25+0.02+0.47
73Marquez Valdes-Scantling◦ provisionalNOWR44+0.23+0.25+0.04+0.45
74DeMario Douglas◦ provisionalNEWR87+0.24+0.25+0.06+0.43
75Josh Downs◦ provisionalINDWR107+0.24+0.25+0.07+0.42
76Marvin Harrison Jr.◦ provisionalARIWR116+0.24+0.24+0.07+0.42
77Calvin Ridley◦ provisionalTENWR120+0.23+0.24+0.07+0.42
78Jamison Crowder◦ provisionalWASWR13+0.16+0.24+0.01+0.47
79Kendrick Bourne◦ provisionalNEWR38+0.21+0.24+0.03+0.45
80Simi Fehoko◦ provisionalLACWR16+0.17+0.24+0.01+0.47
81Noah Brown◦ provisionalWASWR56+0.21+0.24+0.04+0.44
82Drake LondonATLWR159+0.23+0.24+0.08+0.40
83Malik Washington◦ provisionalMIAWR36+0.20+0.24+0.03+0.45
84Nick Westbrook-Ikhine◦ provisionalTENWR60+0.21+0.24+0.04+0.44
85Tyreek Hill◦ provisionalMIAWR123+0.22+0.24+0.06+0.41
86DK Metcalf◦ provisionalSEAWR109+0.21+0.23+0.06+0.41
87Darius Slayton◦ provisionalNYGWR72+0.20+0.23+0.04+0.43
88Luke McCaffrey◦ provisionalWASWR25+0.13+0.23+0.01+0.45
89Christian Kirk◦ provisionalJAXWR47+0.18+0.23+0.03+0.44
90Kevin Austin Jr.◦ provisionalNOWR22+0.11+0.23+0.01+0.45
91KaVontae Turpin◦ provisionalDALWR52+0.18+0.23+0.03+0.43
92Jalen McMillan◦ provisionalTBWR58+0.17+0.23+0.03+0.43
93Xavier Worthy◦ provisionalKCWR99+0.20+0.23+0.05+0.41
94Ricky Pearsall◦ provisionalSFWR47+0.16+0.23+0.02+0.43
95Cedrick Wilson Jr.◦ provisionalNOWR27+0.09+0.22+0.00+0.44
96Greg Dortch◦ provisionalARIWR50+0.15+0.22+0.02+0.43
97Tyler Lockett◦ provisionalSEAWR74+0.17+0.22+0.03+0.41
98David Moore◦ provisionalCARWR57+0.15+0.22+0.02+0.42
99JuJu Smith-Schuster◦ provisionalKCWR26+0.05+0.22-0.00+0.44
100Johnny Wilson◦ provisionalPHIWR15-0.08+0.22-0.01+0.44
101Chris Conley◦ provisionalSFWR12-0.16+0.22-0.02+0.45
102John Metchie III◦ provisionalHOUWR37+0.08+0.21+0.00+0.42
103Keenan Allen◦ provisionalCHIWR123+0.17+0.21+0.04+0.38
104Tre Tucker◦ provisionalLVWR81+0.15+0.21+0.02+0.40
105Michael Wilson◦ provisionalARIWR71+0.14+0.21+0.02+0.40
106Rome Odunze◦ provisionalCHIWR101+0.16+0.21+0.03+0.39
107Robert Woods◦ provisionalHOUWR30+0.03+0.21-0.01+0.43
108Demarcus Robinson◦ provisionalLAWR66+0.12+0.21+0.01+0.40
109Deebo Samuel Sr.◦ provisionalSFWR81+0.14+0.21+0.02+0.39
110Ryan Flournoy◦ provisionalDALWR14-0.20+0.21-0.02+0.43
111Van Jefferson◦ provisionalPITWR40+0.05+0.20-0.01+0.41
112Dyami Brown◦ provisionalWASWR40+0.05+0.20-0.01+0.41
113DeAndre Carter◦ provisionalCHIWR14-0.29+0.20-0.03+0.43
114Davante AdamsNYJWR142+0.15+0.20+0.03+0.36
115Chris Olave◦ provisionalNOWR44+0.03+0.19-0.01+0.40
116Garrett WilsonNYJWR154+0.15+0.19+0.03+0.36
117Jermaine Burton◦ provisionalCINWR14-0.32+0.19-0.04+0.42
118Dante Pettis◦ provisionalNOWR29-0.06+0.19-0.03+0.41
119Jahan Dotson◦ provisionalPHIWR33-0.03+0.19-0.02+0.41
120Tyler Boyd◦ provisionalTENWR58+0.05+0.19-0.01+0.39
121CeeDee LambDALWR154+0.13+0.18+0.02+0.35
122Amari Cooper◦ provisionalBUFWR85+0.08+0.18-0.00+0.37
123DJ MooreCHIWR142+0.12+0.18+0.01+0.34
124Jalen Reagor◦ provisionalLACWR12-0.61+0.18-0.05+0.41
125Ray-Ray McCloud◦ provisionalATLWR87+0.06+0.17-0.01+0.36
126Tyler Johnson◦ provisionalLAWR41-0.07+0.17-0.04+0.38
127Jalin Hyatt◦ provisionalNYGWR19-0.35+0.17-0.05+0.40
128Cedric Tillman◦ provisionalCLEWR51-0.02+0.17-0.03+0.37
129Xavier Legette◦ provisionalCARWR85+0.05+0.17-0.02+0.36
130K.J. Osborn◦ provisionalWASWR18-0.41+0.17-0.06+0.39
131Gabe Davis◦ provisionalJAXWR42-0.10+0.16-0.05+0.37
132Mike Woods◦ provisionalCLEWR17-0.53+0.16-0.07+0.38
133Cooper Kupp◦ provisionalLAWR100+0.04+0.16-0.02+0.34
134Xavier Hutchinson◦ provisionalHOUWR26-0.30+0.16-0.06+0.38
135Rashid Shaheed◦ provisionalNOWR41-0.14+0.15-0.06+0.36
136Adonai Mitchell◦ provisionalINDWR55-0.09+0.15-0.05+0.35
137Odell Beckham Jr.◦ provisionalMIAWR19-0.59+0.14-0.08+0.36
138Mason Tipton◦ provisionalNOWR26-0.40+0.14-0.08+0.36
139Michael Pittman◦ provisionalINDWR112+0.01+0.14-0.04+0.31
140Lil'Jordan Humphrey◦ provisionalDENWR45-0.19+0.13-0.07+0.34
141DJ Turner◦ provisionalLVWR29-0.39+0.13-0.09+0.35
142Curtis Samuel◦ provisionalBUFWR46-0.22+0.12-0.08+0.33
143Dontayvion Wicks◦ provisionalGBWR76-0.10+0.12-0.07+0.31
144Brandin Cooks◦ provisionalDALWR54-0.21+0.11-0.09+0.32
145Jonathan Mingo◦ provisionalDALWR42-0.32+0.11-0.10+0.32
146Jalen Brooks◦ provisionalDALWR30-0.59+0.09-0.13+0.31
147Troy Franklin◦ provisionalDENWR53-0.35+0.07-0.13+0.28
148Diontae Johnson◦ provisionalHOUWR67-0.27+0.07-0.12+0.27
149Ja'Lynn Polk◦ provisionalNEWR34-0.61+0.07-0.15+0.28
150Wan'Dale RobinsonNYGWR140-0.17+0.03-0.14+0.19
151Elijah Moore◦ provisionalCLEWR102-0.36-0.02-0.20+0.16

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