I wanted to do a quick introduction to this series I’ve been wanting to do. As I’ve mentioned, I love looking for hidden value, and the most common place that happens in the NBA is with advanced stats and analytics. So there are a large number of stats out there trying to evaluate players in different ways. So I wanted to take a look at some of those different stats and break them down.
For the first post in this series, I wanted to look at a stat that is more commonly used but still may seem a little confusing to someone that’s new to basketball. And for those of us familiar with it, we probably still don’t know exactly what ingredients go into pumping out the numbers we end up seeing. So with that, let’s take a look at Player Efficiency Rating, or PER.The Basics
PER is a stat created by John Hollinger (formerly of ESPN, currently with the Memphis Grizzlies), that attempts to encapsulate the entirety of a player’s performance per minute into one single number, relative to the rest of the league (league average PER is always 15), while adjusting for pace. It is a series of terms (some positive, some negative) that are added together, resulting in one number that represents that player’s contribution to his team.The Formula
So with that, let’s dive into the nitty gritty. I’ll list out the formula (as found on basketball-reference.com), and below that I will define each of the variables and take a closer look at what it’s doing.
uPER = ( 1 / MP ) * [ 3P + ( 2 / 3 ) * AST + ( 2 – factor * ( team_AST / team_FG ) ) * FG + ( FT * 0.5 * ( 1 + ( 1 – ( team_AST / team_FG ) ) + ( 2 / 3 ) * ( team_AST / team_FG ) ) ) – VOP * TOV – VOP * DRB% * ( FGA – FG ) – VOP * 0.44 * ( 0.44 + ( 0.56 * DRB% ) ) * ( FTA – FT ) + VOP * ( 1 – DRB% ) * ( TRB – ORB ) + VOP * DRB% * ORB + VOP * STL + VOP * DRB% * BLK – PF * ( ( lg_FT / lg_PF ) – 0.44 * ( lg_FTA / lg_PF ) * VOP ) ]
WHEW! That, my friends, is a long equation. BUT WAIT! THERE’S MORE! First of all, some of you probably noticed that this formula hasn’t accounted for pace anywhere. What’s more, you might have noticed that absolutely nowhere in the formula is the number 15. “But Rob, didn’t you tell me this was a pace-adjusted formula and didn’t you say that it’s normalized to a league average of 15?” Congrats! You’d be correct. What is listed above is actually “unadjusted PER,” meaning that we haven’t accounted for pace yet, or normalized it. So to get there we need to take two more steps: first we adjust for pace, which we can call aPER:
aPER = uPER * lg_Pace / tm_Pace
Then, we normalize it at 15 being the league average to get our final PER number, which is what you see when you look up the stat online:
PER = aPER * (15 / lg_aPER )
Congratulations on making it this far! Now, you might have realized that in the above paragraph, I said “First of all…” but had no following “second of all…” in the paragraph. Well here it is! Second of all, that formula has at least one variable that is completely unrecognizable. For example, what on earth is “factor?” Well a couple of these are small formulas on their own, while the others are standard NBA variables. So let me just list out and explain each piece.
- MP = Minutes played (remember, this is a per minute stat)
- 3P = 3-point field goals made
- AST = Assists
- FG = Field goals made
- FT = Free throws made
- FGA = Field goals attempted
- TRB = Total rebounds
- ORB = Offensive rebounds
- TOV = Turnovers
- factor = ( 2 / 3 ) – ( 0.5 * ( lg_AST / lg_FG ) ) / (2 * ( lg_FG / lg_FT ) )
- This is admittedly the strangest part of the whole equation… I will have a section below discussing this
- VOP = lg_PTS / ( lg_FGA – lg_ORB + lg_TOV + 0.44 * lg_FTA )
- This piece of the formula is essentially estimating the value of a possession, or the average points per possession across the league, with the numerator being league points and the denominator being an estimate of league possessions. The constant 0.44 is an estimate of the percentage of free throws that end a possession. However, it should be noted VOP is not a highly accurate estimate.
- DRB% = League average defensive rebounding percentage ( ( lg_TRB – lg_ORB ) / lg_TRB )
- STL = Steals
- BLK = Blocks
- PF = Personal fouls
There we go! Now we have all the pieces to the puzzle. Now let’s go through this monster of an equation and try and talk through what it’s doing.Parsing the Equation
We’ve already explained the parts about adjusting for pace and normalizing to a league average of 15, so here we will focus on what’s going into uPER. Let’s take it term by term:
- 1/MP * the rest of the formula
- Dividing by minutes played to make it a per minute stat. Easy enough.
- 3P made is it’s own part of the equation, weighted at 1.
- + ( 2 / 3 ) * AST
- Weighting an assist as 2/3. This fact combined with the weighting of 3P is a red flag for me. Yes there are additional factors below that don’t make it that simple, but already I’m starting to question the reasoning behind how this is calculated.
- + ( 2 – factor * ( team_AST / team_FG) ) * FG
- Alright, starting to get fun now! Let me first state that “factor” is an interesting piece all on it’s own, so I’ll give it its own paragraph below. But with that in mind, let’s simplify it by not deep-diving into “factor” yet. So that leaves us with 2 * FG as a piece of the equation, then you subtract out factor * FG * the percentage of team’s FGs that are assisted. This seems to be weighting FGs as 2, but also subtracting some value based on how many of those FGs were assisted, which makes some sense (though it’s not a perfect assumption by any means). When you consider 3P was weighted at 1, this is essentially giving us total points scored outside of FT ( 2 * FG + 3P ) while making a slight tweak for if they were assisted.
- + ( FT * 0.5 * ( 1 + ( 1 – ( team_AST / team_FG ) ) + ( 2 / 3 ) * ( team_AST / team_FG ) ) )
- Here we’re starting to factor FTs. But Hollinger is also again attempting to differentiate between assisted vs. unassisted. As above, t’s pretty simplified by taking the team’s unassisted FG rate ( 1 – ( team_AST / team_FG) ) and then a 2/3 weighting of the team’s assisted FG rate. So here, the player’s FT is weighted between 0.83 and 1 according to the team’s assist rate (.83 if every FG is assisted; 1 if no FG is assisted).
- – VOP * TOV
- This is our first negative term. Again, VOP is an estimate of the league average points per possession. So here we’re subtracting out the average points per possession across the league that this player lost out on due to turnovers.
- – VOP * DRB% * ( FGA – FG )
- Here we have another negative term, but this time we’re subtracting out the average points per possession (across the league) lost due to missed FG. Notice we’re only accounting for missed points that we assume aren’t rebounded by the offensive, by taking the league average DRB% and multiplying by missed FG and again by VOP.
- – VOP * 0.44 * ( 0.44 + ( 0.56 * DRB% ) ) * ( FTA – FT )
- This piece of the formula looks complicated, but I’ll give you the simplified version first: we are calculating expected missed points due to missed FTs. Remember that 0.44 is a constant that is the rate at which a FT shot ends a possession (in other words, 44% of FTs are the last shot of a possession, generally speaking). So that middle term is looking for the rate at which a free throw not ending the possession does not result in an offensive rebound. So ultimately here we’re taking VOP * .44 * (an estimate of the rate at with your team does not secure an offensive rebound on a FT) * FT missed.
- + VOP * ( 1 – DRB% ) * ( TRB – ORB )
- This looks to be an estimation of how many points the player “contributed” by rebounding, thus reducing the other team’s opportunity to score. So we have VOP * the league’s average offensive rebound rate * the number of the player’s defensive rebounds.
- + VOP * DRB% * ORB
- Here we have the VOP created by offensive rebounds, weighted by the DRB% of the league (so if they league as a whole doesn’t defensive rebound as well, offensive rebounds aren’t as valuable)
- + VOP * STL
- This is straightforward enough: VOP created by steals
- + VOP * DRB% * BLK
- Again, fairly straightforward: we have VOP created by the number of blocks expected to be rebounded by his team
- – PF * ( ( lg_FT / lg_PF ) – 0.44 * ( lg_FTA / lg_PF ) * VOP )
- Finally we get to our last term: fouls. We have the number of fouls committed by our player first, and again this is a negative term so we’re taking out value that our player has cost the team by fouling. Then we have the rate at which PF results in made FTs in the league (lg_FT / lg_PF); so far we’ve subtracted out the number of FT we expected our player to have caused by fouling ( PF * (lg_FT / lg_PF )). Then we’re adding back in (the double negative) the VOP that comes of the free throw attempts that were expected to have ended that possession (which is why we have that .44 again). To be honest, I don’t love the second part of what is factored in here for fouls, as I feel like it gives too much positive value. But that said, I think the first part of this term on its own would be too harsh for penalizing fouls.
And that covers all of the different terms going into PER! Some of it is pretty straightforward. Some of it has me scratching my head quite a bit. So with that said, let’s take a closer look at “factor.” And let me say up-front that I don’t fully understand this part of the equation, but I’ll do my best to reason out what purpose it serves. We won’t get a clear answer, but I’ll give my best guess.
Our first observation we can make is that Hollinger is not a believer in simplifying equations. It could much more easily be written as factor = ( 2 / 3 ) – ( ( 1 / 4 ) * ( lg_AST / lg_FG ) * ( lg_FT / lg_FG ) ). But let’s take a look at the way Hollinger wrote it, as I suspect he did it for a reason. Without equation language, let’s try and say what we’re calculating here: two-thirds, minus ( ( half of the percentage of FG that are assisted ) divided by ( 2 times the ratio of FG to FT ) ). I think it’s extremely important to note that “factor” is applied to the team’s percentage of FGs that are assisted here. So it seems like he’s trying to fine tune the relationship between assists, FGs, and FTs, and make sure they are weighted in a way that is fair to the value the player is created, but it really just gets a bit too convoluted to understand without asking Hollinger himself why he did some of the things he did. So we really do hit a bit of a roadblock here unfortunately.Strengths and Weaknesses
So now that we understand most of the ins and outs of PER, let’s talk about how well we expect it to do its intended job.
- Easily digestible and comparable across league
- Adjusts for the norms of a particular season by using lots of league average values for that seasons and normalizing to 15; ends up being an adjustment for different eras of the game
- Adjusts for pace and against league averages
- Some of the constants (e.g. 0.44) are outdated and don’t accurately reflect what they should
- Use of league averages don’t always reflect true value; i.e. a possession lost due to TO by the 2015-16 Warriors should be more impactful than one by the 2011-12 Bobcats
- We’re mainly looking at offensive performance; the two defensive stats incorporated (STL and BLK) don’t necessarily translate to overall defensive impact, so that is a HUGE missing piece
- It doesn’t account for who the player is playing with or against
- PER tends to favor volume regardless of efficiency
- Doesn’t capture any non-box score stat that impacts the game
Now let’s take a look at some historical seasons and the corresponding PER to see if we can find some examples of how it translates. I went to basketball-reference.com to find all PERs of players that played at least 60 games in a season in the 3-point era. Here are some of the findings:
- Historical top 100 PER seasons
- The top 100 looks pretty good! Better than I expected
- The top 5 consists of 2 LeBron seasons, 2 MJ seasons, and Steph’s best season.
- Rounding out the top 10, we have some more MJ and LeBron, as well as Giannis last season (not crazy) and an Anthony Davis season (this is my first issue… AD is great, but at no point can we say he had one of the best 10 seasons of all time).
- Kobe doesn’t show up until 46, and he only has 2 seasons in the top 100.
- I would have expected to see Harden higher, when you can make the case for arguably the best offensive season in history for both last season and the year before, but those seasons show up at 13 and 21.
- If you change the criteria to a minimum of 54 games played, Boban shows up at 58!!!
- Two off-the-top-of-my-head notable absences: Steve Nash and John Stockton… They aren’t even in the top 250! So playmaking PGs are clearly underrated by the stat.
- Role players on great teams (I believe this is an area where PER falls very short in adequately translating player value, especially defensive specialists)
- 2015-16 Warriors
- Draymond – 19.3
- Andre Iguodala – 12.2 (12th on the team!)
- Harrison Barnes – 12.3
- 1995-96 Bulls
- Dennis Rodman – 13.6
- Luc Longley – 11.9
- Ron Harper – 14.4
- Steve Kerr – 15.2
- 1985-86 Celtics
- Robert Parish – 18.7
- Bill Walton – 17.0
- Danny Ainge – 13.6
- 1999-00 Lakers
- Robert Horry -. 14.3
- Ron Harper – 12.0
- 2012-13 Heat
- Mario Chalmers – 13.3
- Shane Battier – 10.7
- 2015-16 Warriors
There we have it! Hopefully this either refreshed you or gave you a new understanding of what PER is, how it works, where it falls short, and provides some context for you next time you compare players with PER. It was one of the first advanced analytics out there, so while it isn’t perfect by any means, I have to respect it as being a step in the right direction of trying to evaluate player past what’s in the box score. I think there are many better ways of measuring that today, but PER still has a place in history.
Please let me know if you have any thoughts or feedback on this that I can incorporate into the next post in the series. Thanks!