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

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
595
targets to trust the number
shrunkrawthe shrink90% CI
0.10.20.30.4WR avg1Jaylen WaddleMIA · 118+0.292Stefon DiggsBUF · 154+0.283Justin JeffersonMIN · 185+0.274Tee HigginsCIN · 110+0.265DeVonta SmithPHI · 137+0.266George PickensPIT · 85+0.267Rashid ShaheedNO · 34+0.268JuJu Smith-Schust…KC · 102+0.269Jerry JeudyDEN · 100+0.2610CeeDee LambDAL · 156+0.2611Tyreek HillMIA · 170+0.2612Amon-Ra St. BrownDET · 146+0.2613A.J. BrownPHI · 145+0.2514Amari CooperCLE · 133+0.2515Terry McLaurinWAS · 120+0.2516Darius SlaytonNYG · 71+0.2517Christian WatsonGB · 66+0.2518Trenton IrwinCIN · 23+0.2519Brandon AiyukSF · 114+0.2520Jakobi MeyersNE · 98+0.2421Zay JonesJAX · 122+0.2422Michael ThomasNO · 22+0.2423Marquise GoodwinSEA · 42+0.2424Randall CobbGB · 50+0.2425Mecole HardmanKC · 34+0.2426Tyler LockettSEA · 117+0.2427Terrace Marshall …CAR · 47+0.2428Mike WilliamsLAC · 93+0.2429Olamide ZaccheausATL · 61+0.2430Mack HollinsLV · 94+0.2431DJ CharkDET · 52+0.2432Kendall HintonDEN · 33+0.2433KhaDarel HodgeATL · 21+0.2434Devin DuvernayBAL · 49+0.2435Ray-Ray McCloudSF · 25+0.2336Byron PringleCHI · 16+0.2337Jalen NailorMIN · 13+0.2338Tom KennedyDET · 15+0.23

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

EPA per target leaderboard for the 2022 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Jaylen Waddle◦ provisionalMIAWR118+0.64+0.29+0.19+0.39
2Stefon Diggs◦ provisionalBUFWR154+0.49+0.28+0.18+0.38
3Justin Jefferson◦ provisionalMINWR185+0.41+0.27+0.17+0.36
4Tee Higgins◦ provisionalCINWR110+0.50+0.26+0.16+0.37
5DeVonta Smith◦ provisionalPHIWR137+0.44+0.26+0.16+0.36
6George Pickens◦ provisionalPITWR85+0.53+0.26+0.16+0.36
7Rashid Shaheed◦ provisionalNOWR34+0.91+0.26+0.15+0.37
8JuJu Smith-Schuster◦ provisionalKCWR102+0.48+0.26+0.16+0.36
9Jerry Jeudy◦ provisionalDENWR100+0.47+0.26+0.16+0.36
10CeeDee Lamb◦ provisionalDALWR156+0.40+0.26+0.16+0.36
11Tyreek Hill◦ provisionalMIAWR170+0.38+0.26+0.16+0.35
12Amon-Ra St. Brown◦ provisionalDETWR146+0.39+0.26+0.16+0.35
13A.J. Brown◦ provisionalPHIWR145+0.39+0.25+0.15+0.35
14Amari Cooper◦ provisionalCLEWR133+0.39+0.25+0.15+0.35
15Terry McLaurin◦ provisionalWASWR120+0.41+0.25+0.15+0.35
16Darius Slayton◦ provisionalNYGWR71+0.50+0.25+0.15+0.36
17Christian Watson◦ provisionalGBWR66+0.47+0.25+0.14+0.35
18Trenton Irwin◦ provisionalCINWR23+0.86+0.25+0.14+0.35
19Brandon Aiyuk◦ provisionalSFWR114+0.37+0.25+0.14+0.35
20Jakobi Meyers◦ provisionalNEWR98+0.38+0.24+0.14+0.35
21Zay Jones◦ provisionalJAXWR122+0.34+0.24+0.14+0.34
22Michael Thomas◦ provisionalNOWR22+0.76+0.24+0.13+0.35
23Marquise Goodwin◦ provisionalSEAWR42+0.50+0.24+0.13+0.35
24Randall Cobb◦ provisionalGBWR50+0.45+0.24+0.13+0.35
25Mecole Hardman◦ provisionalKCWR34+0.55+0.24+0.13+0.35
26Tyler Lockett◦ provisionalSEAWR117+0.33+0.24+0.14+0.34
27Terrace Marshall Jr.◦ provisionalCARWR47+0.46+0.24+0.13+0.35
28Mike Williams◦ provisionalLACWR93+0.34+0.24+0.13+0.34
29Olamide Zaccheaus◦ provisionalATLWR61+0.39+0.24+0.13+0.34
30Mack Hollins◦ provisionalLVWR94+0.33+0.24+0.13+0.34
31Tyler Boyd◦ provisionalCINWR85+0.34+0.24+0.13+0.34
32DJ Chark◦ provisionalDETWR52+0.41+0.24+0.13+0.34
33Kendall Hinton◦ provisionalDENWR33+0.50+0.24+0.13+0.34
34KhaDarel Hodge◦ provisionalATLWR21+0.65+0.24+0.13+0.34
35Devin Duvernay◦ provisionalBALWR49+0.40+0.24+0.13+0.34
36Richie James◦ provisionalNYGWR70+0.35+0.24+0.13+0.34
37Jahan Dotson◦ provisionalWASWR63+0.35+0.23+0.13+0.34
38Ray-Ray McCloud◦ provisionalSFWR25+0.50+0.23+0.12+0.34
39Keenan Allen◦ provisionalLACWR89+0.30+0.23+0.13+0.34
40Kalif Raymond◦ provisionalDETWR64+0.33+0.23+0.13+0.34
41Byron Pringle◦ provisionalCHIWR16+0.56+0.23+0.12+0.34
42DeVante Parker◦ provisionalNEWR47+0.33+0.23+0.12+0.34
43Jalen Nailor◦ provisionalMINWR13+0.59+0.23+0.12+0.34
44Wan'Dale Robinson◦ provisionalNYGWR31+0.38+0.23+0.12+0.34
45Tom Kennedy◦ provisionalDETWR15+0.53+0.23+0.12+0.34
46Sammy Watkins◦ provisionalBALWR27+0.38+0.23+0.12+0.34
47Russell Gage◦ provisionalTBWR72+0.28+0.23+0.12+0.33
48Curtis Samuel◦ provisionalWASWR93+0.27+0.23+0.12+0.33
49Ashton Dulin◦ provisionalINDWR22+0.38+0.23+0.12+0.34
50Laviska Shenault Jr.◦ provisionalCARWR32+0.32+0.23+0.12+0.33
51Khalil Shakir◦ provisionalBUFWR21+0.37+0.23+0.12+0.34
52Kadarius Toney◦ provisionalKCWR20+0.37+0.23+0.12+0.34
53Cedrick Wilson Jr.◦ provisionalMIAWR18+0.38+0.23+0.12+0.34
54Kendrick Bourne◦ provisionalNEWR48+0.28+0.23+0.12+0.33
55Damiere Byrd◦ provisionalATLWR23+0.33+0.23+0.12+0.33
56Van Jefferson◦ provisionalLAWR44+0.27+0.22+0.12+0.33
57Christian Kirk◦ provisionalJAXWR134+0.24+0.22+0.12+0.32
58Alec Pierce◦ provisionalINDWR78+0.25+0.22+0.12+0.33
59Dyami Brown◦ provisionalWASWR14+0.35+0.22+0.12+0.33
60Keelan Cole◦ provisionalLVWR21+0.30+0.22+0.12+0.33
61K.J. Osborn◦ provisionalMINWR90+0.24+0.22+0.12+0.33
62Jauan Jennings◦ provisionalSFWR56+0.25+0.22+0.12+0.33
63Tre'Quan Smith◦ provisionalNOWR27+0.27+0.22+0.12+0.33
64David Sills◦ provisionalNYGWR17+0.29+0.22+0.11+0.33
65Jamal Agnew◦ provisionalJAXWR31+0.25+0.22+0.11+0.33
66Garrett Wilson◦ provisionalNYJWR147+0.23+0.22+0.12+0.32
67Darnell Mooney◦ provisionalCHIWR62+0.23+0.22+0.12+0.33
68Ja'Marr Chase◦ provisionalCINWR134+0.23+0.22+0.12+0.32
69Justin Watson◦ provisionalKCWR34+0.22+0.22+0.11+0.33
70Courtland Sutton◦ provisionalDENWR109+0.22+0.22+0.12+0.32
71Isaiah Hodgins◦ provisionalNYGWR49+0.22+0.22+0.11+0.33
72Josh Palmer◦ provisionalLACWR108+0.22+0.22+0.12+0.32
73DeAndre Carter◦ provisionalLACWR65+0.21+0.22+0.12+0.33
74Marquez Valdes-Scantling◦ provisionalKCWR81+0.21+0.22+0.12+0.32
75Rondale Moore◦ provisionalARIWR56+0.20+0.22+0.11+0.33
76Josh Reynolds◦ provisionalDETWR59+0.20+0.22+0.11+0.33
77Chris Olave◦ provisionalNOWR120+0.21+0.22+0.12+0.32
78River Cracraft◦ provisionalMIAWR14+0.10+0.22+0.11+0.33
79Skyy Moore◦ provisionalKCWR33+0.17+0.22+0.11+0.33
80Julio Jones◦ provisionalTBWR43+0.17+0.22+0.11+0.33
81Mike Evans◦ provisionalTBWR128+0.20+0.22+0.12+0.32
82Chris Godwin Jr.◦ provisionalTBWR145+0.21+0.22+0.12+0.32
83Greg Dortch◦ provisionalARIWR64+0.19+0.22+0.11+0.32
84Amari Rodgers◦ provisionalHOUWR26+0.14+0.22+0.11+0.33
85DeSean Jackson◦ provisionalBALWR17+0.10+0.22+0.11+0.33
86Corey Davis◦ provisionalNYJWR64+0.18+0.22+0.11+0.32
87Allen Robinson◦ provisionalLAWR52+0.17+0.22+0.11+0.32
88Donovan Peoples-Jones◦ provisionalCLEWR96+0.19+0.22+0.11+0.32
89Isaiah McKenzie◦ provisionalBUFWR65+0.17+0.22+0.11+0.32
90Jalen Reagor◦ provisionalMINWR13-0.01+0.22+0.11+0.33
91Rashod Bateman◦ provisionalBALWR28+0.09+0.22+0.11+0.32
92Tutu Atwell◦ provisionalLAWR35+0.12+0.22+0.11+0.32
93KJ Hamler◦ provisionalDENWR14-0.04+0.22+0.11+0.33
94Zach Pascal◦ provisionalPHIWR19+0.02+0.22+0.11+0.32
95Jamison Crowder◦ provisionalBUFWR13-0.08+0.21+0.11+0.32
96Trent Sherfield◦ provisionalMIAWR51+0.13+0.21+0.11+0.32
97Cooper Kupp◦ provisionalLAWR98+0.17+0.21+0.11+0.32
98Davante Adams◦ provisionalLVWR181+0.19+0.21+0.12+0.31
99Dee Eskridge◦ provisionalSEAWR13-0.15+0.21+0.10+0.32
100Kyle Philips◦ provisionalTENWR13-0.15+0.21+0.10+0.32
101Gabe Davis◦ provisionalBUFWR93+0.16+0.21+0.11+0.32
102Equanimeous St. Brown◦ provisionalCHIWR38+0.08+0.21+0.11+0.32
103Kenny Golladay◦ provisionalNYGWR17-0.10+0.21+0.10+0.32
104Marvin Jones◦ provisionalJAXWR81+0.14+0.21+0.11+0.32
105Breshad Perriman◦ provisionalTBWR19-0.13+0.21+0.10+0.32
106Brandon Powell◦ provisionalLAWR32+0.00+0.21+0.10+0.32
107Michael Bandy◦ provisionalLACWR21-0.11+0.21+0.10+0.32
108Treylon Burks◦ provisionalTENWR54+0.07+0.21+0.10+0.32
109DJ Moore◦ provisionalCARWR118+0.15+0.21+0.11+0.31
110Hunter Renfrow◦ provisionalLVWR51+0.06+0.21+0.10+0.32
111Scott Miller◦ provisionalTBWR40+0.02+0.21+0.10+0.32
112Nick Westbrook-Ikhine◦ provisionalTENWR50+0.05+0.21+0.10+0.31
113Denzel Mims◦ provisionalNYJWR25-0.11+0.21+0.10+0.32
114Sterling Shepard◦ provisionalNYGWR24-0.13+0.21+0.10+0.32
115Chris Moore◦ provisionalHOUWR74+0.10+0.21+0.10+0.31
116Michael Pittman◦ provisionalINDWR142+0.15+0.21+0.11+0.31
117Allen Lazard◦ provisionalGBWR101+0.11+0.21+0.10+0.31
118Robert Woods◦ provisionalTENWR91+0.10+0.21+0.10+0.31
119Deebo Samuel Sr.◦ provisionalSFWR94+0.10+0.20+0.10+0.31
120Steven Sims◦ provisionalPITWR23-0.25+0.20+0.10+0.31
121Marcus Johnson◦ provisionalNYGWR23-0.27+0.20+0.09+0.31
122Adam Thielen◦ provisionalMINWR109+0.10+0.20+0.10+0.30
123Drake London◦ provisionalATLWR118+0.11+0.20+0.10+0.30
124Demarcus Robinson◦ provisionalBALWR75+0.05+0.20+0.10+0.31
125Elijah Moore◦ provisionalNYJWR65+0.02+0.20+0.10+0.31
126Phillip Dorsett◦ provisionalHOUWR40-0.09+0.20+0.09+0.31
127Tyquan Thornton◦ provisionalNEWR45-0.06+0.20+0.09+0.31
128Cam Sims◦ provisionalWASWR18-0.48+0.20+0.09+0.31
129Marquez Callaway◦ provisionalNOWR32-0.19+0.20+0.09+0.31
130DeAndre Hopkins◦ provisionalARIWR98+0.07+0.20+0.10+0.30
131James Proche◦ provisionalBALWR17-0.57+0.20+0.09+0.31
132Brandin Cooks◦ provisionalHOUWR93+0.05+0.20+0.10+0.30
133Nico Collins◦ provisionalHOUWR66-0.02+0.20+0.09+0.30
134Michael Gallup◦ provisionalDALWR74-0.01+0.20+0.09+0.30
135Braxton Berrios◦ provisionalNYJWR32-0.28+0.20+0.09+0.30
136Romeo Doubs◦ provisionalGBWR67-0.04+0.20+0.09+0.30
137Jarvis Landry◦ provisionalNOWR40-0.19+0.20+0.09+0.30
138Brandon Johnson◦ provisionalDENWR14-0.92+0.20+0.09+0.30
139Robbie Chosen◦ provisionalARIWR44-0.16+0.20+0.09+0.30
140Ben Skowronek◦ provisionalLAWR61-0.09+0.19+0.09+0.30
141Shi Smith◦ provisionalCARWR42-0.22+0.19+0.09+0.30
142David Bell◦ provisionalCLEWR35-0.32+0.19+0.08+0.30
143Noah Brown◦ provisionalDALWR75-0.05+0.19+0.09+0.30
144DK Metcalf◦ provisionalSEAWR142+0.05+0.19+0.09+0.29
145Chase Claypool◦ provisionalCHIWR79-0.07+0.19+0.08+0.29
146Quez Watkins◦ provisionalPHIWR51-0.25+0.18+0.08+0.29
147Nelson Agholor◦ provisionalNEWR53-0.24+0.18+0.08+0.29
148Marquise Brown◦ provisionalARIWR107-0.03+0.18+0.08+0.29
149Dante Pettis◦ provisionalCHIWR42-0.39+0.18+0.07+0.29
150Parris Campbell◦ provisionalINDWR92-0.09+0.18+0.08+0.28
151A.J. Green◦ provisionalARIWR49-0.37+0.18+0.07+0.28
152Diontae Johnson◦ provisionalPITWR149-0.03+0.17+0.07+0.27

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