My March Madness Bracket 2016
So I wrote a blog post about my process of creating my March Madness bracket last year, so I figure this year I’ll revisit it and explain what I changed. (Note: I know this post is actually after March Madness started… but I’ve been busy. I did actually create the bracket before the games began.)
I used Coder’s Bracket again for a couple reasons. First, it was pretty cool last year, and I wanted to try it again. The second was that I was really busy all week at Big Break with Cru, and I didn’t have much extra time to fill out a bracket, so just slightly modifying last year’s algorithm was really easy.
If you haven’t read my post from last year, you should probably go back and read it first for context.
I stuck with forcing seeds better than 5 in the first round and better than 2 in the second round to win. I did this to make sure my bracket doesn’t end up too crazy. Next year, I should try to remove that and see how I do.
What I changed, however, was making that check actually work :) . Last year, I
used the >=
operator for the condition, checking if the seed was greater than
or equal to 5 and 2, which had the opposite effect than what I intended. This
year, I’m using the <=
operator, which actually does what I want.
I’ve also changed my scoring algorithm to remove winning percentage from the calculation. I’m already using RPI, so it seemed a tad redundant.
Additionally, I messed with the weights, because I felt like it. This isn’t a totally scientific process, contrary to what my comment might indicate :)
And that’s pretty much all there is to it! You can view my completed bracket on the Coder’s Bracket site here.
Here’s the code:
// My algorithm from 2015, with a couple tweaks for this year.
// Didn't work last year, probably won't work this year either,
// but I've been busy this week.
function(game, team1, team2){
// Seeds 5 and better don't lose in the first round
if (game.round == 5) {
if (team1.seed <= 5 || team2.seed <= 5) { if (team1.seed > team2.seed) {
team2.winsGame();
} else {
team1.winsGame();
}
}
}
// Seeds 2 and better don't lose in the second round
if (game.round == 4) {
if (team1.seed <= 3 || team2.seed <= 3) { if (team1.seed > team2.seed) {
team2.winsGame();
} else {
team1.winsGame();
}
}
}
// Everyone else goes through my TOTALLY SCIENTIFIC scoring algorithm
if (calcScore(team1) > calcScore(team2)) {
team1.winsGame();
} else {
team2.winsGame();
}
// Scoring algorithm
// Mostly objective, but I tweaked the weights to make my bracket interesting
// I'm using the RPI, apparently a ranking of schedule difficulty to make win percentage be somewhat fair.
// It's divided by two to lessen it's impact
//
// The numbers on the far side are the weights for each item
function calcScore(team) {
var myScore = 0;
//myScore += team.rpi/2 * team.win_pct * 10; // Winning percentage
myScore += team.rpi/2 * team.field_goal_pct * 7; // Field Goal percentage
myScore += team.rpi/2 * team.free_throw_pct * 5; // Free Throw percentage
myScore += team.rpi/2 * team.three_point_pct * 7; // 3's percentage
// Penalty for missing 3's. About 10 per game on average, so I divided by 20 to lessen the impact.
myScore -= team.rpi/2 * (team.threes_attempted - team.threes_made)/20 * 3;
return myScore;
}
}