Good games, weird data

How to grade an NBA rookie

How to grade an NBA rookie

Each year, NBA franchises project the hope and ambition of their fanbase on the shoulders of their prized rookies. Fans of cellar-dwelling, tanking oddities like my darling Knicks explain away current losing by pointing to the promise of player development and future winning. A dunk here, a three there, and if you look with the right set of eyes, any rookie can be obscured into a star.

Yet, rookie performance, good or bad, may not necessarily project into a successful career. For every LeBron with overwhelming hype, you get Michael Carter Williams, a Rookie of the Year winner who immediately switched teams. Expected returns on draft investments keep front offices employed, but the science is never exact. Despite that, we’ll do our best to try.

Thanks to the invaluable Basketball Reference, we have extensive data on each rookie season for the history of the NBA. This dataset includes detailed advanced stats around usage rate, adjusted box score plus/minus, and measures of efficiency, scoring, and utility on the court. These stats help visualize the successes, and areas for growth, for each of these players. By combining them, we can try and understand a rookie’s performance in a more nuanced context. 


I’m looking to build out a dataset that compiles all rookie seasons from 2000 to 2019. The rookies need at least 20 appearances, along with an average of 15 minutes per game.

Programming in Python allows us to easily transform this dataset through some statistical packages like scipy.stats, and for our purposes we’ll focus on the z-score. This post on Towards Data Science has a great overview, but in short, a z-score measures the number of standard deviations a value is from the mean. In NBA terms, Chris Paul had 7.8 assists a game as a rookie, which generates a z-score of roughly 4. He’s four full standard deviations above the mean per game assists for rookies, who only average 1.86 a game. By calculating the z-score for each metric, we can frame the performance of each rookie against their peers. 

Those scores combine to generate one composite score, which ranks each of the rookies. Per game metrics in counting stats like points, rebounds, and assists were included to reflect basic requirements for stardom.

These stats often form the first part of a conversation for rookie of the year. We want our rookies to, at minimum, produce measurable impacts on the game.

advanced metrics

Individual stats like VORP, PER, true shooting, usage, and free throw attempt rate track the player’s performance. Combined with team impact stats like WS/48 and BPM—definitions linked out in Basketball Reference’s glossary—we can calculate one holistic score.

Win shares per 48 minutes measures how much a rookie contributes to a victory while adjusting for time played. Box score plus/minus analyzes what they contribute to a team’s final score. To avoid penalizing the players who walked into a terrible situation, I also included four of my favorite individual stats. Value over replacement player attempts to frame their performance in relative terms to their peers, while metrics like true shooting and free throw attempt rate measure efficiency in an increasingly efficient NBA.

PER combines all of that into one unified metric, while usage measures the relative load placed upon each player. Usage ensures that the model tracks offensive workload properly.

My methodology incorporates all of these factors into our composite score. How does this look? Here’s the top and bottom ten scores since the 2000-2001 season:

At first glance, this list is incredibly promising. Five of our top six scorers won Rookie of the Year, while the sixth, Joel Embiid, had a transcendent but injury-shortened year that would have won in a landslide if he stayed healthy. I’m also really excited to see Nikola Jokic popping up so highly in this list. Jokic, a second-round pick, came in third in voting that season and has only gotten better each subsequent season.

Check out the top 50 rookie seasons here, and the code I used to build out my model. In future posts, we’ll look at how my rankings align with rookie of the year winners, call out special seasons, and explore a bit around the 2018-2019 rookie class.

Subscribe to Warm the Bench

Sign up now to get access to the library of members-only issues.
Jamie Larson