MyNBA is my favorite playing mode in NBA 2K. Starting out as the GM of the Seattle Supersonics in 1983, how well can I steer the franchise?
Playing all 82 games per season would need \(82 \text{ games/season} \times 41 \text{ seasons} \times 20 \text{ min/game} \approx 47 \text{ days}\) to catch up to today’s NBA and that’s not accounting for the playoffs. Simulating games is the way to go; might help improve my understanding of the game.
Reading the Stats
Unlike the real NBA, MyNBA is a software program that runs on deterministic rules. While I can’t control the outcome of each game as there is pseudo-randomness, it should be possible to intentionally win titles over the course of a couple seasons.
is an undergrad senior project that tested 6 models (logistic regression, random forest, k-neighbors, support vector, gaussian naïve bayes, and XGBoost), and arrived at gaussian naïve bayes as the best performing one at \(65.1\%\) accuracy.
ranked teams in various stats and used the differentials to infer which stats are more predictive of wins: offensive rating (estimated number of points scored per 100 possessions), defensive rating (estimated number of points conceded per 100 possessions), rebounds, 3pt percentage, field goal percentage, assist/turnover ratio, 3pt attempts, field goal attempts, and finally pace of play.
’s logistic regression model claims \(70.37\%\) accuracy. It uses z-score or standard score (the number of standard deviations by which a data point is above or below the mean) .
Initially, used Elo ratings that depend on the final score of the game and home-court advantage, and carry over between games, giving a measure of “form” . However, Elo ratings are slow to pick up roster changes (e.g., injuries and trades), and so augmented the prediction pipeline with talent ratings for each player weighted by the projected playing time.
In NBA 2K simulations, highly-rated players turn out on top, e.g., Jordan eventually dominates the league. However, analyzing player stats over time has a lot of manual data entry work which isn’t that fun. 2K provides a box score that has several stats: PTS, FGM/FGA, 3PTM/3PTA, FTM/FTA, FAST_BREAK_PTS, PAINT_PTS, SECOND_CHANCE_PTS, BENCH_PTS, AST, OREB, DREB, STL, BLK, TO, BIGGEST_LEAD, and POSSESSION. Can these stats approximate the underlying player-dominated simulation to help win games more often than not?
What stats should I use? It seems that it should mostly be differentials:
PTS
differential is the attribute that I’m trying to predict.- How do I treat
FGM
andFGA
? considersFGM/FGA
vs.FGA
. AFGA
differential being significant would tell me if my team needs to shoot more shots, asFG%
is more or less the same between teams. A significantFGM
differential tells me that I should focus on inside shots for my team. A significantFG%
would tell me that I need more quality shots, and not necessarily volume. Will have all 3 differentials in the dataset. Same reasoning applies for differentials in 3pt shots and free-throws. - Differentials for
FAST_BREAK_PTS
,PAINT_PTS
,SECOND_CHANCE_PTS
,BENCH_PTS
,OREB
,DREB
,STL
, andBLK
seem straightforward to include in the dataset. AST:TO
is frequently used in place of justAST
orTO
. There is some criticism thatAST:TO
is flawed because not allTO
occur when trying to get an assist. Will use all 3 differentials to see if any is more predictive than the others.- While
BIGGEST_LEAD
might turn out predictive, it’s not actionable for me as a team GM. - Maybe
POSSESSION
can be used to compute proxies for forOFF_RATING
andDEF_RATING
, which found predictive? FATIGUE
can be approximated by counting the days since the previous game. I don’t think 2K takes geographical distance into account for fatigue; I’ve had CLE and PHX games back-to-back, which would be brutal in the real world.
Using scikit.linear_model
’s BayesianRidge
regression model to identify
coefficients for the various stats, which should help me focus my team’s focus
while on a budget.
The Road So Far
Went 6-5 in the 1986-87 season.
Coefficients for the 1986-1987 season
Feature | Coefficient | |
---|---|---|
1 | PAINT_PTS | 1.8149 |
2 | 3PTA | -1.7272 |
3 | OFFENSIVE_RATING | 1.5864 |
4 | FGM_PER_FGA | 1.4986 |
5 | DEFENSIVE_RATING | -1.4942 |
6 | FGM | 1.4364 |
7 | DEF_REB | 1.3849 |
8 | FAST_BREAK_PTS | 1.3170 |
9 | SECOND_CHANCE_PTS | 1.2708 |
10 | BLK | 1.2390 |
11 | BIGGEST_LEAD | 1.2381 |
12 | TEAM_FOULS | -1.1239 |
13 | OFF_REB | -1.1225 |
14 | OPP_BIGGEST_LEAD | -1.1004 |
15 | ASSISTS | 0.8605 |
16 | TO | -0.8133 |
17 | IS_HOME | 0.7866 |
18 | 3PTM_PER_3PTA | 0.6460 |
19 | FTM | 0.5923 |
20 | 3PTM | -0.5755 |
21 | ASSISTS_PER_TO | 0.4268 |
22 | FTM_PER_FTA | 0.4128 |
23 | FTA | 0.3483 |
24 | DAYS_SINCE_LAST_GAME | -0.3399 |
25 | FGA | -0.0543 |
26 | BENCH_PTS | -0.0492 |
27 | STL | 0.0214 |
PAINT_PTS
is my strongest predictor, probably because CLE CUT 2 LOOP SWING
is my money play: Jack Sikma (C) sets good screens, and either Tom Chambers (PF)
or Xavier McDaniel (SF) come flying in for the alley-oop. 3PTA
being the next
predictor for losses is a symptom of me trying to shoot my way out of an
impending loss, and evidently, it seldom works. OFFENSIVE_RATING
and
DEFENSIVE_RATING
being 3rd and 5th support ’s findings
but not sure how to make them actionable. FGM_PER_FGA
being 4th while FGM
being 6th implies that accuracy matters more than volume; or maybe that teams
have similar number of attempts and thus my pace is fine but the shot selection
needs to be smarter.
Tips and Tricks
Trade Finder is great for shedding long-term bad contracts and getting 1st round picks in exchange for role players. Trade Finder honors cap rules, no trade clauses, untouchables. For stars, you’re better off proposing a trade yourself.
Draft classes are not 100% accurate. Other than some top players that 2K has rights to, the rest of the class is auto-generated. Community-generated draft classes bridge that gap.
There was once a bug that at the end of the regular season, all 1st round picks were of equal value. Trading picks with the bottom few teams would be disproportionately rewarding. No longer possible because the trade deadline is in Jan, 4 months before the end of the season.
My Legends Over the Years
Who are the players that I’ve been using over my tenure of the Sonics?
Point Guards
Gus “The Wizard” Williams was famous for acrobatic layups, short snappy jumpers and behind-the-back passes. His #1 jersey was retired. He was my starting PG for a with All-Star appearances in ‘85, ‘86, and ‘87. In 1989, he’s an 85 overall with the Heat. I forgot who I traded him for, but I needed more outside shooting from my PG.
Jon “Sunny” Sundvold was drafted #16 by the Sonics in ‘83. He peaked on the Spurs in 1986-87. He participated in the 3pt contest in ‘89 and ‘90. Unfortunately, he had a career-ending injury in ‘92. He was my starting PG after trading Gus Williams away.
Kevin ‘Franchise Junior’ Johnson was drafted #7 by the Cavs in ‘87, but didn’t lodge Mark Price from the starting PG spot. Mid-season, he was traded to the Suns, where he performed much better with more minutes, earning the 1988-89 Most Improved Player award. He was instrumental in reversing the Suns’ misfortunes, making the playoffs every year. Injuries hampered his effectiveness with Charles Barkley. His No. 7 was retired by the Suns. He served as the mayor of Sacramento from 2008 to 2016 with initiatives like volunteerism, K-8 arts programs, permanent housing, education reform, etc. He’s had allegations of sexual assault, harassment, misuse of grants, real estate property code violations. Compared to Sundvold, he has a stronger inside game including a driving dunk and more athleticism.
Shooting Guards
Fred “Downtown Freddie Brown” Brown was a 3pt menace and a Sonics lifer; his No. 32 was retired. He was the captain of the 1978-79 championship team. If only I’d have him retire with my Sonics as well.
David “Skywalker” Thompson was the #1 pick in 1975 and an All-Star in 1983. His career was interrupted by injuries and substance abuse, with a career-ending knee injury in ‘84. I didn’t know how to use him in the rotation, and I forgot who I traded him for. In 1989, he’s an 84 overall with the Pacers.
Gerald Wilkins was drafted #47 by the Knicks in ‘85, being the second-leading scorer after Patrick Ewing. Like his brother Dominique Wilkins, he participated in the ‘86 and ‘87 dunk contest. Played with Xavier McDaniel in ‘92 season. In Cleveland, he teamed up with Mark Price, Larry Nance, and Brad Daugherty, but the Cavaliers were swept by Jordan and the Bulls in ‘93. He was my #12 pick in ‘85 and he’s developed to an 86 overall in ‘89. He’s my most versatile offensive player.
Small Forwards
Xavier “X-Man” McDaniel was picked #4 in 1985 by the Sonics, finishing 2nd in Rookie of the Year balloting to Patrick Ewing. He, Dale Ellis, and Tom Chambers formed a trio of 20 PPG scorers. He was a physical player, even shaving his head and eyebrows to look more intimidating. His tenure at the Sonics ended in 1990-91 with a trade after a fist-fight with Dale Ellis. He was my #7 pick in ‘85 and he’s developed to a 91 overall in ‘89. He excels at everything except 3pt and FT shots. His driving dunk and posterizer badge makes him exciting.
Power Forwards
Tom Chambers played alongside Jack Sikma and Gus Williams, averaging 18.1 PPG and playing all 82 games. He was the MVP of the 1987 All-Star Game in Seattle. He accepted a pricey offer to the Suns, which Seattle declined to match. On the Suns, he teamed up with Kevin Johnson, and later Xavier McDaniel. With Charles Barkley joining the Suns in 1992-93, 33-year-old Chambers became a sixth man. He is one of two players (alongside Antawn Jamison) eligible for the HoF who have scored +20K points without being inducted. I find his playing style similar to Xavier McDaniel’s, albeit with the 97 layup replaced with the 95 standing dunk.
Centers
Jack Sikma was pioneer as one of the sharp-shooting big men, with a trademark reverse pivot and step back behind-the-head jumper, coined as the “Sikma move”. Once considered untouchable, he requested a trade from the Sonics in 1986 after missing the playoffs for two years. He’s in the HoF. He’s still on my team in ‘89 and the best player that I have. Need more plays to tap into his shooting.
No wonder the 2K commentators kept mentioning Sikma’s non-conventional shot! Do commentators also offer real-life commentary on players included in community-created draft classes?
1988-89 Sonics
Jack Sikma (91), Xavier McDaniel (91), Tom Chambers (88), Gerald Wilkins (86), Kevin Johnson (86), Jon Sundvold (85). McDaniel and Wilkins are both coming off their rookie contracts, and I might not be able to afford both of them in 1989-90. This team needs a championship before it’s financially infeasible. Got eliminated in the 1st round by the Kings led by Charles Barkley (18 PTS, 20 REB, 4 STL, 2 BLK) and Reggie Miller; MJ ended up leading the Clippers to a chip.
Maintained the team through the 1989-90 season, and won a chip with them. Should I make some trades in 1990-91? The team’s salary is $13.6M, which is $1.72M above the salary cap. All 6 stars have 3+ bird years, so I can resign them above the salary cap, with luxury tax kicking in at $14.43M. Sundvold and Johnson both play the PG, and if it comes down to it, I can trade Sundvold because Johnson has a higher ceiling. Paying the luxury tax will be hard because the last 7 of 8 seasons have ended with a net financial loss.
Major sources of revenue are advertising, media, gate, and playoffs. Playing fewer games (less than 10 in-season games and best-of-1 playoffs), while paying players the same amount of money is not a winning combination. The Sonics Governor is mostly interested in winning, so not much risk of getting fired for running losses.
Target draft picks:
- ‘90: Gary Payton
- ‘91: Dikembe Mutombo
- ‘92: Shaquille O’Neal; Alonzo Mourning
- ‘93: Chris Webber; Penny Hardaway; Bruce Bowen (undrafted)
- ‘94: Glenn Robinson (SF); Jason Kidd (PG); Grant Hill (SF)
- ‘95: Kevin Garnett (PF); Jerry Stackhouse (SF); Rasheed Wallace (PF)
- ‘96: Kobe Bryant (SG); Allen Iverson (PG); Steve Nash (PG); Ray Allen (SG); Stephon Marbury (G); Peja Stojakovic (F); Jermaine O’Neal (F); Ben Wallace (C, undrafted)
- ‘97: Tim Duncan (PF); Tracy McGrady (SG); Chauncey Billups (PG)
- ‘98: Vince Carter (SF); Dirk Nowitzki (PF); Paul Pierce (SF)
- ‘99: Baron Davis (PG)
- ‘00: Jamal Crawford (SG)
- ‘01: Pau Gasol (PF); Tyson Chandler (C); Joe Johnson (SG); Tony Parker (PG); Zach Randolph (PF); Gilbert Arenas (PG)
- ‘02: Yao Ming (C); Amar’e Stoudemire (PF)
- ‘03: LeBron James (SF); Carmelo Anthony (SF); Dwyane Wade (SG); Chris Bosh (PF)
Never meet your starting point guard?