[세이버메트릭스] 타자의 공격력 계산하기 : OPS, OPS+, GPA, RC, RC/27, EqA, wOBA, wRAA
이 블로그에서 트레이드의 이해득실을 계산할 때나 특정 플레이어의 기여도를 비교할 때에 주로 사용한 비교 툴은 WAR(Wins Above Replacement) 였다. 그런데, 생각해보면 세이버메트릭스의 개념에 대해서 자세히 설명한 것은 FIP와 BABIP 정도밖에 없었던 것 같다. 이래가지고서야 WAR를 가지고 아무리 이야기해봤자 결국 잘난척에 불과하지 않을까...라는 생각이 들었다.
그래서 WAR의 개념과 계산 방법을 설명하기로 결심했지만... 문제는 도대체 어디까지 거슬러 올라가야 하는가였다. 이 블로그를 방문하시는 분들께서 스탯에 대해 얼만큼의 지식을 가지고 있는지 알 수도 없고... 결국 이런저런 고민 끝에, OPS와 그 변종들로부터 출발하기로 했다. 나는 Fangraphs와 같이 wRAA를 WAR 계산시 공격력의 척도로 삼고 있으므로, 이 글에서는 wRAA의 계산 방법까지 다뤄 보고자 한다.
요즘도 야구 중계를 보면 사실 타자에 대해 주로 언급되는 스탯은 타율(AVG), 홈런(HR), 타점(RBI)이 고작이다. 우리나라 중계는 물론이거니와 메이저리그 중계라고 해서 크게 다르지는 않은 것 같다. 그나마 OPS가 널리 퍼진 덕에, 출루율(OBP)과 장타율(SLG) 정도를 덤으로 들을 수 있는 정도이다.
타율이나 타점과 같은 석기시대의 스탯들로 타자를 평가하면 문제가 많다는 이유에 대해서는 자세한 설명을 생략하고자 한다. 이전의 FIP나 BABIP에 대한 글 뿐 아니라, 기회가 있을 때마다 같은 말을 반복해왔기 때문이다. 타율은 타자 본인의 능력과 상관없는 많은 요소들, 이를테면 상대팀의 수비 능력과 같은 외부 요인들이 많은 영향을 끼치므로, 타자의 능력을 평가하는 잣대로 쓰기에는 불완전한 부분이 많다는 정도로만 정리하고 넘어 가겠다. 타점은 팀 동료들이 해당 타자 앞에서 얼마나 출루를 해 주느냐에 더욱 크게 좌우되므로, 개인 스탯이라기보다는 팀 스탯에 가까운 숫자라고 할 수 있다. 타자의 생산성을 평가하는 지표로는 역시 낙제점을 면키 어렵다.
1. OPS
세이버메트릭스 최초의 히트작이라고도 할 수 있는 OPS 부터 살펴보자.
OPS는 On base percentage(OBP, 출루율) Plus Slugging percentage(SLG, 장타율)의 약어이다. 따라서 OBP와 SLG만 구할 수 있다면 쉽계 계산된다. 이 둘을 구하는 식은 아래와 같다.
OBP = (H + BB + HBP) / (AB + BB + SF + HBP)
SLG = TB / AB = (1B + 2*2B + 3*3B + 4*HR) / AB
이 둘을 그대로 더한 것이 OPS이다. 즉,
OPS = OBP + SLG
이렇게 된다. OPS가 히트하게 된 데에는 타자의 출루 능력과 장타력을 골고루 평가한다는 내용상의 우수함 뿐 아니라, 계산식이 단순하여 누구나 쉽게 이해하고 계산할 수 있다는 장점도 크게 작용하였다. 이후 보다 정밀한 스탯이 무수히 많이 개발되었지만, 한 눈에 타자의 생산성을 훑어보는 데에는 여전히 요긴하게 쓰이고 있다.
2. OPS+
이후 구장마다 타자에게 유리한 구장이 있고 불리한 구장이 있다는 것을 감안하여, 조정 OPS(OPS+, Adjusted OPS)가 등장하게 된다. OPS+는 구장 효과(Park Factor)를 반영할 뿐 아니라, 100을 평균으로 하여 스케일도 조정되기 때문에, 특정 시즌에 특정 타자가 리그 평균에 비해 얼마나 좋은 활약을 펼쳤는지 알 수 있다. (100보다 큰 숫자는 리그 평균보다 좋은 활약을 했음을 의미하며, 100보다 작으면 그 반대이다. 또한 100에서 멀어질수록 평균과의 차이가 크다.)
계산식은 다음과 같다.
OPS+ = 100 * ((OBP/lgOBP + SLG/lgSLG) - 1)
혹은 구장 효과를 적용하였음을 나타내기 위해 아래와 같이 표현하기도 한다.
OPS+ = 100 * ((OBP/lgOBP + SLG/lgSLG) - 1) / BPF
여기서 BPF는 타자의 Park Factor를 의미한다.
이러한 접근에 문제가 있음은 쉽게 알 수 있는데... 리그 평균 OBP와 리그 평균 SLG가 거의 1할 가까이 차이가 나는 데다가, 그 분포도 다른 것이다. 세이버메트리션들은 여기서 좀 더 나아가서, 득점과의 상관 관계를 통계적으로 구해 보았다. (타자가 타격을 하는 목적은 결국 팀이 득점하는 것이며, 그 외의 것은 모두 부수적인 것일 뿐이라는 사실을 기억할 필요가 있다.) 그 결과, 어떤 연구에서도 출루율과 득점과의 상관 관계(correlation)가 장타율과 득점과의 상관 관계보다 높게 나왔다. 이는 OPS와 같은 스탯을 계산할 때 출루율에 대해 얼마간의 가중치를 부여해야 한다는 의미가 된다.
3. GPA
이에 따라, GPA(Gross Production Average)가 발명되었다. 이 스탯은 출루율에 1.8의 가중치를 부여한 것이다.
GPA = (1.8*OBP + SLG) / 4
물론 이 식을 그대로 쓰지 않고 Park Factor를 적용, 조정하여 사용한다. 4로 나누는 이유는 AVG와 비슷한 정도의 scale을 얻도록 하기 위해서이다. 마치 타율과 비슷하게, GPA가 2할대 초반이 나오면 형편없는 타자이고, 3할이 나오면 아주 뛰어난 공격력을 지닌 타자라고 볼 수 있는 것이다.
GPA는 OPS보다 실제 득점과의 상관관계가 더 높으면서도 여전히 계산하기가 쉽다는 장점을 가지고 있다. GPA를 Runs, 즉 점수를 내는 데 기여한 수준으로 변환하는 공식들도 개발되어 있는데, 대표적인 것은 PA*1.356*(GPA^1.77) 이다.
여담이지만, "Moneyball"에서 Paul DePodesta는 OBP가 SLG보다 3배나 중요한 스탯이라고 주장한 바 있다. OBP가 중요하긴 하지만 그정도로 극단적인 OBP 우선주의는 좀 문제가 있다. DePodesta가 LA Dodgers에서 실패한 데에는 다 이유가 있는 것 같다...
4. RC, RC/27
이번에는 세이버 진영에서 내놓은 좀 더 복잡한 스탯들을 알아보자.
Bill James의 유명한 발명품들 중 하나인 RC(Runs Created)는 일단 아래와 같은 기본 형태를 가진다. (사실 이 스탯은 위의 GPA보다 훨씬 더 오래된 것이다.)
RC = (A*B) / C
A는 출루율을 반영한 어떤 값(On Base Factor)이며, B는 앞서 출루한 주자를 진루시키는 능력을 반영한 어떤 값(Advancement Factor)이다. C는 타자가 출루 내지는 진루를 시킬 수 있는 기회(Opportunity Factor)를 의미한다.
Bill James가 처음 RC를 고안한 이래로, 이 공식은 무려 14차례나 변형되어 왔다. 이를테면... 가장 기본적인 형태의 공식은 다음과 같다.
RC = ((H + BB) * TB) / (AB + BB)
= OBP * SLG * AB
보다 널리 쓰이는 개량 버전 중 하나는 아래와 같다.
RC = ((H + BB - CS + HBP - GIDP) * (TB + 0.26 * (BB - IBB + HBP)) + (0.52 * SH + SF + SB)) / (AB + BB + HBP + SH + SF)
어이없다는 생각이 들 지도 모르겠으나... 이건 그나마 2002년 버전에 비하면 쉬운 공식이다. 필요한 숫자들이 많긴 하지만 모두 쉽게 얻을 수 있는 기본적인 스탯들이기 때문이다.
2002년 버전은 Wikipedia를 그냥 링크하도록 하겠다. 일일이 적자니 너무 길다... -_-;;;
클릭
링크에서... 위에 소개한 버전들을 쭉 지나면 2002 version이라는 것이 나온다. 읽을 수록 한숨만 나올 것이다. 통계적인 수치와 계산식을 통한 예측치를 일치시키려는 노력이 이렇게 계속되고 있지만... 그러면 그럴수록 식은 복잡해지고... 일반 팬들이 집에서 계산하기에는 무리가 많이 따르는 식이 되어 버리고 만다. 이 식을 바탕으로 한 득점 예상치의 오차가 5% 이내일 만큼 많이 정밀해진 것도 사실이지만... 그러면 그럴수록 오히려 활용하기는 더욱 어려워지고 있다.
[주: RC/27의 설명이 필요한 듯 하여 아래 paragraph를 나중에 추가하였다. 09/11/18]
한편, 공격력 측정 지표로 빈번히 이용되는 RC/27은 무엇일까?
RC/27은 단순히 RC를 27로 나눈 값이 아님에 유의하시길...!!!
RC/27 = 27 * RC / (AB - H + CS + GIDP + SH + SF)
계산하는 사람의 이론적인 이해 또는 입장에 따라 SH와 SF를 넣기도 하고 빼기도 한다. 개인적으로는 "SF는 넣고 SH는 제외해야 하지 않을까" 라는 생각을 하고 있다.
RC 대신 RC/27을 쓰는 이유는... RC가 누적 스탯이기 때문에, 절대적인 출장 기회가 많을수록 유리하기 때문이다. 예를 들어 어떤 플레이어가 부상으로 인해 시즌의 반 밖에 소화하지 못했다면, 그를 RC로 평가하는 것은 정당하지 못하다. RC/27의 개념은, 해당 타자 아홉 명으로 1번부터 9번까지 타순을 짠 다음, 9회까지 27아웃을 뛰는 동안 그 팀이 몇 점이나 득점할 수 있을지의 예상치를 산출하는 것이다. 따라서, 타석 수에 상관없이 절대적인 비교가 가능하다.
RC는 Bill James와 그의 동료들에 의해, 지금도 계속해서 개량 중인 스탯이다. "(출루능력 * 진루능력) / 기회"라는 이론적 기반 위에서, 실제 메이저리그 게임에서 통계적으로 관측되는 결과에 맞추기 위해 계속 식을 변형해 가는 것이다. Tom Tango는 이 이론적 기반 자체에 대해 의문을 제기한 바 있으며, 또한 RC가 홈런의 가치를 정확히 반영하지 못하고 있음을 보여주었다. Tom Tango의 비판에 대해서는 그의 홈페이지를 참고.
이러한 약점에도 불구하고, RC 특히 RC/27은 오랜 기간동안 타자의 공격력을 측정하는 지표로 매우 널리 이용되었다. 적어도 아래의 EqA나 wOBA가 나오기 전까지는 말이다.
5. EqA
이번에는 Baseball Prospectus의 야심작인 EqA를 살펴보자.
EqA는 Equivalent Average의 약자이다.
단어의 의미에서 알 수 있듯이, 역시 친숙한 AVG와 비슷한 숫자를 얻을 수 있도록 scale 조정을 한 스탯이다. 게다가 Equivalent는 리그에 대한 조정도 가능함을 의미한다. 즉 AA 레벨인 Texas League에서 뛰고 있는 어떤 유망주가 있을 때, 그의 활약 정도를 메이저리그로 옮겨 보면 어느 정도가 되는지 등의 분석이 가능하게 되는 것이다.
꽤 파워풀한 스탯 같지만... 역시 이런 스탯을 만들기 위해서는 엄청난 작업이 필요하다.
일단 아무 조정도 되지 않은 Raw EqA를 구해보면,
RawEqA = (H + TB + 1.5 * (BB + HBP + SB) + SH + SF - IBB/2) / ( AB + BB + HBP + SH + SF + CS + SB)
벌써 질렸는가? 이것은 단지 시작일 뿐이다.
이제부터 10번 이상의 변환을 거쳐야 한다. 하나하나가 결코 만만한 작업이 아니다.
이걸 일일이 설명하다가는 밤을 새야 할 것 같으므로, 그냥 Baseball Prospectus 사이트의 링크를 걸도록 하겠다.
클릭
이건 Runs Created 2002 버전보다도 몇 배나 어이없는 공식이다. RC의 경우는 엑셀을 이용하면 그럭저럭 노가다로 구할 수는 있지만... EqA는 솔직히 엄두조차 나질 않는다. 기껏해야 링크된 글을 몇 번 읽어보고 각각의 변환이 갖는 의미를 이해하는 정도가 고작이다.
주루플레이까지 포함하고 있고, 정교한 계산을 통하여 조정 작업을 거치게 되어 있으므로, 꽤 잘 만든 스탯인 것은 사실이지만 역시 일반 팬들이 활용하기는 너무 무리한 스탯이다.
이 밖에도 여러 OPS 대체 스탯이 만들어졌으나 일단 이 정도만 소개하고 넘어가고자 한다.
6. wOBA, wRAA
사실 진짜 소개하고 싶은 스탯은 바로 이 wOBA와 wRAA이다.
wOBA는 weighted On Base Average의 약자로, Tom Tango 외 2인이 쓴 책인 "The Book"에 잘 소개되어 있다. 앞으로 기회가 있을 때마다 이 책의 내용을 많이 소개할 예정인데... 2007년에 출판된 책으로, 세이버메트릭스의 새로운 교과서라고 해도 과언이 아닐 만큼 알찬 내용으로 잘 쓰여진 책이다.
세이버메트리션들은 이미 타자가 타석에 들어서서 발생한 어떤 "사건(Event)"이 득점에 미치는 영향을 오랜 기간에 걸쳐 조사해 왔다. 예를 하나 들어보자.
1999년부터 2002년간의 모든 메이저리그 게임을 이닝별, 상황별로 분석한 결과... 2사 만루 상황에서의 득점 기대값(Run Expectancy)은 0.815였다. 즉 이런 상황을 1000번쯤 맞게 된다면 815점 정도 득점할 확률이라는 것이다. 그런데... 타자가 여기서 만루홈런을 쳤다고 하자. 팀은 4점을 득점하고, 상황은 2사 주자 없음으로 바뀐다. 2사 주자 없음에서의 득점 기대값은 0.117로 나타나고 있다. 그렇다면, 앞의 만루홈런의 득점 가치(Run Value)를 구해 보자.
이 홈런으로 인해 득점 기대값은 0.815에서 0.117로 떨어졌다. 하지만 그 사이에 홈런으로 인해 팀은 4점을 득점하였으므로, 실제로는 0.117이 아니라 4.117이 된 셈이다. 따라서, 아래와 같이 식을 세울 수 있을 것이다.
0.815 + 만루홈런의 Run Value = 4.117
따라서, 2사 만루에서 홈런의 가치는 득점으로 환산하면 3.302 Runs가 됨을 알 수 있다.
이런 계산을 각 사건에 대하여 아웃카운트와 주자를 변화시켜 가며 모든 상황에 대해 해 보는 것이다. 이렇게 해서 사건별로 가중평균을 얻은 값은 아래와 같다.
홈런 : 1.397 Runs
3루타 : 1.070
2루타 : 0.776
1루타 : 0.475
에러 : 0.508
몸에 맞는 공 : 0.352
볼넷(고의사구제외) : 0.323
고의사구 : 0.179
폭투 : 0.266
아웃 : -0.299
(이하 생략 : 그 밖의 상황에 대한 데이터는 책을 참조하시기 바람... -_-;;; )
그렇다면 타자의 생산성을 어떻게 평가할 수 있을까? 홈런이나 안타 등이 가지는 가치는 아웃에 대비하여 구해야 할 것이다. "아무 것도 아닌 경우"란 존재하지 않기 때문이다. 타자는 아웃 당하거나, 아니면 어떤 방법으로든 살아서 나갈 것이다. 안타가 되었든, 에러가 되었든 간에 말이다. 따라서... 아웃으로 인한 가치의 손실을 빼 주면 해당 이벤트의 진정한 가치가 된다고 말할 수 있겠다. 예를 들면...
홈런 : 1.397 + 0.299 = 1.698
이런 식으로 구하는 것이다.
그 다음, 결과값을 OBP와 비슷한 scale로 나타내기 위해서, 각각의 value에 다시 1.15를 곱해 준다. 홈런의 경우는 1.698 * 1.15 = 1.95가 된다.
위에서 본 다른 스탯들은 주로 타율(AVG)과 비슷한 scale로 나타내기 위해서 조정을 했는데, wOBA의 경우는 출루율과 비슷한 scale로 조정을 해 주고 있다. 이렇게 조정해 주는 이유는 간단하다. 타자의 생산성을 한 눈에 알게 하기 위해서이다. .400의 출루율이 아주 좋은 것처럼, .400의 wOBA도 아주 좋은 것이다. .335 정도의 출루율이 리그 보통인 것처럼, .335 정도의 wOBA도 리그 보통이라고 생각하면 되는 것이다. 편리하지 않은가??
어쨌거나... 각 이벤트에 발생 횟수에 각각의 value를 곱하고, 여기에 다시 1.15를 곱하여 모두 더한다. 이를 PA(타석)로 나눠주면 그 타자가 한 번 타석에 들어설 때 팀의 득점 기대값(Run Expectancy) 상승에 얼마나 기여하는지를 알 수 있게 되는 것이다. 이것이 바로 wOBA이다. 식으로 나타내면 아래와 같다.
wOBA = (0.72*NIBB + 0.75*HBP + 0.90*1B + 0.92*RBOE + 1.24*2B + 1.56*3B + 1.95*HR) / PA
여기서 NIBB는 고의사구를 제외한 볼넷을 의미하며, RBOE는 Reached Base on Error, 즉 에러로 인해 타자가 출루에 성공하는 것을 의미한다. 타자의 능력과는 전혀 상관이 없는 폭투와 같은 이벤트는 아예 제외되어 있음에 유의하자. (** 이 식은 이 글을 쓴 뒤에 약간 수정을 하게 되었다. 글 맨 마지막 부분 참고.)
이제 다음 단계는 그 타자가 실제로 메이저리그 평균보다 얼마나 뛰어난지를 점수로 계량하는 것이다. wRAA는 weighted Runs Above Average의 약자로, 단어 그대로의 의미를 지닌다. 즉 평균 타자에 비해 얼마나 득점에 기여하느냐를 점수(Runs)로 나타내는 것이다.
일단 리그 평균 wOBA를 구한다. 위의 모든 변수(홈런 등)에 리그 평균 값을 대입하면 된다. 그 다음, 해당 타자의 wOBA에서 리그 평균 wOBA를 빼 준다. 그리고 1.15로 나눠준다. (아까 OBP와 유사한 scale을 얻기 위해 1.15를 인위적으로 곱했으므로, 다시 나눠줘야 한다.) 마지막으로 해당 타자의 PA(타석)를 곱해주면, 그 타자가 해당 시즌에서 메이저리그 평균 타자에 비해 팀 득점에 기여한 정도가 점수로 나타나게 된다. 이를 식으로 나타내면...
wRAA = ((wOBA - lgwOBA) / 1.15) * PA
예를 들어서... Ryan Ludwick이 작년에 타석에서 어느 정도로 훌륭한 활약을 했었는지 계산을 해 보자.
2008년 NL의 리그 평균 wOBA는 대략 .331이었다. 한편, 2008년 Ryan Ludwick의 wOBA는 .406이었으며, 그는 617번 타석에 들어섰다. 이제 그의 wRAA를 계산해 보면...
wRAA = ((0.406 - 0.331) / 1.15) * 617 = 40.24
즉 Ryan Ludwick은 평균적인 NL 타자들에 비해 2008 시즌 팀 득점에 타격을 통해 40.24점 정도 더 많이 기여했다는 뜻이 된다. (참고 : Fangraphs에서는 그의 wRAA가 39.5로 나타나고 있다. 아마도 리그 평균 wOBA를 구하는 과정에서의 오차로 인한 차이가 아닐까 생각된다.)
다른 스탯에 비해 wOBA가 가지는 매력은 분명하다. 우선 실제 메이저리그에서 발생했던 사건들의 기대값을 구하여 계산한 결과이므로... 계산한 이론치와 실제 발생하는 득점 사이의 상관 관계가 우수하게 나타난다. 그리고 OPS만큼은 아니더라도, 다른 세이버 스탯들에 비하면 계산이 무척 쉬운 편이다. 마지막으로, wRAA로의 환산이 아주 편리하여, 해당 플레이어가 타석에서 점수로 몇 점 만큼 팀에 기여해 주었는지를 아주 쉽고 빠르게 계산할 수가 있다. 이것은 특히 여러 플레이어를 비교할 때에 그 진가를 발휘한다.
다만 약간 아쉬운 부분이라면, wOBA는 타석에서 타자에게 벌어지는 이벤트만을 반영하므로, 도루와 같은 주루플레이가 제외되어 있다. 이 부분은 앞으로 보완이 필요하다고 본다.
나름 쉽게 설명해 보려고 애써 보았는데 잘 된 것인지 모르겠다. 다음 번 세이버메트릭스 포스팅에서는 Replacement Level과 Positional Adjustment에 대해 다루고자 한다. 거기까지 다루고 나면 타자들의 WAR에 대해서도 설명이 가능할 것 같다.
** 추가 수정 사항
이 글을 쓴 이후, WAR를 계산하기 위해 직접 wOBA를 산출하던 중, 여러 타자들의 wOBA를 계산한 결과 모두 Fangraphs나 Stat Corner 등의 사이트에 비해 계산 결과가 다소 낮게 나오는 문제점을 발견하였다. 원인이 무엇일까 고민하던 중... wOBA를 창안한 Tom Tango의 글에서 다음과 같은 부분을 발견했다.
Note: Depending on the specific analysis, the PA term (plate appearances) may exclude bunts, IBB, and a few of the more obscure plays.
빙고!
wOBA 계산시 분모에서도 IBB(고의사구)를 제외하면 되는 것이다. 논리적으로 생각해도 분자에서 NIBB, 즉 고의가 아닌 보통 볼넷만을 계산 대상으로 하였으므로, 분모에서도 NIBB만을 계산에 넣는 것이 타당하다고 본다. 따라서, 수정된 식은 아래와 같다.
wOBA = (0.72*NIBB + 0.75*HBP + 0.90*1B + 0.92*RBOE + 1.24*2B + 1.56*3B + 1.95*HR) / (PA - IBB)
이렇게 계산하면 Fangraphs 사이트에 올라와 있는 결과들과 상당히 유사한 값을 얻을 수 있다. 물론 위의 인용문에서도 알 수 있듯이 각자의 논리에 따라 계산식이 조금씩 달라지므로, 소수점 세째 자리에서 나타나는 약간의 오차는 어쩔 수 없는 것일지도 모른다. Fangraphs나 Stat Corner 모두, 자신들이 어떤 특정 스탯을 더하고 뺐는지 상세히 밝히지 않고 있다. Tom Tango의 오리지널 계산식과는 값이 다르게 나오는 것으로 보아 뭔가 변화를 줬음은 확실한데 말이다...