The Rays recently won 13 games in a row, which astonishingly is only half the length of the longest win streak in baseball history, which belongs to the 1916 Giants with 26. We have an intuitive sense that this is pretty unlikely, and thanks to binomial probability* we can calculate the odds. We do need to know the prior odds - that is, if we want to know how likely a team is to win exactly 3 out of 3 games, it makes a difference if we come in thinking they’re a .400 team or a .550 team. We’ll calculate odds for a variety of teams just to cover our bases, and cover streaks from 1 to 13 games.

*This method assumes that the outcome of each game is independent. There may be a “momentum” effect that this won’t pick up. The hot hand effect is hard to measure and most studies have found it’s not predictive, so we can go ahead even though this may not capture reality perfect. Like the man said, all models are bad, but some are useful.

Show the code

library(tidyverse)library(hrbrthemes)library(RColorBrewer)games <-c(1:13) %>%as_tibble() %>%rename(wins = value)win_perc <-seq(.350, .700, by =0.05) %>%as_tibble() %>%rename(win_perc = value)games %>%crossing(win_perc) %>%mutate(odds =dbinom(wins, wins, win_perc)) %>%mutate(estimated_win_perc =as.character(round(win_perc, 2))) %>%ggplot(aes(x = wins, y = odds, color = estimated_win_perc))+geom_line()+theme_ipsum()+scale_color_brewer(palette ='Blues')+ggtitle('Odds of Winning x Games in a Row')

We can see that each expected win probability has about what you’d expect for a 1 game streak - that is, a .500 team is expected to win half their games. The worse teams find it increasingly unlikely that they’ll have a long steak, and even the really good teams see their odds of consecutive wins dip below 10% after 6 or 7 games. As for 13, there’s a lot of convergence there, though the scale makes it hard to see. So we’ll zoom in a bit for more context:

Show the code

games %>%crossing(win_perc) %>%mutate(odds =dbinom(wins, wins, win_perc)) %>%mutate(estimated_win_perc =as.character(round(win_perc, 2))) %>%filter(wins ==13) %>%ggplot(aes(x = odds, y = estimated_win_perc))+geom_bar(stat ='identity')+theme_ipsum()+scale_color_brewer(palette ='Blues')+ggtitle('Odds of Winning 13 Games in a Row')

First off - we zoomed in a lot and while there is a lot of variation here, we’re talking values of less than 0.01%. So a team with a true .700 win percentage has a 0.01% chance of winning 13 straight in any given stretch of games. .650 teams are at about 0.0037%. We think the Rays are about a .550 team, which would put the odds at 0.0004%. So a highly enjoyable feat, but the smart bet would be that it won’t be happening again anytime soon.

*As a general rule, it’s good to pay attention to the scale on your charts, especially if you’re changing from one view to another.