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

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
429 TE · 292 WR
targets to trust the number
shrunkrawthe shrink90% CI
0.00.10.20.30.40.5TE avgWR avg1Chris Godwin Jr.TB · 122+0.392Michael ThomasNO · 185+0.373Mecole HardmanKC · 41+0.344A.J. BrownTEN · 84+0.335Cooper KuppLA · 135+0.336Tyreek HillKC · 89+0.337Tyler LockettSEA · 110+0.338Tajae SharpeTEN · 35+0.329Terry McLaurinWAS · 94+0.3210DeVante ParkerMIA · 128+0.3211Calvin RidleyATL · 95+0.3212Julio JonesATL · 158+0.3113Stefon DiggsMIN · 95+0.3114Amari CooperDAL · 119+0.3115John BrownBUF · 115+0.3116DeAndre HopkinsHOU · 151+0.3117Corey DavisTEN · 69+0.3018Hunter RenfrowLV · 72+0.3019Courtland SuttonDEN · 124+0.3020Kenny StillsHOU · 55+0.3021Allen LazardGB · 52+0.3022George KittleSF · 107+0.3023Davante AdamsGB · 128+0.3024Michael GallupDAL · 113+0.3025Kendrick BourneSF · 46+0.3026Keelan ColeJAX · 36+0.3027Kenny GolladayDET · 117+0.2928Miles BoykinBAL · 22+0.2929Marvin JonesDET · 91+0.2930Tyrell WilliamsLV · 64+0.2931Josh GordonSEA · 47+0.2932Andy IsabellaARI · 13+0.2933Tre'Quan SmithNO · 26+0.2934Laquon TreadwellMIN · 16+0.2835Jake KumerowGB · 21+0.2836Jared CookNO · 65+0.2837Marquise GoodwinSF · 21+0.2838Keelan DossLV · 14+0.2739Taysom HillNO · 22+0.2740DeAndre CarterHOU · 14+0.2741Hayden HurstBAL · 39+0.2742Will DisslySEA · 27+0.2643Foster MoreauLV · 25+0.2544Dan ArnoldARI · 14+0.25

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

EPA per target leaderboard for the 2019 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPostargetsRawShrunk90% interval
1Chris Godwin Jr.◦ provisionalTBWR122+0.70+0.39+0.26+0.52
2Michael Thomas◦ provisionalNOWR185+0.54+0.37+0.24+0.49
3Mecole Hardman◦ provisionalKCWR41+0.90+0.34+0.19+0.49
4A.J. Brown◦ provisionalTENWR84+0.59+0.33+0.19+0.47
5Cooper Kupp◦ provisionalLAWR135+0.49+0.33+0.20+0.47
6Tyreek Hill◦ provisionalKCWR89+0.56+0.33+0.19+0.47
7Tyler Lockett◦ provisionalSEAWR110+0.51+0.33+0.19+0.46
8Tajae Sharpe◦ provisionalTENWR35+0.82+0.32+0.17+0.47
9Terry McLaurin◦ provisionalWASWR94+0.51+0.32+0.18+0.46
10DeVante Parker◦ provisionalMIAWR128+0.45+0.32+0.18+0.45
11Calvin Ridley◦ provisionalATLWR95+0.49+0.32+0.18+0.46
12Julio Jones◦ provisionalATLWR158+0.42+0.31+0.18+0.44
13Stefon Diggs◦ provisionalMINWR95+0.48+0.31+0.17+0.45
14Amari Cooper◦ provisionalDALWR119+0.44+0.31+0.18+0.45
15John Brown◦ provisionalBUFWR115+0.44+0.31+0.17+0.45
16DeAndre Hopkins◦ provisionalHOUWR151+0.40+0.31+0.18+0.44
17Corey Davis◦ provisionalTENWR69+0.50+0.30+0.16+0.45
18Hunter Renfrow◦ provisionalLVWR72+0.48+0.30+0.16+0.45
19Courtland Sutton◦ provisionalDENWR124+0.41+0.30+0.17+0.44
20Kenny Stills◦ provisionalHOUWR55+0.53+0.30+0.16+0.45
21Allen Lazard◦ provisionalGBWR52+0.55+0.30+0.15+0.45
22George Kittle◦ provisionalSFTE107+0.54+0.30+0.19+0.40
23Davante Adams◦ provisionalGBWR128+0.39+0.30+0.16+0.43
24Michael Gallup◦ provisionalDALWR113+0.40+0.30+0.16+0.43
25Kendrick Bourne◦ provisionalSFWR46+0.53+0.30+0.15+0.44
26Keelan Cole◦ provisionalJAXWR36+0.59+0.30+0.14+0.45
27Kenny Golladay◦ provisionalDETWR117+0.39+0.29+0.16+0.43
28Miles Boykin◦ provisionalBALWR22+0.78+0.29+0.14+0.45
29Marvin Jones◦ provisionalDETWR91+0.40+0.29+0.15+0.43
30Tyrell Williams◦ provisionalLVWR64+0.45+0.29+0.15+0.44
31Josh Gordon◦ provisionalSEAWR47+0.50+0.29+0.14+0.44
32Travis Kelce◦ provisionalKCTE136+0.46+0.29+0.19+0.39
33Chris Conley◦ provisionalJAXWR93+0.39+0.29+0.15+0.43
34Darius Slayton◦ provisionalNYGWR85+0.39+0.29+0.15+0.43
35Breshad Perriman◦ provisionalTBWR70+0.41+0.29+0.14+0.43
36Andy Isabella◦ provisionalARIWR13+0.91+0.29+0.13+0.44
37Tre'Quan Smith◦ provisionalNOWR26+0.60+0.29+0.13+0.44
38Mike Williams◦ provisionalLACWR90+0.37+0.29+0.15+0.43
39Deebo Samuel Sr.◦ provisionalSFWR82+0.37+0.28+0.14+0.43
40Laquon Treadwell◦ provisionalMINWR16+0.73+0.28+0.13+0.44
41Will Fuller◦ provisionalHOUWR71+0.38+0.28+0.14+0.43
42Jake Kumerow◦ provisionalGBWR21+0.59+0.28+0.13+0.44
43Mark Andrews◦ provisionalBALTE98+0.47+0.28+0.17+0.39
44Pharoh Cooper◦ provisionalARIWR33+0.47+0.28+0.13+0.43
45Adam Thielen◦ provisionalMINWR48+0.41+0.28+0.13+0.43
46Jared Cook◦ provisionalNOTE65+0.56+0.28+0.17+0.39
47Randall Cobb◦ provisionalDALWR83+0.35+0.28+0.14+0.42
48Marquise Goodwin◦ provisionalSFWR21+0.52+0.28+0.12+0.43
49Seth Roberts◦ provisionalBALWR35+0.42+0.28+0.12+0.43
50Marquise Brown◦ provisionalBALWR71+0.34+0.28+0.13+0.42
51Keelan Doss◦ provisionalLVWR14+0.60+0.27+0.12+0.43
52Damion Ratley◦ provisionalCLEWR24+0.46+0.27+0.12+0.43
53Taysom Hill◦ provisionalNOTE22+0.96+0.27+0.16+0.39
54T.Y. Hilton◦ provisionalINDWR68+0.33+0.27+0.13+0.42
55Adam Humphries◦ provisionalTENWR48+0.35+0.27+0.12+0.42
56Darren Waller◦ provisionalLVTE117+0.40+0.27+0.17+0.38
57Allen Hurns◦ provisionalMIAWR48+0.34+0.27+0.12+0.42
58DeAndre Carter◦ provisionalHOUWR14+0.51+0.27+0.11+0.43
59Jakobi Meyers◦ provisionalNEWR41+0.35+0.27+0.12+0.42
60Hayden Hurst◦ provisionalBALTE39+0.62+0.27+0.16+0.38
61Keenan Allen◦ provisionalLACWR149+0.29+0.27+0.14+0.40
62Byron Pringle◦ provisionalKCWR16+0.45+0.27+0.11+0.42
63DJ Chark◦ provisionalJAXWR120+0.29+0.27+0.13+0.40
64Willie Snead◦ provisionalBALWR46+0.32+0.27+0.12+0.42
65Brandon Zylstra◦ provisionalCARWR12+0.45+0.27+0.11+0.42
66Damiere Byrd◦ provisionalARIWR46+0.31+0.27+0.12+0.41
67John Ross◦ provisionalCINWR56+0.30+0.26+0.12+0.41
68Will Dissly◦ provisionalSEATE27+0.69+0.26+0.15+0.38
69Zach Pascal◦ provisionalINDWR73+0.28+0.26+0.12+0.41
70DJ Moore◦ provisionalCARWR136+0.27+0.26+0.13+0.39
71Taylor Gabriel◦ provisionalCHIWR48+0.28+0.26+0.11+0.41
72Allen Robinson◦ provisionalCHIWR154+0.27+0.26+0.13+0.39
73Kyle Rudolph◦ provisionalMINTE49+0.48+0.26+0.15+0.37
74Chester Rogers◦ provisionalINDWR28+0.29+0.26+0.11+0.41
75Malik Turner◦ provisionalSEAWR22+0.29+0.26+0.11+0.42
76Darren Fells◦ provisionalHOUTE48+0.46+0.26+0.15+0.37
77Duke Williams◦ provisionalBUFWR19+0.26+0.26+0.10+0.41
78Marcus Johnson◦ provisionalINDWR33+0.25+0.26+0.11+0.41
79Isaiah McKenzie◦ provisionalBUFWR39+0.25+0.26+0.11+0.41
80DK Metcalf◦ provisionalSEAWR102+0.25+0.26+0.12+0.40
81Bisi Johnson◦ provisionalMINWR45+0.25+0.26+0.11+0.41
82Phillip Dorsett◦ provisionalNEWR55+0.24+0.26+0.11+0.40
83Tim Patrick◦ provisionalDENWR31+0.23+0.26+0.10+0.41
84Tyler Eifert◦ provisionalCINTE64+0.38+0.26+0.14+0.37
85Brandin Cooks◦ provisionalLAWR73+0.24+0.26+0.11+0.40
86Demarcus Robinson◦ provisionalKCWR55+0.24+0.26+0.11+0.40
87Kelvin Harmon◦ provisionalWASWR44+0.23+0.25+0.11+0.40
88Scott Miller◦ provisionalTBWR26+0.20+0.25+0.10+0.41
89Anthony Miller◦ provisionalCHIWR85+0.24+0.25+0.11+0.40
90Mike Evans◦ provisionalTBWR119+0.24+0.25+0.12+0.39
91Tavon Austin◦ provisionalDALWR24+0.19+0.25+0.10+0.41
92Golden Tate◦ provisionalNYGWR85+0.23+0.25+0.11+0.39
93Ryan Griffin◦ provisionalNYJTE43+0.41+0.25+0.14+0.37
94Foster Moreau◦ provisionalLVTE25+0.52+0.25+0.14+0.37
95Dontrelle Inman◦ provisionalINDWR21+0.16+0.25+0.10+0.41
96David Moore◦ provisionalSEAWR34+0.19+0.25+0.10+0.40
97Kalif Raymond◦ provisionalTENWR12+0.08+0.25+0.09+0.41
98Tyler Higbee◦ provisionalLATE89+0.32+0.25+0.14+0.36
99Greg Ward◦ provisionalPHIWR40+0.20+0.25+0.10+0.40
100Diontae Johnson◦ provisionalPITWR92+0.22+0.25+0.11+0.39
101Braxton Berrios◦ provisionalNYJWR13+0.04+0.25+0.09+0.41
102Hunter Henry◦ provisionalLACTE77+0.32+0.25+0.14+0.36
103Jonnu Smith◦ provisionalTENTE44+0.37+0.25+0.14+0.36
104Charles Clay◦ provisionalARITE24+0.44+0.25+0.13+0.36
105Justin Hardy◦ provisionalATLWR27+0.13+0.25+0.09+0.40
106Dan Arnold◦ provisionalARITE14+0.55+0.25+0.13+0.36
107Trent Sherfield◦ provisionalARIWR13-0.02+0.25+0.09+0.40
108Benjamin Watson◦ provisionalNETE24+0.43+0.25+0.13+0.36
109Ricky Seals-Jones◦ provisionalCLETE23+0.42+0.25+0.13+0.36
110Blake Jarwin◦ provisionalDALTE41+0.34+0.25+0.13+0.36
111Demaryius Thomas◦ provisionalNYJWR58+0.18+0.25+0.10+0.39
112Sammy Watkins◦ provisionalKCWR91+0.20+0.24+0.11+0.38
113J.J. Arcega-Whiteside◦ provisionalPHIWR22+0.06+0.24+0.09+0.40
114Demetrius Harris◦ provisionalCLETE28+0.36+0.24+0.13+0.36
115Bennie Fowler◦ provisionalNYGWR37+0.13+0.24+0.09+0.39
116Andre Patton◦ provisionalLACWR17-0.01+0.24+0.09+0.40
117Justin Watson◦ provisionalTBWR26+0.07+0.24+0.09+0.40
118James O'Shaughnessy◦ provisionalJAXTE20+0.37+0.24+0.13+0.36
119Zach Ertz◦ provisionalPHITE136+0.26+0.24+0.14+0.35
120Tommy Sweeney◦ provisionalBUFTE13+0.40+0.24+0.13+0.36
121Chris Hogan◦ provisionalCARWR15-0.10+0.24+0.09+0.40
122Emmanuel Sanders◦ provisionalSFWR98+0.19+0.24+0.10+0.38
123Paul Richardson◦ provisionalWASWR42+0.12+0.24+0.09+0.39
124Austin Hooper◦ provisionalATLTE99+0.26+0.24+0.13+0.35
125Nick Boyle◦ provisionalBALTE44+0.28+0.24+0.13+0.35
126Damion Willis◦ provisionalCINWR16-0.09+0.24+0.08+0.40
127Marcedes Lewis◦ provisionalGBTE19+0.31+0.24+0.12+0.36
128James Washington◦ provisionalPITWR80+0.17+0.24+0.10+0.38
129Cody Latimer◦ provisionalNYGWR42+0.10+0.24+0.09+0.39
130Virgil Green◦ provisionalLACTE13+0.30+0.24+0.12+0.36
131Irv Smith◦ provisionalMINTE47+0.25+0.24+0.13+0.35
132Nick Vannett◦ provisionalPITTE22+0.25+0.24+0.12+0.35
133Jordan Akins◦ provisionalHOUTE55+0.24+0.24+0.13+0.35
134Derek Carrier◦ provisionalLVTE19+0.24+0.24+0.12+0.35
135Josh Hill◦ provisionalNOTE35+0.24+0.24+0.12+0.35
136Josh Reynolds◦ provisionalLAWR43+0.08+0.24+0.09+0.39
137Kaden Smith◦ provisionalNYGTE43+0.23+0.24+0.12+0.35
138Maxx Williams◦ provisionalARITE19+0.22+0.24+0.12+0.35
139Isaiah Ford◦ provisionalMIAWR35+0.05+0.24+0.08+0.39
140Seth DeValve◦ provisionalJAXTE18+0.22+0.24+0.12+0.35
141Deon Cain◦ provisionalPITWR20-0.10+0.24+0.08+0.39
142Jason Witten◦ provisionalDALTE85+0.23+0.24+0.13+0.34
143Jeff Heuerman◦ provisionalDENTE20+0.19+0.23+0.12+0.35
144Jimmy Graham◦ provisionalGBTE60+0.22+0.23+0.12+0.35
145Christian Kirk◦ provisionalARIWR109+0.17+0.23+0.10+0.37
146Ross Dwelley◦ provisionalSFTE22+0.17+0.23+0.12+0.35
147Adam Shaheen◦ provisionalCHITE14+0.12+0.23+0.12+0.35
148Josh Perkins◦ provisionalPHITE13+0.10+0.23+0.12+0.35
149Mack Hollins◦ provisionalMIAWR23-0.10+0.23+0.08+0.39
150Robert Tonyan◦ provisionalGBTE15+0.11+0.23+0.12+0.35
151Dante Pettis◦ provisionalSFWR24-0.09+0.23+0.08+0.39
152Jaron Brown◦ provisionalSEAWR28-0.05+0.23+0.08+0.38
153Danny Amendola◦ provisionalDETWR97+0.15+0.23+0.09+0.37
154Alshon Jeffery◦ provisionalPHIWR74+0.12+0.23+0.09+0.37
155Nick O'Leary◦ provisionalJAXTE18+0.10+0.23+0.12+0.35
156Ted Ginn◦ provisionalNOWR56+0.09+0.23+0.08+0.38
157Tyler Kroft◦ provisionalBUFTE14+0.03+0.23+0.11+0.35
158Ty Montgomery◦ provisionalNYJWR17-0.26+0.23+0.07+0.39
159O.J. Howard◦ provisionalTBTE53+0.18+0.23+0.12+0.34
160Delanie Walker◦ provisionalTENTE31+0.14+0.23+0.12+0.34
161Marquez Valdes-Scantling◦ provisionalGBWR56+0.08+0.23+0.08+0.38
162Geronimo Allison◦ provisionalGBWR56+0.08+0.23+0.08+0.38
163Cole Beasley◦ provisionalBUFWR108+0.15+0.23+0.09+0.37
164Dawson Knox◦ provisionalBUFTE50+0.16+0.23+0.12+0.34
165Matt LaCosse◦ provisionalNETE19+0.03+0.23+0.11+0.34
166Robert Woods◦ provisionalLAWR139+0.16+0.23+0.10+0.36
167Hale Hentges◦ provisionalWASTE15-0.04+0.23+0.11+0.34
168Albert Wilson◦ provisionalMIAWR62+0.08+0.23+0.08+0.37
169Jarvis Landry◦ provisionalCLEWR138+0.16+0.23+0.10+0.36
170T.J. Hockenson◦ provisionalDETTE59+0.15+0.23+0.11+0.34
171N'Keal Harry◦ provisionalNETE24+0.03+0.23+0.11+0.34
172Parris Campbell◦ provisionalINDWR24-0.18+0.23+0.07+0.38
173Russell Gage◦ provisionalATLWR74+0.09+0.22+0.08+0.37
174Jesse James◦ provisionalDETTE27+0.02+0.22+0.11+0.34
175Vyncint Smith◦ provisionalNYJWR31-0.11+0.22+0.07+0.38
176Christian Blake◦ provisionalATLWR25-0.19+0.22+0.07+0.38
177Blake Bell◦ provisionalKCTE15-0.18+0.22+0.11+0.34
178Auden Tate◦ provisionalCINWR80+0.09+0.22+0.08+0.36
179Robert Foster◦ provisionalBUFWR18-0.36+0.22+0.07+0.38
180Antonio Callaway◦ provisionalCLEWR15-0.48+0.22+0.07+0.38
181Jakeem Grant◦ provisionalMIAWR33-0.10+0.22+0.07+0.37
182Anthony Firkser◦ provisionalTENTE24-0.05+0.22+0.11+0.34
183C.J. Uzomah◦ provisionalCINTE41+0.06+0.22+0.11+0.33
184Sterling Shepard◦ provisionalNYGWR84+0.09+0.22+0.08+0.36
185Durham Smythe◦ provisionalMIATE14-0.28+0.22+0.10+0.34
186Logan Thomas◦ provisionalDETTE28-0.04+0.22+0.10+0.33
187Gerald Everett◦ provisionalLATE60+0.10+0.22+0.11+0.33
188Travis Benjamin◦ provisionalLACWR16-0.49+0.22+0.06+0.38
189Cameron Brate◦ provisionalTBTE55+0.07+0.22+0.11+0.33
190DaeSean Hamilton◦ provisionalDENWR52-0.02+0.22+0.07+0.36
191Greg Olsen◦ provisionalCARTE83+0.11+0.22+0.11+0.32
192Mohamed Sanu◦ provisionalNEWR89+0.07+0.21+0.07+0.36
193Geoff Swaim◦ provisionalJAXTE17-0.35+0.21+0.10+0.33
194Preston Williams◦ provisionalMIAWR60+0.00+0.21+0.07+0.36
195Jeremy Sprinkle◦ provisionalWASTE41-0.02+0.21+0.10+0.33
196Dallas Goedert◦ provisionalPHITE87+0.10+0.21+0.11+0.32
197Ian Thomas◦ provisionalCARTE30-0.13+0.21+0.10+0.33
198Curtis Samuel◦ provisionalCARWR105+0.08+0.21+0.07+0.35
199Jordan Matthews◦ provisionalPHITE12-0.69+0.21+0.09+0.33
200Evan Engram◦ provisionalNYGTE68+0.05+0.21+0.10+0.32
201Julian Edelman◦ provisionalNEWR154+0.12+0.21+0.08+0.34
202Robbie Chosen◦ provisionalNYJWR97+0.05+0.21+0.07+0.35
203Jack Doyle◦ provisionalINDTE73+0.03+0.21+0.10+0.32
204Vernon Davis◦ provisionalWASTE19-0.47+0.21+0.09+0.32
205KeeSean Johnson◦ provisionalARIWR43-0.15+0.21+0.06+0.36
206Rhett Ellison◦ provisionalNYGTE28-0.26+0.21+0.09+0.32
207Trey Burton◦ provisionalCHITE24-0.36+0.21+0.09+0.32
208Eric Ebron◦ provisionalINDTE52-0.06+0.21+0.09+0.32
209Noah Fant◦ provisionalDENTE66-0.01+0.20+0.09+0.31
210Luke Stocker◦ provisionalATLTE14-0.87+0.20+0.09+0.32
211Jacob Hollister◦ provisionalSEATE59-0.06+0.20+0.09+0.31
212Larry Fitzgerald◦ provisionalARIWR109+0.04+0.20+0.06+0.34
213JuJu Smith-Schuster◦ provisionalPITWR71-0.04+0.20+0.06+0.34
214Nelson Agholor◦ provisionalPHIWR70-0.05+0.20+0.06+0.34
215Mike Gesicki◦ provisionalMIATE89+0.01+0.20+0.09+0.31
216Donte Moncrief◦ provisionalPITWR15-1.04+0.20+0.04+0.35
217Jamison Crowder◦ provisionalNYJWR122+0.04+0.19+0.06+0.33
218Keke Coutee◦ provisionalHOUWR36-0.33+0.19+0.04+0.34
219Johnny Holton◦ provisionalPITWR15-1.08+0.19+0.04+0.35
220Dede Westbrook◦ provisionalJAXWR103-0.00+0.19+0.05+0.33
221Steven Sims◦ provisionalWASWR56-0.16+0.19+0.04+0.34
222Tyler Boyd◦ provisionalCINWR148+0.05+0.19+0.06+0.32
223Javon Wims◦ provisionalCHIWR39-0.33+0.19+0.04+0.34
224Vance McDonald◦ provisionalPITTE55-0.21+0.19+0.07+0.30
225Odell Beckham Jr.◦ provisionalCLEWR133+0.03+0.19+0.05+0.32
226Zay Jones◦ provisionalLVWR45-0.34+0.18+0.03+0.33
227Alex Erickson◦ provisionalCINWR78-0.13+0.18+0.04+0.32
228Trey Quinn◦ provisionalWASWR48-0.41+0.16+0.02+0.31
229Jarius Wright◦ provisionalCARWR58-0.34+0.16+0.01+0.31

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