Designing a New NBA Rating System

Creating something new from statistics we already have

Griffin Wilson
Better Programming

--

Photo by the author.

I set out to make a new NBA player rating comprised of advanced statistics that are already commonplace for basketball analysts today. It is designed to gauge the performance of point guards with numeric values ranging roughly from 1 to 10. Its purpose is to measure a point guard’s statistics with the following factors in mind:

  • Facilitation
  • Giving their team opportunities
  • Efficient “game flow”

This explains the rating’s name: “FOG.”

This rating could be used as a player comparison lens and an alternative to today’s score-first mentality observed in many modern point guards. Perhaps you have your superstars but still want a good floor general who is efficient, a winner, and someone who doesn’t necessarily step on your volume scorer’s toes? FOG could be for you. Looking to compare two minimum-contract off guards? FOG probably isn’t for you.

*Era split: Old (1980-1999), New (2000-2017)*

Methodology

FOG leans heavily on some of the best statistics used today. Aside from RAPTOR (the best), made recently by FiveThirtyEight, the most highly regarded comprehensive player ratings seem to be VORP (value over replacement), WS/48 (win shares per 48 minutes), and TS% (true shooting percentage). I intentionally did not want to include PER (player efficiency rating), as I feel other metrics are better.

Note: I begin with 1980, as advanced stats were created in 1977-78.

FOG calculation

Firstly, a disclaimer: Not every player is measurable by FOG. One must “qualify.” To be considered, a player must:

  • Have a positive WS/48 (to ensure they are, more or less, “winners”).
  • Have a positive VORP (to help FOG figures not be negative).
  • Account for less than 25% of their team’s turnovers.

For the actual calculation, I began with a baseline multiplier of several basic box score statistics on a per-game basis: turnovers, assists, rebounds, blocks, and steals (notice points are not included). For example, turnovers are negatively weighted at -2 (penalized for ruining efficient game flow and losing opportunities, poor facilitation), steals are weighted at +1.5 (incentivized for giving one’s team another opportunity, improving team’s game flow), and offensive rebounds are weighted more heavily than defensive boards, as they immediately give their team a new offensive opportunity.

The per-game statistics are added together after being weighted. This is added to 3/4 of a player’s respective VORP. Finally, that sum is multiplied by the player’s TS%.

Note: FOG is calculated seasonally.

Statistics explanation

In case you aren’t familiar with all the terms being used. Let’s dive into what these comprehensive statistics are made of.

WS/48 is an estimate of the number of wins contributed by the player per 48 minutes. For brevity, I will state that this is the sum of offensive and defensive win shares.

Photo from Basketball Reference — Click the link below to see Dean Oliver’s O/DRTG calculations.
Photo from Basketball Reference — Click the link below for full win share info.

VORP converts the BPM (box plus/minus) rate into an estimate of each player’s overall contribution to the team measured vs. what a theoretical “replacement player” would provide. The “replacement player” is defined as a player on a minimum salary or not a normal member of a team’s rotation.

What’s BPM? It’s basically VORP without some things factored in, such as playing time.

Photo from Basketball Reference — Click the link below for full BPM 2.0.

The TS% formula is PTS/(2 * TSA). True shooting percentage is a measure of shooting efficiency that takes into account field goals, three-point field goals, and free throws. The TSA (true shooting attempts) formula is FGA + 0.44 * FTA.

Other considerations when making FOG:

  • Player usage (w/ USG% in VORP).
  • Free-throw percentage (TS%).
  • Heavy penalization for turnovers (qualification and baseline multiplier).
  • Avoid weighting assists too heavily to protect against assist hunters (e.g. Rondo).
  • Efficiency of scoring — not a rating for volume scorers.
  • Emphasize winning, which every team’s ultimate goal (playoff qualification).

Findings

FOG seems fairly effective in serving its purpose when measured on point guards. An elite-level FOG would be considered above 6. That is about where normal distribution ends and the rest are deemed outliers. FOG’s outcome can really only tell us so much due to the statistics it relies so heavily on.

A quick way to tell if FOG is truly showing top players is to look at the seasons of players who have had a FOG of 8+(very elite). To be clear, that has happened a mere 17 times since 1980 by only six players:

  • Chris Paul (responsible for three of 17): Recorded a FOG rating of 10+ in the 2008-09 season.
  • Magic Johnson** (responsible for five of 17): Recorded a FOG rating of 9.5+ in the 1988-89 season.
  • John Stockton (responsible for six of 17): Recorded two seasons rated above 8.5+ from 1987-90.
  • Russell Westbrook** (responsible for one of 17): Recorded a FOG rating of nearly 8.5 in 2016-17.
  • Fat Lever (responsible for one of 17: Recorded a FOG rating of 8.25+ in 1986-87.
  • Steph Curry** (responsible for one of 17): Recorded a FOG rating of 8+ in 2015-16.

**=Player won the league MVP award in the given year.

Note: In my opinion, Magic Johnson is the FOG “king” by career.

It would appear that to have an elite-level FOG, one must average at least two turnovers/game (easily attributed to the best players handling the ball more and thus inherently committing more turnovers.) Also, there are players who have obtained a FOG rating of 8+ while averaging 4+ turnovers/game. That’s interesting considering how heavily I penalized turnover-prone play.

Conclusion

Setting out to make a new rating is hard to do. As far as I’m concerned, at this point in basketball, one needs new measurable stats to form a new meaningful hypothesis about potential relationships. Given the tools available, FOG is what it is and serves its purpose.

Finally, here are the links for the dataset used and a Google Colab notebook if you want to see specific baseline multiplier values, data cleaning (data frame conditioning mostly), more graphs, era/all positions splits, and more! Just download the data and load it into the provided notebook:

One last link for those who found it unusual that the highest FOG ever recorded wasn’t accompanied by an MVP season:

Thanks for reading!

--

--