Hey everyone,
I’ve really enjoyed doing this series so far and hopefully you’ve enjoyed it as well. In case you missed the first two posts, I’m doing a series that deep dives into different advanced stats that are used as all-in-one measures of player performance. Previously I looked at PER and RAPM, and this week we’ll be looking at Box Plus/Minus, or BPM.
In addition to these, I’m also doing a podcast series by the same name that summarizes and discusses what I’m breaking down here. I won’t go through all the nuts and bolts in the pod, but check it out if you want a slightly higher level version.
But with that, let’s get into the breakdown of BPM!
The Basics
Despite its name, Box Plus/Minus is not really in the same family of Plus/Minus stats that we looked at with simple Plus/Minus, APM, and RAPM. These Plus/Minus stats generally have simple Plus/Minus at the heart of them, whereas BPM is a stat derived from a player’s box score stats, such as points, rebounds, and assists, combined with team performance. Perhaps the best way to explain the difference is this: APM and RAPM use the team’s performance depending on players on the court to find a player’s value, but BPM uses RAPM to find the value of box score stats, and then translates that into player value.
BPM was created by Dan Myers, and one of the interesting choices he made in the creation of the stat was to intentionally limit it to stats that were tracked as of the 1973-74 season. His article about the stat on Basketball Reference suggests that he could have improved the accuracy of the stat had he not made this choice, but he prioritized something that could be historically useful over improved accuracy.
The Foundation
BPM is closely akin to a stat called Statistical Plus/Minus (SPM), which we should probably discuss first. If you recall from our breakdown of RAPM, Dan Rosenbaum didn’t stop once he found Pure APM. He recognized that the stat was noisy and had too much statistical error, so he continued to tinker with it in his definitive article on the stat. (Here’s a one-sentence refresh on APM: A play-by-play linear regression is run on the margin of stints of play to solve for player coefficients that equate to each player’s Pure APM.)
So from here, Dan runs another regression, but this time, rather than finding the values for each player, he’s looking for the value of the standard box score stats. He sets Pure APM equal to an equation that consists of box score stats multiplied by coefficients. He then solves for these coefficients that set the value for each box score stat, such as points per 40 minutes, DRB per 40 minutes, ORB per 40 minutes, 3PA per 40 minutes, etc. He uses 14 of these stats in total, and solves for the coefficient for each of them. So rather than relying on APM to dictate player value, he uses APM to assign values to box score stats. He then applies those values to each player’s box score stats to calculate SPM, where he found a much smaller standard error compared to APM.
So how does SPM relate to BPM? BPM is a variation of SPM that uses advanced box score stats wherever possible. For example, where SPM used DRB per 40 minutes, BPM uses DRBD% instead. In addition, BPM’s statistical regression is built using RAPM values rather than APM, and RAPM has proven to be a much more reliable measurement than APM (If you’re unfamiliar with RAPM vs APM, please refer to my previous article). Essentially, BPM is an improvement on almost every aspect of SPM.
The Formula
So let’s talk about exactly what all goes into BPM! There is a simple formula that we can just plug numbers into and generate a BPM number, but if you’ve been following along, the purpose of this is to understand the “why” of the formula. So we’ll get there, but let’s talk about what BPM is made of first.
As with SPM, the formula for BPM is going to consist of coefficients that are multiplied by players’ box score stats, and that will give us BPM. But what are these coefficients and where do they come from? We start with RAPM. Dan Myers used a 14-year RAPM sample from Jeremias Engelmann and used 961 players from that sample. These 961 players were the highest “weighted” players in the sample, meaning they played a substantial amount of possessions as to not negatively impact the model.
For these 961 RAPM numbers spread over a 14-year period, Dan then tested many different iterations of different combinations of advanced statistics to find the combination that provided the least error in his regression. He then set all of these advanced stats and their coefficients equal to the various RAPM values and ran the regression, looking at the error compared to the 14-year RAPM sample. In the end, he settled on a combination of statistics that satisfied a few things: 1) low error, 2) a reasonable amount of variables (not a crazy, 50-term equation), and 3) few logical nonlinear terms. So with that understanding, let’s look at the equation that Myers gives us:
Raw BPM = a*ReMPG + b*ORB% + c*DRB% + d*STL% + e*BLK% + f*AST% – g*USG%*TO% + h*USG%*(1-TOV%)*[2*(TS% – TmTS%) + i*AST% + j*(3PAr – Lg3PAr) – k] + l*sqrt(AST%*TRB%)
So now that we see all stats he settled on, let’s go ahead and define them (and note that a-l are all coefficients that he gives value to, and we’ll look at those values later):
- ReMPG = Regressed Minutes per Game (a slightly altered MPG to avoid instances where a player plays very few games but with high minutes per game)
- ORB% = Offensive rebounds divided by offensive rebounding opportunities
- DRB% = Defensive rebounds divided by defensive rebounding opportunities
- STL% = Steals divided by number of opponent possessions while player is on the floor
- BLK% = Blocks divided by number of 2-point FGA while player is on the floor
- AST% = Assists divided by teammate FGs (so excluding FGs made by the player)
- USG% = Number of possessions “used” by a player divided by number of possessions while he’s on the court (“used” meaning ends in a shot attempt, free throws, or turnover by the player)
- TOV% = Turnovers divided by possessions “used” by the player
- TS% = Points / ( 2 * TSA) where TSA = True Shooting Attempts (FG + 0.44 * FTA)
- TmTS% = Team’s true shooting (same as immediately previous formula, but for entire team instead of the player)
- 3PAr = 3PA / FGA
- Lg3PAr = 3PA / FGA (for entire league)
- TRB% = Total rebounds divided by total rebounding opportunities
Alright, now let’s take a look at what each of these terms is doing. And let me say up front that Myers explains this best in his Basketball Reference article that I mentioned earlier, but for my own sake at least, I’m going to walk through it myself as well.
ReMPG, ORB%, DRB%, STL%, BLK%, and AST% are all very straightforward, linear terms. Those terms are individually multiplied by their corresponding coefficients to add in to the player’s overall value. And remember that we’re using “advanced” stats here, so everything is possession or rate based. But a few notes on some specific stats here:
- The fact that MPG was factored in is an interesting tidbit on its own. Myers found that including it improved the accuracy of BPM, and he accounts for it by noting two things: 1) Coaches often know more and give better players more playing time, even if it’s for reasons that stats or the general public can’t see and 2) it serves as an indicator for strength of opponent, meaning that higher minute players are likely facing stronger competition.
- STL% and BLK% are simple, linear terms that only appear here.
- ORB% and DRB% are also simple, linear terms, but note that TRB% appears later in the equation, so these will ultimately impact each other to completely account for rebounding.
- AST% makes several appearances throughout the formula, so this AST% term is merely an adjustment to more accurately measure the value of AST%.
USG%*TOV% is our first multi-variable term, but it equals out to turnovers committed by the player divided by possessions that he’s on the court, which is still a simple, linear term.
Our next term, which is Myers’ scoring term, starts to get very interesting. Let’s look at it as a whole first, then break it down: h*USG%*(1-TOV%)*[2*(TS% – TmTS%) + i*AST% + j*(3PAr – Lg3PAr) – k]
- USG%*(1-TOV%) can be translated as, “Shooting USG%.” It is the percentage of the team’s possessions in which the player is shooting, in other words, USG% with turnovers factored out. He multiplies this by the entire following scoring term.
- 2*(TS% – TmTS%) accomplishes a couple things: 1) it translates TS% and TmTS% into points per shooting possession by multiplying by two, and 2) it compares the player’s TS% to the team’s average TS% (average without the player). So if our player has a higher TS% than his team’s average without him, this is a positive term. If it’s lower, it’s a negative term, which makes sense, as his less efficient shots would theoretically be hurting his team, since they would otherwise get a higher efficiency shot had the player not taken the less efficient shots.
- AST% is factored in again here, which is interesting considering Myers referred to this as a scoring stat. But he explains that a player’s assists are worth more if he’s also contributing to scoring, which is why it’s factored in here.
- 3PAr – Lg3PAr is considering whether the player is shooting threes more often than the league average. Given that we already factored in TS% and that this is the rate of 3PA and not a scoring stat, this is accounting for the value of stretching the floor. I absolutely love that he does this! Spacing is an extremely valuable factor on offensive and this was one of the first (if not the first) advanced all-in-one stat to account for this.
- And finally, k is a constant that we’ll give value to shortly.
And that brings us to our last term: sqrt(AST%*TRB%). I love the way Myers explains this stat, so I’ll just share what he wrote about it:
Finally, a positive interaction term between rebounding and assists is included. This can be interpreted a number of ways – athleticism interacting with basketball awareness, size interacting with basketball skills, etc. This term was highly significant, and helped the overall fit of the regression quite a bit. Using the square root of the interaction both makes sense theoretically (maintaining a denominator of opportunities or possessions) and empirically (it is more significant and helps the overall fit of the regression more).
And that gives us our Raw BPM! Afterwards, he adjusts at the team level, and we will get there in a second, but let’s first look at the value of the coefficients.
Coeff. | Term | BPM Value | Variable Format |
a | Regr.MPG | 0.123391 | 48.0 |
b | ORB% | 0.119597 | 100.0 |
c | DRB% | -0.151287 | 100.0 |
d | STL% | 1.255644 | 100.0 |
e | BLK% | 0.531838 | 100.0 |
f | AST% | -0.305868 | 100.0 |
g | TO%*USG% | 0.921292 | .000*100.0 |
h | Scoring | 0.711217 | |
USG% | 100.0 | ||
TO% | .000 | ||
TS% & TmTS% | .000 | ||
i | AST Interaction | 0.017022 | 100.0 |
j | 3PAr Interaction | 0.297639 | .000 |
k | Threshold Scoring | 0.213485 | |
l | sqrt(AST%*TRB%) | 0.725930 | 100.0*100.0 |
A quick note on two coefficients: AST% and DRB%. You’ll notice they’re both negative, and that might leave you scratching your head as to why, considering those are positive contributions. Remember that AST% is factored in multiple places, and the latter positive terms outweigh the initial negative. The same is true for DRB% when you look at TRB% factored in at the end.
So with that, let’s look at the team adjustment that Myers makes:
BPM_Team_Adjustment = [Team_Rating*120% – S(Player_%Min*Player_RawBPM)]/5
There’s really two big terms at work here:
- The Team_Rating term is the net rating of the team, adjusted for strength of schedule.
- S(Player_%Min*Player_RawBPM) is the total of a team’s player’s Raw BPMs, but adjusted for the percentage of minutes played. So if a player has a Raw BPM of 20, but played 10% of the team’s overall minutes, his value here is going to be two. Then you add in that value for each player on the team.
Once you have the BPM_Team_Adjustment for a team, that number is then added to every player’s Raw BPM on that team. So let’s say we have a Team_Rating of +10, and the minute-weighted sum of the players’ Raw BPM on the team is +6, that would give us an equation of BPM_Team_Adjustment = [10*1.2 – 6]/5 = 1.2. We would then add 1.2 to every player’s Raw BPM that’s on the team we just looked at.
Let’s take a slight detour to talk about the 120% number, because it stands out here as a somewhat arbitrary number at first. When watching a game where a good team falls behind, you may often find yourself assuming that the trailing team is going to make a comeback. It seems like it happens all of the time. Well, Jeremias Engelmann did a study and found that assumption to be well-based! He found that teams that are usually ahead are generally 20% better than their final results indicate. Conversely, teams that are usually trailing are generally 20% worse than their results. So this 120% accounts for that fact.
And that is how BPM is calculated! But there’s one other thing we can do here if we want to go a step further. Myers’ RAPM dataset from Engelmann had both ORAPM and DRAPM, so he ran another regression just for ORAPM to get another set of coefficients. So you can take the same Raw BPM formula, and use a separate set of coefficients to solve for OBPM. Here are the OBPM coefficients:
Coeff. | Term | OBPM Value | Variable Format |
a | Regr.MPG | 0.064448 | 48.0 |
b | ORB% | 0.211125 | 100.0 |
c | DRB% | -0.107545 | 100.0 |
d | STL% | 0.346513 | 100.0 |
e | BLK% | -0.052476 | 100.0 |
f | AST% | -0.041787 | 100.0 |
g | TO%*USG% | 0.932965 | .000*100.0 |
h | Scoring | 0.687359 | |
USG% | 100.0 | ||
TO% | .000 | ||
TS% & TmTS% | .000 | ||
i | AST Interaction | 0.007952 | 100.0 |
j | 3PAr Interaction | 0.374706 | .000 |
k | Threshold Scoring | -0.181891 | |
l | sqrt(AST%*TRB%) | 0.239862 | 100.0*100.0 |
From there, you perform the same team adjustment to find OBPM. Then, DBPM is simply equal to BPM – OBPM. And now we’re really finished with the formula!
Bonus Round! – Value Over Replacement Player
As we mentioned in the beginning, even though BPM uses MPG as part of the formula, it is a per 100 possessions based stat, so it doesn’t account for playing time. However, Myers doesn’t leave us hanging! He also presents us with another step we can take in calculating Value Over Replacement Player, or VORP.
VORP = [BPM – (-2.0)] * (% of minutes played)*(team games/82)
VORP is supposed to measure how many points per 100 possessions a player is valued at over an average player at that position. It’s a good approximation for how much value a player is providing to his team during a season, and it’s a number that you can compare linearly. As Myers points out, a player with a VORP of 4.0 contributed twice as much to his team compared to a player with a VORP of 2.0.
Historical Examples
Given that BPM is still a box score based stat, I wanted to do something similar to what we looked at with PER. So let’s first take a look at the top 100 BPM seasons since the 1973-74, with a minimum of 40 games played.
The top 10 looks really good. There are multiple LeBron and Jordan seasons, which is usually a good sign at the top. Westbrook, Curry, Harden, and interestingly Chris Paul round out the rest of the top 10 seasons. Overall, I think this is a great representation. All of these individual seasons were some of the most incredible regular season performances of all time. The Chris Paul season is probably the one that most people would take issue with, but in general, I think this is a good list.
When we expand to the top 100 however, we start to see some cracks. Similarly to PER, we have no sign of Stockton or Nash in the top 100. I don’t believe that alone is a deal-breaker, but when you consider there are four Westbrook seasons and five Chris Paul seasons in the top 100, having Stockton and Nash missing seems to be an issue. At least we have Magic here this time, so not all is lost!
With PER, we saw defensive players severely underrated. Myers told us up front that he believe BPM doesn’t accurately reflect defensive contribution, but I expect DBPM to do a much better job than PER. So let’s take a look at DBPM historically.
The top 10 is…interesting. We have some very great signs though, with Ben Wallace and Marcus Camby having multiple appearances. There’s no way we would expect either of them to appear in the top anything for PER, but they’re clearly elite defensive players, and DBPM captures that. However, the rest of the list is a little more suspect with Ekpe Udoh and Greg Stiemsma both making appearances.
The rest of the top 100 has some notable absences, such as Kawhi, Bruce Bowen, Rodman, and Pippen, while Shawn Bradley and Myles Turner both make appearances. Myers mentioned that DRPM tended to favor big men, and that seems to clearly be the case here.
Strengths and Weaknesses
Overall, going through this exercise gave me a new respect for BPM. I was aware of its defensive deficiencies beforehand, but the method by which Myers created BPM was extremely well thought out and well tested. It truly is an enormous advancement for box-score-based stats. While it’s not a true successor of PER, it’s a better alternative in almost every respect.
Still, BPM suffers from the common box score stat deficiencies, namely defense. It absolutely is an improvement over prior box score based statistics as it captures, if not overstates, big man defense. This is a big step forward, but perimeter defense still seems to be largely undervalued here.
We also see some of the assist-first guards undervalued, such as Nash and Stockton. Even though Magic had multiple top 100 seasons, BPM tended to favor Westbrook-type play comparatively, and most basketball minds would argue Magic was a much better player.
Conclusion
As I mentioned above, I have a renewed respect for BPM after doing this exercise. As an overall stat, it’s useful to look at and should definitely take precedent over PER. I even think it’s valuable to compare players using BPM, particularly when converting to VORP in a season. But big men will be overrated on defense, and pass-first guards will be seemingly underrated. Still, BPM was an enormous advancement on box score stats!
Leave a comment