Football Sensei Logo
Football
Sensei

Methodology: How My Simulations Work

TL;DR: I assign team strengths based primarily on betting market odds, then I run Monte Carlo simulations of the remaining games in the season using those strength scores to assign probabilities to the outcomes of each matchup. You can pull out a ton of interesting statistics from these simulations.

1. How I Assign Team Strength Scores

The first step in my process is to assign a score to each team representing its relative strength. I base my scores on the Elo rating system, a method originally developed for chess players. A higher Elo means a team is better, and a lower Elo score means a team is worse. There's a straightforward formula that lets you use Elo scores to calculate the odds of each team winning any given matchup.

  • To get the start-of-season Elo score I use a baseline Elo based on the team's performance in the previous season, regressed slightly to the mean to account for offseason changes.
  • Then, if any games have been played so far this year, I apply the standard Elo formula to update the rankings.
  • Next I run a Monte Carlo simulation of the entire season using these regressed Elo scores to calculate the resulting playoff odds.
  • I then compare these simulated playoff odds to betting market playoff odds, and adjust the Elo scores iteratively until the simulation results match what the markets are predicting.

The motivation behind this approach is that betting markets are the gold standard for predicting real-world outcomes and they account for all known relevant variables. The market odds largely reflect the expectations of professional analysts who work full time on understanding all the team strengths/weaknesses, injuries, schedule impacts, and even weather.

Betting market playoff odds are not directly translatable into team strength scores though because they are strongly dependent on division strength and schedule strength. By pegging the simulation outcome to recreate the market playoff odds, I am setting the team Elo scores to what they would have to be in order to reach the outcome the markets predict. These are the power rankings that the oddsmakers imply.

The Elo calculation itself is kind of in the weeds, but if you are interested in the details of the implementation, I describe it here.

2. Monte Carlo Simulations of the Season

Once I have each team's current Elo rating and the schedule of remaining games, I use a Monte Carlo simulation to project the rest of the season. This involves:

Simulating Individual Future Games:

For each unplayed game in the schedule:

If betting markets have a game line for a certain game, I just directly use the implied win probabilities associated with that line. This is usually only available for games in the upcoming week or two though. For games without market odds, I calculate the home team's win probability using the current Elo ratings of both teams (including home-field advantage) according to this formula:

Win Probability
Phome=11+10(Ehome+HFA)EawaySP_{\text{home}} = \frac{1}{1 + 10^{-\frac{(E_{\text{home}} + \mathrm{HFA}) - E_{\text{away}}}{S}}}
Where EhomeE_{\text{home}} and EawayE_{\text{away}} are Elo ratings, HFA\mathrm{HFA} is home-field advantage, and SS is the Elo scaling parameter.

Then I generate a random number between 0 and 1. If it's below the home team's win probability, the home team is marked as the winner for that simulated game. Otherwise, the away team wins. Right now, I don't simulate ties. I might add that in later, but it has a really marginal effect.

Repeating Many Times:

I simulate the entire remaining schedule like this to create one simulated season. Then I repeat this process 5 million times. Each of these 5 million run-throughs of the remaining schedule provides a complete potential outcome for the season, weighted to the probability that it occurs.

3. Analysis of the Results

For each of the 5 million simulations, I have one instance of the exact winners of every game. So I know who made the playoffs, won the Super Bowl, which round of playoffs each team got eliminated, the full draft order, etc. for each of these 5 million simulations. For any outcome that I'm interested in, I can just count how many times it happened and divide by 5 million to get the odds of it occurring in real life.

For example, if the Broncos make the playoffs in 3 million out of 5 million simulations, their playoff odds are 60%. I repeat this for every team and every metric that I'm interested in. If there's some metric you're interested in that I don't track, message me on Reddit, Twitter, or send me an email with your request.

4. Game Impact Analysis ("Who to Root For")

To determine how a specific upcoming game impacts a team's chances for a given metric (like making the playoffs or getting the #1 pick), I filter the 5 million simulations to only those where the home team won the game in question, and calculate the fraction of simulations where the target team makes the playoffs. Then I repeat this for the away team winning. The difference between these two probabilities shows how much that game's outcome impacts the target team's chances.

Baseline: I first note the team's probability for an outcome (e.g., playoff odds) based on all 5 million simulations.

Conditional Probabilities: I identify the subset of simulations where Team A wins a particular upcoming game. Within this subset, I calculate the target team's outcome probability (e.g. playoff odds if Team A wins). I do the same for the subset of simulations where Team A loses that game.

Impact (Delta): The difference in probabilities between these scenarios shows how much that game's outcome swings the target team's chances. The "Root For" suggestion points to the game outcome (Team A winning or Team B winning) that most benefits the team you are rooting for.