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

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
160
targets to trust the number
shrunkrawthe shrink90% CI
0.00.20.40.6WR avg1Puka NacuaLA · 166+0.472George PickensDAL · 138+0.423Stefon DiggsNE · 102+0.414Jaxon Smith-NjigbaSEA · 163+0.395Alec PierceIND · 84+0.386Kayshon BoutteNE · 46+0.367Jameson WilliamsDET · 102+0.358DeVonta SmithPHI · 114+0.339Christian WatsonGB · 55+0.3210Tyquan ThorntonKC · 37+0.3211Xavier SmithLA · 24+0.3212DeMario DouglasNE · 46+0.3113Terry McLaurinWAS · 60+0.3114Luther Burden IIICHI · 60+0.3015Ryan FlournoyDAL · 56+0.3016Tyreek HillMIA · 29+0.3017Zay FlowersBAL · 119+0.3018Ricky PearsallSF · 53+0.3019Isaac TeSlaaDET · 27+0.2920Romeo DoubsGB · 86+0.2921Marvin Harrison J…ARI · 74+0.2922Courtland SuttonDEN · 125+0.2923Jalen CokerCAR · 45+0.2924Mack HollinsNE · 65+0.2825Jalen McMillanTB · 15+0.2826Tee HigginsCIN · 99+0.2827Amon-Ra St. BrownDET · 172+0.2828Jaylen WaddleMIA · 100+0.2729Gunner OlszewskiNYG · 13+0.2730Kalif RaymondDET · 30+0.2731Chris MooreWAS · 23+0.2732Tyrell ShaversBUF · 23+0.2733Tyler JohnsonNYJ · 18+0.2734Jayden ReedGB · 22+0.2735Gabe DavisBUF · 18+0.2636Luke McCaffreyWAS · 16+0.2637Tory HortonSEA · 22+0.2638Kyle WilliamsNE · 21+0.26

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

EPA per target leaderboard for the 2025 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Puka NacuaLAWR166+0.70+0.47+0.32+0.62
2George Pickens◦ provisionalDALWR138+0.64+0.42+0.26+0.58
3Stefon Diggs◦ provisionalNEWR102+0.69+0.41+0.24+0.58
4Jaxon Smith-NjigbaSEAWR163+0.56+0.39+0.24+0.55
5Alec Pierce◦ provisionalINDWR84+0.66+0.38+0.20+0.55
6Kayshon Boutte◦ provisionalNEWR46+0.80+0.36+0.17+0.55
7Jameson Williams◦ provisionalDETWR102+0.55+0.35+0.19+0.52
8DeVonta Smith◦ provisionalPHIWR114+0.48+0.33+0.17+0.50
9Christian Watson◦ provisionalGBWR55+0.59+0.32+0.13+0.51
10Tyquan Thornton◦ provisionalKCWR37+0.71+0.32+0.12+0.51
11Xavier Smith◦ provisionalLAWR24+0.91+0.32+0.12+0.52
12DeMario Douglas◦ provisionalNEWR46+0.61+0.31+0.12+0.51
13Terry McLaurin◦ provisionalWASWR60+0.53+0.31+0.13+0.50
14Luther Burden III◦ provisionalCHIWR60+0.50+0.30+0.12+0.49
15Ryan Flournoy◦ provisionalDALWR56+0.51+0.30+0.12+0.49
16Tyreek Hill◦ provisionalMIAWR29+0.68+0.30+0.10+0.50
17Zay Flowers◦ provisionalBALWR119+0.39+0.30+0.13+0.46
18Ricky Pearsall◦ provisionalSFWR53+0.50+0.30+0.11+0.49
19Isaac TeSlaa◦ provisionalDETWR27+0.66+0.29+0.09+0.49
20Romeo Doubs◦ provisionalGBWR86+0.40+0.29+0.12+0.46
21Marvin Harrison Jr.◦ provisionalARIWR74+0.42+0.29+0.11+0.47
22Courtland Sutton◦ provisionalDENWR125+0.36+0.29+0.13+0.45
23Jalen Coker◦ provisionalCARWR45+0.49+0.29+0.09+0.48
24Mack Hollins◦ provisionalNEWR65+0.42+0.28+0.10+0.47
25Jalen McMillan◦ provisionalTBWR15+0.83+0.28+0.07+0.49
26Tee Higgins◦ provisionalCINWR99+0.36+0.28+0.11+0.45
27Amon-Ra St. BrownDETWR172+0.32+0.28+0.13+0.43
28Jaylen Waddle◦ provisionalMIAWR100+0.34+0.27+0.10+0.44
29Gunner Olszewski◦ provisionalNYGWR13+0.82+0.27+0.07+0.48
30Kalif Raymond◦ provisionalDETWR30+0.51+0.27+0.07+0.47
31Nico Collins◦ provisionalHOUWR121+0.32+0.27+0.11+0.43
32KaVontae Turpin◦ provisionalDALWR38+0.44+0.27+0.08+0.46
33Brandin Cooks◦ provisionalBUFWR36+0.45+0.27+0.07+0.46
34Kendrick Bourne◦ provisionalSFWR53+0.39+0.27+0.08+0.46
35DK Metcalf◦ provisionalPITWR99+0.33+0.27+0.10+0.44
36Chris Moore◦ provisionalWASWR23+0.53+0.27+0.07+0.47
37Tyrell Shavers◦ provisionalBUFWR23+0.53+0.27+0.07+0.47
38Devaughn Vele◦ provisionalNOWR40+0.42+0.27+0.07+0.46
39Tyler Johnson◦ provisionalNYJWR18+0.59+0.27+0.06+0.47
40Jayden Reed◦ provisionalGBWR22+0.53+0.27+0.06+0.47
41Gabe Davis◦ provisionalBUFWR18+0.57+0.26+0.06+0.47
42Luke McCaffrey◦ provisionalWASWR16+0.59+0.26+0.06+0.47
43Matthew Golden◦ provisionalGBWR44+0.38+0.26+0.07+0.45
44Jaylin Noel◦ provisionalHOUWR35+0.41+0.26+0.07+0.46
45Tez Johnson◦ provisionalTBWR44+0.37+0.26+0.07+0.45
46Parker Washington◦ provisionalJAXWR97+0.31+0.26+0.09+0.43
47Tory Horton◦ provisionalSEAWR22+0.47+0.26+0.06+0.46
48Kyle Williams◦ provisionalNEWR21+0.47+0.26+0.05+0.46
49Tre Harris◦ provisionalLACWR43+0.36+0.26+0.06+0.45
50Keenan Allen◦ provisionalLACWR122+0.29+0.25+0.09+0.42
51Marquise Brown◦ provisionalKCWR74+0.30+0.25+0.07+0.43
52A.J. Brown◦ provisionalPHIWR121+0.28+0.25+0.09+0.41
53Calvin Ridley◦ provisionalTENWR36+0.34+0.25+0.05+0.45
54Quentin Johnston◦ provisionalLACWR84+0.28+0.25+0.07+0.42
55Dontayvion Wicks◦ provisionalGBWR46+0.31+0.25+0.06+0.44
56Brycen Tremayne◦ provisionalCARWR18+0.40+0.25+0.04+0.45
57Pat Bryant◦ provisionalDENWR49+0.29+0.24+0.05+0.43
58Darius Slayton◦ provisionalNYGWR65+0.28+0.24+0.06+0.43
59Chris Godwin Jr.◦ provisionalTBWR52+0.28+0.24+0.05+0.43
60Lil'Jordan Humphrey◦ provisionalDENWR25+0.32+0.24+0.04+0.44
61Zay Jones◦ provisionalARIWR18+0.31+0.24+0.03+0.44
62CeeDee Lamb◦ provisionalDALWR117+0.25+0.24+0.07+0.40
63Isaiah Hodgins◦ provisionalNYGWR19+0.29+0.24+0.03+0.44
64Jayden Higgins◦ provisionalHOUWR69+0.24+0.23+0.05+0.41
65Davante Adams◦ provisionalLAWR114+0.24+0.23+0.07+0.40
66Casey Washington◦ provisionalATLWR14+0.27+0.23+0.03+0.44
67Tre Tucker◦ provisionalLVWR92+0.24+0.23+0.06+0.40
68DeAndre Hopkins◦ provisionalBALWR39+0.24+0.23+0.04+0.43
69Tim Patrick◦ provisionalJAXWR24+0.24+0.23+0.03+0.43
70Jimmy Horn Jr.◦ provisionalCARWR15+0.23+0.23+0.02+0.44
71Rome Odunze◦ provisionalCHIWR91+0.23+0.23+0.06+0.40
72Chris Olave◦ provisionalNOWR156+0.23+0.23+0.08+0.38
73Xavier Hutchinson◦ provisionalHOUWR57+0.23+0.23+0.04+0.41
74Ja'Marr ChaseCINWR185+0.22+0.23+0.08+0.37
75Demarcus Robinson◦ provisionalSFWR36+0.21+0.23+0.03+0.42
76Tutu Atwell◦ provisionalLAWR15+0.18+0.23+0.02+0.43
77Jalen Nailor◦ provisionalMINWR54+0.21+0.23+0.04+0.41
78Drake London◦ provisionalATLWR113+0.22+0.23+0.06+0.39
79Roman Wilson◦ provisionalPITWR21+0.19+0.23+0.02+0.43
80James Proche◦ provisionalTENWR12+0.14+0.22+0.01+0.43
81Jamari Thrash◦ provisionalCLEWR15+0.16+0.22+0.02+0.43
82Andrei Iosivas◦ provisionalCINWR58+0.20+0.22+0.04+0.41
83Xavier Worthy◦ provisionalKCWR73+0.20+0.22+0.04+0.40
84Keon Coleman◦ provisionalBUFWR62+0.20+0.22+0.04+0.40
85Josh Palmer◦ provisionalBUFWR37+0.18+0.22+0.03+0.42
86Rashee Rice◦ provisionalKCWR79+0.20+0.22+0.04+0.40
87Tetairoa McMillan◦ provisionalCARWR122+0.21+0.22+0.06+0.38
88Xavier Weaver◦ provisionalARIWR13+0.09+0.22+0.01+0.43
89Michael Wilson◦ provisionalARIWR127+0.20+0.22+0.06+0.38
90Cedric Tillman◦ provisionalCLEWR39+0.17+0.22+0.02+0.41
91Michael Pittman◦ provisionalINDWR114+0.20+0.22+0.05+0.38
92Van Jefferson◦ provisionalTENWR52+0.17+0.22+0.03+0.40
93Brian Thomas Jr.◦ provisionalJAXWR91+0.19+0.21+0.04+0.39
94Mitchell Tinsley◦ provisionalCINWR24+0.11+0.21+0.01+0.42
95Adam Thielen◦ provisionalPITWR36+0.14+0.21+0.02+0.41
96Jalen Tolbert◦ provisionalDALWR35+0.14+0.21+0.02+0.41
97Jordan Whittington◦ provisionalLAWR25+0.10+0.21+0.01+0.41
98Greg Dortch◦ provisionalARIWR33+0.13+0.21+0.02+0.41
99Jordan Addison◦ provisionalMINWR79+0.18+0.21+0.04+0.39
100Nick Westbrook-Ikhine◦ provisionalMIAWR20+0.06+0.21+0.01+0.41
101Deebo Samuel Sr.◦ provisionalWASWR100+0.18+0.21+0.04+0.38
102DJ Moore◦ provisionalCHIWR85+0.16+0.21+0.03+0.38
103Scott Miller◦ provisionalPITWR14-0.08+0.20-0.00+0.41
104Kevin Austin Jr.◦ provisionalNOWR23+0.01+0.20+0.00+0.40
105Malik Nabers◦ provisionalNYGWR35+0.07+0.20+0.00+0.40
106Isaiah Williams◦ provisionalNYJWR36+0.03+0.19-0.00+0.39
107Malachi Corley◦ provisionalCLEWR14-0.23+0.19-0.01+0.40
108Cooper Kupp◦ provisionalSEAWR71+0.11+0.19+0.01+0.37
109JuJu Smith-Schuster◦ provisionalKCWR45+0.06+0.19+0.00+0.38
110Marvin Mims Jr.◦ provisionalDENWR51+0.07+0.19+0.00+0.38
111Mike Evans◦ provisionalTBWR62+0.08+0.19+0.01+0.37
112Josh Reynolds◦ provisionalNYJWR22-0.11+0.19-0.01+0.39
113Hunter Renfrow◦ provisionalCARWR26-0.08+0.19-0.01+0.39
114Wan'Dale Robinson◦ provisionalNYGWR141+0.14+0.19+0.03+0.34
115Elijah Moore◦ provisionalBUFWR17-0.23+0.19-0.02+0.39
116KeAndre Lambert-Smith◦ provisionalLACWR12-0.41+0.18-0.02+0.39
117Jack Bech◦ provisionalLVWR29-0.07+0.18-0.02+0.38
118Josh Downs◦ provisionalINDWR88+0.10+0.18+0.01+0.36
119Gage Larvadain◦ provisionalCLEWR15-0.32+0.18-0.02+0.39
120David Sills◦ provisionalATLWR36-0.05+0.18-0.02+0.37
121Marquez Valdes-Scantling◦ provisionalPITWR29-0.10+0.18-0.02+0.38
122Rashod Bateman◦ provisionalBALWR39-0.04+0.18-0.02+0.37
123Isaiah Bond◦ provisionalCLEWR44-0.02+0.18-0.02+0.37
124Dyami Brown◦ provisionalJAXWR37-0.06+0.18-0.02+0.37
125Troy Franklin◦ provisionalDENWR107+0.09+0.17+0.01+0.34
126Darnell Mooney◦ provisionalATLWR72+0.05+0.17-0.01+0.35
127Jakobi Meyers◦ provisionalJAXWR110+0.09+0.17+0.01+0.34
128Arian Smith◦ provisionalNYJWR16-0.40+0.17-0.03+0.38
129Dylan Drummond◦ provisionalATLWR12-0.59+0.17-0.04+0.38
130Khalil Shakir◦ provisionalBUFWR97+0.08+0.17+0.00+0.34
131Travis Hunter◦ provisionalJAXWR45-0.05+0.17-0.02+0.36
132John Metchie III◦ provisionalNYJWR48-0.05+0.17-0.02+0.35
133Mason Tipton◦ provisionalNOWR17-0.44+0.17-0.04+0.37
134Ladd McConkey◦ provisionalLACWR106+0.07+0.17-0.00+0.33
135Chimere Dike◦ provisionalTENWR74+0.02+0.16-0.02+0.34
136Jaylin Lane◦ provisionalWASWR32-0.18+0.16-0.04+0.36
137Jalin Hyatt◦ provisionalNYGWR14-0.65+0.16-0.05+0.37
138Sterling Shepard◦ provisionalTBWR54-0.05+0.16-0.03+0.35
139Garrett Wilson◦ provisionalNYJWR60-0.03+0.16-0.03+0.34
140Ray-Ray McCloud◦ provisionalNYGWR15-0.63+0.16-0.05+0.36
141Treylon Burks◦ provisionalWASWR22-0.40+0.15-0.05+0.36
142Konata Mumpfield◦ provisionalLAWR23-0.38+0.15-0.05+0.35
143Emeka Egbuka◦ provisionalTBWR128+0.06+0.15-0.01+0.31
144Allen Lazard◦ provisionalNYJWR18-0.54+0.15-0.05+0.36
145Calvin Austin III◦ provisionalPITWR55-0.08+0.15-0.04+0.34
146Olamide Zaccheaus◦ provisionalCHIWR66-0.06+0.15-0.04+0.33
147Xavier Legette◦ provisionalCARWR64-0.06+0.15-0.04+0.33
148Jauan Jennings◦ provisionalSFWR93-0.02+0.14-0.04+0.31
149Tyler Lockett◦ provisionalLVWR56-0.15+0.13-0.06+0.32
150Dont'e Thornton Jr.◦ provisionalLVWR30-0.40+0.13-0.07+0.33
151Rashid Shaheed◦ provisionalSEAWR92-0.05+0.13-0.04+0.30
152Malik Washington◦ provisionalMIAWR65-0.15+0.12-0.06+0.30
153Jahan Dotson◦ provisionalPHIWR36-0.42+0.11-0.09+0.31
154Elic Ayomanor◦ provisionalTENWR89-0.11+0.11-0.06+0.28
155Adonai Mitchell◦ provisionalNYJWR74-0.22+0.09-0.09+0.27
156Justin Jefferson◦ provisionalMINWR142-0.10+0.08-0.08+0.23
157Christian Kirk◦ provisionalHOUWR53-0.40+0.07-0.11+0.26
158Jerry Jeudy◦ provisionalCLEWR106-0.30+0.02-0.15+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).