What if MLB Allowed Ties?

statistics
r
baseball
Author

Mark Jurries II

Published

April 5, 2023

We hate ties in baseball. There were almost riots in 2002 when the All Star game ended in a tie. There has to be a winner, and if that means playing 26 innings to get one then that’s what we’ll do. The massive extra inning games have been cut back with the ghost runner rule - unfortunately, this isn’t a real ghost, but rather a still-living player starting the 10th inning on second base. We’ll change a lot of things, but having a winner isn’t one of them.

So let’s pretend we allow ties anyway. What if MLB ended games at nine innings? To account for the new outcome, they followed soccer’s lead and awarded 3 points per win, 1 per tie, and 0 per loss. What would that do to the standings? We can look at 2022 to get an idea.

First, let’s acknowledge that this system means teams would change strategy during the game, bringing in better relievers earlier, being more aggressive late in game, etc. So while we’re just re-allocating the totals, in reality this wouldn’t capture all the effects.

First, let’s see how many games we’ll be touching:

Show the code
library(tidyverse)
library(gt)

standings <- read_csv("2022_mlb_standings.csv")
games <- read_csv("2022_team_games.csv")

games %>%
  group_by( Inn) %>%
  mutate(Inn = ifelse(is.na(Inn), 9, Inn)) %>%
  mutate(Inn = ifelse(Inn <= 9, 9, Inn)) %>%
  arrange(Inn) %>%
  summarise(n = n()) %>%
  mutate(games = n/2,
         percent = n / sum(n)) %>%
  select(-n) %>%
  gt() %>%
  tab_style(
    locations = cells_column_labels(columns = everything()),
      style = list(
        cell_text(weight = "bold")
      )
    ) %>%
  fmt_percent(
    columns = percent,
    decimals = 1
  ) %>%
  fmt_number(
    columns = games,
    decimals = 0
  )
Inn games percent
9 2,214 91.1%
10 156 6.4%
11 43 1.8%
12 11 0.5%
13 5 0.2%
15 1 0.0%

216 games lasted over 9 innings, 156 of them only went 10. So we’re definitely not saving a lot of playing time here.

Show the code
games_tie <- games %>%
  mutate(Inn = ifelse(is.na(Inn), 9, Inn),
         isExtraInnings = ifelse(Inn > 9, 1, 0),
         W = ifelse(R > RA, 1, 0),
         L = ifelse(R < RA, 1, 0),
         tRun_Dif = ifelse(isExtraInnings == 1, 0, R - RA),
         tW = case_when(isExtraInnings == 0 & R > RA ~ 1, TRUE ~ 0),
         tL = case_when(isExtraInnings == 0 & R < RA ~ 1, TRUE ~ 0),
         tT = case_when(isExtraInnings == 1  ~ 1, TRUE ~ 0),
         Points = (tW * 3) + (tT * 1) + (tL * 0)
         ) %>%
  group_by(Team) %>%
  summarise(across(c('tW', 'tT', 'tL', 'Points', 'tRun_Dif') , ~ sum(.x, na.rm = TRUE))) %>%
  arrange(desc(Points))

standings %>%
  separate(division, c("League", "Division")) %>%
  filter(Division != 'Overall') %>%
  select(-GB, -`pythW-L%`) %>%
  rename(Team = Tm) %>%
  inner_join(games_tie) %>%
  arrange(League, Division) %>%
  group_by(League, Division) %>%
  arrange(desc(`W-L%`), Team) %>%
  mutate(rank = row_number(),
         tRank = dense_rank(desc(Points)),
         div_champ = ifelse(rank == 1, 'Y', '')) %>%
  ungroup() %>%
  group_by(League, div_champ) %>%
  arrange(desc(`W-L%`)) %>%
  mutate(wc = row_number(),
         wc = ifelse(div_champ != 'Y' & wc <= 3, 'Y', ''),
         t_div_champ = ifelse(tRank == 1, 'Y', '')) %>%
  arrange(desc(Points)) %>%
  group_by(League, t_div_champ) %>%
  mutate(twc = row_number(),
         twc = ifelse(t_div_champ != 'Y' & twc <= 3, 'Y', '')) %>%
  ungroup() %>%
  arrange(League, Division) %>%
  group_by(League, Division) %>%
  mutate(note = case_when(div_champ == 'Y' ~ 'Won Division',
                          wc == 'Y' ~ 'Won Wildcard',
                          TRUE ~ ''),
         tnote = case_when(t_div_champ == 'Y' ~ 'Won Division',
                          twc == 'Y' ~ 'Won Wildcard',
                          TRUE ~ '')) %>%
  select(League, Division, Team, W, L, `W-L%`, rank, note,
         tW, tT, tL, Points, tRank, tnote) %>%
  gt() %>%
  tab_style(
    locations = cells_column_labels(columns = everything()),
      style = list(
        cell_text(weight = "bold")
      )
    ) %>%
  tab_spanner(
    label = 'Actual',
    columns = c(W, L, `W-L%`, rank, note)
  ) %>%
    tab_spanner(
    label = 'Tie Scenario',
    columns = c(tW, tT, tL, Points, tRank, tnote)
  ) %>%
  tab_style(
    style = cell_borders(sides = "right", color = "black", 
                         style = "dashed", weight = px(1)),
    locations = cells_body(
      columns = vars(note)
    )
  ) %>%
  cols_label(
    rank = 'Rank',
    note = 'Note',
    tW = 'W',
    tT = 'T',
    tL = 'L',
    tRank = 'Rank',
    tnote = 'Note'
  )
Team Actual Tie Scenario
W L W-L% Rank Note W T L Points Rank Note
AL - Central
CLE 92 70 0.568 1 Won Division 79 19 64 256 1 Won Division
CHW 81 81 0.500 2 75 15 72 240 2
MIN 78 84 0.481 3 73 15 74 234 3
DET 66 96 0.407 4 63 10 89 199 4
KCR 65 97 0.401 5 60 10 92 190 5
AL - East
NYY 99 63 0.611 1 Won Division 89 18 55 285 1 Won Division
TOR 92 70 0.568 2 Won Wildcard 84 15 63 267 2 Won Wildcard
TBR 86 76 0.531 3 Won Wildcard 75 21 66 246 3 Won Wildcard
BAL 83 79 0.512 4 75 13 74 238 4
BOS 78 84 0.481 5 71 18 73 231 5
AL - West
HOU 106 56 0.654 1 Won Division 101 11 50 314 1 Won Division
SEA 90 72 0.556 2 Won Wildcard 79 16 67 253 2 Won Wildcard
LAA 73 89 0.451 3 66 15 81 213 3
TEX 68 94 0.420 4 62 15 85 201 4
OAK 60 102 0.370 5 54 10 98 172 5
NL - Central
STL 93 69 0.574 1 Won Division 85 12 65 267 1 Won Division
MIL 86 76 0.531 2 77 18 67 249 2 Won Wildcard
CHC 74 88 0.457 3 67 19 76 220 3
PIT 62 100 0.383 5 58 13 91 187 4
CIN 62 100 0.383 4 56 11 95 179 5
NL - East
ATL 101 61 0.623 1 Won Division 95 13 54 298 1 Won Division
NYM 101 61 0.623 2 Won Wildcard 91 12 59 285 2 Won Wildcard
PHI 87 75 0.537 3 Won Wildcard 79 14 69 251 3 Won Wildcard
MIA 69 93 0.426 4 61 17 84 200 4
WSN 55 107 0.340 5 52 10 100 166 5
NL - West
LAD 111 51 0.685 1 Won Division 105 15 42 330 1 Won Division
SDP 89 73 0.549 2 Won Wildcard 77 17 68 248 2
SFG 81 81 0.500 3 74 14 74 236 3
ARI 74 88 0.457 4 69 12 81 219 4
COL 68 94 0.420 5 62 14 86 200 5

All that and the results are essentially the same. We did make one difference - the Padres, despite a better winning record, would stay home while the Brewers would go on to the Wild Card. The Padres had 12 extra winning inns compared to the Brewers 9, so they lost more points in the new system.

The Braves also had more points than the Mets. In the real world, they won the East because, even though both teams had identical records, the Braves won more regular series games against the Mets.

So while this is interesting, given the rather low number of extra inning games and the rather unfortunate side effect of the Padres being shut out of the postseason, we can chalk this up as one more way that doesn’t work.