Tuesday, April 9, 2019

March Madness brackets this year

I used to work in higher ed, and folks in my office followed the NCAA (National Collegiate Athletic Association) basketball games every year. If you aren't in the US, this is called "March Madness" because the games start in March.

To some, it's a big deal to follow the teams and predict how the playoffs will run. NCAA uses a single-elimination playoff series, called an NCAA "bracket." You can fill in your favorite teams to complete a bracket, to predict how you think the games will run.

I don't follow basketball, but I liked to participate in the brackets every year. Typically, you'd put down some small amount of cash in an office pool and the person with the best-performing bracket would "win."

Because I don't follow the teams, I can't predict how each might do in the playoffs. I'd like to take part in the fun, maybe put my five dollars into the office pool, but I just don't know enough about the teams to make an informed decision on my own March Madness bracket. So a few years ago, I found another way: I wrote a little program to do it for me. Over time, I've improved the script.


The basic idea is to use the "seed" values as an estimate for performance. March Madness covers four regions, each with sixteen teams with seed values 1–16 that are initially assigned based on some calculation of performance that year. While each of the sixteen teams are excellent (hey, they made it to the playoffs) my script makes the simple assumption that a "rank 1" team will usually outperform a "rank 16" team, but a "rank 7" team will be about evenly matched against a "rank 8" team.

Read the articles for details. The short version is you build an n-sided virtual "die" and "roll" it to predict each game's outcome. Each run of the script is essentially random, but there's a definite preference towards the higher-ranked teams.

I ran my March Madness script when the NCAA posted this year's brackets, and have been tracking the results. And I was surprised to see that one of my teams made it all the way to the final playoff. Go Texas Tech! But alas, my script didn't predict the correct ultimate winner.

In the first round of the NCAA March Madness, you start with teams 1–16 in four regions, so that's 64 teams that compete in 32 games. My script correctly guessed 4 contests in the Midwest region (NC, Aub, OH St, and Woff), 6 contests in the East region (Duke, VA Tech, Maryl, LSU, Minn, and Mich St), 5 in the West region (Gon, FL St, Texas Tech, Fla, and Mich), and 3 in the South region (Virg, Purd, and Tenn). So that's 4+6+5+3=18 for me in round one.

In the second round, my script carried only 1 team in the Midwest (Aub), 1 team in the East region (LSU), 4 teams in the West region (Gon, FL St, Texas Tech, and Mich), and 1 team in the South region (Purd). That means 1+1+4+1=7 for me in round two.

At the third round, things really fell apart. My script correctly guessed none in the Midwest and East regions, 1 in the West region (Texas Tech), and none in the South region. A total of 1 in round three ("Sweet Sixteen").

My script predicted that Texas Tech would go all the way in the West region. I had to make my own guesses for the Final Four (I guessed that rank 3 Texas Tech would win over rank 8 UT St, and rank 7 Cin would win over rank 8 VCU) and the national championship (again, using simple comparison to guess that rank 3 Texas Tech would defeat rank 7 Cin) to complete my NCAA bracket. That left me to follow Texas Tech throughout the rest of March Madness. And they did very well, succeeding in every contest except the final game, where Texas Tech lost to Virginia 85 to 77 in overtime. But that means my script correctly predicted 1 game in each of round four ("Elite Eight") and round five ("Final Four").

Following the standard method for how to score March Madness brackets, each round has 320 possible points. In round one, assign 10 points for each correctly selected outcome. In round two, assign 20 points for each correct outcome. And so on, double the possible points at each round. From that, the math is pretty simple.
round one:18 ×10 =180
round two:7 ×20 =140
round three:1 ×40 =40
round four:1 ×80 =80
round five:1 ×160 =160
round six:0 ×320 =0
600
That's a pretty good run! I've been tracking my scores over the last few years, and my total score last year was 390 points, but there were a lot of upsets last year so no one's brackets did very well anyway. The previous year's script (with a bug) scored 530 in one instance, and 490 in another instance. So 600 points this year is excellent compared to the previous years.

I should add that I don't consider my script a replacement for a human in filling out NCAA brackets. My script just makes guesses, so each run is different. This run happened to do well. But it is enough that I get invested in the March Madness games. And that's fun for me.

Did you track March Madness this year? How did you do with your bracket?

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.