Automatic Rosters for BasketballGM

BasketballGM is a pretty awesome game. Some peoeple enjoy playing with real rosters filled with real people. I came up with a way to generate rosters based on box score data. Write-up and code are available. This years are all “year ending”, so 2019 means 2018-2019 season. These files can be downloaded or just copied and loaded directly from these URLs.

There are NBA, WNBA and NCAA on this site.

Current NBA Roster (e.g. as current as possible)

NBA with FULL Draft classes

These have draft classes based on rookie performance data until 2019. I picked a few interesting years to generate. These require BBGM v2019.07.21.1313 or newer.


I use two different models here. A “simple” model using box-score data (1952 to 1979), which lacks splits between ORB/ DRB is missing TOV/STL/BLK, etc. The 70s have some of this data but I don’t use it. The 1980+ model has all that data.

NBA All-Time-Great Era Teams

In this version, with 2019 teams, each roster has the 10 highest rated players who played for that team. The year is “best player since that year”. So the 2010 roster only has players since 2010.


WNBA is hard because the distributions don’t match that well, but the 2019 season is available here

NCAA Basketball

This is a giant file with all D1 Teams. But has logos, divisions, etc.



I use statistics from simulated BBGM seasons, then calibrated the data to have a half dozen guys in the 70s (7 in my 2018-2019 rosters ATM).

In 250 auto-played seasons, I had 1500 player-year examples in the 70s (usually 6 guys). 85 examples in the 80s (one in every 3 years), and 7 examples in the 90s (3 times a century). 360, 18 and 2 players hit those marks (70, 80, 90). Using those numbers in the NBA dataset, we’d expect 90 guys who broke 70, 5 guys who broke 80, and 0.5 guys who broke 90. In all of my rosters, using players at their peaks, I have 103 who broke 70, 5 guys who broke 80, 0 guys who broke 90.

Basically.. they’re pretty much in line with what BBGM generates.

Now there is a quirk… BBGM has more aggressive development curves than the real NBA. In the NBA, while there is growth, a 19/20 year old rookie (mitchell, luka) can put up 20/5/5, even when their scoring will peak below 30 points a game. In BBGM, there’s aggressive development until age 27. I set draft classes based on rookie year performance. But I guess if you have a 20 year old scoring 20pts/game in BBGM, the development model might drive them to be an 80+ player way more often than in real life.

But to fix that last bit, I probably want a more wholistic rookie model that uses their career data, not just their rookie year data. And then somehow deconstructs the BBGM development data. But that’d lead to a lot of… MJ being a complete bust type of situation way too often.

Era adjustment

Players are all rated compared to league average in that season. And in some ways … forecasted to BBGM/2019 basketball. So there’s 3 point gods even in eras without much (or any) 3pters. All the rosters before 1980 also use a much simpler model (only using Total Rebounds, no Turnover, no steals, no 3pt data, etc.) so those ratings are more off at times.