thespread

Explainer · Markov ratings

How a Markov chain ranks 32 teams

A walker follows 47 real games from loser to winner. Where it spends its time becomes the rating.

01 · The votes

Every game is a vote: 47 games, and each loser points an arrow at its winner.

Through week 3, the 2026 season has 47 completed games: 16 in week 1, 16 in week 2 and 15 in week 3. Each one becomes an arrow between two of the 32 teams, drawn from the loser to the winner. Read it as a vote: the losing side says the other team is better. A team that wins three times collects three arrows, and a team that loses three times sends three away.

02 · Vote strength

Bigger wins cast stronger votes: winning by 1 sends 0.524, winning by 21 sends a full 1.000.

Not every vote counts the same. A game won by a margin m sends a weight of 0.5 + 0.5 × min(m, 21) / 21 from loser to winner, and the rest goes back the other way. Detroit beat New Orleans 31–30, a 1-point win, so 0.524 goes to Detroit and 0.476 back to New Orleans. Kansas City beat Denver 31–10, a 21-point win: a full vote of 1.000 with nothing sent back.

03 · The walker

A walker starts on Tennessee and follows the arrows; 15% of hops jump to any team instead.

Let a walker loose on the network. It starts on a random team, here Tennessee, and at every hop follows one of that team's outgoing arrows, chosen in proportion to their weights: from Tennessee, 0.340 to the Jets, 0.260 to the Giants and 0.250 to the Eagles, the three teams that beat it. The remaining 0.15 is the damping: with that chance the walker jumps to any of the 32 teams instead. In these 24 hops it jumped 2 times.

04 · Share of time

After 100,000 hops the walker has spent 4.83% of its time on New Orleans, the most.

Keep the walker going and count where it has been. After 1,000 hops Kansas City leads with 5.60% of the visits; after 10,000, New Orleans leads with 4.65%; after 100,000, New Orleans has 4.83%. The exact long-run share, computed in the next steps, is 4.82%. The counts wobble at first and then stop changing, and that stable share of time is what the walk measures.

05 · The rating

That share times 32 is the rating: New Orleans, 4.82% × 32 = 1.543. Average is 1.00.

A team's share of the walker's time becomes its rating once it is scaled: multiply by 32, so a team that gets exactly its fair share, 3.125%, rates 1.00. New Orleans gets 4.82% and rates 1.543, the highest on the board. Minnesota follows at 1.480, then Arizona at 1.431, Denver at 1.430 and Kansas City at 1.350. Atlanta is last at 0.470.

06 · Power iteration

Pushing every share through the arrows at once: the top five is fixed from round 18.

A simulated walker is slow and noisy, so the ratings board does the same thing exactly: every team starts with 1/32 of the share, and all of it moves through the arrows at once, round after round. After round 1 Minnesota leads at 1.627 and is still ahead after round 5. From round 18 the top five stays New Orleans, Minnesota, Arizona, Denver, Kansas City. At round 89 no rating moves by even 0.000001.

07 · Without damping · what breaks without it

Without damping no unbeaten team traps the walker; the ratings stretch from 0.23 to 2.02 instead.

Set the damping to 0 and the walker can only follow arrows. With these games no unbeaten team traps it: every winner still sends 1 − w back, and only 9 games, each won by 21 or more, send nothing. The five 3-0 teams hold 20.5% of the time instead of 19.9%. What changes is the spread: New Orleans climbs to 2.016, Carolina falls to 0.225, and settling takes 211 rounds instead of 89.

08 · Equal records

Same 1-2 record, different ratings: New Orleans beat Baltimore (1.346), Carolina beat Atlanta (0.470).

New Orleans and Carolina are both 1-2. New Orleans lost to Detroit by 1 and to Las Vegas by 8, close losses that send part of the vote back, and its win came against Baltimore, rated 1.346. Carolina lost to Chicago by 22 and to Cleveland by 3, and its one win came against Atlanta, rated 0.470. The walker reaches a team through the teams it beat, so New Orleans rates 1.543 and Carolina 0.506.

09 · Against the board · the check

Checked against the ratings board: all 32 teams match, and the largest gap is 0.00005.

The ratings board builds the same chain from the same 47 games. This page recomputes all 32 ratings from the final scores alone, and every one matches the board to its 4 published decimals. The largest difference, for Pittsburgh, is 0.00005, a rounding in the last digit. The same numbers drive the scene, the side panel and the video.

Frequently asked questions

How does a Markov chain turn game results into team ratings?

Each completed game becomes an arrow from the loser to the winner, read as a vote that the other team is better. A walker moves around this network, following arrows in proportion to their weights and sometimes jumping to a random team. The share of time it spends on each team, multiplied by 32, is that team's rating. Through week 3 of the 2026 season, 47 games feed the chain, and New Orleans rates highest at 1.543.

Why does the margin of victory matter in Markov ratings?

A close win is weaker evidence than a blowout. Each game sends a weight of 0.5 + 0.5 × min(m, 21) / 21 from loser to winner, where m is the margin, and the rest flows back to the loser. Detroit's 1-point win over New Orleans sent 0.524 forward and 0.476 back; Kansas City's 21-point win over Denver sent a full 1.000 with nothing returned. In these 47 games, 9 were won by 21 or more.

What does the damping factor do?

At every hop, with a probability of 0.15, the walker ignores the arrows and jumps to any of the 32 teams. Damping keeps the walk from getting stuck and pulls the ratings together. With it, the board runs from 0.470 for Atlanta to 1.543 for New Orleans. Without it, the ratings stretch from 0.225 for Carolina to 2.016 for New Orleans, and the calculation needs 211 rounds to settle instead of 89.

Why can two teams with the same record get different ratings?

The walker reaches a team through the teams it beat and through the part of each vote sent back after close losses. New Orleans and Carolina are both 1-2. New Orleans lost by 1 and by 8 and beat Baltimore, rated 1.346. Carolina lost by 22 and by 3 and beat Atlanta, rated 0.470. New Orleans therefore rates 1.543 and Carolina 0.506: the quality of wins and the closeness of losses both count.

How are the ratings computed exactly instead of by simulation?

A simulated walker is slow and noisy: after 1,000 hops Kansas City led, after 10,000 New Orleans led with 4.65%, and after 100,000 it had 4.83%, close to the exact share of 4.82%. The exact method starts every team at 1/32 of the share and pushes all of it through the arrows at once until no rating moves by 0.000001. Here that took 89 rounds, and all 32 ratings match the board to 4 decimals.

The same walkthrough as a video

Recorded from the page above. Narration uses a synthetic voice.
Narration transcript

Every game is a vote. Forty-seven games so far, and each loser points an arrow at the team that beat it.

Bigger wins cast stronger votes. Win by one, and the vote is point five two four. Win by twenty-one or more, and it is a full vote.

Now a walker starts on Tennessee and follows the arrows. Fifteen percent of the time, it jumps to any team instead.

Count where it goes. After a hundred thousand hops, it has spent four point eight three percent of its time on New Orleans. More than on any other team.

That share, times thirty-two, is the rating. New Orleans: one point five four three. An average team: exactly one.

The board skips the walker and pushes every share through the arrows at once. From round eighteen on, the top five no longer changes.

Take the damping away. No unbeaten team traps the walker, because winners still send part of the vote back. The ratings just stretch, from point two three to two point oh two.

Same record, very different ratings. New Orleans beat Baltimore, one of the strongest teams. Carolina beat Atlanta, the lowest-rated team on the board.

And the check: all thirty-two ratings match the board, to the last published digit.