Theorizing a Winning Algorithm for Next Season’s Fantasy Basketball Draft
As a decade-long Washington Wizards fan, loyalty and losing go hand in hand. These two qualities implore me to continuously enroll in a friend’s fantasy basketball league. An eight-person league that I have never broken above fifth place for the past five seasons. From eighth in my debut season, to sixth in my sophomore and junior, then all the way to fifth for the two recent seasons. The prestige of being a medium-low-tier general manager is hard work, but I am ready to take the next step to improve my standing once again.
For those who don’t know, fantasy basketball is an online game where members act as virtual general managers to build and maintain the best possible team during the NBA regular season. There are many different iterations on how to play. My league uses the rotisserie format where each team’s active players accumulate statistics throughout the course of the eighty-two game season. Each team achieves league points for each statistical category, like assists and blocks. The better a team’s statistics are compared to other teams, the more league points they get for that category. For instance, if in an eight-team league, a team is currently first in rebounds, that team would get eight league points for being first in that category because there are eight teams. The team with the most league points at the end of the season is the winner. The scoring aspect of this format is dynamic and requires long-term strategy to come out on top. It’s a gauntlet, and it’s easy to fall behind quickly.
It’s so easy to fall behind, I do it at the start of every season almost immediately, and it is all my own doing. Last season, I didn’t do any preseason research, drafted poorly, then I made horrible trades and dropped Cooper Flagg to free agency right before he found his footing. I was is seventh place for the majority of the season and only beating the guy who never logged on. So, I made a logical method to help me visualize which players better suit my team’s statistical needs. Below is a screenshot of that method.
I placed players’ daily averages in a table and compared these averages to my own team’s cumulative season statistics calculated as daily averages (top row) for each statistical category. Every players’ averages better than the team’s averages got highlighted in green. To add the importance of some categories over others, I compared my team’s position in each category to my opponents’ positions and gave each category a certain point amount depending on the importance of that statistic in my team’s ability to catch up to another team or defend a higher position. Every highlighted cell in a player’s row awards that player the weighted points of that category. Then each player’s points are summed up which will tell me which players help or hurt my team.
Get Kerry Canal’s stories in your inbox
Join Medium for free to get updates from this writer.
For example, in the table above, Devin Booker, an all-star caliber player, is highlighted blue, which signifies he is not bringing enough value to the team. While he is excellent in free throw percentage, assists, and points per game, those are not the statistics I need boosted. Those are categories where I am either so far ahead or behind other teams that it is not worth allocating resources to them. My team needs a productive three-pointer shooter who conjures up a couple steals per game. Booker performs lower than my team’s averages in those categories, but someone like Collin Gillespie, someone significantly worse than Booker in the real game of basketball, is more valuable to my fantasy team because he averages more three pointers and more steals per game than what my team cumulatively averages. Any rotisserie veteran will know that the well-rounded players are great in the first part of the season, but in the home stretch, the one-or-two-stat specialists become hot commodities.
I want to take the basic system I described above and make it into an automated algorithm that reviews every eligible NBA player, takes in all of their statistics, and spits out the best player to draft depending on who is remaining and who I already drafted. Please stick with me because this next portion gets a little convoluted and I don’t have a visual to represent what is being said.
Instead of my own team’s statistical daily averages to compare every player to, it will use the best daily averages per category between every team in my league last season; and instead of manually deciding the weighted points of each category, those values will be calculated by evaluating the difference between last season’s ideal statistical averages and my team’s current statistical averages relative to the ideal averages. This shows what statistical categories need prioritizing in my next draft pick. At the start of the draft, every statistical category will be equally important, but every pick will reprioritize the categories. Next, each player’s individual value needs calculated by evaluating the difference between last season’s ideal statistical averages and that player’s statistical averages from last season relative to the ideal averages. Then, this player’s value in that category is adjusted by that category’s prioritization value, creating that player’s adjusted category value. Take the summation of those adjusted values up for each player and compare with other players to see who are the most valuable players to your team at that draft placement.
It may have to be adjusted later, but this pseudo-formula is the best evaluation for finding the best player to draft I could think of without doing research if other people have done something similar. I am certain there is a better equation out there, but this is a good starting point.
Google Sheets will serve as the canvas to build this algorithm. I like how easy it is to use the function IMPORTHTML to obtain data from other websites and, to me, it is halfway between a programming language and a visual tool. The next season’s fantasy draft will be middle of October this year, so my plan is to make an update to this article around the end of August to demonstrate a the algorithm and document some mock drafts. I’m most curious about how picking different players for the first round will effect different picks down the line and how it will match up against ESPN’s preseason player rankings.
Now, I have to consider the ethics of what is proposed above. Using a computer algorithm to win a competitive game played with friends is unethical if they are unaware of its existence or don’t consent to its assistance. If they are aware and do consent, it’s ethical but it removes the fun of competition. All the work on an algorithm is done upfront in designing the application instead of the day-to-day dynamic choice making that goes along with being a general manager. Isn’t it a wonderful experience whenever your “buddy” steals your next draft pick and the panic sets in of only having a minute to pick another player that might wreck your team? The algorithm avoids this situation entirely. The purpose of joining this fantasy basketball league is to have fun and connect with friends, so any use of an algorithm that automates in-game actions is undermining the purpose of me joining. This is why I will create a new isolated league with the algorithm as the only member so I can compare it to how my friends and I perform without it affecting our competitive league.








