To me, one of the amazing things about baseball is that a team can get ten men on-base and, one day they could score zero runs and another day they could score all 10. Also, a team can score 20 runs in one game, and then zero for the next four games or they could score four runs in five straight games.
In both of those examples, you could say that both teams had the same offensive output, men on-base and total runs scored, respectively. But how the team performs in the wins and losses column would be different. These are both examples of what is generally called cluster luck. It is not just down to how well you perform over a game or a season, the luck of when these performances occur impacts a team’s overall record.
Cluster luck is the idea that different sequencing of plate appearance outcomes can lead to hugely different run-scoring and run-allowing results. You may very well have heard the term cluster luck in conjunction with a team’s win-loss record. The Pythagorean win theorem, a formula created by Bill James, estimates the percentage of wins a team should have given the number of runs they scored and the runs they allowed.
This is the first of two articles looking into cluster luck and today I’m going to look at it from a single game point of view and not an entire season. I wanted to see how lucky or unlucky some teams got in games in 2020, and to do this I had to create some new metrics.
Introducing Expected Runs (xRuns) and Run Luck (RL)
To see how lucky or unlucky a team got I had to calculate how many runs I expected each team to have scored in every game. I have done this by calculating the expected runs for each possible outcome of an at-bat, which is done using the run expectancy (RE24) tables.
Run expectancy is a statistic that credits or debits a player for their role in changing their team’s odds in scoring a run. You can learn more here. Using this information, I calculated the average change in run expectancy to give a run value to all possible outcomes of an at-bat.
As you might expect, a home run has the highest value and a double play has the lowest.
Then for each team, I summed up all their outcomes in each game and added the base expected number of runs to be scored (0.53 runs per inning in 2020) to give me an expected run total for that game.
For example, if in a nine-inning game, a team had one home run, five singles and four walks with 12 strikeouts and 15 field outs. Their expected runs would be 2.98, calculated as follows.
(1 x 1.38) + (5 x 0.47) + (4 x 0.33) + (12 x -0.27) + (15 x -0.24) + (9 x 0.53) = 2.98 xRuns
So, in this case, if that team scored three or more runs, they will have gotten lucky and if they scored two or fewer, they would have been unlucky. I defined the difference between xRuns and actual runs as the Run luck (RL) for that game.
Armed with these metrics we can look to see how lucky or unlucky teams got in 2020. The data from now on includes the postseason. Caveat: this doesn’t include stolen bases, caught stealing, passed balls and wild pitches which would move the expected runs slightly.
Expected to Win
In the 951 games that were played in 2020, the team with the higher xRuns won 800 of them. That is 84% of the time.
In the games where the xRuns leader did not win, the Run luck difference between the two teams was 2.63 runs, with the winner getting on average 0.88 more run than expected and the loser getting 1.75 runs less than expected.
If we look at the difference in xRuns between the two teams, you will clearly see, the larger the difference in xRuns the more like a team is to win.
With no teams losing when they had an xRuns difference of more than five, and only three (out of 232) losing when they had a difference higher than three.
There are many ways to describe luck here, but I am going to highlight a few games where there was some big bouts of luck.
Highest RL (Nine-inning game) – 9.2 runs, Atlanta Braves (9 Sept v Marlins).
The Braves gained just over nine runs more than expected during their 29-9 pummelling of the Miami Marlins on 9 September. But given the Braves 19.8 xRuns, that game was also the highest number of expected runs in a 2020 game. This was not an upset victory.
The graph above shows you the changes in xRuns throughout the game, with the numbers being when the actual runs were being scored. You can see than Atlanta piled on the hits in the second inning scoring 11 runs when the expected runs from that offensive output was 7.5 runs. And so on throughout the game.
Lowest RL (Nine-inning game) – -4.9 runs, Los Angeles Dodgers (10 Sept @ Diamondbacks).
On 10 September, the Dodgers hit two home runs, one double and six singles. They also had seven walks and a reached-on-error. They managed just two runs on all this offence from back-to-back solo homers in the third. They lost this game to the Diamondbacks 5-2, xRuns had the game at 6.9 – 6.2 in favour of the Dodgers.
The xRuns graph shows that Dodgers were level with Arizona early in the game but failed to score runs in the fourth and the sixth when they had big gains in expected runs. Seager grounded into a double play with the bases-loaded in the fourth. And then in the sixth, Will Smith was out attempting to stretch a single into a double, as well as Kike Hernandez was caught stealing home.
Whereas Arizona condensed their main offensive output in two peaks in the third and the fifth, scoring all of their runs in these two innings.
Biggest Positive Diff in xRuns in a Loss – 4.8 Runs, Toronto Blue Jays (12 Aug v Marlins)
On 12 August, the Blue Jays lost 14-11, in a 10-inning game to the Marlins. My xRuns model had this at 14.3 – 9.5 in favour of the Jays thanks to the fact that the Jays hit SEVEN home runs in that game to Miami’s one. That was the Marlins only extra-base hit of the game. Miami scored in just four of the innings, scoring three in the second, fifth and tenth innings, and five runs in the third. The Blue Jays went ‘2,2,2,2,1,2’ from the third to eighth innings.
This is probably the purest example of a cluster luck game. The eagle-eyed of you will have noted that runs six and seven for the Marlins are not on the graph, they came from a passed ball and a steal, so do not get registered in this format.
Across the Season
So now we know how lucky teams were in games. The question is, did some teams have more luck over the entire seasons than others?
As you can see most teams are awfully close to the zero runs average, but some teams got quite a large amount of good and bad run luck in 2020.
The Mets offensively averaged over 0.5 runs less than expected per game in 2020, which was about 32 runs in total. If the Mets had just sequenced their offensive output with average amount of luck they probably would have had a .500 record and made the postseason. The Angels and the Giants also would have been in for a chance of a playoff sport if they had average cluster luck in 2020.
Personally, I think the xRuns graphs are an interesting way to look at how a game played out and I would love to hear your thoughts. The inspiration for these draws heavily on the Expected Goals (xG) graphs you may have seen used across European football leagues.
But the version shown in this piece is not my final version, to see that you need to read part two. Where I go one step further into expected runs by exploring how I can incorporate the MLB Statcast expected metrics into it.
Russell is Bat Flips and Nerds’ resident analytical genius, and arguably Europe’s finest sabermetrician. If you’re not following Russell on Twitter @REassom then you’re doing baseball wrong.