3 min read

Predicting NBA Games with a Model Proves Challenging

Our methods behind the predictors we used was pretty simple. In the NBA, it is all about offense. Defense isn’t as highly sought after for production, compared to a 3-point sharpshooter or athletic slasher. With that, we focused on offensive metrics (though we did sprinkle in some defensive metrics so it wasn’t completely one-sided).

These were our metrics (all with a 3-game rolling window):
- True shooting percentage
- 3-point field goal percentage
- Effective field goal percentage
- Fast break points
- Assist to turnover ratio
- “Bleals” (blocks + steals)

We believed 3-point shooting, especially, was going to be key as it’s becoming the common dominant quality in the league today. We also valued shooting efficiency, fast break points, AST/TO ratio, and for our defensive metrics we chose blocks and steals because those translate to a free possession for the team, which increases their odds of scoring while decreasing the opposing team’s odds of scoring.

When it came to deciding whether or not we wanted to go with the model’s choice of who would win or not for our bets, we tended to rely more on who we felt would win the games over the model’s choice instead. The model doesn’t know who is playing, momentum, and other obscene and abstract factors that we can’t sum up and put into a model. So a lot of it was, “Well, the model says this, what do we think?” and we’d decide from there. At the beginning, we knew the Mavericks weren’t a stone-cold lock because Luka Dončić was out for a couple of games. Collectively, our picks were based on the following questions. How has the team performed recently? Are their star players going to be playing at full speed? Does the model agree with how we’re feeling? And how big (or small) are the odds for each team?

We finished the gambling season with $2,300 (with a sum of our profit being $800). We went ALL IN on the Suns in their Game 6 victory vs the Pelicans and it paid off. Unfortunately, we decided to play it safe for the last day (one of the only groups to do so), and ended up in 3rd place overall, behind the two teams, “Beat me and you fail” ($2,976.49) and “Fred Hoiberg’s Mercenaries” ($2,909.26). We went 12-7 as a team, with our wins collecting $2,088, and our losses losing us $1,288. Our average moneyline was -210, and the median moneyline was -135.

What did I learn about modeling? It is fun, tedious, and there’s so much I’ve learned but there’s also so much I have yet to learn. I’ve learned that XGBoost models are not meant to be run on Mac Air computers unless you want your computer’s fan to be taking off for orbit for three hours. I’ve known about gambling in sports for a while, so I didn’t particularly learn anything knew, but it reinforced my belief that no matter the stats you have or the accuracy of a model, there is always second-guessing that will happen, and you can never be too confident in a bet. I learned that working as a team is both a blessing and a curse. The blessing is there’s plenty of opinions to go around when deciding on the team to gamble on. The curse is there’s plenty of opinions to go around when deciding on the team to gamble on. The activity was fun, though. I have come to enjoy coding and I have always loved sports and this was a great combination for an assignment.