I thought it was high time to give an updated description of the model I use for predicting NFL games, as well as describe the new one I’m going to test-run this season, so here it is! This post will mostly be a reference and will take over as the NFL link in the header at the top of the page.
For the curious, here are a few pages describing previous iterations of the model and things that will be relevant shortly: first, roughly describing the models I was starting with; second, when I changed from my ‘every predictor possible’ model to Luigi, a slimmed-down version; third, a post that looks at some of the variables that predict winning games in the future (obviously applicable to a model that seeks to do that very thing); and fourth, a look at how my team ratings change over the course of a season.
Ok, so with that background knowledge floating around, let’s talk about the models. My primary model is Luigi. Luigi isn’t actually a single model but three models, one to predict the probability of the home team winning a game, one to predict the total number of points scored in that game, and a third to predict how many points the home team will win (or lose) by. The common thread across these three models is the predictors that go in to them, and that set of predictors is what makes Luigi Luigi. My earlier model, which was again really three models, used many more predictors and was called Mario. Sadly, Mario didn’t adapt well and so has fallen by the wayside. So let’s focus on Luigi.
Luigi is an inherently predictive model. It’s a regression model that takes certain statistics for the two teams playing a game and predicts who will win. However, it only takes statistics available before the game happens. For example, if I’m trying to predict if the 49ers will beat the Lions in week 2, I only use statistics for the 49ers and Lions from week 1. This is because I want to try and avoid overfitting. Fumbles and special teams play can greatly affect the outcome of a game, but that doesn’t mean they are reliably going to occur again in the future. By specifically predicting forward in time, I hope to reduce the impact of those less reliable statistics while still including those that increase predictive accuracy. This isn’t perfect, as can be seen by the example of Mario. When you include everything, even less reliable statistics will influence how the whole prediction turns out, and can make it worse than need be.
The regressions for total points and point differential are typical linear regressions that most readers of this blog should (I think) be familiar with. The regression for win probability is slightly different in that it’s a logistic regression. Instead of predicting a number that’s fairly normally distributed, like total points scored in a game, I’m predicting a ‘yes’ or ‘no’ outcome, in this case ‘win’ or ‘lose’. Once you fit the regression, it makes predictions in terms of probability. Also, all regressions are framed towards the home team, so ‘probability’ is probability of the home team winning and point differential is positive if the home team is expected to win and negative if the away team is expected to win. So for a particular game Luigi might say the home team has a 60% chance of winning. Obviously they have to either win or lose (I guess they have a tiny chance of tying), but the claim is that if teams with the statistics of the home and away teams were to play each other a bunch of times, the home team would win 60% of the time.
So that’s Luigi, and I like him alright. This year I’ll also have two other sets of predictions (which will surely make for messy blog posts, but I’ll figure it out). Due to possible issues of overfitting with a typical regression, I thought I would check out another kind of regression. Namely, I went with a regularized regression (here‘s the wikipedia article, and here‘s some work I did with regularization). One of the features of regularization is that it picks the regression weights by what makes the best out-of-sample predictions, which is obviously something we’d like to have here since we’re trying to predict what happens in games that haven’t happened yet.
Sticking with the theme, my regularized regression predictions will be called Yoshi. But that isn’t easy enough; I’m going to have Yoshi 1 and Yoshi 2. Yoshi 2 is exactly the same thing as Luigi but with a regularized regression; same data set, same predictors, etc. Yoshi 1 is a little different in that I wanted to give the regularization a chance to tell me if it had to do more ‘work’ early in the season as opposed to later in the season. For example, you tend to see more extreme numbers early in the season because fewer games have occurred and so team averages can be very noisy. Later in the season the averages have settled down for the most part. So it’s possible that more regularization is needed early in the season while less is needed later (and Yoshi would be relatively similar to Luigi). Also, there’s some chance other fundamental things change across weeks in the NFL.
The big difference is that Yoshi 1 only uses games from the same week as the game being predicted; if I’m trying to figure out who will win a game in week 2, it only uses the results of previous seasons’ week 2 games (Luigi and Yoshi 2 use every game, assuming that week doesn’t matter too much). This cuts the sample down a lot, but at this point I still have over 100 games for each week, so hopefully it isn’t an issue.
To summarize: Luigi uses a typical regression and makes a guess based on every other game in the database; Yoshi 2 is Luigi but with a regularized regression; Yoshi 1 only uses games from the same week as the game being predicted and can thus have a different amount of regularization (as well as different weights on each predictor) for each week.
A couple suggestions of things to look for: Luigi has been terrible at over/under picks, so it doesn’t do very well predicting total points. Maybe one of the Yoshis will pick up the slack. Regularization generally has the effect of moving weights closer to 0, and thus moving predictions closer to the mean. So look for the Yoshis to produce predictions generally in the same direction as Luigi but not as extreme. And look for a good year of football!