야구 분석/R

메이저리그 타자들의 득점 기대치

sam_j_s 2024. 8. 8. 00:38
728x90
반응형
 

득점 기대치를 사용한 플레이 가치를 평가해보기

주제Analyzing Baseball Data with R의 5장인 'Value of Plays Using Run Expectancy'를 통해 야구 데이터를 분석하는 방법을 배우고자 합니다. 책의 내용을 살펴보면서 각 개념을 이해하고, 실제 데이터를 통해 공

bbdiary03.tistory.com

저번에는 호세 알투베를 기준으로 득점 기여도를 확인해 보았습니다. 이번에는 2016 시즌 메이저 리그의 모든 타자들과 호세 알투베를 비교해 보도록 하겠습니다.

 

모든 타자들의 기회와 성공

득점 가치 추정치는 선수들의 타격 효율성을 비교하는데 사용될 수 있습니다. 우리는 타격 플레이에 집중하기 위해, 주 데이터 프레임 retro2016에서 bat_event_fl변수가 TRUE인 부분 집합을 새로운 데이터 프레임 retro2016_bat으로 구성합니다.

retro2016_bat <- retro2016 |> 
  filter(bat_event_fl == TRUE)

 

두 선수의 RE24를 직접 비교하는 것은 어렵습니다. 왜냐하면 각 선수는 팀을 위해 득점할 수 있는 기회가 다르기 때문입니다. 타순 중간에 있는 선수는 득점권에 주자가 있는 상황에서 타석에 설 기회가 많아 더 많은 득점 기회를 가질 수 있습니다. 반면 하위 타순에 있는 선수는 주자가 있는 상황에서 타격할 기회가 적을 수 있습니다. 선수의 득점 기회를 측정하는 한 가지 방법은 모든 타석에서 득점 잠재력 상태(rv_start변수)의 합을 계산하는 것입니다. 우리는 한 선수의 시즌 타격 성과를 총 타석 수, 득점 잠재력의 합, 그리고 득점 가치의 합으로 요약할 수 있습니다.

 

R 함수 summarize()는 이러한 요약을 얻는 데 유용합니다. 먼저 데이터 프레임 retro2016_bat을 타자 ID 변수 bat_id로 그룹화하고, 각 타자에  대해 총 득점 가치(RE24), 시작 시점의 총 득점 잠재력(runs_start), 그리고 타석 수(PA)를 계산합니다.

run_exp <- retro2016_bat |> 
  group_by(bat_id) |>
  summarize(
    RE24 = sum(run_value),
    PA = length(run_value),
    runs_start = sum(rv_start)
  )

 

데이터 프레임 run_exp에는 투수와 비투수의 타격 데이터가 모두 포함되어 있습니다. 투수와 비투수는 타격 능력이 매우 다르기 때문에 비투수에만 집중하는 것이 합리적입니다. 또한, 팀에서 주로 선발로 출전하는 선수들에 집중하고자 합니다. 타석 수가 400회 이상인 타자들에 집중하여 투수와 비선발 타자를 제거할 수 있습니다. filter() 함수를 사용하여 새로운 데이터 프레임 run_exp_400을 생성합니다. slice_head() 함수를 사용하여 처음 몇 행을 표시합니다.

run_exp_400 <- run_exp |> 
  filter(PA >= 400)
run_exp_400 |>
  slice_head(n = 6)

타자들의 득점 기회와 이 기회를 득점으로 전환하는 성공 사이에는 관계가 있을까요? 이 질문에 답하기 위해, 타석 수가 400회 이상인 타자들을 대상으로 득점 기회(runs_start)와 득점 가치(RE24)의 산점도를 geom_point() 함수를 사용하여 작성합니다. 이 산점도에서 패턴을 확인하기 위해 geom_smooth() 함수를 사용하여 LOESS 곡선을 추가합니다. 그래프를 해석하는 데 도움이 되도록, geom_hline() 함수를 사용하여 y축 0 지점에 수평선을 추가합니다. 이 선 위의 점들은 2016 시즌 동안 총 긍정적인 득점 가치 기여를 한 타자들을 나타냅니다.

plot1 <- ggplot(run_exp_400, aes(runs_start, RE24)) +
  geom_point() + 
  geom_smooth() +
  geom_hline(yintercept = 0, color = "red")
plot1

위 그림을 보면, runs_start 값이 큰 타자들이 더 많은 득점 기여를 하는 경향이 있음을 알 수 있습니다. 하지만 이 선수들의 득점 가치에는 큰 분포가 있습니다. 예를 들어, runs_start 값이 300에서 350 사이인 선수들 중 네 명은 실제로 음수 득점 기여를 했고, 다른 선수들은 2016 시즌 동안 60점 이상을 창출했습니다.

 

그래프를 통해 40점 이상을 창출한 선수는 제한된 수의 선수들임을 알 수 있습니다. 이 선수들은 누구일까요? 레이블링을 위해 Lahman People 데이터 프레임에서 nameLast와 retroID 변수를 추출하고, 이 정보를 run_exp_400 데이터 프레임과 병합합니다. ggrepel 패키지의 geom_text_repel() 함수를 사용하여, 이전 산점도에 이 뛰어난 타자들의 점 라벨을 추가합니다. 이 함수는 라벨이 겹치지 않도록 플로팅 합니다.

run_exp_400 <- run_exp_400 |>
  inner_join(People, by = c("bat_id" = "retroID"))
library(ggrepel)
plot1 + 
  geom_text_repel(
    data = filter(run_exp_400, RE24 >= 40), 
    aes(label = nameLast)
  )

위 그림 에서 RE24 기준으로 최고의 타자들을 확인할 수 있습니다. 이들은 마이크 트라웃 (66.43), 데이빗 오티스 (60.82), 프레디 프리먼 (47.19), 조이 보토 (46.95), 조시 도날드슨 (46.22), 그리고 놀란 아레나도 (46.0)입니다.

 

타순 위치

감독들은 최고의 타자를 타순 중간에 배치하는 것을 선호합니다. 전통적으로 팀의 "최고 타자"는 3번 타자로, 주자를 진루시키는 능력이 뛰어난 타자는 4번 타자로 배치됩니다. 이 샘플에서 타자들의 타순은 어떻게 구성되어 있을까요? 특히, 득점 가치 기준으로 최고의 타자들이 타순 중산에 배치되고 있는지 확인해 보겠습니다.

 

선수는 시즌 동안 여러 타순에서 타석에 설 수 있습니다. 우리는 한 선수의 타순을 그가 가장 자주 타석에 선 위치로 정합니다. 먼저 retro2016 데이터 프레임과 run_exp_400 데이터 프레임을 병합하여 regulars 데이터 프레임을 만듭니다. 그런 다음, regulars를 변수 bat_id와 bat_lineup_id로 그룹화하여 각 선수의 타순 빈도를 찾습니다. arrange()와 mutate() 함수를 적용하여 가장 빈번한 타순을 position으로 정의합니다. 이 새로운 변수를 runs_exp_400 데이터 프레임에 추가합니다.

regulars <- retro2016 |>
  inner_join(run_exp_400, by = "bat_id")

positions <- regulars |> 
  group_by(bat_id, bat_lineup_id) |>
  summarize(N = n()) |> 
  arrange(desc(N)) |> 
  mutate(position = first(bat_lineup_id))

run_exp_400 <- run_exp_400 |>
  inner_join(positions, by = "bat_id")

 

 

다음 R 코드에서는 geom_text()를 사용하여 선수들의 득점 기회와 RE24 값을 플로팅 하며, 레이블 변수로 타순(position)을 사용합니다.

ggplot(run_exp_400, aes(runs_start, RE24, label = position)) +
  geom_text() +
  geom_hline(yintercept = 0, color = "red") +
  geom_point(
    data = filter(run_exp_400, bat_id == altuve_id),
    size = 4, shape = 16, color = crcblue
  )

그림을 통해 타순, 득점 기회, 그리고 득점 가치 간의 관계를 더 잘 이해할 수 있습니다. 많은 득점을 창출하는 최고의 타자들은 일반적으로 타순에서 3번, 4번, 5번에 배치됩니다. 리드오프(1번)와 2번 타자의 득점 창출 수는 타순 중간(3번과 4번)에 있는 최고의 타자들이 창출하는 득점보다 훨씬 적습니다. 이 타순의 일반적인 패턴에서 몇 가지 놀라운 점도 있습니다. 예를 들어, 일부 클린업 타자(4번 위치)는 평균적인 득점 창출 값을 가지고 있습니다.

 

타석 수가 400회 이상인 타자 그룹에서 호세 알투베와 그의 총 득점 가치 34.7은 어떻게 비교될까요? 우리는 알투베의 타자 ID를 altuve_id로 저장했습니다. 위 그림에서는 geom_point() 함수를 다시 사용하여 알투베의 (runs_start, RE24) 값을 큰 실선 점으로 표시합니다. 2016 시즌에서 알투베는 팀을 위해 득점을 창출하는 데 있어 최고의 타자 중 하나였습니다.

 

 

반응형

'야구 분석/R'의 다른글

  • 현재글 메이저리그 타자들의 득점 기대치

관련글