game_id 중복
고유번호라는 이름과 달리 모든 값이 완전히 같은 행이 8줄 있었다. 집계마다 이 경기들이 두 번 반영된다.
배경 · 타구 궤적 26개 · 실측 발사속도와 발사각으로 계산
야구 중계에서 "홈에서 강한 팀"이라는 말은 매일 나온다. 그런데 이 말은 두 가지 서로 다른 주장을 섞어 쓴다. 하나는 홈이라는 조건 자체가 승률을 올린다는 주장이고, 다른 하나는 그 팀이 원래 강하다는 주장이다. 앞의 것은 구장·관중·이동 피로의 문제이고, 뒤의 것은 전력의 문제다. 둘을 구분하지 않으면 "우리 구장이 특별하다"는 마케팅 문구는 근거가 없다.
세 번째 질문이 핵심이다. 첫 두 개는 평균만 내면 나오지만, 세 번째는 답이 뒤집힐 수 있다. 실제로 이 분석에서도 뒤집혔다.
MLB Stats API에서 수집된 2025시즌 4개 파일(9,435행)을 받았다. 분석에 들어가기 전 모든 컬럼의 값 범위와 이름의 의미가 일치하는지 확인했고, 네 곳에서 불일치를 발견했다.
고유번호라는 이름과 달리 모든 값이 완전히 같은 행이 8줄 있었다. 집계마다 이 경기들이 두 번 반영된다.
평균이 0.143. 포스트시즌이 14%일 수는 없다. game_type과 교차집계하니 시범경기 345건과 올스타전까지 1로 잡혀 있었다.
승·패가 모두 0인 투수 2명의 값이 .--- 로 적혀 있어, 473개의 멀쩡한 숫자까지 문자로 읽혔다.
.1은 0.1이 아니라 3분의 1이닝이다. 십진수로 더하면 이닝이 사라진다.
바꾸지 않았다. 정제 전후 차이는 소수점 두세째 자리에 머물렀다.
| 지표 | 정제 전 | 정제 후 | 차이 |
|---|---|---|---|
| 홈팀 승률 | 54.08% | 54.31% | +0.23%p |
| 경기당 양팀 득점 | 9.054 | 8.899 | −0.155 |
| 리그 평균자책점 | 3.980 | 3.968 | −0.012 |
덧붙여, game_type == "R" 필터 하나로 Long 파일에 섞여 있던 일본 구단·마이너리그 팀 9개도 함께 걸러졌다. 필터를 언제 거는지가 뒤의 모든 집계를 좌우한다.
정제된 2,425경기에서 홈팀은 1,317승을 거뒀다. 승률 54.31%. 동전 던지기라면 이 정도로 치우칠 확률은 이항검정 기준 p = 0.0000119, 95% 신뢰구간 하한은 52.6%다. 표본이 2,400경기가 넘어야 이 정도 차이가 우연이 아니라고 말할 수 있다.
한 시즌 162경기만 봤다면 같은 결론에 도달하지 못했을 것이다. 홈 어드밴티지는 존재하지만, 경기 단위로는 거의 감지되지 않는 크기다. 이 점이 뒤의 해석에서 계속 발목을 잡는다.
구장별로 나눠 홈 승률을 세우면 순위표가 나온다. 여기까지는 누구나 만든다. 문제는 이 표를 읽는 방법이다.
멈춰서 다른 숫자를 봤다. 로키스의 2025년 전체 승률은 26.5%였다. 이 팀은 홈에서 약한 게 아니라 그냥 약했다. 구장별 홈 승률 순위표는 구장을 재고 있지 않았다.
전체 승률과 홈 승률의 상관계수를 구하니 0.93. 사실상 같은 것을 두 번 그린 셈이다. 구장 이름을 붙여 놓았을 뿐, 이 그래프는 팀 순위표다.
홈이라는 조건의 효과만 남기려면 같은 팀을 기준선으로 삼아야 한다. 팀별로 홈 승률에서 원정 승률을 뺀 값을 쓰면 전력이 상쇄된다. 약한 팀은 홈에서도 원정에서도 약하니, 그 차이만 남는다.
이 지표의 평균은 +8.7%p, 중앙값은 +8.2%p. 30개 팀 중 27개 팀이 양수다. 전체 승률과의 상관은 0.93에서 0.28로 떨어졌다 — 팀 전력의 그림자가 대부분 걷혔다는 뜻이다.
이제야 구장별 이야기를 할 수 있다. 파이리츠(+21.0%p)와 메츠·레인저스(+18.5%p)는 전력과 무관하게 홈에서 확실히 다른 팀이 된다. 반대로 애슬레틱스는 −4.9%p로, 임시 구장(서터헬스파크)을 쓰는 상황과 무관해 보이지 않는다.
다만 팀당 81경기라 이 순위 자체의 불확실성은 크다. +21%p와 +18%p의 차이를 진지하게 다루면 안 된다. 말할 수 있는 것은 "대부분의 팀에서 홈 효과가 양수이며 그 크기는 대략 5~10%p"까지다.
앞의 두 그래프가 말이 되려면, 보정 전과 후가 실제로 다른 그림이어야 한다. 같은 가로축(팀 전체 승률) 위에 두 지표를 각각 올려 보면 차이가 눈에 보인다.
보정 전에는 점들이 대각선 위에 거의 일직선으로 늘어선다. 전체 승률을 알면 홈 승률이 결정된다는 뜻이고, 그 그래프는 새로운 정보를 담고 있지 않다. 보정 후에는 점들이 흩어진다. 흩어졌다는 것이 좋은 신호다 — 팀 전력으로 설명되지 않는 무언가가 남았다는 뜻이니까.
홈 어드밴티지가 시즌 내내 일정한지도 물어볼 만하다. 개막 직후에는 홈 관중이 더 많이 오고, 여름에는 원정팀의 이동 피로가 쌓인다는 이야기가 흔하다.
월별로는 4월 60.4%에서 5~6월 51%대로 떨어졌다가 다시 오르는 모양이 보인다. 요일별로도 수요일과 토요일이 낮다. 패턴이 있어 보인다.
즉 "봄에 홈 어드밴티지가 크다"거나 "수요일엔 홈이 약하다"고 말할 근거가 없다. 월 400경기 안팎이면 승률이 ±5%p 흔들리는 것은 자연스럽다.
눈으로 보이는 패턴에 이름을 붙이고 싶은 유혹이 가장 강한 지점이 여기다. 그래프에 굴곡이 있다는 것과 그 굴곡이 실재한다는 것은 다른 이야기다. 이 프로젝트에서 검정을 붙이지 않았다면 근거 없는 결론 두 개를 더 실었을 것이다.
"우리 구장은 홈 승률 X%"라는 홍보 문구는 대부분 팀 성적을 다시 말한 것이다. 구단 커뮤니케이션에서 홈 효과를 주장하려면 원정 성적을 함께 제시해야 한다. 같은 논리는 KBO의 구장별 비교, 시간대별 관중 효과 분석에도 그대로 적용된다.
단일 시즌이라 팀별 추정치의 신뢰구간이 넓다. 이동거리·시차·요일·선발투수 질을 통제하지 않았고, 홈 효과의 원인(관중, 심판 판정, 익숙함)은 이 데이터로 분리할 수 없다. 여러 시즌을 쌓고 혼합효과 모형으로 팀·구장·연도를 분리하는 것이 다음 단계다.
앞의 분석은 경기 단위 데이터만 썼다. 선수 단위로 내려가려면 시즌 성적 파일과 트래킹 파일을 결합해야 하는데, 여기서 앞서 E-1~E-4와 같은 성격의 문제를 하나 더 만났다.
게다가 표기 순서도 반대다. 시즌 파일은 Aaron Judge, 트래킹 파일은 Judge, Aaron. 이름으로 붙이려면 뒤집는 전처리가 먼저 필요하고, 그러고도 동명이인은 남는다. 결국 번호로 붙이는 것 외에 안전한 방법이 없다.
아래는 그렇게 결합한 결과로 만든 탐색 도구다. 타자 461명·투수 475명이 들어 있고, 트래킹 지표가 있는 선수는 251명이다.
타구 품질 화면에서 오른쪽 위로 갈수록 강하고 높이 뜬 타구다. 발사각이 지나치게 높으면 뜬공, 낮으면 땅볼이 되므로 최적 구간은 가운데 위쪽에 몰린다. 기대 성적 화면의 대각선은 실제와 기대가 일치하는 선으로, 선 아래 선수는 기대보다 손해를 본 쪽이다 — 다음 시즌 반등을 점칠 때 쓰는 관점이다.