Skip to content
MBStats

Stat Card / Efficiency

EPA per play

Expected points added divided by offensive snaps. The best single-number measure of how good an offense or defense is.

Sample size warning

One week is roughly 60 plays and week-to-week EPA per play swings hard. Use season views for team quality.

What it measures

Average value created (or allowed) per offensive snap. Where raw EPA totals reward teams that simply run more plays, EPA per play puts every offense on the same scale: how much did the average snap move the team toward points? League average sits near zero by construction, elite offenses live around +0.10 to +0.20 over a season, and bad ones sit below -0.05. For defenses the def columns read the other way: more negative means fewer expected points allowed per snap.

How it is computed here

The mean of the nflverse EPA value across a team's offensive snaps: every pass or rush play with an EPA estimate. Special teams and plays voided by penalty are excluded, so this is an offense-vs-defense number, not a whole-roster number. The same computation runs at the season, week, game, and situation-bucket grain, and league_baselines carries the league-wide mean so you can always draw the average line on a chart.

How fast it stabilizes

Team EPA per play is one of the faster-stabilizing efficiency numbers because every snap counts, roughly 1,000 offensive snaps per team per season. Even so, a single game (about 60 snaps) is a small sample, and a single week can move a team's rank by ten spots. Around a quarter of a season it starts to look like signal; a full season is a solid read on quality.

How it gets misused

  • Reading one game's EPA per play as a power ranking. It is a great description of that game and a weak prediction of the next one.
  • Ignoring opponent quality. Raw EPA per play is not adjusted for schedule here, and a soft stretch of defenses inflates it.
  • Mixing up the defensive sign. A defense "leading the league" in EPA per play should have the most negative value, not the largest.
  • Comparing narrow situation buckets without checking the plays column first. Bucket rates are built from far fewer snaps than season rates.

Where it lives in the data

The dictionary columns behind this metric, straight from the shipped views. Explore any of them at /explore.

ViewColumnTypeDescription
team_seasonoff_epa_per_playDOUBLEOffensive expected points added per play. The best single-number offense metric.
team_seasondef_epa_per_playDOUBLEEPA per play allowed. Lower (more negative) is better defense.
team_weekoff_epa_per_playDOUBLEOffensive expected points added per play. The best single-number offense metric.
team_gameoff_epa_per_playDOUBLEOffensive EPA per play in this game.
situation_teamepa_per_playDOUBLEEPA per play in this bucket.
league_baselinesepa_per_playDOUBLELeague-average EPA per offensive play.

Related metrics

Formulas reference the nflverse play-by-play columns our ingest actually uses; the reference table above is generated from the live data dictionary. Back to the full glossary.