By now you've seen enough rants and raves about the NFL from me. I had a bit of time off and decided to have a go at writing code to predict the outcome of games. I'm already in a pool for no money so I might as well give myself a legitimate edge. The first thing I thought of was Heal Points. The next thing I thought of was the old BCS computer scores for NCAA football. Both were designed to deal with comparing teams that never played each other. Then I made an abomination of the two. Somehow it's working halfway decently. Follow along if you want to copy it in your language of choice.
The first thing you're going to need is a list of who beat who this season up until the end of last week. For every team, add 100 points for every win and 50 points for every tie, then divide by the number of games played. A 7-3 record = 70 points, 6-3 = 66.666666 points, etc. These are basically your seed values.
Now the fun part begins. We're going to iteratively try to solve a set of 32 equations with 32 variables! I found that 1000 iterations is enough to make the numbers not vary beyond a thousandth of a point. Make a copy of whatever you're using to hold your seed values. Use them as inputs for each team equation and write the result out to the copy.
You may notice that the results of each equation are almost always lower than the inputs going in. We need to scale it, otherwise after 1000 iterations, we'll only get 0's back. After each equation is complete, get the lowest and highest values and scale them such that the lowest value is 0 and the highest value is 100. After that's done, overwrite the seed values with the resulting values, and you've finished one iteration. Repeat that 1000 times and your resulting values will look very different from your seed values.
After 11 weeks, the results are somewhat realistic but there are some real questions with others:
I tested this against every game this season (excluding the tie game) and while I wouldn't put any money on it, it's better than 50/50:
I'll continue to hack away at it and see if I can't get the success rate higher. I think adding a recency bias will help some.