Introducing Simple Shot Quality Model (SSQM) v1.0

Sravan February 17, 2024 [NBA] #Shooting #Shot Quality #SSQM

My first attempt at creating a shot quality model using publicly available NBA data


While I was digging into adjusted net ratings (you can find my article here), I found a version of luck adjusted team ratings by Krishna Narsu using qSQ (Quantified Shot Quality) and qSI(Quantified Shooter Impact). I have been interested in shot quality ever since. The disadvantage of these metrics is that they are from Second Spectrum and not public. So wanted to see if I can develop a model on my own using publicly available shooting data.


Getting Started

Before starting from scratch I look at existing work from other people. Ryan Davis and Andrew Patton have good tutorials for NBA Analytics with working code and those are always good place to start when working on a new analytics project. I found Andrew Patton's Shot Quality Model Tutorial interesting. Andrew shows the approach of how to model shot quality and the data processing framework necessary for creating a shot quality metric. After trying my own variations of Andrew's demo shot quality models, I wanted to try something different while utilizing some of the concepts he introduced in the tutorial.

Approach: Using League Average Shooting

I have been making NBA Hex Plots for more than 2 years now.

The different colors in hex plots shows how efficient a player is wrt league average. I accomplish it by binning the shots into different zones and calculating the FG% of all shots in the zone attempted by the player. I then compare it to the league average FG% of all shots in the zone attempted by all players in that season. Here are the shot zones and the league averages shown in Steph Curry's shot-chart for the season:

My idea is that the approach I adopted for the hex plots is a good framework for a Simple Shot Quality Model and thus name SSQM (sounds like a good name for a model which is very simple/basic).

Developing the Shot Quality Model Metrics

I will be using the league average FG% as expected FG% in my model and will refer it as xFG from now now.
So the expected points scored are:

Effective field goal percentage (eFG) is calculated as:

$$ eFG = \frac{PTS}{2\times FGA} $$

Similarly expected eFG (xeFG) is calculated by replacing PTS with xPTS.

$$ xeFG = \frac{xPTS}{2\times FGA} $$

Shot Making is defined as:

$$ \text{Shot Making} = \frac{PTS - xPTS}{FGA} $$

which is nothing but points per point (PPS) above league average.

Points Added is defined as:

$$ \text{Points Added} = PTS - xPTS $$

Another way of calculating Points Added:

$$ \text{Points Added} = \text{Shot Making}\times FGA $$


Now that I have a Shot Quality Model based on shot location (grouped in zones), I ran it for the 2023-24 NBA season to generate the shot quality metrics for all players. An issue here is that there are players who have not attempted many shots but made most of them. We need to filter those players out, which can be accomplished by removing players who have scored less than 100 points.

Best Shot Makers

Here are the best shot makers in the league i.e. the players having the highest Shot Making values:

PlayerTeamFGAFGMeFGxeFGPTSxPTSShot MakingPoints Added
1Jalen SmithIndiana Pacers2531600.7190.577364291.90.2870.84
2Amir CoffeyLA Clippers162910.6730.55218178.20.2540.5
3Dereck Lively IIDallas Mavericks2081530.7360.619306257.60.2347.84
4Nicolas BatumPhiladelphia 76ers135700.6810.577184155.70.2128.35
5Garrison MathewsAtlanta Hawks99450.6570.554130109.70.2120.79
6Kevin DurantPhoenix Suns9124910.5980.4971090907.20.2182.4
7Matt RyanNew Orleans Pelicans85380.6350.53610891.10.217
8Jakob PoeltlToronto Raptors3202160.6750.58432371.40.1960.8
9Aaron WigginsOklahoma City Thunder2111230.680.587287247.60.1940.09
10Grayson AllenPhoenix Suns4142110.6580.566545468.90.1874.52

The players here include centers like Jalen Smith (who also shoots 3s), Lively and Poeltl and three point shooters like Grayson Allen, Batum. The only super star in here is Kevin Durant, who is have a ridiculous shooting season.

Worst Shot Makers

Here are the worst shot makers in the league i.e. the players having the lowest Shot Making values:

PlayerTeamFGAFGMeFGxeFGPTSxPTSShot MakingPoints Added
1JT ThorCharlotte Hornets139510.4350.573121159.3-0.28-38.92
2Xavier TillmanBoston Celtics213870.4370.567186241.7-0.26-55.38
3Isaiah LiversWashington Wizards116400.440.557102129.1-0.23-26.68
4Scoot HendersonPortland Trail Blazers5061900.4270.544432550.2-0.23-116.38
5Josh OkogiePhoenix Suns183760.4810.591176216.1-0.22-40.26
6Kris MurrayPortland Trail Blazers118480.4870.591115139.5-0.21-24.78
7David RoddyPhoenix Suns3891570.4650.568362441.9-0.21-81.69
8Mike MuscalaDetroit Pistons134480.4590.552123148-0.19-25.46
9Cam ReddishLos Angeles Lakers205830.4830.577198236.7-0.19-38.95
10Chris DuarteSacramento Kings129470.4530.551117142.1-0.19-24.51

This list is made mostly of young players who are trying to find their place in the league including rookies like Scoot Henderson. It is very hard to adjust to the NBA and it shows up in their shooting numbers. The other players here are Mike Muscala, who are aging centers who are older than 30 years. Loss of athleticism has an adverse impact on shot making.

Most Points Added: Best Volume Shot Makers

Just looking at Shot Making doesn't tell the whole story of best shot makers in the league. The Shot Making value is actualized only if the players are taking lots of the shots. So the best shot makers in the league are who make lots of shots at high volume. To differentiate these players (who are all stars) from best players in Shot Making metric, I call them Volume Shot Makers. These players are players who have the highest Points Added Metric:

PlayerTeamFGAFGMeFGxeFGPTSxPTSShot MakingPoints Added
1Kevin DurantPhoenix Suns9124910.5980.4971090907.20.2182.4
2Nikola JokicDenver Nuggets9375410.6070.5291138991.70.16149.92
3Kawhi LeonardLA Clippers8204320.5950.516976846.10.16131.2
4Stephen CurryGolden State Warriors9894570.5890.52411661036.80.13128.57
5Luka DoncicDallas Mavericks11025420.5740.51812651141.80.11121.22
6Shai Gilgeous-AlexanderOklahoma City Thunder10635800.5760.52712251119.40.1106.3
7Devin BookerPhoenix Suns8644320.5570.5963864.70.1195.04
8Giannis AntetokounmpoMilwaukee Bucks10176260.6270.58412761186.90.0991.53
9Jalen WilliamsOklahoma City Thunder6623600.5980.5357927080.1386.06
10Domantas SabonisSacramento Kings7064390.640.5819048210.1284.72

This list mostly consists of super stars and all-stars except for Jalen Williams who is having a hyper efficient season fo far. The list being comprised of stars is expected since taking and making tough shots is what makes them stars.

Most Points Removed: Worst Volume Shot Makers

Now let's look at the worst volume shot makers, these are players with the lowest Points Added metric:

PlayerTeamFGAFGMeFGxeFGPTSxPTSShot MakingPoints Added
1Scoot HendersonPortland Trail Blazers5061900.4270.544432550.2-0.23-116.38
2Jalen GreenHouston Rockets8153350.4770.545778889.1-0.14-114.1
3Jordan PooleWashington Wizards7302920.4690.533685778.8-0.13-94.9
4Russell WestbrookLA Clippers5232420.4970.575520601.6-0.16-83.68
5Saddiq BeyAtlanta Hawks5852470.5040.576590674.1-0.14-81.9
6David RoddyPhoenix Suns3891570.4650.568362441.9-0.21-81.69
7Jeremy SochanSan Antonio Spurs5572460.4880.557544620.8-0.14-77.98
8Keldon JohnsonSan Antonio Spurs6682990.5130.563685752-0.1-66.8
9Josh GiddeyOklahoma City Thunder5502460.4940.554543609.9-0.12-66
10Damian LillardMilwaukee Bucks8873750.5060.541898959.1-0.07-62.09

This list consists of young players and players on bad teams like Jordan Poole and Keldon Johnson. An interesting observation is that guards comprise of most of this list. I was expecting to find Russell Westbrook in here but was shocked to find Damian Lillard. Dame is having a horrible season so far and Bucks have no shot to compete for a NBA championship unless Dame shoots better. Both Russ and Dame are in a long line of aging superstar guards who drop off in mid 30s. While for Russ it has been a gradual process, for Dame it has been a sudden drop off this year.


I've developed a simple shot quality model SSQM v1.0 based on publicly available shooting data. The model is based purely on shot location (shot zones to be more specific). Then we can sort the players by the shot quality metrics like Shot Making and Points Added to find best and worst shot makers and volume shot makers.

While working on this model, it came to my mind that only shot location is not a holistic way of looking at shot quality and there should be other factors like shot type, defender distance, touch time, dribble etc. which need to be incorporated in the model. I'm working on SSQM v2.0 which does exactly that and I will release a follow up to this blog describing that model.

Thank you for reading, and any feedback is appreciated. You can reach me on Twitter at @SravanNBA.


Andrew Patton's Shot Quality Model Tutorial