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 dropback · 2023

Mean QB EPA per dropback.

Beats raw by
14.9%
lower out-of-sample error
RMSE raw → shrunk
0.17 → 0.14
odd vs. even weeks
Split-half reliability
0.47
how repeatable the raw stat is
Stabilizes at
151
dropbacks to trust the number
shrunkrawthe shrink90% CI
-0.4-0.20.00.2avg1Brock PurdySF · 469+0.232Tua TagovailoaMIA · 589+0.163Dak PrescottDAL · 631+0.154Josh AllenBUF · 605+0.125Jordan LoveGB · 609+0.126Jared GoffDET · 636+0.107Lamar JacksonBAL · 494+0.098C.J. StroudHOU · 535+0.099Jalen HurtsPHI · 575+0.0910Kirk CousinsMIN · 326+0.0811Matthew StaffordLA · 551+0.0812Baker MayfieldTB · 610+0.0713Patrick MahomesKC · 622+0.0714Mason RudolphPIT · 80+0.0615Jake BrowningCIN · 268+0.0616Geno SmithSEA · 528+0.0517Carson WentzLA · 27+0.0518Justin HerbertLAC · 486+0.0419Nick MullensMIN · 159+0.0420Derek CarrNO · 581+0.0421Anthony RichardsonIND · 93+0.0322Jarrett StidhamDEN · 73+0.0223C.J. BeathardJAX · 60+0.0224Andy DaltonCAR · 61+0.0225Tyler HuntleyBAL · 41+0.0226Joe BurrowCIN · 388+0.0127Tyrod TaylorNYG · 192+0.0128Sam DarnoldSF · 51+0.0029Trevor LawrenceJAX · 602+0.0030Joe FlaccoCLE · 213-0.00

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 dropback · 2023 · full board

EPA per dropback leaderboard for the 2023 NFL season, shrunk by empirical Bayes with 90% credible intervals, ranked by the shrunk estimate.
#PlayerTeamPosdropbacksRawShrunk90% interval
1Brock PurdySFQB469+0.31+0.23+0.13+0.34
2Tua TagovailoaMIAQB589+0.21+0.16+0.07+0.26
3Dak PrescottDALQB631+0.19+0.15+0.06+0.25
4Josh AllenBUFQB605+0.15+0.12+0.03+0.22
5Jordan LoveGBQB609+0.14+0.12+0.02+0.21
6Jared GoffDETQB636+0.13+0.10+0.01+0.20
7Lamar JacksonBALQB494+0.12+0.09-0.01+0.19
8C.J. StroudHOUQB535+0.11+0.09-0.01+0.19
9Jalen HurtsPHIQB575+0.11+0.09-0.01+0.18
10Kirk CousinsMINQB326+0.11+0.08-0.04+0.20
11Matthew StaffordLAQB551+0.10+0.08-0.02+0.18
12Baker MayfieldTBQB610+0.08+0.07-0.03+0.16
13Patrick MahomesKCQB622+0.08+0.07-0.03+0.16
14Mason Rudolph◦ provisionalPITQB80+0.18+0.06-0.11+0.23
15Jake BrowningCINQB268+0.09+0.06-0.07+0.18
16Geno SmithSEAQB528+0.06+0.05-0.05+0.15
17Carson Wentz◦ provisionalLAQB27+0.30+0.05-0.15+0.24
18Justin HerbertLACQB486+0.06+0.04-0.06+0.15
19Nick MullensMINQB159+0.08+0.04-0.11+0.19
20Derek CarrNOQB581+0.05+0.04-0.06+0.13
21Anthony Richardson◦ provisionalINDQB93+0.07+0.03-0.14+0.19
22Jarrett Stidham◦ provisionalDENQB73+0.07+0.02-0.15+0.20
23C.J. Beathard◦ provisionalJAXQB60+0.08+0.02-0.16+0.20
24Andy Dalton◦ provisionalCARQB61+0.07+0.02-0.16+0.20
25Tyler Huntley◦ provisionalBALQB41+0.09+0.02-0.17+0.21
26Joe BurrowCINQB388+0.02+0.01-0.10+0.12
27Tyrod TaylorNYGQB192+0.01+0.01-0.14+0.15
28Sam Darnold◦ provisionalSFQB51-0.00+0.00-0.18+0.18
29Trevor LawrenceJAXQB602-0.00+0.00-0.09+0.09
30Joe FlaccoCLEQB213-0.00-0.00-0.14+0.14
31Taylor Heinicke◦ provisionalATLQB142-0.01-0.00-0.16+0.15
32Drew Lock◦ provisionalSEAQB83-0.02-0.01-0.18+0.16
33Gardner MinshewINDQB527-0.01-0.01-0.11+0.09
34Davis Mills◦ provisionalHOUQB42-0.09-0.02-0.21+0.17
35Russell WilsonDENQB491-0.03-0.02-0.13+0.08
36Marcus Mariota◦ provisionalPHIQB26-0.20-0.03-0.22+0.17
37Cooper Rush◦ provisionalDALQB25-0.21-0.03-0.22+0.17
38Will LevisTENQB282-0.05-0.03-0.15+0.10
39Aidan O'ConnellLVQB367-0.05-0.03-0.15+0.08
40Kyler MurrayARIQB290-0.05-0.03-0.16+0.09
41Brian Hoyer◦ provisionalLVQB43-0.20-0.04-0.23+0.14
42Jameis Winston◦ provisionalNOQB49-0.20-0.05-0.23+0.14
43Jimmy GaroppoloLVQB183-0.10-0.05-0.20+0.09
44Ryan TannehillTENQB260-0.09-0.05-0.18+0.07
45Desmond RidderATLQB420-0.08-0.06-0.16+0.05
46Deshaun WatsonCLEQB187-0.10-0.06-0.20+0.08
47Jeff Driskel◦ provisionalCLEQB29-0.38-0.06-0.25+0.13
48Justin FieldsCHIQB416-0.09-0.07-0.18+0.04
49Mitchell Trubisky◦ provisionalPITQB114-0.16-0.07-0.23+0.09
50Kenny PickettPITQB347-0.12-0.08-0.20+0.03
51Blaine Gabbert◦ provisionalKCQB36-0.45-0.09-0.28+0.10
52Tyson Bagent◦ provisionalCHIQB149-0.18-0.09-0.24+0.06
53Easton StickLACQB187-0.17-0.09-0.24+0.05
54Case Keenum◦ provisionalHOUQB59-0.35-0.10-0.28+0.08
55Brett Rypien◦ provisionalLAQB40-0.49-0.10-0.29+0.09
56Mac JonesNEQB368-0.15-0.10-0.22+0.01
57Sam HowellWASQB679-0.15-0.12-0.21-0.03
58PJ Walker◦ provisionalCLEQB121-0.29-0.13-0.29+0.03
59Tim Boyle◦ provisionalNYJQB86-0.36-0.13-0.30+0.04
60Tommy DeVitoNYGQB215-0.23-0.13-0.27+0.00
61Joshua DobbsMINQB450-0.18-0.14-0.24-0.03
62Dorian Thompson-Robinson◦ provisionalCLEQB117-0.33-0.15-0.30+0.01
63Trevor SiemianNYJQB161-0.34-0.17-0.32-0.03
64Daniel JonesNYGQB191-0.32-0.18-0.32-0.04
65Zach WilsonNYJQB413-0.25-0.18-0.29-0.07
66Clayton Tune◦ provisionalARIQB28-1.24-0.19-0.39+0.00
67Bailey ZappeNEQB236-0.35-0.21-0.34-0.08
68Bryce YoungCARQB589-0.27-0.21-0.31-0.12

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