The webcomic XKCD once poked fun at sports analysis with a simple image. “A weighted random number generator just produced a new batch of numbers,” one commentator says, to which his partner replies, “Let’s use them to build narratives!”

Well, with the rest of the 2019-20 season in doubt because of the COVID-19 pandemic, all we have left is a weighted random number generator. So let’s dive in and make some narratives!

Specifically, my editor asked if I could build a simulation of the rest of the regular season and playoffs as if they had never been delayed. I said yes—and quickly grew dispirited as I gazed upon the would-be rollicking postseason we might not get to spectate.

Before we dive into those “results” and narratives, here’s a quick explanation of the simulation system. (If you don’t care about the methodology, feel free to skip ahead two paragraphs.) Essentially, using a mix of Cleaning the Glass’s retrospective team ratings—which are based on teams’ net ratings in non-garbage-time situations—and FiveThirtyEight’s forward-looking team ratings—which are based mainly on individual player ratings—I calculated a win expectancy for every team, on a neutral court against a neutral team. (There are separate numbers for regular season and playoffs.) Then, using the Log5 formula invented by Bill James and adjusting for the fact that home teams have won 55.1 percent of games this season, I calculated the percent chance each team would win every remaining game on the schedule.

Let’s use last week’s cancelled Jazz-Thunder game in Oklahoma City as an example. The formula gives Utah an “expected” winning percentage, on a neutral court against a neutral team, of 60.1 percent, and Oklahoma City a mark of 58.5 percent. Using the Log5 calculation, that means the Thunder would have a 48.4 percent chance of defeating the Jazz on a neutral court; with home advantage, that bumps up to a 53.5 percent chance. Then a weighted random number generator can determine whether the Thunder would convert that 53.5 percent chance into a victory, or whether Utah would take the road win, and another formula converts that number into a margin of victory. Rinse and repeat for every game on the schedule.

The biggest single-game favorite by this method was the Bucks’ regular-season game at home against the Pistons (a 91.6 percent chance of winning; the Bucks won in the simulation by 12 points). The biggest upset came from the Timberwolves (86.2 percent underdogs), who beat the Celtics by four on the road. And the most “even” predicted game was the Nuggets visiting the Heat; Miami had a 50.1 percent chance of winning, but Denver cruised to a 17-point victory.

After simulating the rest of the regular season, the Eastern Conference standings finished without too many surprises. Indiana snuck past Miami to grab the no. 4 seed, and Orlando stumbled into the playoffs with a ghastly 35-47 record, but otherwise these standings look about as anticipated.

Eastern Conference Standings Team Playoff Seed Actual Record Simulated Remaining Record Final Record Team Playoff Seed Actual Record Simulated Remaining Record Final Record Milwaukee Bucks 1 53-12 14-3 67-15 Toronto Raptors 2 46-18 14-4 60-22 Boston Celtics 3 43-21 10-8 53-29 Indiana Pacers 4 39-26 11-6 50-32 Miami Heat 5 41-24 8-9 49-33 Philadelphia 76ers 6 39-26 9-8 48-34 Brooklyn Nets 7 30-34 7-11 37-45 Orlando Magic 8 30-35 5-12 35-47 Washington Wizards n/a 24-40 8-10 32-50 Chicago Bulls n/a 22-43 7-10 29-53 Charlotte Hornets n/a 23-42 4-13 27-55 Detroit Pistons n/a 20-46 6-10 26-56 New York Knicks n/a 21-45 4-12 25-57 Cleveland Cavaliers n/a 19-46 6-11 25-57 Atlanta Hawks n/a 20-47 3-12 23-59

Out West, the Jazz surged to the no. 3 seed while the Nuggets fell to no. 5, and the Mavericks beat the Thunder on the last day of the season to gain the tiebreaker at no. 6. The most notable change here comes at no. 8, where New Orleans posted the best simulated rest-of-season record for any team to vault past Memphis into the playoff field.

Western Conference Standings Team Playoff Seed Actual Record Simulated Remaining Record Final Record Team Playoff Seed Actual Record Simulated Remaining Record Final Record Los Angeles Lakers 1 49-14 15-4 64-18 Los Angeles Clippers 2 44-20 14-4 58-24 Utah Jazz 3 41-23 13-5 54-28 Houston Rockets 4 40-24 11-7 51-31 Denver Nuggets 5 43-22 7-10 50-32 Dallas Mavericks 6 40-27 8-7 48-34 Oklahoma City Thunder 7 40-24 8-10 48-34 New Orleans Pelicans 8 28-36 15-3 43-39 Memphis Grizzlies n/a 32-33 6-11 38-44 Portland Trail Blazers n/a 29-37 8-8 37-45 Sacramento Kings n/a 28-36 9-9 37-45 San Antonio Spurs n/a 27-36 9-10 36-46 Phoenix Suns n/a 26-39 7-10 33-49 Minnesota Timberwolves n/a 19-45 6-12 25-57 Golden State Warriors n/a 15-50 7-10 22-60

The 8-seed switch conformed to expectations about the two teams’ remaining schedules—Memphis had to navigate the league’s hardest remaining slate, New Orleans the easiest. Even though Memphis and New Orleans split a home-and-home in late March, the loss to the Grizzlies was New Orleans’s last of the season, as the Pelicans won their past 10 games by a double-digit margin. That’s tied for the longest double-digit win streak in NBA history.

Grizzlies vs. Pelicans, Rest of Season Game Number Grizzlies Opponent Result Pelicans Opponent Result Relative Standing Game Number Grizzlies Opponent Result Pelicans Opponent Result Relative Standing 65 already played already played @ Kings Win by 15 Grizzlies up 3 66 @ Blazers Loss by 6 @ Jazz Loss by 1 Grizzlies up 3 67 @ Jazz Loss by 11 @ Clippers Loss by 22 Grizzlies up 3 68 @ Spurs Win by 13 vs. Hawks Win by 27 Grizzlies up 3 69 vs. Thunder Win by 1 vs. Spurs Win by 13 Grizzlies up 3 70 @ Bucks Loss by 2 @ Grizzlies Win by 1 Grizzlies up 2 71 vs. Pelicans Loss by 1 vs. Kings Win by 21 Grizzlies up 1 72 @ Pelicans Win by 5 vs. Grizzlies Loss by 5 Grizzlies up 2 73 vs. Celtics Loss by 3 vs. Knicks Win by 30 Grizzlies up 1 74 vs. Raptors Loss by 17 @ Magic Win by 19 Even 75 @ Raptors Loss by 10 @ Hawks Win by 20 Pelicans up 1 76 vs. Knicks Loss by 4 @ Wizards Win by 11 Pelicans up 2 77 vs. Mavericks Win by 12 @ Spurs Win by 18 Pelicans up 2 78 @ Blazers Win by 17 vs. Hornets Win by 19 Pelicans up 2 79 @ Nuggets Loss by 26 vs. Suns Win by 15 Pelicans up 3 80 vs. Thunder Win by 4 vs. 76ers Win by 18 Pelicans up 3 81 vs. 76ers Loss by 13 vs. Wizards Win by 23 Pelicans up 4 82 @ Rockets Loss by 10 @ Spurs Win by 19 Pelicans up 5

With the regular season squared away, the simulation moved on to the playoffs, using the same method as before.

First Round, Eastern Conference

Milwaukee Bucks (1) vs. Orlando Magic (8)

Game 1: Bucks by 11

Game 2: Bucks by 27

Game 3: Bucks by 3

Game 4: Magic by 1

Game 5: Bucks by 18

The Bucks nearly doubled the Magic in regular-season wins. It’s no surprise they took care of business quickly here—if anything, the most notable result from this series is that Orlando managed to win even a single game. Last season, the Bucks’ first-round opponent (the Pistons) lost in a four-game sweep by one of the largest margins in playoff history.

Indiana Pacers (4) vs. Miami Heat (5)

Game 1: Heat by 14

Game 2: Heat by 17

Game 3: Pacers by 15

Game 4: Pacers by 13

Game 5: Heat by 8

Game 6: Pacers by 16

Game 7: Pacers by 7

Through six games, the road team won every game of this series, often by comfortable margins. But Indiana held firm at home in Game 7, forcing Miami into a long offseason of questions about the ceiling for a Jimmy Butler–led team. The win expectancy model is low on the Heat relative to their record, as they outperformed their point differential this season by a considerable margin, so even with a compromised Victor Oladipo, the Pacers still had the strength to pull out a series win.

Toronto Raptors (2) vs. Brooklyn Nets (7)

Game 1: Nets by 9

Game 2: Raptors by 10

Game 3: Raptors by 5

Game 4: Raptors by 5

Game 5: Raptors by 15

Last season, the Raptors took a surprising Game 1 loss against an ostensibly overmatched opponent in the first round before winning four in a row. Here, the Raptors took a surprising Game 1 loss against an ostensibly overmatched opponent in the first round before winning four in a row.

Boston Celtics (3) vs. Philadelphia 76ers (6)

Game 1: 76ers by 8

Game 2: Celtics by 19

Game 3: Celtics by 15

Game 4: 76ers by 5

Game 5: 76ers by 16

Game 6: Celtics by 13

Game 7: 76ers by 16

The 76ers were outscored in this series but advanced anyway because they won Game 7 on the road. Remember that sentence. (For those wondering about the 76ers’ ability to win tough games away from Philadelphia given their extreme home-road imbalance this season, past location splits are not useful in predicting future location splits. I just used a generic home-road split for every team.) Also: For the sake of The Ringer’s well-being, it’s probably a good thing that we didn’t actually witness the 76ers blowing out the Celtics in Game 7 in the Garden.

First Round, Western Conference

Los Angeles Lakers (1) vs. New Orleans Pelicans (8)

Game 1: Lakers by 10

Game 2: Lakers by 6

Game 3: Lakers by 24

Game 4: Pelicans by 12

Game 5: Lakers by 7

New Orleans entered this series as the hottest team in the league—but late-season momentum doesn’t matter for the playoffs, and the Lakers halted their forward push early, winning the first three games before completing a gentleman’s sweep. Anthony Davis beat his old team, and won a playoff series for just the second time in his thus-far-squandered career.

Houston Rockets (4) vs. Denver Nuggets (5)

Game 1: Nuggets by 8

Game 2: Rockets by 5

Game 3: Rockets by 5

Game 4: Nuggets by 19

Game 5: Nuggets by 2

Game 6: Rockets by 12

Game 7: Rockets by 3

The closest first-round series by average margin of victory, Rockets–Nuggets came down to a single possession in Game 7. Only six other series this century—most recently Toronto vs. Philadelphia last season—ended with such a tight margin. James Harden finally earned his first signature playoff moment, and it looked as if the Rockets didn’t need a center to combat Nikola Jokic after all.

Los Angeles Clippers (2) vs. Oklahoma City Thunder (7)

Game 1: Thunder by 6

Game 2: Clippers by 18

Game 3: Clippers by 7

Game 4: Clippers by 15

Game 5: Thunder by 1

Game 6: Clippers by 21

Although Chris Paul and Shai Gilgeous-Alexander surprised their former team with a Game 1 win on the road, the Clippers battened down the hatches thereafter, ending the series with a 3-0 road record and a blowout win in the finale.

Utah Jazz (3) vs. Dallas Mavericks (6)

Game 1: Mavericks by 18

Game 2: Mavericks by 19

Game 3: Mavericks by 2

Game 4: Mavericks by 21

The only sweep of the first round registered as a surprise by seeding, but not by team quality. The Mavericks rate better than the Jazz at both Cleaning the Glass and FiveThirtyEight—even with a healthy Rudy Gobert and Donovan Mitchell; remember, we’re simulating the season pre-pandemic—thanks in large part to their lofty point differential relative to their record. Still, a sweep with three blowouts only deepened questions about Utah’s ability to convert regular-season successes into playoff wins.

Second Round, Eastern Conference

Milwaukee Bucks (1) vs. Indiana Pacers (4)

Game 1: Bucks by 26

Game 2: Pacers by 10

Game 3: Bucks by 8

Game 4: Bucks by 20

Game 5: Bucks by 20

Despite a Game 2 scare at home, the Bucks were relatively unruffled by the overmatched Pacers. The talent gap was simply too great for Indiana to overcome—a problem not unique to this specific Indiana team, as the Pacers have struggled for the past decade to overcome more star-studded teams in the Eastern playoffs.

Toronto Raptors (2) vs. Philadelphia 76ers (6)

Game 1: 76ers by 1

Game 2: Raptors by 21

Game 3: Raptors by 8

Game 4: 76ers by 15

Game 5: 76ers by 2

Game 6: Raptors by 16

Game 7: 76ers by 5

Vengeance! One year after losing in the same round, in the same game, to the same team, in the same building, the 76ers pulled out a Game 7 win in Toronto to advance to their first conference finals since Allen Iverson’s MVP season. The Simmons-Embiid experiment proved a success, the 76ers won another series despite being outscored, and a whole season’s worth of drama dissipated in the thrill of victory.

Second Round, Western Conference

Los Angeles Lakers (1) vs. Houston Rockets (4)

Game 1: Lakers by 18

Game 2: Lakers by 11

Game 3: Rockets by 7

Game 4: Lakers by 11

Game 5: Rockets by 13

Game 6: Lakers by 15

Although the Rockets weren’t completely run off the floor, their inventive five-small playing style met an unconquerable foe in the Lakers, with LeBron James and Anthony Davis bullying the smaller Rockets down low. The Lakers advanced to their first conference finals in a decade.

Los Angeles Clippers (2) vs. Dallas Mavericks (6)

Game 1: Mavericks by 4

Game 2: Clippers by 23

Game 3: Mavericks by 5

Game 4: Clippers by 13

Game 5: Clippers by 21

Game 6: Clippers by 2

After three seasons out of the playoffs, the Mavericks exceeded all expectations in 2019-20, returning to the postseason, sweeping the Jazz, and taking a 2-1 series lead against the favorite Clippers. Although L.A. rebounded to win the series, with a Game 6 victory that came down to the final buzzer, Luka Doncic prepared himself and his team for the next leap next season.

Conference Finals

Milwaukee Bucks (1) vs. Philadelphia 76ers (6)

Game 1: Bucks by 6

Game 2: 76ers by 11

Game 3: Bucks by 15

Game 4: Bucks by 1

Game 5: Bucks by 1

The 4-1 final score for this series belies how close this matchup actually was. Flip the Bucks’ two one-point wins—they became the first team to win consecutive playoff games by one point since the 2005-06 Cavaliers, over the Wizards—and the 76ers would have led 3-2, with a home Game 6 to advance to the Finals. Alas, Milwaukee benefited from the bounces at the end to deliver Giannis Antetokounmpo his first Finals appearance—and the franchise’s first since the halcyon days of Kareem Abdul-Jabbar.

Los Angeles Lakers (1) vs. Los Angeles Clippers (2)

Game 1: Clippers by 8

Game 2: Clippers by 15

Game 3: Lakers by 17

Game 4: Clippers by 9

Game 5: Clippers by 16

A quick methodological note here: I decided to remove the home-court variable for the all–Staples Center battle, though when I ran a separate simulation still accounting for home court, the Clippers advanced in five games anyway.

The matchup NBA fans had anticipated since last summer, when Davis, Kawhi Leonard, and Paul George all moved to L.A., turned into something of a dud. Although the series began as a near 50-50 split—the model predicted the Lakers to win 50.7 percent of games, the Clippers 49.3 percent—the Clippers won fairly easily, in a series without any truly close games. Even though the Clippers were greater favorites against the Thunder and Mavericks, the random numbers just went their way more easily in the conference finals.

NBA Finals

Milwaukee Bucks vs. Los Angeles Clippers

Game 1: Clippers by 6

Game 2: Bucks by 7

Game 3: Bucks by 2

Game 4: Bucks by 7

If the conference finals were over too quickly, the Finals looked about as close as expected. The Clippers stole Game 1 on the road, but the Bucks responded in Game 2 to fly across the country even. In L.A., though, the road team nabbed both wins, and after four games, all squeakers, the Bucks returned home with a chance to clinch the title in front of a raucous crowd at Fiserv Forum.

Game 5: Clippers by 9

Game 6: Clippers by 13

The Clippers didn’t let them clinch, however. Like the Cavaliers against the Warriors in 2015-16, they prevented a Game 5 clincher on the road, then coasted to an easy Game 6 win at home. (No word on whether a key Bucks player was suspended in Game 5 for an ill-timed groin kick.) So as Game 7 approached, and the end of the 2019-20 season with it, the same question was on everyone’s mind: Would the Bucks also blow a 3-1 Finals lead?

Game 7: Clippers by 2

Yes, they would! And in just about the most thrilling way possible—a two-point margin in Game 7 of the Finals, the NBA’s first since 1969. The Clippers won their first championship, and Leonard celebrated title no. 3, for team no. 3.

It’s difficult to imagine a much more compelling postseason than the simulated result here. The 76ers tallied Game 7 wins in Boston and Toronto. Doncic arrived in a major way at the most important time of year, after Zion Williamson thundered into the playoffs with a historic win streak. The Lakers and Clippers battled in a long-awaited, if somewhat underwhelming, conference finals. The final series of the season came down to the final possession of the final possible game, with the newest generation of NBA superstars leading the way, Leonard and Giannis Antetokounmpo going mano a mano down the stretch.

Of course, this simulation is just one result—one set of narratives built around one set of weighted random numbers. Actual projection systems work by simulating the rest of the season thousands or millions of times and averaging out the possibilities; it’s just that here, for illustrative purposes, I selected the very first result to detail in full.

As a coda to this exercise, I ran the simulation a second time for the playoffs, just to see what might have changed—and this time, the Celtics beat the 76ers in Game 7 in the first round, then beat Toronto in seven and Milwaukee in five to reach the Finals. In the West, Utah didn’t just avoid a sweep against Dallas but won the series, then upset the Clippers before falling to the other L.A. team. In the Finals, the Celtics—the Celtics!—won against the Lakers. On second thought, maybe it’s OK if we miss out on that possible set of narratives, after all.