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
370
targets to trust the number
shrunkrawthe shrink90% CI
0.10.20.30.40.5WR avg1Will FullerHOU · 75+0.382Julio JonesATL · 68+0.383A.J. BrownTEN · 106+0.374Tyreek HillKC · 135+0.375Tyler LockettSEA · 132+0.376Chris Godwin Jr.TB · 84+0.377Stefon DiggsBUF · 166+0.378Davante AdamsGB · 149+0.379Corey DavisTEN · 92+0.3610Allen LazardGB · 46+0.3611Cole BeasleyBUF · 108+0.3612Justin JeffersonMIN · 128+0.3613Tyron JohnsonLAC · 26+0.3614Rashard HigginsCLE · 52+0.3515Tee HigginsCIN · 108+0.3516DK MetcalfSEA · 129+0.3417Jarvis LandryCLE · 101+0.3418Donovan Peoples-J…CLE · 21+0.3419Mike EvansTB · 111+0.3420Richie JamesSF · 35+0.3421Kenny GolladayDET · 32+0.3322Mecole HardmanKC · 63+0.3323John BrownBUF · 52+0.3324Isaiah McKenzieBUF · 34+0.3325David MooreSEA · 47+0.3326Nelson AgholorLV · 82+0.3327Adam ThielenMIN · 110+0.3328Byron PringleKC · 17+0.3329Brandin CooksHOU · 119+0.3330Mohamed SanuDET · 25+0.3331Tre'Quan SmithNO · 50+0.3332Bryan EdwardsLV · 15+0.3233Cameron BatsonTEN · 13+0.3234Marvin HallCLE · 32+0.3235Tyler JohnsonTB · 17+0.3236KhaDarel HodgeCLE · 17+0.32

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
1Will Fuller◦ provisionalHOUWR75+0.78+0.38+0.26+0.51
2Julio Jones◦ provisionalATLWR68+0.79+0.38+0.25+0.51
3A.J. Brown◦ provisionalTENWR106+0.62+0.37+0.25+0.50
4Tyreek Hill◦ provisionalKCWR135+0.56+0.37+0.25+0.49
5Tyler Lockett◦ provisionalSEAWR132+0.56+0.37+0.25+0.49
6Chris Godwin Jr.◦ provisionalTBWR84+0.66+0.37+0.25+0.49
7Stefon Diggs◦ provisionalBUFWR166+0.51+0.37+0.25+0.48
8Davante Adams◦ provisionalGBWR149+0.52+0.37+0.25+0.48
9Corey Davis◦ provisionalTENWR92+0.61+0.36+0.24+0.49
10Allen Lazard◦ provisionalGBWR46+0.83+0.36+0.23+0.49
11Cole Beasley◦ provisionalBUFWR108+0.55+0.36+0.24+0.48
12Justin Jefferson◦ provisionalMINWR128+0.52+0.36+0.24+0.48
13Tyron Johnson◦ provisionalLACWR26+1.13+0.36+0.23+0.49
14Rashard Higgins◦ provisionalCLEWR52+0.69+0.35+0.22+0.48
15Tee Higgins◦ provisionalCINWR108+0.49+0.35+0.22+0.47
16DK Metcalf◦ provisionalSEAWR129+0.46+0.34+0.23+0.46
17Jarvis Landry◦ provisionalCLEWR101+0.48+0.34+0.22+0.46
18Donovan Peoples-Jones◦ provisionalCLEWR21+0.95+0.34+0.20+0.47
19Mike Evans◦ provisionalTBWR111+0.45+0.34+0.22+0.46
20Richie James◦ provisionalSFWR35+0.68+0.34+0.20+0.47
21Kenny Golladay◦ provisionalDETWR32+0.68+0.33+0.20+0.47
22Mecole Hardman◦ provisionalKCWR63+0.50+0.33+0.21+0.46
23John Brown◦ provisionalBUFWR52+0.53+0.33+0.20+0.46
24Isaiah McKenzie◦ provisionalBUFWR34+0.63+0.33+0.20+0.46
25David Moore◦ provisionalSEAWR47+0.54+0.33+0.20+0.46
26Nelson Agholor◦ provisionalLVWR82+0.45+0.33+0.21+0.46
27Adam Thielen◦ provisionalMINWR110+0.42+0.33+0.21+0.45
28Byron Pringle◦ provisionalKCWR17+0.89+0.33+0.20+0.46
29Brandin Cooks◦ provisionalHOUWR119+0.41+0.33+0.21+0.45
30Mohamed Sanu◦ provisionalDETWR25+0.69+0.33+0.20+0.46
31Marquez Valdes-Scantling◦ provisionalGBWR63+0.46+0.33+0.20+0.45
32Tim Patrick◦ provisionalDENWR80+0.43+0.33+0.20+0.45
33Tre'Quan Smith◦ provisionalNOWR50+0.49+0.33+0.20+0.45
34Randall Cobb◦ provisionalHOUWR50+0.48+0.32+0.20+0.45
35Chase Claypool◦ provisionalPITWR112+0.39+0.32+0.20+0.45
36Kendrick Bourne◦ provisionalSFWR75+0.42+0.32+0.20+0.45
37Bryan Edwards◦ provisionalLVWR15+0.79+0.32+0.19+0.46
38Cameron Batson◦ provisionalTENWR13+0.84+0.32+0.19+0.46
39Marvin Hall◦ provisionalCLEWR32+0.53+0.32+0.19+0.45
40Curtis Samuel◦ provisionalCARWR97+0.39+0.32+0.20+0.44
41Emmanuel Sanders◦ provisionalNOWR82+0.40+0.32+0.20+0.45
42Tyler Johnson◦ provisionalTBWR17+0.68+0.32+0.19+0.46
43KhaDarel Hodge◦ provisionalCLEWR17+0.62+0.32+0.18+0.45
44Antonio Brown◦ provisionalTBWR62+0.40+0.32+0.19+0.44
45Cam Sims◦ provisionalWASWR48+0.41+0.32+0.19+0.45
46Calvin Ridley◦ provisionalATLWR145+0.35+0.32+0.20+0.43
47Deonte Harty◦ provisionalNOWR25+0.48+0.32+0.18+0.45
48Sammy Watkins◦ provisionalKCWR55+0.39+0.31+0.19+0.44
49Quintez Cephus◦ provisionalDETWR36+0.41+0.31+0.18+0.45
50Hunter Renfrow◦ provisionalLVWR77+0.36+0.31+0.19+0.44
51Willie Snead◦ provisionalBALWR48+0.38+0.31+0.18+0.44
52Tyler Boyd◦ provisionalCINWR110+0.34+0.31+0.19+0.43
53Mike Williams◦ provisionalLACWR85+0.35+0.31+0.19+0.44
54Travis Fulgham◦ provisionalPHIWR67+0.36+0.31+0.19+0.44
55Michael Pittman◦ provisionalINDWR61+0.36+0.31+0.18+0.44
56DeAndre Hopkins◦ provisionalARIWR161+0.33+0.31+0.20+0.43
57Olamide Zaccheaus◦ provisionalATLWR32+0.39+0.31+0.18+0.44
58Chad Hansen◦ provisionalHOUWR25+0.40+0.31+0.18+0.44
59Demarcus Robinson◦ provisionalKCWR59+0.35+0.31+0.18+0.44
60Marquez Callaway◦ provisionalNOWR27+0.39+0.31+0.18+0.44
61Kalif Raymond◦ provisionalTENWR15+0.45+0.31+0.17+0.44
62Equanimeous St. Brown◦ provisionalGBWR13+0.44+0.31+0.17+0.44
63Collin Johnson◦ provisionalJAXWR33+0.34+0.31+0.17+0.44
64T.Y. Hilton◦ provisionalINDWR94+0.31+0.31+0.18+0.43
65Jakobi Meyers◦ provisionalNEWR82+0.31+0.31+0.18+0.43
66Miles Boykin◦ provisionalBALWR33+0.32+0.31+0.17+0.44
67Marcus Johnson◦ provisionalINDWR28+0.31+0.30+0.17+0.44
68Alshon Jeffery◦ provisionalPHIWR13+0.32+0.30+0.17+0.44
69Henry Ruggs III◦ provisionalLVWR43+0.31+0.30+0.17+0.43
70Zach Pascal◦ provisionalINDWR72+0.30+0.30+0.18+0.43
71Steven Sims◦ provisionalWASWR37+0.29+0.30+0.17+0.43
72DeSean Jackson◦ provisionalPHIWR26+0.28+0.30+0.17+0.44
73Amari Cooper◦ provisionalDALWR130+0.30+0.30+0.18+0.42
74Keke Coutee◦ provisionalHOUWR41+0.29+0.30+0.17+0.43
75Keelan Cole◦ provisionalJAXWR89+0.29+0.30+0.18+0.43
76Michael Thomas◦ provisionalNOWR55+0.28+0.30+0.17+0.43
77Russell Gage◦ provisionalATLWR109+0.29+0.30+0.18+0.42
78Bisi Johnson◦ provisionalMINWR20+0.23+0.30+0.17+0.43
79Sterling Shepard◦ provisionalNYGWR92+0.28+0.30+0.18+0.42
80Kenny Stills◦ provisionalHOUWR19+0.21+0.30+0.17+0.43
81Freddie Swain◦ provisionalSEAWR21+0.22+0.30+0.17+0.43
82Scott Miller◦ provisionalTBWR53+0.27+0.30+0.17+0.43
83Noah Brown◦ provisionalDALWR25+0.22+0.30+0.17+0.43
84Golden Tate◦ provisionalNYGWR52+0.26+0.30+0.17+0.43
85Quez Watkins◦ provisionalPHIWR13+0.14+0.30+0.16+0.43
86Michael Gallup◦ provisionalDALWR105+0.28+0.30+0.18+0.42
87Jamison Crowder◦ provisionalNYJWR89+0.27+0.30+0.17+0.42
88Alex Erickson◦ provisionalCINWR17+0.16+0.30+0.16+0.43
89C.J. Board◦ provisionalNYGWR16+0.15+0.30+0.16+0.43
90Marquise Brown◦ provisionalBALWR100+0.27+0.30+0.17+0.42
91Chad Beebe◦ provisionalMINWR30+0.20+0.30+0.16+0.43
92Deebo Samuel Sr.◦ provisionalSFWR44+0.23+0.30+0.17+0.43
93Dontrelle Inman◦ provisionalWASWR29+0.18+0.29+0.16+0.43
94Devin Duvernay◦ provisionalBALWR26+0.16+0.29+0.16+0.43
95Laviska Shenault Jr.◦ provisionalJAXWR79+0.25+0.29+0.17+0.42
96Brandon Aiyuk◦ provisionalSFWR96+0.25+0.29+0.17+0.42
97Christian Blake◦ provisionalATLWR18+0.08+0.29+0.16+0.43
98Auden Tate◦ provisionalCINWR22+0.11+0.29+0.16+0.43
99Cedrick Wilson Jr.◦ provisionalDALWR28+0.15+0.29+0.16+0.43
100Preston Williams◦ provisionalMIAWR37+0.17+0.29+0.16+0.42
101Gabe Davis◦ provisionalBUFWR62+0.22+0.29+0.16+0.42
102Adam Humphries◦ provisionalTENWR35+0.16+0.29+0.16+0.42
103Javon Wims◦ provisionalCHIWR12-0.11+0.29+0.16+0.43
104Damiere Byrd◦ provisionalNEWR77+0.21+0.29+0.16+0.41
105Chris Conley◦ provisionalJAXWR63+0.19+0.29+0.16+0.41
106Ray-Ray McCloud◦ provisionalPITWR22+0.00+0.29+0.15+0.42
107Zay Jones◦ provisionalLVWR20-0.06+0.29+0.15+0.42
108Cooper Kupp◦ provisionalLAWR124+0.23+0.29+0.17+0.40
109Van Jefferson◦ provisionalLAWR31+0.06+0.28+0.15+0.42
110DJ Moore◦ provisionalCARWR118+0.22+0.28+0.17+0.40
111Jalen Guyton◦ provisionalLACWR55+0.15+0.28+0.16+0.41
112Danny Amendola◦ provisionalDETWR69+0.18+0.28+0.16+0.41
113Marvin Jones◦ provisionalDETWR116+0.22+0.28+0.16+0.40
114Allen Robinson◦ provisionalCHIWR151+0.23+0.28+0.17+0.40
115Isaiah Ford◦ provisionalMIAWR44+0.11+0.28+0.15+0.41
116Denzel Mims◦ provisionalNYJWR45+0.10+0.28+0.15+0.41
117Greg Ward◦ provisionalPHIWR80+0.18+0.28+0.16+0.41
118James Washington◦ provisionalPITWR56+0.12+0.28+0.15+0.41
119Jakeem Grant◦ provisionalMIAWR54+0.12+0.28+0.15+0.41
120Isaiah Wright◦ provisionalWASWR35+0.03+0.28+0.15+0.41
121Mack Hollins◦ provisionalMIAWR26-0.06+0.28+0.15+0.41
122KeeSean Johnson◦ provisionalARIWR23-0.11+0.28+0.15+0.41
123Brandon Powell◦ provisionalATLWR18-0.25+0.28+0.14+0.41
124Terry McLaurin◦ provisionalWASWR135+0.21+0.28+0.16+0.40
125Odell Beckham Jr.◦ provisionalCLEWR43+0.05+0.28+0.15+0.41
126Darius Slayton◦ provisionalNYGWR96+0.18+0.28+0.15+0.40
127Robbie Chosen◦ provisionalCARWR137+0.21+0.28+0.16+0.39
128DeVante Parker◦ provisionalMIAWR104+0.18+0.28+0.15+0.40
129JuJu Smith-Schuster◦ provisionalPITWR129+0.19+0.28+0.16+0.39
130Christian Kirk◦ provisionalARIWR79+0.14+0.28+0.15+0.40
131Braxton Berrios◦ provisionalNYJWR55+0.08+0.27+0.15+0.40
132Jamal Agnew◦ provisionalDETWR20-0.27+0.27+0.14+0.41
133Keenan Allen◦ provisionalLACWR149+0.20+0.27+0.16+0.39
134Julian Edelman◦ provisionalNEWR39-0.01+0.27+0.14+0.41
135Jalen Reagor◦ provisionalPHIWR55+0.07+0.27+0.15+0.40
136Josh Reynolds◦ provisionalLAWR81+0.12+0.27+0.15+0.40
137Mike Thomas◦ provisionalCINWR21-0.31+0.27+0.14+0.40
138CeeDee Lamb◦ provisionalDALWR111+0.15+0.27+0.15+0.39
139Chris Hogan◦ provisionalNYJWR26-0.25+0.27+0.13+0.40
140KJ Hamler◦ provisionalDENWR56+0.00+0.26+0.14+0.39
141Breshad Perriman◦ provisionalNYJWR60+0.02+0.26+0.14+0.39
142DJ Chark◦ provisionalJAXWR94+0.11+0.26+0.14+0.39
143Darnell Mooney◦ provisionalCHIWR99+0.11+0.26+0.14+0.39
144John Hightower◦ provisionalPHIWR30-0.28+0.26+0.13+0.39
145Anthony Miller◦ provisionalCHIWR76+0.04+0.26+0.13+0.38
146Lynn Bowden◦ provisionalMIAWR37-0.19+0.26+0.13+0.39
147Trent Taylor◦ provisionalSFWR21-0.62+0.25+0.12+0.39
148Diontae Johnson◦ provisionalPITWR144+0.13+0.25+0.14+0.37
149DaeSean Hamilton◦ provisionalDENWR44-0.20+0.25+0.12+0.38
150Larry Fitzgerald◦ provisionalARIWR72-0.02+0.25+0.12+0.38
151Jeff Smith◦ provisionalNYJWR37-0.29+0.25+0.12+0.38
152Robert Woods◦ provisionalLAWR129+0.09+0.25+0.13+0.37
153Andy Isabella◦ provisionalARIWR35-0.39+0.24+0.11+0.38
154Jerry Jeudy◦ provisionalDENWR115-0.01+0.23+0.11+0.35
155A.J. Green◦ provisionalCINWR104-0.15+0.21+0.08+0.33

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