An Elo rating system built for football borrows a single update equation from chess and layers three football-specific adjustments on top of it — a home-field bonus, a margin-of-victory multiplier, and a between-season reversion — and FiveThirtyEight’s published NFL implementation is specific enough about all three to serve as a fully worked reference rather than a vague description.
Where the Elo rating formula comes from
Arpad Elo was a Hungarian-American physics professor and chess master who built the system to replace the Harkness rating method the United States Chess Federation had been using. The USCF adopted his formula in 1960; the World Chess Federation (FIDE) followed in 1970, and the name has been attached to rating systems in dozens of other competitive activities ever since, including association football, tennis, basketball, and American football.
The appeal of the Elo rating system formula for any zero-sum, two-sided competition is its simplicity: two numbers go in (the pre-game ratings of both sides), one number comes out per side (the updated rating), and no history beyond those two numbers is required. A team’s entire competitive record is compressed into a single scalar, updated incrementally after each result rather than recomputed from scratch.
That incremental property is the real reason Elo spread so far beyond chess. A least-squares system like Massey ratings, or a network-flow system built from a continuous-time Markov chain, needs the entire season’s schedule in hand before it can solve for a single rating — adding one more completed game means resolving the whole linear system again. An Elo rating model for football needs only the two teams’ current numbers and the outcome of the game they just played. That makes it the natural choice for anything that has to update live, week by week, without waiting for a season to finish or recomputing from scratch every time — which is also why it has become a common baseline in publicly documented sports-analytics projects well outside chess.

What a football Elo rating system needs to decide up front
A football Elo rating implementation is really a short list of design decisions layered on a fixed base equation. Four questions have to be answered before any ratings can be computed:
- Starting values. Every team needs an initial rating before its first game, and the choice matters most for brand-new franchises or a season’s very first slate of games, before results have had a chance to correct an arbitrary guess.
- The K-factor. How aggressively should one result move a rating.
- Home field. Whether — and by how much — to boost the home team’s effective rating before computing an expected outcome.
- Margin of victory. Whether a win by 30 should move a rating more than a win by 3, and by how much.
FiveThirtyEight’s NFL Elo model answers all four explicitly and publicly, which is exactly what makes it useful as a worked reference rather than a description of Elo in the abstract: a starting/reversion value of 1505, a K-factor of 20, a home-field bonus of 65 points, and a specific margin-of-victory multiplier formula, all stated in the model’s own published source code.
The Elo rating system formula, in full
Two equations define the system. The first converts a rating gap into an expected outcome:
E_A is team A’s expected score against team B — in chess this is a number between 0 and 1 representing an expected fraction of a point (1 for a win, 0.5 for a draw, 0 for a loss); in football, with no draws, it collapses to a win probability. R_A and R_B are the two teams’ current ratings. The 400 in the denominator is the scale constant that ties the logistic curve’s shape to points on the same numeric scale as the ratings themselves — it is why a 400-point Elo gap corresponds to a 10:1 expected-score ratio.
The second equation is the update itself, applied after the game is played:
R’_A is the new rating, S_A is the actual result (1 for a win, 0 for a loss in football’s case), E_A is the expected score from the first equation, and K is the K-factor — the single number that decides how far one result can move a rating. A team that wins when only lightly favored (E_A close to 0.5) gains more than a team that wins as a heavy favorite (E_A close to 1), because the gap S_A - E_A shrinks as the expected result becomes more certain.
Adapting the chess formula for football Elo ratings
Chess has no home board advantage, no margin of victory beyond winning or losing, and rosters (the players themselves) don’t change between tournaments. Football has all three, and an Elo rating system built for football has to decide how to handle each one. FiveThirtyEight’s NFL Elo model, with its methodology and source code published openly, is specific enough on all three to use as a concrete reference rather than a general description.
Home field advantage as rating points
Home field advantage is folded in before the expected-score formula runs, not as a separate adjustment afterward: the home team’s rating is temporarily increased by a fixed number of points for the purposes of computing E_A, then the boost is set aside again when the real post-game update is calculated using the actual pre-game ratings. FiveThirtyEight’s NFL model used 65 Elo points for a standard home game, reduced to 33 points for games with no fans or a reduced-capacity crowd — a direct, quantified acknowledgment that at least part of home field advantage is attendance-driven.
The margin-of-victory multiplier
A model using only win/loss outcomes treats a 1-point win identically to a 40-point win, which throws away real information about how convincingly a team performed. FiveThirtyEight’s NFL Elo model instead scales the rating change by
The natural-log term grows with the margin of victory but with diminishing returns, so the difference between winning by 30 and winning by 35 barely matters more than the difference between winning by 3 and winning by 8. The second term is a dampener: when the pre-game Elo gap was already large, an expected blowout by the favorite is discounted, while the same-size blowout by an underdog is amplified — an upset by a big margin moves ratings more than a similarly-sized expected result does.
Reversion toward the mean between seasons
Rosters turn over every offseason through the draft, free agency, trades, and coaching changes, so carrying a rating unchanged from the final week of one season into week one of the next overstates roster continuity. FiveThirtyEight’s model pulls every team back toward a fixed league-average rating of 1505 by one-third between seasons:
A team that finished a season rated 1650 starts the next season at 1505 × (1/3) + 1650 × (2/3) = 1601.7 — most of its accumulated strength carries forward, but a third of the gap to average closes automatically before a single new game is played.
Choosing the K-factor: the number that decides how fast an Elo rating reacts
The K-factor is the single most consequential choice in the entire Elo rating system formula, because it directly controls the trade-off between responsiveness and stability. A large K-factor makes ratings swing hard after every game — useful early in a season when there is little data, dangerous late in a season when it lets one fluky result overwhelm months of evidence. A small K-factor produces a smoother, more conservative rating that changes slowly, at the cost of reacting sluggishly to a team that has genuinely improved or declined.
FiveThirtyEight’s published NFL Elo model used a fixed K-factor of 20 for every team, every week, combined with the margin-of-victory multiplier above (which effectively scales the realized rating change further, game by game, on top of the flat K-factor). Chess implementations under FIDE instead vary the K-factor by player rating and experience — new and lower-rated players get a higher K-factor so their ratings converge faster, while established grandmasters get a lower one for stability — illustrating that the “right” K-factor is a design decision tied to how much signal-to-noise a given competition actually has, not a fixed constant that transfers automatically between sports.
An Elo K-factor that is too high for a 17-game NFL season will make a rating whipsaw after a single upset, treating one game as far more informative than it is; an Elo K-factor that is too low will leave a rating stubbornly reflecting last month’s form even after a team has visibly changed. There is no way to derive the “correct” Elo K-factor from first principles — it is fit empirically, by checking how well a candidate value predicts held-out games it was not trained on, which is the same reasoning FiveThirtyEight applied in settling on 20 for the NFL specifically rather than reusing chess’s higher default.
Where football Elo ratings run into trouble
Three situations expose the rough edges of an Elo rating system built for football specifically. The first is a brand-new franchise or a league’s very first season, where no prior results exist to justify any particular starting rating — the 1505 mean is a reasonable default precisely because it is neutral, not because it reflects anything real about the team.
The second is a tie. Chess’s draw outcome maps cleanly onto S_A = 0.5 in the update formula, but regular-season NFL games only rarely end in a tie under the current overtime rules; when one does happen, it has to be scored as a half-win for both sides the same way a chess draw is, even though the game’s competitive texture (a coin flip in overtime, effectively) is different from a chess draw reached through 40 careful moves.
The third is roster discontinuity that a fixed between-season reversion cannot fully capture. The 1/3-reversion-to-1505 rule treats every team’s offseason turnover as roughly equal, when in practice a franchise that changes its starting quarterback carries far less forward continuity than one that returns its entire roster — a limitation FiveThirtyEight’s own methodology write-ups acknowledged rather than hid, and one later, more elaborate public Elo-style models (such as nfeloapp.com’s modified system, which adds a quarterback-performance adjustment layer) were built specifically to address.
A worked example (hypothetical teams, done by hand)
Suppose a hypothetical home team, Harbor, carries an Elo rating of 1550 into a game against a visiting team, Crestline, rated 1500. Adding Harbor’s home-field bonus of 65 points for the purpose of the expected-score calculation gives an effective home rating of 1615, a 115-point edge over Crestline.
Harbor is expected to win about 66% of the time. Suppose Harbor wins by 10 points. With a K-factor of 20 and, for simplicity, an MOV multiplier of roughly 1.2 for this margin and rating gap:
Crestline’s rating falls by the same amount its opponent’s rises, since Elo is zero-sum for a two-team result: Crestline moves from 1500 to roughly 1491.84. Notice how small the movement is relative to the ratings themselves — a single expected result, even with a real margin of victory, is designed to shift a rating by single digits, not dozens of points; it takes a sustained run of surprising results to move a football Elo rating system’s output meaningfully.
Now compare that to an upset. Suppose instead Crestline, still rated 1500 and still on the road, wins outright by 10 points against a Harbor team effectively rated 1615 with its home-field bonus included:
Crestline’s expected score was only 0.340, so its actual win (S = 1) produces a much larger gap, S - E = 0.660, more than triple the gap from the earlier expected-result example (0.340 - 0.000 versus the favorite’s 1 - 0.660 = 0.340). Combined with a margin-of-victory multiplier that, per the formula above, is not dampened for the underdog the way it would be for the favorite, Crestline’s rating jumps by roughly three to four times as much as Harbor’s would have gained for the same 10-point margin as the expected winner. This asymmetry — big rating moves for surprising results, small ones for expected results — is the entire point of subtracting the expected score E_A from the actual score S_A rather than using the raw outcome alone.
How Elo compares to regression- and network-based football rating systems
Elo is fundamentally different in mechanism from methods like Massey least squares or a continuous-time Markov chain rating: both of those solve a single linear system built from an entire season’s games at once, while Elo processes one game at a time, sequentially, with no need to ever “recompute from scratch.” That makes Elo naturally suited to in-season, week-by-week updates and awkward for retrospectively re-rating a season that has already finished, where a least-squares or Markov-chain method’s single-solve approach is a more natural fit. The two families are not competitors so much as answers to different questions: Elo answers “how should this rating move right now, given what just happened,” while Massey ratings and Markov chain ratings answer “what single set of ratings best explains everything that has happened so far.”
There is also a path-dependence difference worth naming directly. Because Elo updates sequentially, the order in which games are played can leave a small mark on the final ratings — a team’s rating after 16 games depends slightly on which of those games came first, since each update is computed from whatever the ratings happened to be at that point in the season. A least-squares or Markov-chain rating built from the same 16 games, solved all at once, has no such ordering dependence: swapping the order the games are listed in makes no difference to a system that only cares about the completed matrix of results. Neither property is strictly better — sequential updating is exactly what makes Elo cheap to run in real time, and order-independence is exactly what makes a single-solve method easier to reason about after the fact — but the two are genuinely different guarantees, not just different implementations of the same idea.
Building a football Elo rating system from schedule data
A football Elo rating implementation needs, at minimum, a chronologically ordered list of games with the two participants, which team was home, and the final score (score is required only if a margin-of-victory multiplier is used; a pure win/loss version does not need it). nflverse-data’s games.csv release provides exactly this shape for every NFL game back to 1999, updated same-day during the season, under a CC-BY-4.0 license.
import pandas as pd
def elo_expected(home_rating, away_rating, hfa=65):
return 1 / (1 + 10 ** ((away_rating - (home_rating + hfa)) / 400))
def elo_update(rating, k, actual, expected, mov_mult=1.0):
return rating + k * mov_mult * (actual - expected)
games = pd.read_csv(
"https://github.com/nflverse/nflverse-data/releases/download/schedules/games.csv"
)
season = games[(games.season == 2026) & games.result.notna()].sort_values("gameday")
ratings = {team: 1505.0 for team in pd.concat([season.home_team, season.away_team]).unique()}
K = 20
for _, g in season.iterrows():
exp_home = elo_expected(ratings[g.home_team], ratings[g.away_team])
home_won = 1.0 if g.result > 0 else 0.0
ratings[g.home_team] = elo_update(ratings[g.home_team], K, home_won, exp_home)
ratings[g.away_team] = elo_update(ratings[g.away_team], K, 1 - home_won, 1 - exp_home)
This loop processes every game exactly once, in order, which is the entire mechanical content of an Elo rating system: no matrix inversion, no least-squares solve, no null-space computation — only a running sequence of small adjustments. The win-probability calculator applies the same expected-score formula to convert a rating gap directly into a probability, and the weekly ratings page runs this update loop against the current season’s completed games.
Frequently asked questions
What is the Elo rating system formula?
Two equations. First, expected score for team A against team B: E_A = 1 / (1 + 10^((R_B - R_A) / 400)). Second, the update after the game: R'_A = R_A + K(S_A - E_A), where S_A is 1 for a win and 0 for a loss (chess also allows 0.5 for a draw) and K is the K-factor controlling how much a single result moves the rating.
Who invented the Elo rating formula and why?
Arpad Elo, a Hungarian-American physics professor and chess master, developed it to replace the Harkness system then used by the United States Chess Federation. The USCF adopted Elo's system in 1960, and the World Chess Federation (FIDE) adopted it internationally in 1970. Football adaptations of Elo's rating system came decades later, built on the same core update equation.
What does the K-factor control in an Elo model for football?
The K-factor sets how much a single game moves a team's rating: a higher K-factor makes the system react faster to recent results but also makes it noisier game to game, while a lower K-factor produces a steadier, slower-moving rating. FiveThirtyEight's published NFL Elo model used a K-factor of 20.
How does home field advantage work in the Elo rating system formula for football?
It is added as rating points before computing the expected-score formula, not as a separate term afterward: the home team's rating is temporarily boosted (FiveThirtyEight's NFL model added 65 Elo points, reduced when a stadium had no or limited fans), the expected score is computed with that adjusted number, and the boost is removed again once the actual rating update is calculated.
What is the margin-of-victory multiplier in a football Elo model?
It is a scaling factor applied to the base rating change so that blowout wins move a rating more than one-point wins. FiveThirtyEight's NFL Elo model used log(max(point differential, 1) + 1) multiplied by 2.2 / (winner's Elo edge × 0.001 + 2.2), where the edge keeps its sign: the factor grows with the margin of victory, shrinks when a favorite wins and grows when an underdog wins, so an upset by a big margin moves ratings more than a favorite's expected blowout.
Why do Elo ratings reset partway between NFL seasons instead of carrying over fully?
Rosters change every offseason through the draft, free agency, and coaching changes, so a rating built entirely on last season's results overstates how much a team's identity persists. FiveThirtyEight's model pulled each team's rating back toward a 1505 mean by one-third between seasons: new_rating = 1505 × (1/3) + old_rating × (2/3).
Is the Elo rating formula the same for football as it is for chess?
The core update equation, R' = R + K(S - E), is unchanged. What differs is everything layered around it: football adds a home-field bonus before computing expected score, a margin-of-victory multiplier after the game, and a between-season reversion toward the mean — none of which chess ratings need, since chess has no home field, no margin of victory, and no roster turnover between tournaments.
What Elo rating counts as roughly average in FiveThirtyEight's NFL model?
1505, which is also the value every team's rating partially reverts toward between seasons. Ratings in that model have historically ranged from the high 1300s for the weakest teams in a season to the mid-1700s for historically dominant single-season teams, though the exact spread depends on the season.
How is expected win probability derived from two Elo ratings?
The same expected-score formula used for the rating update also serves as a win probability: E_A = 1 / (1 + 10^((R_B - R_A) / 400)) directly gives team A's probability of winning (adjusted first for any home-field points). A 100-point Elo edge corresponds to roughly a 64% win probability; a 200-point edge to roughly 76%.
Can a football Elo rating system use only wins and losses, ignoring scores?
Yes — the base update equation only needs S_A (win = 1, loss = 0), so a minimal Elo rating system formula can run on schedule results alone. Adding a margin-of-victory multiplier, as FiveThirtyEight's NFL model does, uses final score margins as an extra input but is an optional layer, not a requirement of the base formula.
How often does a football Elo rating model update?
After every completed game, using that single game's result. Because each update only depends on the two teams' pre-game ratings and the outcome, an Elo rating system never needs to reprocess a full season's schedule at once, unlike least-squares methods such as Massey ratings, which solve a system built from every game simultaneously.
What is a typical K-factor range across different Elo rating implementations?
There is no single correct value — it depends on how much game-to-game noise a sport has and how many games a season contains. FIDE's chess implementation uses different K-factors depending on a player's rating and experience level, while FiveThirtyEight's published NFL Elo model settled on a fixed K-factor of 20 for every team and game.
How accurate is a public football Elo model at predicting game outcomes?
It varies year to year and was not independently re-measured for this article; a published, auditable Elo methodology like FiveThirtyEight's is a useful benchmark specifically because its formula, K-factor, and adjustments are all public, so anyone can recompute and evaluate it rather than trusting an opaque result.
Does a football Elo rating system need a starting value for a brand-new franchise?
Yes — some initial rating has to seed the very first game a franchise plays, before any results exist to update from. FiveThirtyEight's NFL model treated the league mean (1505) as that starting point, the same value ratings revert toward between seasons.
What is the difference between an Elo rating and an Elo ranking?
The rating is the number itself (for example, 1612), placed on a continuous scale where gaps carry meaning — a 50-point gap and a 150-point gap are different claims about relative strength. The ranking is only the resulting order (1st, 2nd, 3rd). Two football Elo rating systems can produce an identical ranking while disagreeing sharply about how close the teams actually are.
Can the Elo rating formula be used to convert a rating gap into a point spread?
Indirectly. The formula directly produces a win probability, not a point spread, but a win probability can be mapped to an approximate spread using an empirically-fit relationship between historical NFL win probabilities and closing point spreads — a separate calibration step layered on top of the base Elo formula, not part of it.