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

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
90 TE · 370 WR
targets to trust the number
shrunkrawthe shrink90% CI
-0.20.00.20.40.6TE avgWR avg1Robert TonyanGB · 59+0.432Travis KelceKC · 146+0.403Will FullerHOU · 75+0.384Julio JonesATL · 68+0.385A.J. BrownTEN · 106+0.376Tyreek HillKC · 135+0.377Tyler LockettSEA · 132+0.378Chris Godwin Jr.TB · 84+0.379Stefon DiggsBUF · 166+0.3710Davante AdamsGB · 149+0.3711Tyler HigbeeLA · 61+0.3712Corey DavisTEN · 92+0.3613George KittleSF · 64+0.3614Irv SmithMIN · 44+0.3615Allen LazardGB · 46+0.3616Darren FellsHOU · 28+0.3617Cole BeasleyBUF · 108+0.3618Justin JeffersonMIN · 128+0.3619Tyron JohnsonLAC · 26+0.3620Rashard HigginsCLE · 52+0.3521Cameron BrateTB · 34+0.3522Tee HigginsCIN · 108+0.3523DK MetcalfSEA · 129+0.3424Jarvis LandryCLE · 101+0.3425Richard RodgersPHI · 32+0.3426Donovan Peoples-J…CLE · 21+0.3427Mike EvansTB · 111+0.3428Dan ArnoldARI · 45+0.3429Richie JamesSF · 35+0.3430Kenny GolladayDET · 32+0.3331Isaiah McKenzieBUF · 34+0.3332Byron PringleKC · 17+0.3333Mohamed SanuDET · 25+0.3334Adam TrautmanNO · 16+0.3335Bryan EdwardsLV · 15+0.3236Cameron BatsonTEN · 13+0.3237Tyler JohnsonTB · 17+0.3238Ross DwelleySF · 24+0.3239KhaDarel HodgeCLE · 17+0.3240Pharaoh BrownHOU · 16+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 · 2020 · full board

EPA per target leaderboard for the 2020 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Robert Tonyan◦ provisionalGBTE59+0.74+0.43+0.22+0.63
2Travis KelceKCTE146+0.52+0.40+0.24+0.56
3Will Fuller◦ provisionalHOUWR75+0.78+0.38+0.26+0.51
4Julio Jones◦ provisionalATLWR68+0.79+0.38+0.25+0.51
5A.J. Brown◦ provisionalTENWR106+0.62+0.37+0.25+0.50
6Tyreek Hill◦ provisionalKCWR135+0.56+0.37+0.25+0.49
7Tyler Lockett◦ provisionalSEAWR132+0.56+0.37+0.25+0.49
8Chris Godwin Jr.◦ provisionalTBWR84+0.66+0.37+0.25+0.49
9Stefon Diggs◦ provisionalBUFWR166+0.51+0.37+0.25+0.48
10Davante Adams◦ provisionalGBWR149+0.52+0.37+0.25+0.48
11Tyler Higbee◦ provisionalLATE61+0.58+0.37+0.16+0.57
12Corey Davis◦ provisionalTENWR92+0.61+0.36+0.24+0.49
13George Kittle◦ provisionalSFTE64+0.57+0.36+0.16+0.56
14Irv Smith◦ provisionalMINTE44+0.66+0.36+0.15+0.58
15Allen Lazard◦ provisionalGBWR46+0.83+0.36+0.23+0.49
16Darren Fells◦ provisionalHOUTE28+0.81+0.36+0.13+0.59
17Cole Beasley◦ provisionalBUFWR108+0.55+0.36+0.24+0.48
18Justin Jefferson◦ provisionalMINWR128+0.52+0.36+0.24+0.48
19Tyron Johnson◦ provisionalLACWR26+1.13+0.36+0.23+0.49
20Rashard Higgins◦ provisionalCLEWR52+0.69+0.35+0.22+0.48
21Cameron Brate◦ provisionalTBTE34+0.69+0.35+0.13+0.57
22Tee Higgins◦ provisionalCINWR108+0.49+0.35+0.22+0.47
23DK Metcalf◦ provisionalSEAWR129+0.46+0.34+0.23+0.46
24Jarvis Landry◦ provisionalCLEWR101+0.48+0.34+0.22+0.46
25Richard Rodgers◦ provisionalPHITE32+0.68+0.34+0.12+0.57
26Donovan Peoples-Jones◦ provisionalCLEWR21+0.95+0.34+0.20+0.47
27Mike Evans◦ provisionalTBWR111+0.45+0.34+0.22+0.46
28Dan Arnold◦ provisionalARITE45+0.57+0.34+0.12+0.55
29Richie James◦ provisionalSFWR35+0.68+0.34+0.20+0.47
30Kenny Golladay◦ provisionalDETWR32+0.68+0.33+0.20+0.47
31Mecole Hardman◦ provisionalKCWR63+0.50+0.33+0.21+0.46
32John Brown◦ provisionalBUFWR52+0.53+0.33+0.20+0.46
33Isaiah McKenzie◦ provisionalBUFWR34+0.63+0.33+0.20+0.46
34David Moore◦ provisionalSEAWR47+0.54+0.33+0.20+0.46
35Nelson Agholor◦ provisionalLVWR82+0.45+0.33+0.21+0.46
36Adam Thielen◦ provisionalMINWR110+0.42+0.33+0.21+0.45
37Byron Pringle◦ provisionalKCWR17+0.89+0.33+0.20+0.46
38Brandin Cooks◦ provisionalHOUWR119+0.41+0.33+0.21+0.45
39Mohamed Sanu◦ provisionalDETWR25+0.69+0.33+0.20+0.46
40Darren WallerLVTE146+0.39+0.33+0.17+0.49
41Adam Trautman◦ provisionalNOTE16+0.92+0.33+0.09+0.57
42Marquez Valdes-Scantling◦ provisionalGBWR63+0.46+0.33+0.20+0.45
43Tim Patrick◦ provisionalDENWR80+0.43+0.33+0.20+0.45
44Tre'Quan Smith◦ provisionalNOWR50+0.49+0.33+0.20+0.45
45Randall Cobb◦ provisionalHOUWR50+0.48+0.32+0.20+0.45
46Chase Claypool◦ provisionalPITWR112+0.39+0.32+0.20+0.45
47Jared Cook◦ provisionalNOTE60+0.48+0.32+0.12+0.53
48Kendrick Bourne◦ provisionalSFWR75+0.42+0.32+0.20+0.45
49Bryan Edwards◦ provisionalLVWR15+0.79+0.32+0.19+0.46
50Cameron Batson◦ provisionalTENWR13+0.84+0.32+0.19+0.46
51Marvin Hall◦ provisionalCLEWR32+0.53+0.32+0.19+0.45
52Curtis Samuel◦ provisionalCARWR97+0.39+0.32+0.20+0.44
53Emmanuel Sanders◦ provisionalNOWR82+0.40+0.32+0.20+0.45
54Tyler Johnson◦ provisionalTBWR17+0.68+0.32+0.19+0.46
55Ross Dwelley◦ provisionalSFTE24+0.69+0.32+0.09+0.55
56Mark Andrews◦ provisionalBALTE88+0.42+0.32+0.13+0.50
57KhaDarel Hodge◦ provisionalCLEWR17+0.62+0.32+0.18+0.45
58Antonio Brown◦ provisionalTBWR62+0.40+0.32+0.19+0.44
59Cam Sims◦ provisionalWASWR48+0.41+0.32+0.19+0.45
60Calvin Ridley◦ provisionalATLWR145+0.35+0.32+0.20+0.43
61Deonte Harty◦ provisionalNOWR25+0.48+0.32+0.18+0.45
62Sammy Watkins◦ provisionalKCWR55+0.39+0.31+0.19+0.44
63Quintez Cephus◦ provisionalDETWR36+0.41+0.31+0.18+0.45
64Hunter Renfrow◦ provisionalLVWR77+0.36+0.31+0.19+0.44
65Willie Snead◦ provisionalBALWR48+0.38+0.31+0.18+0.44
66Tyler Boyd◦ provisionalCINWR110+0.34+0.31+0.19+0.43
67Mike Williams◦ provisionalLACWR85+0.35+0.31+0.19+0.44
68Travis Fulgham◦ provisionalPHIWR67+0.36+0.31+0.19+0.44
69Michael Pittman◦ provisionalINDWR61+0.36+0.31+0.18+0.44
70DeAndre Hopkins◦ provisionalARIWR161+0.33+0.31+0.20+0.43
71Olamide Zaccheaus◦ provisionalATLWR32+0.39+0.31+0.18+0.44
72Chad Hansen◦ provisionalHOUWR25+0.40+0.31+0.18+0.44
73Demarcus Robinson◦ provisionalKCWR59+0.35+0.31+0.18+0.44
74Marquez Callaway◦ provisionalNOWR27+0.39+0.31+0.18+0.44
75Kalif Raymond◦ provisionalTENWR15+0.45+0.31+0.17+0.44
76Equanimeous St. Brown◦ provisionalGBWR13+0.44+0.31+0.17+0.44
77Collin Johnson◦ provisionalJAXWR33+0.34+0.31+0.17+0.44
78T.Y. Hilton◦ provisionalINDWR94+0.31+0.31+0.18+0.43
79Jakobi Meyers◦ provisionalNEWR82+0.31+0.31+0.18+0.43
80Miles Boykin◦ provisionalBALWR33+0.32+0.31+0.17+0.44
81Marcus Johnson◦ provisionalINDWR28+0.31+0.30+0.17+0.44
82Alshon Jeffery◦ provisionalPHIWR13+0.32+0.30+0.17+0.44
83Henry Ruggs III◦ provisionalLVWR43+0.31+0.30+0.17+0.43
84Zach Pascal◦ provisionalINDWR72+0.30+0.30+0.18+0.43
85Steven Sims◦ provisionalWASWR37+0.29+0.30+0.17+0.43
86DeSean Jackson◦ provisionalPHIWR26+0.28+0.30+0.17+0.44
87Amari Cooper◦ provisionalDALWR130+0.30+0.30+0.18+0.42
88Keke Coutee◦ provisionalHOUWR41+0.29+0.30+0.17+0.43
89Keelan Cole◦ provisionalJAXWR89+0.29+0.30+0.18+0.43
90Michael Thomas◦ provisionalNOWR55+0.28+0.30+0.17+0.43
91Russell Gage◦ provisionalATLWR109+0.29+0.30+0.18+0.42
92Bisi Johnson◦ provisionalMINWR20+0.23+0.30+0.17+0.43
93Sterling Shepard◦ provisionalNYGWR92+0.28+0.30+0.18+0.42
94Kenny Stills◦ provisionalHOUWR19+0.21+0.30+0.17+0.43
95Freddie Swain◦ provisionalSEAWR21+0.22+0.30+0.17+0.43
96Scott Miller◦ provisionalTBWR53+0.27+0.30+0.17+0.43
97Noah Brown◦ provisionalDALWR25+0.22+0.30+0.17+0.43
98Golden Tate◦ provisionalNYGWR52+0.26+0.30+0.17+0.43
99Quez Watkins◦ provisionalPHIWR13+0.14+0.30+0.16+0.43
100Michael Gallup◦ provisionalDALWR105+0.28+0.30+0.18+0.42
101Jamison Crowder◦ provisionalNYJWR89+0.27+0.30+0.17+0.42
102Alex Erickson◦ provisionalCINWR17+0.16+0.30+0.16+0.43
103C.J. Board◦ provisionalNYGWR16+0.15+0.30+0.16+0.43
104Marquise Brown◦ provisionalBALWR100+0.27+0.30+0.17+0.42
105Chad Beebe◦ provisionalMINWR30+0.20+0.30+0.16+0.43
106Deebo Samuel Sr.◦ provisionalSFWR44+0.23+0.30+0.17+0.43
107Dontrelle Inman◦ provisionalWASWR29+0.18+0.29+0.16+0.43
108Devin Duvernay◦ provisionalBALWR26+0.16+0.29+0.16+0.43
109Laviska Shenault Jr.◦ provisionalJAXWR79+0.25+0.29+0.17+0.42
110Brandon Aiyuk◦ provisionalSFWR96+0.25+0.29+0.17+0.42
111Christian Blake◦ provisionalATLWR18+0.08+0.29+0.16+0.43
112Auden Tate◦ provisionalCINWR22+0.11+0.29+0.16+0.43
113Cedrick Wilson Jr.◦ provisionalDALWR28+0.15+0.29+0.16+0.43
114Preston Williams◦ provisionalMIAWR37+0.17+0.29+0.16+0.42
115Gabe Davis◦ provisionalBUFWR62+0.22+0.29+0.16+0.42
116Adam Humphries◦ provisionalTENWR35+0.16+0.29+0.16+0.42
117Javon Wims◦ provisionalCHIWR12-0.11+0.29+0.16+0.43
118Pharaoh Brown◦ provisionalHOUTE16+0.68+0.29+0.05+0.53
119Damiere Byrd◦ provisionalNEWR77+0.21+0.29+0.16+0.41
120Chris Conley◦ provisionalJAXWR63+0.19+0.29+0.16+0.41
121Ray-Ray McCloud◦ provisionalPITWR22+0.00+0.29+0.15+0.42
122Zay Jones◦ provisionalLVWR20-0.06+0.29+0.15+0.42
123Durham Smythe◦ provisionalMIATE29+0.48+0.29+0.06+0.51
124Cooper Kupp◦ provisionalLAWR124+0.23+0.29+0.17+0.40
125Van Jefferson◦ provisionalLAWR31+0.06+0.28+0.15+0.42
126DJ Moore◦ provisionalCARWR118+0.22+0.28+0.17+0.40
127Jalen Guyton◦ provisionalLACWR55+0.15+0.28+0.16+0.41
128Danny Amendola◦ provisionalDETWR69+0.18+0.28+0.16+0.41
129Marvin Jones◦ provisionalDETWR116+0.22+0.28+0.16+0.40
130Allen Robinson◦ provisionalCHIWR151+0.23+0.28+0.17+0.40
131Isaiah Ford◦ provisionalMIAWR44+0.11+0.28+0.15+0.41
132Denzel Mims◦ provisionalNYJWR45+0.10+0.28+0.15+0.41
133Greg Ward◦ provisionalPHIWR80+0.18+0.28+0.16+0.41
134James Washington◦ provisionalPITWR56+0.12+0.28+0.15+0.41
135Jakeem Grant◦ provisionalMIAWR54+0.12+0.28+0.15+0.41
136Isaiah Wright◦ provisionalWASWR35+0.03+0.28+0.15+0.41
137Mack Hollins◦ provisionalMIAWR26-0.06+0.28+0.15+0.41
138KeeSean Johnson◦ provisionalARIWR23-0.11+0.28+0.15+0.41
139Brandon Powell◦ provisionalATLWR18-0.25+0.28+0.14+0.41
140Terry McLaurin◦ provisionalWASWR135+0.21+0.28+0.16+0.40
141Odell Beckham Jr.◦ provisionalCLEWR43+0.05+0.28+0.15+0.41
142Darius Slayton◦ provisionalNYGWR96+0.18+0.28+0.15+0.40
143Robbie Chosen◦ provisionalCARWR137+0.21+0.28+0.16+0.39
144DeVante Parker◦ provisionalMIAWR104+0.18+0.28+0.15+0.40
145JuJu Smith-Schuster◦ provisionalPITWR129+0.19+0.28+0.16+0.39
146Christian Kirk◦ provisionalARIWR79+0.14+0.28+0.15+0.40
147Braxton Berrios◦ provisionalNYJWR55+0.08+0.27+0.15+0.40
148Jamal Agnew◦ provisionalDETWR20-0.27+0.27+0.14+0.41
149Keenan Allen◦ provisionalLACWR149+0.20+0.27+0.16+0.39
150Julian Edelman◦ provisionalNEWR39-0.01+0.27+0.14+0.41
151Jalen Reagor◦ provisionalPHIWR55+0.07+0.27+0.15+0.40
152Anthony Firkser◦ provisionalTENTE53+0.36+0.27+0.06+0.48
153Josh Reynolds◦ provisionalLAWR81+0.12+0.27+0.15+0.40
154Mike Thomas◦ provisionalCINWR21-0.31+0.27+0.14+0.40
155Tyler Kroft◦ provisionalBUFTE16+0.53+0.27+0.03+0.51
156CeeDee Lamb◦ provisionalDALWR111+0.15+0.27+0.15+0.39
157Chris Hogan◦ provisionalNYJWR26-0.25+0.27+0.13+0.40
158Austin Hooper◦ provisionalCLETE70+0.32+0.26+0.07+0.46
159KJ Hamler◦ provisionalDENWR56+0.00+0.26+0.14+0.39
160Breshad Perriman◦ provisionalNYJWR60+0.02+0.26+0.14+0.39
161DJ Chark◦ provisionalJAXWR94+0.11+0.26+0.14+0.39
162Darnell Mooney◦ provisionalCHIWR99+0.11+0.26+0.14+0.39
163David Njoku◦ provisionalCLETE29+0.39+0.26+0.04+0.49
164Albert Okwuegbunam◦ provisionalDENTE15+0.50+0.26+0.02+0.50
165John Hightower◦ provisionalPHIWR30-0.28+0.26+0.13+0.39
166Jack Doyle◦ provisionalINDTE33+0.36+0.26+0.04+0.48
167Jordan Akins◦ provisionalHOUTE49+0.33+0.26+0.05+0.47
168Anthony Miller◦ provisionalCHIWR76+0.04+0.26+0.13+0.38
169Lynn Bowden◦ provisionalMIAWR37-0.19+0.26+0.13+0.39
170Rob Gronkowski◦ provisionalTBTE77+0.30+0.26+0.07+0.45
171Darrell Daniels◦ provisionalARITE12+0.52+0.26+0.01+0.50
172Trent Taylor◦ provisionalSFWR21-0.62+0.25+0.12+0.39
173Diontae Johnson◦ provisionalPITWR144+0.13+0.25+0.14+0.37
174Mo Alie-Cox◦ provisionalINDTE39+0.33+0.25+0.03+0.47
175DaeSean Hamilton◦ provisionalDENWR44-0.20+0.25+0.12+0.38
176Larry Fitzgerald◦ provisionalARIWR72-0.02+0.25+0.12+0.38
177Jeff Smith◦ provisionalNYJWR37-0.29+0.25+0.12+0.38
178Robert Woods◦ provisionalLAWR129+0.09+0.25+0.13+0.37
179Nick Boyle◦ provisionalBALTE17+0.37+0.24+0.00+0.48
180Andy Isabella◦ provisionalARIWR35-0.39+0.24+0.11+0.38
181Tyler Conklin◦ provisionalMINTE26+0.30+0.24+0.01+0.47
182Adam Shaheen◦ provisionalMIATE22+0.31+0.24+0.00+0.47
183Geoff Swaim◦ provisionalTENTE12+0.35+0.24-0.01+0.48
184Kaden Smith◦ provisionalNYGTE21+0.29+0.23-0.00+0.47
185Mike Gesicki◦ provisionalMIATE85+0.24+0.23+0.04+0.42
186Jerry Jeudy◦ provisionalDENWR115-0.01+0.23+0.11+0.35
187Jonnu Smith◦ provisionalTENTE66+0.24+0.23+0.03+0.43
188James O'Shaughnessy◦ provisionalJAXTE39+0.24+0.23+0.01+0.45
189Dallas Goedert◦ provisionalPHITE65+0.23+0.22+0.03+0.42
190Marcedes Lewis◦ provisionalGBTE17+0.23+0.22-0.02+0.46
191Jace Sternberger◦ provisionalGBTE15+0.22+0.22-0.02+0.46
192O.J. Howard◦ provisionalTBTE19+0.21+0.22-0.02+0.46
193Ryan Griffin◦ provisionalNYJTE12+0.19+0.22-0.03+0.46
194Will Dissly◦ provisionalSEATE29+0.20+0.22-0.01+0.45
195Kyle Rudolph◦ provisionalMINTE38+0.20+0.22-0.00+0.44
196Jason Witten◦ provisionalLVTE17+0.14+0.21-0.03+0.45
197Hunter HenryLACTE93+0.20+0.21+0.02+0.39
198A.J. Green◦ provisionalCINWR104-0.15+0.21+0.08+0.33
199Donald Parham◦ provisionalLACTE20+0.13+0.20-0.03+0.44
200Blake Bell◦ provisionalDALTE15+0.10+0.20-0.04+0.45
201Jacob Hollister◦ provisionalSEATE41+0.16+0.20-0.01+0.42
202Taysom Hill◦ provisionalNOTE13+0.03+0.20-0.05+0.44
203Hayden Hurst◦ provisionalATLTE89+0.16+0.19+0.01+0.38
204Dalton Schultz◦ provisionalDALTE89+0.15+0.18-0.00+0.37
205Jordan Reed◦ provisionalSFTE46+0.09+0.18-0.03+0.39
206Greg Olsen◦ provisionalSEATE37+0.06+0.17-0.05+0.39
207Noah FantDENTE94+0.12+0.17-0.01+0.35
208Jimmy Graham◦ provisionalCHITE76+0.10+0.17-0.02+0.36
209Drew Sample◦ provisionalCINTE53+0.04+0.16-0.05+0.36
210T.J. HockensonDETTE102+0.10+0.16-0.02+0.33
211Vance McDonald◦ provisionalPITTE20-0.14+0.16-0.08+0.39
212Chris Herndon◦ provisionalNYJTE46+0.02+0.15-0.06+0.37
213Dawson Knox◦ provisionalBUFTE44-0.00+0.15-0.07+0.36
214Cole Kmet◦ provisionalCHITE45-0.02+0.14-0.07+0.36
215Jesse James◦ provisionalDETTE22-0.19+0.14-0.09+0.38
216Troy Fumagalli◦ provisionalDENTE15-0.35+0.14-0.10+0.38
217Nick Vannett◦ provisionalDENTE22-0.22+0.14-0.10+0.37
218Logan ThomasWASTE111+0.06+0.13-0.04+0.31
219Tyler Eifert◦ provisionalJAXTE60-0.02+0.12-0.08+0.33
220Eric EbronPITTE92+0.03+0.12-0.06+0.31
221Ryan Izzo◦ provisionalNETE20-0.33+0.12-0.11+0.36
222Gerald Everett◦ provisionalLATE62-0.02+0.12-0.08+0.32
223Ian Thomas◦ provisionalCARTE31-0.18+0.12-0.11+0.35
224Trey Burton◦ provisionalINDTE47-0.08+0.12-0.10+0.33
225Demetrius Harris◦ provisionalCHITE14-0.56+0.12-0.13+0.36
226N'Keal Harry◦ provisionalNETE57-0.10+0.10-0.11+0.30
227Harrison Bryant◦ provisionalCLETE38-0.27+0.08-0.14+0.30
228Zach Ertz◦ provisionalPHITE73-0.25+0.01-0.18+0.21
229Evan EngramNYGTE109-0.20-0.01-0.18+0.17

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