Contributed by Aditya Fuldeore
How can a player’s production be measured based on opportunities and risks taken? There are many metrics adjusted and created to account for NBA player metrics. The one I created and am about to introduce is called Opportunity Production Rating (OPR). The goal of this statistic is to take into account player roles and shooting opportunities taken and see if they are making the most of them. In other words, it is a rating that shows a player’s pure production to the team per 100 possessions, adjusted to show scoring efficiency given the opportunities and risks a player takes when shooting.
For this statistic, I used per 100 possession statistics from the 2019-2020 NBA season from Basketball Reference. In order to help calculate player production, I used accessible stats in points, rebounds, assists, steals, blocks, turnovers, and personal fouls, as well as shooting attempts stats and Box plus/minus. In order to see how efficient players are with the shot opportunities they take, I scaled their points in this according way:
Scaled Points =
(Points) * (Field Goals + Free Throws)
(2Pt Attempts + 0.673Pt Attempts + 0.67Free Throw Attempts)
Scaled Points rewards the player for taking more threes and drawing more fouls (shown via free throw attempts). Multiplying points by a combined and adjusted field goal and free throw percentage gives scaled points, adjusted to reward players for more taking more risks with more threes and drawing more fouls with free throws.
Next, I got the formula for Opportunity Production Rating by first performing a model regression (in R programming) on Box plus/minus using points, assists, rebounds, steals, blocks, turnovers, and personal fouls. Box plus/minus (BPM)1 is a rate stat on Basketball Reference that estimates a player’s contribution in points above league average per 100 possessions played. I used it because it is a close indicator of what OPR is trying to find and would be useful in finding a balance of how much of each stat I used would contribute to a player’s production. To perform the regression, I used the per 100 possessions stats of players who played in more than 40 games for the 2019-2020 NBA season. As a result of this linear regression model, I got 0.32(PTS), 0.3(REB), 0.6(AST), 0.7(BLK), 1.2(STL), -1.6(TOV), -0.2(Fouls) as coefficients, meaning this is approximately how much each stat contributes to BPM for each player (not including any advanced calculations or additions that BPM may consider). So, I used all of these coefficients in my formula for OPR, except for points, where I multiplied that coefficient by 2.5 (0.32 * 2.5 = 0.8) in order reinforce rewarding players for riskier shots and shot opportunities taken as I used Scaled Points, not just points. The ultimate formula for OPR I found is:
Opportunity Production Rating =
0.8ScaledPoints + 0.3Rebounds+ 0.6Assists+ 1.2Steals+ 0.7Blocks – 1.6Turnovers – 0.2PersonalFouls
Based on this formula, here are player averages I found for listed positions for each player in the 2019-2020 NBA season:
|Position Group (as listed on Basketball Reference)||Average OPR (> 40 games played)|
Additionally, here are the top players in OPR (>40 games played) from the 2019-2020 NBA season:
Here are lowest players (> 40 games played) in OPR from the 2019-20 NBA season:
|Anthony Tolliver||Trail Blazers/Kings/Grizzlies||5.99||6.48|
It was generally found that an OPR above 22 is superstar level production, while an OPR from 11-15 is about average production, and an OPR below 8 was inefficient and underperforming player production. Most players were in the 8-15 OPR range.
One player with a surprisingly high OPR was Christian Wood with a 20.99. Wood was an efficient shooter and scorer, while he was a force around the rim as a rebounder and blocker, which likely led to amplified stats per 100 possessions, giving him a high OPR. Other surprising players with high OPR were guard Shaquille Harrison with a 17.3 OPR, and Boban Marjanovic with a 21.18. Both had roles with limited minutes coming off the bench for their teams and were highly efficient when on the court. Harrison was a great defender and efficient in other aspects of the game when on the court, leading to his high OPR. Marjanovic was an extremely productive rebounder, and a solid 2-point shooter and defender, leading to his high OPR. One player with surprisingly low OPR was Cleveland Cavaliers guard Darius Garland, with a 7.32 OPR. Garland was an O.K. shooter, but struggled defensively and did not get to the free throw line as much, likely leading to the low OPR.
In general, Opportunity Production Rating gives a rating for player production throughout the season per 100 possessions. OPR is similar to the Game Score stat from John Hollinger2 in that it attempts to calculate a player’s pure production, but is different in that it calculates production per 100 possessions and adjusts for risks and opportunities taken. As more information is gathered from player production in the NBA, OPR could be adjusted further to incorporate mid-range shots, layups, contested shots, and more all separately. More advanced stats could also be used in the OPR formula to get a more holistic rating. As the 2020-2021 NBA season gets underway, it will be interesting to see how accurate OPR may be in showing which players are most productive for their teams, and it can be adjusted according to accuracy and new situations that may be beneficial to account for in the stat. For now, OPR uses accessible stats on Basketball Reference to calculate player production adjusted for risks and opportunities taken. It can best be used to see how productive and how efficient with risks and opportunities taken a player is.
The following image is the top performers in terms of OPR from the 2019-20 season.
*This stat is per 100 possessions with stats and player information from the 2019-2020 NBA season from Basketball Reference, calculations made in RStudio
1BPM details: https://www.basketball-reference.com/about/bpm2.html
2Game Score in Basketball Reference glossary: https://www.basketball-reference.com/about/glossary.html