A perfect NFL season is a rare event, which makes it a good fit for Monte Carlo simulation: instead of solving the probability exactly, you play the season many times and count how often a team wins every game.
The idea is simple. Give each game a win probability, draw a random number for each game, and check whether all of the draws land in the team's favor. Repeat that tens of thousands of times. The fraction of unbeaten seasons approximates the true probability.
Here is a short JavaScript version:
function perfectSeasonOdds(winProbs, trials = 100000) {
let perfect = 0;
for (let t = 0; t < trials; t++) {
let unbeaten = true;
for (const p of winProbs) {
if (Math.random() >= p) { unbeaten = false; break; }
}
if (unbeaten) perfect++;
}
return perfect / trials;
}
// 17 games, each with an 85% chance to win
const season = Array(17).fill(0.85);
console.log(perfectSeasonOdds(season));
For this case the exact answer is 0.85 to the 17th power, about 6.3 percent, so the simulation should print a value near 0.063. The two approaches agree, and that is a useful sanity check before you make the model more realistic.
Realism is where simulation earns its keep. Replace the flat array with per-game probabilities that reflect opponent strength, home field and rest. Add a small chance of a tie, since a tie also ends a 17-0 record. Model injuries by lowering probabilities for later games. None of these changes needs a new formula, only a different input array.
Two cautions. First, Math.random() is fine for illustration, but use a seeded generator if you want reproducible runs. Second, the output is only as good as the probabilities you feed in; the simulation measures consequences of your assumptions, not the truth about a team.
If you would rather not write code, 17-0 Game is a free NFL perfect-season simulator that runs this kind of experiment in the browser.
Top comments (0)