The math behind the NFL playoff odds, and exactly what is — and is not — modelled.
Every update plays the rest of the regular season 100,000 times. Each unplayed game is decided by a win probability from the two teams' Elo ratings; games can also end in a tie (probability 0.34%: 8 ties in the 2,383 games since the 2017 overtime rule). Games that have already been played are fixed at their real result. At the end of each simulated season the standings are seeded with the official tiebreakers and the postseason bracket is played out. Every number on the site — playoff, division, #1-seed and Super Bowl odds, seed distributions, what-if tables, game scenarios — is a count over that same pool.
Nothing is smoothed or carried over between updates. Each run is an independent 100,000-season draw from the current standings, the remaining schedule and today's ratings.
Each team has one rating. The season opens at a prior — last season's final Elo regressed halfway toward the league average of 1500 (the chain runs from 2016, following franchises through relocations) — then moves after every game:
P(home wins) = 1 / (1 + 10^(−(elo_home + 30 − elo_away) / 400))
new_elo = elo + K × (result − P), with result = 1 / 0.5 / 0 for win / tie / loss, K = 40, and a +30 Elo home-field bonus (zero at neutral sites such as the international games). The rating the site publishes can also blend the prior in explicitly with a weight that decays with games played, as BaseChaser does with its WAR prior; on NFL data that weight measured best at zero, so the prior's influence decays only through K.
Strength is uncertain, and the simulation says so. A rating after a handful of games is an estimate with a standard error, and that error is the same in every one of the team's remaining games — it does not average out over a season the way per-game luck does. So once per simulated season every team's true strength is drawn from a normal distribution around its rating (standard deviation 100 Elo, mean-preserving so each single game keeps its calibrated probability), and the whole remaining schedule is played with that draw. This is what keeps a 0-1 team from showing 3% in September: its record costs it, but the model no longer pretends to know its strength to the point.
None of these numbers were chosen by hand. K, home field, the regression fraction and the prior weight were tuned jointly — all 4,004 combinations — on every regular-season game from 2018 to 2025 (2,127 games) by log-loss, with the choice validated out of sample (fit on 2018–21, scored on 2022–25, and the reverse). The strength uncertainty was fitted on how far each team's actual remaining wins landed from the model's forecast (2018–23 fit, 2024–25 test), then checked by replaying the published playoff odds for every week of 2021–2025: teams the old model showed at 10–20% in the first month made the playoffs 27% of the time and teams at 80–90% made it 71%; with the recalibrated model those buckets come in at 16% and 92%, and the log-loss of the published odds falls from 0.446 to 0.420. The grids are reproducible with backend/tune_elo.py and backend/backtest_odds.py.
No margin-of-victory multiplier and no quarterback or injury adjustment yet. A team that loses its starting quarterback is not re-rated until its results say so.
Every simulated season carries a full per-game result matrix, so seeding does not just compare win totals — it runs the league's published procedure (NFL Tiebreaking Procedures). What is implemented, in order:
| Situation | Steps applied in simulated seasons |
|---|---|
| Division, two clubs | 1 head-to-head → 2 division record → 3 common games → 4 conference record → 5 strength of victory → 6 strength of schedule |
| Division, three or more | Same six steps with the restart rule: whenever a step eliminates a club but leaves two or more tied, the survivors restart at step 1 (two-club or three-club format as appropriate). |
| Wild card, two clubs | Head-to-head (if played) → conference record → common games (minimum four) → strength of victory → strength of schedule |
| Wild card, three or more | Same-division clubs are first reduced to their division-tiebreaker winner (and that within-division order is kept for later picks), then: head-to-head sweep → conference record → common games (minimum four) → strength of victory → strength of schedule, with the restart rule. |
| Seeding division winners | Wild-card procedure, per the rules. |
For the real "if the season ended today" standings, where actual scores exist, the next steps are applied too: combined ranking in points scored and allowed among conference teams, then among all teams, then net points in common games (division) / conference games (wild card), then net points in all games.
Not implemented: net touchdowns and the coin toss. A simulated season carries no scores, so simulated ties that survive strength of schedule (about 0.1% of seasons) are settled with a per-season random priority, and today's standings do the same below net points. Nothing beyond these steps is claimed.
Validation. Fed the complete 2025 regular season — all 272 real results from ESPN — the standings and tiebreaker code produced all 14 playoff seeds exactly as published (AFC: DEN, NE, JAX, PIT, HOU, BUF, LAC; NFC: SEA, CHI, PHI, CAR, LAR, SF, GB), with no coin toss needed, and every team's overall, division and conference record matched ESPN's. That season included a two-way tie for the #1 seed (DEN/NE, 14-3), a tie for #2 (CHI/PHI, 11-6) and a same-division wild-card tie (LAR/SF, 12-5).
An NFL team plays 17 games. One result moves its expected final win total by nearly a full win and re-rates it for every game still to come, and a single win is routinely the gap between a wild card and the couch. So a team can lose around 10 points of playoff probability on a Week 1 loss and earn it back a week later; the largest Week 1 move this season was 17 points. That is not the model being unstable — it is the season being short. The swings shrink every week as the sample grows and the schedule runs out.
A team is marked clinched or eliminated only when the standings make it mathematically certain (a sound, tiebreaker-independent test on win totals) or when the league's own standings feed flags it. A 99.9% simulation result is never shown as a clinch.
| Data | Source |
|---|---|
| Schedule, results, scores | ESPN's public scoreboard API, one call per week for all 18 weeks; every one of the 272 games comes from it. Nothing is generated. |
| Clinch flags, records | ESPN standings feed (cross-checked against the records computed from results). |
| Elo prior and backtests | ESPN results for the 2016–2025 seasons. |
| Team logos | ESPN CDN. |
| Tiebreaking procedure | nfl.com/standings/tie-breaking-procedures |
ESPN's API is unofficial and undocumented; if it changes, updates pause until the ingest is repaired.