NFL team efficiency
How well each team moves the ball, and stops it, per play. EPA per play (expected points added) measures how much each play changed a team’s expected points, so it credits a 6-yard gain on 3rd-and-5 more than on 3rd-and-10. Success rate is the share of plays with positive EPA. Defense numbers are what the defense allowed, so lower is better there; the chart flips that axis so up is always better. Opponent-adjusted numbers remove the strength of the opponents each team faced (see the note below). Move the week slider, or press play, to watch the season unfold. Click a team for its weekly page.
Regular season only, 2016–2026 (through week 10 of 2026). Plays counted: passes (including sacks and scrambles) and runs; two-point tries, kneel-downs, and spikes are left out. Garbage time removes 4th-quarter plays when the offense’s win probability is below 10% or above 90%. Opponent adjustment removes the strength of the opponents each team faced: every play’s EPA is fit on the offense, the defense, and home field together (ridge regression), and each team’s own EPA/play is corrected by the average strength of the defenses (or offenses) it played. The team-strength estimates use a penalty λ = 1,600 plays, the value that best predicted the next week’s game margins from ratings through each week (2016–2025, weeks 3 on, 2,160 games). In the NFL the correction is modest, because schedules are fairly balanced: adjusted EPA/play predicted the next week’s margins about as well as raw (mean absolute error 10.47 vs. 10.48 points), and both beat home field alone (11.10). The strength estimates themselves, which also pull teams toward average when there’s little data, predicted best (10.39): for forecasting, regression to the mean matters more than schedule. Definitions are in the glossary. Data: nflverse play-by-play (CC-BY 4.0), whose EPA, win probability, and expected pass rate models these numbers use. Model version: NFL opponent adjustment v1.0.0 (experimental: validated before the backtest harness existed; its harness port is pending).