Measuring Team Performance via Opponent Adjusted Expected Points
Author
Phil Henrickson
Published
January 13, 2025
1 Efficiency
I use my model of expected points for college football plays to estimate and measure a team’s overall performance on offense, defense, and special teams. I develop opponent-adjusted measures of team performance by fitting models to partial out the effect of individual teams on expected/predicted points.
1.1 Net Points per Play
Recall that an expected points model aims to measure the value of an individual play by asking how it affected a team’s ability to score points. For an offense this amounts to getting first downs and moving the ball down the field; for a defense it means limiting the other team’s ability to sustain drives and score.
Efficiency refers to the idea that good teams, on average, are net positive on the outcomes of plays - they are typically able to move the ball on offense and stop their opponent’s drives on defense.
Tangibly, we can measure a team’s efficiency by summarizing their net predicted points across all of their plays. For example, the following table shows the the top 5 teams by season in terms of raw overall efficiency for all completed seasons from 2007 to present.
Based purely on their on field play, this measure highlights a lot of the teams we would expect (2008 Florida, Alabama, 2013 Florida State, 2019 Ohio State/LSU, 2021 Georgia), but it also rates certain teams very highly that we wouldn’t necessarily expect to see (2012 Northern Illinois, 2015/2018 Appalachian State Nevada, 2020 Buffalo,)
Why is that happening? The issue is that these estimates are simply the average net points per play for each team over the course of a season. They don’t take into account the relative strength of the opposition faced - a 10 yard pass against UMass is considered the same as a 10 yard pass against Ohio State. An offense that plays a weaker schedule will generally perform better than one that plays against top teams, which will lead to a higher evaluation in terms of raw efficiency.
As an example, this means that in 2018, from a raw efficiency perspective, Appalachian State finished the regular season rated higher than Oklahoma. This is mainly because Appalachian State’s defense was rated so highly; Oklahoma had the highest rated (raw) offense but their defense was rated so poorly that it pulled their overall score down.
Now, compare the schedules of each of these two teams based on their opponents during the regular season, using the raw overall efficiency as the metric of strength.
team
opponent
overall
2015 - raw - ppa
Oklahoma
Akron
0.020
Oklahoma
Clemson
0.247
Oklahoma
Tennessee
0.161
Oklahoma
Tulsa
−0.053
Oklahoma
West Virginia
0.123
Oklahoma
Texas
−0.019
Oklahoma
Kansas State
−0.092
Oklahoma
Texas Tech
0.007
Oklahoma
Kansas
−0.409
Oklahoma
Iowa State
−0.112
Oklahoma
Baylor
0.277
Oklahoma
TCU
0.144
Oklahoma
Oklahoma State
0.138
total
—
—
0.432
team
opponent
overall
2015 - raw - ppa
Appalachian State
Ohio
0.026
Appalachian State
Clemson
0.247
Appalachian State
Old Dominion
−0.153
Appalachian State
Wyoming
−0.205
Appalachian State
Georgia State
−0.006
Appalachian State
Louisiana Monroe
−0.217
Appalachian State
Georgia Southern
0.161
Appalachian State
Troy
−0.024
Appalachian State
Arkansas State
0.122
Appalachian State
Idaho
−0.171
Appalachian State
Louisiana
−0.064
Appalachian State
South Alabama
−0.155
total
—
—
-0.439
Oklahoma didn’t play the toughest schedule in college football, but it was considerably harder than Appalachian State.
If we adjust for the strength of opponents, we can see that Appalachian State’s defense is still pretty highly rated, but their offense is heavily penalized due to opponent quality and their overall rating falls. Oklahoma, meanwhile, gets a slight improvement to their defense (they were still very poor overall that season) which boosts their overall rating.
How do we adjust a team’s offensive/defensive efficiency rating based on their opponents?
I use a ridge regression to partial out the effect of all offenses on all defenses on predicted points oer play. That is, I regress the net predicted points per play on a dummy variable for every offense, defense, as well as an indicator for home field advantage:
\[PPA = Offense_{i} + Defense_{j} + Home\]
The coefficient for each offense and defense represent that particular school’s average effect on predicted points per play conditional on all other teams. Good offenses will have positive coefficients (how much more the team scored on a given play than average) while good defenses will have negative coefficients (because they prevented other teams from scoring). Flipping the sign for defense (so that positive is considered good) produces each team’s offensive/defensive net points per play conditional on their opponents.
I fit regressions at the season level for all teams to examine each team’s offensive/defensive efficiency over the course of an entire season. The coefficients from these regressions can then used to examine how team’s perform on offensive/defense in terms of net points per play.
For example, the following visualization places all teams based on their offensive and defensive strengths in the 2023 season. The best teams are those in the upper right quadrant that have strong offenses and defenses. The worst teams are those in the bottom left quadrant with poor offenses and defenses.
Show the code
plot_teams_by_season =function(data, lim =0.4) { data |>pivot_wider(names_from =c("type"),values_from =c("estimate")) |>ggplot(aes(x=offense,y=defense,label = team,color = team))+geom_label(size =2, alpha =0.8) +scale_color_cfb()+facet_wrap(season ~.)+geom_hline(yintercept =0, linetype ='dotted')+geom_vline(xintercept =0, linetype ='dotted')+coord_cartesian(xlim =c(-lim, lim),ylim =c(-lim, lim))+labs(title ="Offensive and Defensive Efficiency by Season",subtitle = stringr::str_wrap("Opponent adjusted team offensive and defensive efficiency ratings based on net predicted points per play.", 120))+xlab("Offensive Net Points per Play")+ylab("Defensive Net Points per Play")}adjusted_efficiency_overall_ppa |>filter(play_situation !='special' ) |>filter(season ==2023) |>plot_teams_by_season()
I can examine a team’s performance year over year to see how program has fared since 2007.
2.1.1 Alabama
Alabama, for example, was a highly efficient team for basically the entirety of Nick Saban’s tenure. It shouldn’t be a shock that Alabama would rate highly, but it is interesting to see the difference in compositions of Nick Saban’s teams. The 2015/2016 Alabama teams were evidently defensive powerhouses while not being particularly noteworthy on offense. After 2017 Alabama became one of the best offensive teams in the country while their defenses were less highly rated.
In addition to examining team’s by their overall offensive/defensive performance, I further break down a team’s offensive/defensive based on their net points per play when passing or rushing. As before, I regress each team’s offense and defense on predicted points per play, fitting individual regressions by play type (pass or run). This allows me to estimate a team’s performance in different aspects of the game on both sides of the ball.
Alabama, for instance, had three down years of offensive passing efficiency from 2015-2017. That changed in 2018 when Alabama led the nation in passing efficiency for three straight years.
Iowa, meanwhile, looks exactly like what you would expect. They had fairly strong teams overall at the end of the 2010s, and their defensive has consistently been top tier since 2017, but their offensive efficiency has been, in highly sophisticated analytics terms, complete garbo.
Florida State was pretty up and down during this time period, with gradual improvement at the start of the Jimbo era culminating in the 2013 national championship. They then fell off during the Taggart era before rebounding (seemingly) under Norell.
Ohio State 2019 and Alabama 2018 at the top will probably start some fights but this looks pretty reasonable overall.
I can similarly break this out based on pass/rush offense and defense.
2.3 Categorizing Teams
What is the relationship between offense and defense? Do teams with good rushing offense tend to also have good passing?
On offense, there’s generally a positive relationship between passing and rushing, as good offenses tend to be able to pass and run the ball. There are some interesting teams that stick out though, such as Georgia Southern in 2015 with a strong rushing game but essentially no passing game.
Pass/rush defense also tends to be related in the same way, though there are some outliers such as Navy 2022 and Miami Ohio in 2020 that were evidently strong at defending the pass but bad at defending the run?
I’m interested to see what it looks if we map every team-season based on each of these offensive/defensive categories. Basically, I want to take the information of the previous two plots and collapse it into one chart where we can see teams that are strong on both sides of the ball vs teams that are strong at only area.
To do this, I’ll fit a PCA to offensive/defensive categories to reduce the dimensionality of the data and plot every team on the first two resulting principal components.
This should provide us a (somewhat messy) mapping that characterizes different types of teams based on their team efficiences in offense/defense situations. I’ll place all teams in 2023.
The first principal component maps to overall strength, meaning the best teams are those that are highest on y axis (Michigan, Oregon, Ohio State) while the second principal component maps to a team’s balance between offense/defense.
Teams that are stronger at offense than defense (Oregon, Liberty, New Mexico) are on the left side of the charter while teams that are stronger at defense than offense are on the right (Penn State, Iowa).