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

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
109
targets to trust the number
shrunkrawthe shrink90% CI
-0.20.00.20.40.60.8WR avg1Tyler LockettSEA · 71+0.572Tyler BoydCIN · 108+0.463Tyreek HillKC · 137+0.444Michael ThomasNO · 148+0.435Mike WilliamsLAC · 68+0.436Robert FosterBUF · 44+0.427T.Y. HiltonIND · 120+0.408Davante AdamsGB · 170+0.399Cooper KuppLA · 55+0.3810Will FullerHOU · 45+0.3811DeAndre HopkinsHOU · 163+0.3812Brandin CooksLA · 117+0.3713Cole BeasleyDAL · 87+0.3714Robert WoodsLA · 130+0.3715Alshon JefferyPHI · 92+0.3716Mohamed SanuATL · 96+0.3617Sammy WatkinsKC · 55+0.3618Mike EvansTB · 139+0.3519Doug BaldwinSEA · 73+0.3520Jaron BrownSEA · 19+0.3521Rashard HigginsCLE · 53+0.3522Keenan AllenLAC · 137+0.3523Josh GordonNE · 71+0.3524Breshad PerrimanCLE · 25+0.3525Dontrelle InmanIND · 39+0.3526Julio JonesATL · 170+0.3527Kenny GolladayDET · 122+0.3328Tre'Quan SmithNO · 44+0.3329Kenny StillsMIA · 65+0.3230Geronimo AllisonGB · 30+0.3231Cody LatimerNYG · 16+0.3132Brandon LaFellLV · 16+0.3033Keith KirkwoodNO · 21+0.3034Austin CarrNO · 14+0.28

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

EPA per target leaderboard for the 2018 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Tyler Lockett◦ provisionalSEAWR71+1.05+0.57+0.37+0.77
2Tyler Boyd◦ provisionalCINWR108+0.68+0.46+0.28+0.64
3Tyreek HillKCWR137+0.60+0.44+0.27+0.61
4Michael ThomasNOWR148+0.57+0.43+0.27+0.60
5Mike Williams◦ provisionalLACWR68+0.71+0.43+0.23+0.63
6Robert Foster◦ provisionalBUFWR44+0.83+0.42+0.20+0.63
7T.Y. HiltonINDWR120+0.53+0.40+0.22+0.57
8Davante AdamsGBWR170+0.48+0.39+0.23+0.55
9Cooper Kupp◦ provisionalLAWR55+0.65+0.38+0.18+0.59
10Will Fuller◦ provisionalHOUWR45+0.70+0.38+0.17+0.59
11DeAndre HopkinsHOUWR163+0.47+0.38+0.22+0.54
12Brandin CooksLAWR117+0.49+0.37+0.20+0.55
13Cole Beasley◦ provisionalDALWR87+0.52+0.37+0.18+0.56
14Robert WoodsLAWR130+0.47+0.37+0.20+0.54
15Alshon Jeffery◦ provisionalPHIWR92+0.50+0.37+0.18+0.55
16Mohamed Sanu◦ provisionalATLWR96+0.48+0.36+0.17+0.54
17Sammy Watkins◦ provisionalKCWR55+0.57+0.36+0.15+0.56
18Mike EvansTBWR139+0.43+0.35+0.18+0.52
19Doug Baldwin◦ provisionalSEAWR73+0.50+0.35+0.15+0.55
20Jaron Brown◦ provisionalSEAWR19+0.92+0.35+0.12+0.58
21Rashard Higgins◦ provisionalCLEWR53+0.55+0.35+0.14+0.56
22Keenan AllenLACWR137+0.43+0.35+0.18+0.52
23Josh Gordon◦ provisionalNEWR71+0.50+0.35+0.15+0.55
24Breshad Perriman◦ provisionalCLEWR25+0.77+0.35+0.12+0.58
25Dontrelle Inman◦ provisionalINDWR39+0.61+0.35+0.13+0.56
26Julio JonesATLWR170+0.41+0.35+0.19+0.50
27Kenny GolladayDETWR122+0.41+0.33+0.16+0.51
28Tre'Quan Smith◦ provisionalNOWR44+0.54+0.33+0.12+0.55
29Kenny Stills◦ provisionalMIAWR65+0.44+0.32+0.12+0.52
30Geronimo Allison◦ provisionalGBWR30+0.58+0.32+0.10+0.55
31Adam ThielenMINWR154+0.37+0.32+0.16+0.48
32Calvin Ridley◦ provisionalATLWR92+0.39+0.31+0.13+0.50
33Cody Latimer◦ provisionalNYGWR16+0.70+0.31+0.07+0.55
34Adam Humphries◦ provisionalTBWR106+0.37+0.31+0.13+0.49
35Anthony Miller◦ provisionalCHIWR54+0.42+0.31+0.10+0.51
36Seth Roberts◦ provisionalLVWR64+0.39+0.30+0.10+0.50
37A.J. Green◦ provisionalCINWR78+0.37+0.30+0.11+0.49
38Chris Godwin Jr.◦ provisionalTBWR97+0.35+0.30+0.11+0.48
39Tyrell Williams◦ provisionalLACWR65+0.37+0.30+0.10+0.50
40Chris Hogan◦ provisionalNEWR55+0.39+0.30+0.09+0.50
41Brandon LaFell◦ provisionalLVWR16+0.60+0.30+0.06+0.53
42Keith Kirkwood◦ provisionalNOWR21+0.52+0.30+0.06+0.53
43Dante Pettis◦ provisionalSFWR45+0.39+0.29+0.08+0.51
44Sterling Shepard◦ provisionalNYGWR108+0.33+0.29+0.11+0.47
45JuJu Smith-SchusterPITWR167+0.31+0.29+0.13+0.45
46Nelson Agholor◦ provisionalPHIWR97+0.32+0.29+0.10+0.47
47Bennie Fowler◦ provisionalNYGWR27+0.41+0.28+0.06+0.51
48Allen Hurns◦ provisionalDALWR35+0.38+0.28+0.06+0.50
49T.J. Jones◦ provisionalDETWR27+0.39+0.28+0.05+0.51
50Austin Carr◦ provisionalNOWR14+0.50+0.28+0.04+0.52
51Demaryius Thomas◦ provisionalHOUWR90+0.31+0.28+0.09+0.47
52Chris Moore◦ provisionalBALWR25+0.36+0.27+0.04+0.50
53Jakeem Grant◦ provisionalMIAWR34+0.33+0.27+0.05+0.49
54Deontay Burnett◦ provisionalNYJWR15+0.40+0.27+0.03+0.51
55Taylor Gabriel◦ provisionalCHIWR93+0.29+0.27+0.08+0.45
56Russell Shepard◦ provisionalNYGWR19+0.36+0.27+0.03+0.50
57Albert Wilson◦ provisionalMIAWR35+0.31+0.27+0.04+0.49
58Demarcus Robinson◦ provisionalKCWR33+0.30+0.26+0.04+0.48
59Marvin Jones◦ provisionalDETWR62+0.28+0.26+0.06+0.46
60Corey DavisTENWR112+0.27+0.26+0.08+0.44
61Equanimeous St. Brown◦ provisionalGBWR36+0.29+0.26+0.04+0.48
62DeAndre Carter◦ provisionalHOUWR25+0.29+0.26+0.03+0.49
63Amari Cooper◦ provisionalDALWR107+0.27+0.26+0.08+0.44
64Aldrick Robinson◦ provisionalMINWR35+0.26+0.25+0.03+0.47
65Odell Beckham Jr.NYGWR125+0.25+0.25+0.08+0.42
66Brandon Powell◦ provisionalDETWR17+0.23+0.25+0.01+0.48
67Tavon Austin◦ provisionalDALWR13+0.21+0.25+0.01+0.49
68Torrey Smith◦ provisionalCARWR32+0.23+0.25+0.02+0.47
69Julian Edelman◦ provisionalNEWR108+0.24+0.25+0.07+0.43
70Paul Richardson◦ provisionalWASWR35+0.22+0.24+0.02+0.47
71Jamison Crowder◦ provisionalWASWR49+0.23+0.24+0.03+0.45
72Trent Sherfield◦ provisionalARIWR28+0.21+0.24+0.02+0.47
73David Moore◦ provisionalSEAWR53+0.22+0.24+0.03+0.45
74Marquise Goodwin◦ provisionalSFWR44+0.22+0.24+0.03+0.46
75Jordy Nelson◦ provisionalLVWR89+0.23+0.24+0.05+0.43
76Allen Robinson◦ provisionalCHIWR95+0.22+0.24+0.05+0.42
77Chris Conley◦ provisionalKCWR52+0.21+0.24+0.03+0.45
78Dede Westbrook◦ provisionalJAXWR103+0.21+0.23+0.05+0.42
79Ryan Grant◦ provisionalINDWR52+0.19+0.23+0.02+0.44
80Eli Rogers◦ provisionalPITWR15+0.08+0.23-0.01+0.47
81DJ Moore◦ provisionalCARWR82+0.20+0.23+0.04+0.42
82Jarius Wright◦ provisionalCARWR61+0.19+0.23+0.03+0.43
83DeSean Jackson◦ provisionalTBWR74+0.19+0.23+0.03+0.42
84Terrelle Pryor◦ provisionalBUFWR31+0.13+0.22+0.00+0.45
85Emmanuel Sanders◦ provisionalDENWR98+0.19+0.22+0.04+0.41
86Ryan Switzer◦ provisionalPITWR44+0.14+0.22+0.01+0.43
87DaeSean Hamilton◦ provisionalDENWR46+0.14+0.22+0.00+0.43
88Chester Rogers◦ provisionalINDWR74+0.17+0.22+0.02+0.41
89Marvin Hall◦ provisionalATLWR20+0.03+0.22-0.02+0.45
90Cody Core◦ provisionalCINWR29+0.08+0.21-0.01+0.44
91Andre Holmes◦ provisionalDENWR24+0.05+0.21-0.02+0.44
92Damion Ratley◦ provisionalCLEWR21+0.02+0.21-0.02+0.45
93John Brown◦ provisionalBALWR98+0.17+0.21+0.03+0.40
94Phillip Dorsett◦ provisionalNEWR42+0.10+0.21-0.01+0.43
95Alex Erickson◦ provisionalCINWR29+0.05+0.21-0.02+0.43
96Justin Hardy◦ provisionalATLWR22-0.01+0.21-0.02+0.44
97Josh Reynolds◦ provisionalLAWR53+0.12+0.21-0.00+0.41
98James Washington◦ provisionalPITWR38+0.08+0.21-0.01+0.43
99Tajae Sharpe◦ provisionalTENWR47+0.10+0.21-0.01+0.42
100Courtland Sutton◦ provisionalDENWR85+0.15+0.21+0.02+0.40
101Pierre Garcon◦ provisionalSFWR47+0.10+0.21-0.01+0.42
102Darius Jennings◦ provisionalTENWR15-0.12+0.21-0.03+0.44
103Martavis Bryant◦ provisionalLVWR27+0.02+0.21-0.02+0.43
104Christian Kirk◦ provisionalARIWR69+0.13+0.21+0.01+0.40
105Curtis Samuel◦ provisionalCARWR65+0.13+0.21+0.00+0.41
106Tim Patrick◦ provisionalDENWR41+0.08+0.20-0.01+0.42
107Michael Gallup◦ provisionalDALWR69+0.13+0.20+0.00+0.40
108Isaiah McKenzie◦ provisionalBUFWR30+0.02+0.20-0.02+0.43
109Keke Coutee◦ provisionalHOUWR41+0.05+0.20-0.02+0.41
110Kendrick Bourne◦ provisionalSFWR67+0.10+0.19-0.01+0.39
111Justin Hunter◦ provisionalPITWR13-0.30+0.19-0.05+0.43
112Antonio BrownPITWR168+0.15+0.19+0.03+0.35
113Golden TatePHIWR114+0.13+0.19+0.01+0.37
114Marquez Valdes-Scantling◦ provisionalGBWR74+0.10+0.19-0.01+0.39
115Brandon Marshall◦ provisionalSEAWR23-0.11+0.19-0.04+0.42
116Ted Ginn◦ provisionalNOWR31-0.03+0.19-0.04+0.41
117Bruce Ellington◦ provisionalDETWR42+0.02+0.19-0.03+0.40
118Travis Benjamin◦ provisionalLACWR24-0.11+0.19-0.04+0.42
119Richie James◦ provisionalSFWR14-0.34+0.18-0.05+0.42
120Marcell Ateman◦ provisionalLVWR31-0.05+0.18-0.04+0.41
121DeVante Parker◦ provisionalMIAWR47+0.03+0.18-0.03+0.40
122Donte Moncrief◦ provisionalJAXWR89+0.10+0.18-0.01+0.37
123Michael Floyd◦ provisionalWASWR25-0.13+0.18-0.05+0.41
124Robbie Chosen◦ provisionalNYJWR94+0.09+0.18-0.01+0.36
125Andy Jones◦ provisionalDETWR24-0.15+0.18-0.05+0.41
126Randall Cobb◦ provisionalGBWR61+0.03+0.17-0.03+0.38
127Auden Tate◦ provisionalCINWR12-0.57+0.17-0.07+0.41
128Taywan Taylor◦ provisionalTENWR57+0.01+0.17-0.04+0.37
129Andre Roberts◦ provisionalNYJWR18-0.36+0.16-0.07+0.40
130Willie Snead◦ provisionalBALWR95+0.05+0.16-0.03+0.35
131Deonte Thompson◦ provisionalBUFWR30-0.20+0.15-0.07+0.38
132Devin Funchess◦ provisionalCARWR79+0.02+0.15-0.04+0.35
133Josh Doctson◦ provisionalWASWR78+0.00+0.15-0.05+0.34
134Ty Montgomery◦ provisionalBALWR40-0.14+0.15-0.07+0.36
135Zach Pascal◦ provisionalINDWR46-0.10+0.15-0.07+0.36
136Trent Taylor◦ provisionalSFWR41-0.16+0.14-0.08+0.36
137Josh Bellamy◦ provisionalCHIWR26-0.33+0.14-0.09+0.37
138Stefon DiggsMINWR150+0.06+0.14-0.03+0.30
139Quincy Enunwa◦ provisionalNYJWR69-0.04+0.14-0.06+0.34
140Zay Jones◦ provisionalBUFWR103+0.00+0.13-0.05+0.31
141Danny Amendola◦ provisionalMIAWR79-0.03+0.13-0.06+0.32
142Larry FitzgeraldARIWR113+0.01+0.13-0.05+0.31
143Keelan Cole◦ provisionalJAXWR70-0.07+0.13-0.07+0.33
144Maurice Harris◦ provisionalWASWR47-0.19+0.12-0.09+0.33
145J.J. Nelson◦ provisionalARIWR19-0.65+0.12-0.12+0.35
146Michael Crabtree◦ provisionalBALWR100-0.04+0.11-0.07+0.30
147Jermaine Kearse◦ provisionalNYJWR76-0.09+0.11-0.08+0.31
148DJ Chark◦ provisionalJAXWR32-0.39+0.11-0.12+0.33
149Jarvis LandryCLEWR150-0.00+0.10-0.06+0.27
150Laquon Treadwell◦ provisionalMINWR53-0.22+0.10-0.11+0.31
151Antonio Callaway◦ provisionalCLEWR82-0.17+0.07-0.12+0.26
152Chad Williams◦ provisionalARIWR46-0.38+0.06-0.15+0.28
153John Ross◦ provisionalCINWR58-0.37+0.04-0.17+0.24
154Kelvin Benjamin◦ provisionalKCWR67-0.46-0.02-0.22+0.18

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