이 계산에는 다음과 같은, 근거가 부족한 가정들이 들어가 있다. 이런 부분들을 말끔하게 해결할 수 없는 것은 KBO의 데이터 부족, 개인적인 지식 부족, 그리고 개인적인 시간 부족에 기인한 것이다.
1. KBO에서 각 이벤트는 MLB와 비슷한 Run Value를 가지며, 따라서 FIP 계산식은 동일하다.
2. KBO에서 Run Scoring Environment는 MLB와 유사하여, Runs per Win을 MLB와 동일하게 [((상대 팀 이닝*상대 팀 실점수준)+(소속 팀 이닝*소속 팀 실점수준)/(상대 팀 이닝+소속 팀 이닝))+2] * 1.5 의 근사식으로 산출할 수 있다.
3. KBO에서 선발투수의 Replacement Level은 MLB와 동일하며, 따라서 Replacement Level 선발투수의 기대 승률은 .380이다. --> 단, KBO의 Replacement Level이 실제로는 이와 다르다고 해도, 상대적 비교에는 지장이 없다. 이 계산에서 투수 A가 투수 B보다 WAR이 높게 나타났다면, Replacement Level을 바꾸더라도 A가 B보다 높게 나타나는 것은 변함이 없다. 단지 절대값이 바뀔 뿐이다.
다음은 중요한 참고 사항이다.
1. KBO 선수들의 모든 데이터는 스탯티즈에서 가져왔다. 스탯티즈는 보면 볼수록 놀랍고 대단한 사이트이다. (우리나라의 척박한 야구 기록 환경을 생각하면 더더욱 그렇다.) 단, FIP는 스탯티즈의 데이터를 쓰지 않고 직접 계산하였다. 이유는, 스탯티즈의 FIP가 Constant를 3.20으로 항상 동일하게 사용하고 있고, BB와 IBB의 구분이 이루어지고 있지 않기 때문이다.
2. 여기에서 계산한 선발투수의 WAR는 선발로 등판한 기록만을 대상으로 한 것이다. 한국 프로야구는 투수의 역할이 모호한 경우가 많아 시즌 내내 100% 선발 투수로만 등판하는 투수는 그다지 많지 않으며, 대부분의 선발투수가 구원 등판 기록을 가지고 있다. 따라서, 정확한 계산을 위해서는 해당 투수가 구원으로 등판한 기록을 가지고 구원투수의 WAR를 계산하여 합산해 주어야 할 것이다. (결국 내가 구원투수 WAR를 구하는 방법을 최대한 빨리 포스팅해야 할 것 같다... -_- )
다음은 이 계산을 하고 난 뒤의 소감.
1. 07, 08, 09년 3년간의 FIP Constant를 계산하면서 시즌 스탯을 확인한 결과 시즌과 시즌 사이의 득점 수준 변화가 매우 크게 나타났다. (3년 사이에 타고투저 현상이 심화됨) 팀 수도 적고 게임 수도 적다보니 샘플이 적어져서 데이터의 변동성이 MLB에 비해 훨씬 크게 나타나는 것 같다. (KBO 1시즌 = 1,056게임, MLB 1시즌 = 4,860게임)
2. 그럼에도 불구하고 ERA/RA 비율이 유사하게 나타나는 것을 보면 비슷한 규칙을 가지고 비슷하게 야구를 하니 비슷한 결과가 나온다는 느낌이어서... MLB의 메트릭을 KBO에 적용하는 것이 완전히 엉뚱한 결과를 도출하지는 않을 것이라는 생각이 든다.
3. 류현진은 정말 좋은 투수인 것 같다. 다른 선수들을 많이 계산해 본 적은 없으나 한국야구에서 5 WAR면 엄청나게 높은 수치일 것 같은데... 위의 계산 파일에는 들어있지 않으나, 08년 스탯으로 계산해도 윤석민과 동일하게 3.6 WAR로 나온다.
투수에 대한 이전 포스팅에서 우리는 투수의 퍼포먼스를 평가하는 여러 가지 스탯을 살펴본 바 있다. 이 스탯들은 모두 해당 투수가 얼마나 실점을 하는지를 9이닝당 비율로 표시한 것이다. 댓글을 통해 ERA와 FIP, BABIP에 대해 camomile님과 매우 유익한 토론이 진행되었으므로 투수의 평가에 대해 관심이 있으신 분들은 꼭 위의 링크를 눌러 댓글을 읽어보시기 바란다. 원래 세이버메트릭스는 열린 개념이므로 정해진 결론은 없으며, 선택은 물론 여러분 각자의 몫이다...
어쨌거나, ERA나 FIP, tRA 등과 같은 스탯은 9이닝당 실점 수준을 보여 주지만, 여기에는 실제로 해당 투수가 그 시즌에 몇 이닝을 던졌는지는 반영되지 않는다. 9이닝당 1실점을 하는 압도적인 선발투수라고 해도, 50이닝만을 던지고 부상으로 시즌아웃 되었다면, 결코 좋은 평가를 하기는 어려울 것이다. 즉, 투수의 가치(Value)를 평가하기 위해서는 그가 얼마나 많은 이닝을 책임져 주었는지가 반드시 고려되어야 한다.
여기에서는, Fangraphs의 투수 WAR(Wins Above Replacement Level)를 계산하는 방식을 모델로 하여 투수의 가치를 구하는 방법을 살펴볼 것이다. 늘 강조하듯이 이것은 절대적인 단 하나의 방법은 아니며, 현재 나와 있는 여러 가지 방법 중 (내가 보기에) 가장 그럴 듯하여 소개하는 것이다. 또한 Fangraphs가 꽤 양질의 데이터를 모두 공짜로 보여주고 있어서 누구나 쉽게 찾아볼 수 있다는 장점도 있다.
이 글에서는 우선 선발투수만을 대상으로 하고자 하며, 구원투수는 다음 포스팅에서 다루게 될 것이다. 구원투수를 따로 다루는 이유는 구원투수의 WAR 계산시 LI를 반영하는 단계가 중간에 포함되므로 별도의 설명이 필요하기 때문이다. 안그래도 항상 글이 긴 편인데, 구원투수의 LI 이야기까지 하면 아무도 읽고싶지 않은 엄청난 길이가 되어버릴 듯하여 글을 분리하기로 하였다.
이제부터 2009년 Jon Lester의 기록을 가지고, 투수의 WAR를 구하는 방법을 차례차례 살펴보도록 하겠다. Fangraphs는 이 과정을 무려 일곱 개의 글에 걸쳐 설명하고 있는데, 내가 이걸 이해하는 데에는 무척 오랜 시간이 걸렸다. 나는 어떻게든 이 포스팅 하나로 몽땅 설명을 해 보고자 한다. 그것도 일곱 개의 원문보다 더 쉽게 말이다. 이게 가능한 목표일지는 모르겠지만... -_-;;;;
1. 투수가 속해 있는 리그의 평균 RA를 산출
우선 구하고자 하는 것이 ERA가 아니라 RA임에 유의해야 한다. 모든 종류의 실점을 아우르는 것이다.
Lester는 AL에서 뛰고 있다. 2009년 AL 전체 기록을 보면, 20173 1/3 이닝에서 10793점을 득점 혹은 실점하였음을 알 수 있다. (이런 기록은 Baseball-Reference에서 쉽게 얻을 수 있다.) 우리가 원하는 것은 경기당 평균 실점, 좀 더 정확히 이야기하면 9이닝당 평균 실점이다. 아래와 같이 간단히 계산할 수 있다.
AL avg RA = 10793 / 20173.333333 * 9 = 4.82
2. 투수의 조정 RA 산출
먼저 투수의 평균 실점 수준을 나타내는 스탯을 하나 골라서 가져온다. Fangraphs는 FIP를 이용하고 있고, 나도 FIP를 선호하므로, 여기에서는 FIP를 사용하도록 하겠다. (ERA나 tRA 등을 이용하고자 하는 경우에 대해서는 조금 아래에서 설명을 따로 드리도록 하겠다.) Lester의 2009년 FIP는 3.15이다.
FIP는 ERA Scale의 스탯이므로, 이를 RA Scale로 바꾸어 주어야 한다. ERA와 RA 사이에는 0.92:1의 관계가 경험적으로 존재하므로, 3.15를 0.92로 나눠 주면 RA Scale이 된다.
다음은 구장 효과인데... 구장 효과는 계산 방법이 여러가지이고 계산 방법에 따라 결과도 조금씩 다르다. 일단은 Fangraphs에서 제시하는 2004-2008년 5년간의 득점 Park Factor를 이용하도록 하겠다. Red Sox의 경우는 1.03으로 되어 있다. (이것은 홈에서 절반을 플레이하고 원정에서 절반을 플레이한다는 것을 이미 반영한 Adjusted Park Factor이다.) 즉, Lester는 Red Sox에서 뛰게 됨으로 인해 1.03배 더 실점하는 페널티를 가지고 있는 것이므로, 이를 보정해 주기 위해 다시 1.03으로 나눠 주어야 한다.
이 두가지 단계를 계산해 주면...
Adjusted RA = 3.15 / 0.92 / 1.03 = 3.32
이 3.32라는 숫자의 의미는... 중립적인 구장에서 평균 수준의 팀 동료들이 수비를 하고 있고, 상대 타선 역시 평균 수준의 선수들로 채워져 있을 경우, Lester가 9이닝을 던지면 3.32점 실점할 것이라는 뜻이다.
* 주 : FIP보다 ERA를 더 선호하는 경우, 위의 계산에서 FIP 대신 ERA를 사용하여 동일한 방법으로 Adjusted RA를 얻으면 된다. tRA를 사용하고자 하는 경우, tRA는 이미 RA Scale의 스탯이므로 0.92로 나눠 줄 필요가 없다. tRA에 구장 효과만 반영해 주면 된다.
3. 게임 당 평균 투구 이닝 계산
Lester는 32게임에 나와 203 1/3 이닝을 던졌으므로, 게임당 평균 투구 이닝은 다음과 같다.
IP/G = 203.333333 / 32 = 6.35
4. Runs per Win 계산
이 부분이 가장 어려운 부분일 것 같은데... 보통의 상황에서는 10점 = 1승으로 대충 계산하면 별로 오차가 발생하지 않는다. 하지만, 투수는 팀의 실점에 미치는 영향이 워낙 크기 때문에, 어떤 투수가 마운드에 있는지에 따라 Run Scoring Environment가 바뀌고, 이에 따라 점수와 승수의 관계도 바뀌게 된다.
조금 더 쉽게 생각하면... Lester와 같은 좋은 투수는 실점을 덜 하게 되므로, 보통 투수가 마운드에 있을 때에 비해 득점을 덜 해도 승리를 할 수 있게 되는 것이다. 반대로 3류 투수가 마운드에 있다면, 소속팀이 승리를 하기 위해서는 더욱 많은 득점을 해야 할 것이다. 이러한 변화를 반영하는 것이다.
투수의 퍼포먼스에 따른 점수와 승수의 관계를 계산하는 방법은 역시 여러가지가 있으며, 대부분은 Pythagenpat과 같은 득점/실점과 승률의 관계로부터 계산식을 이끌어내게 된다. 그러나, Pythagenpat을 직접 사용할 경우 제곱근을 구해야 하는 등 계산식이 복잡해지므로, 다음과 같은 근사식을 사용한다.
[((상대 팀 이닝*상대 팀 실점수준)+(소속 팀 이닝*소속 팀 실점수준)/(상대 팀 이닝+소속 팀 이닝))+2] * 1.5
근사식도 너무 복잡해 보이지만... 예를 통해 보면 조금 쉬울 것이다. 이닝 및 실점수준은 모두 9이닝을 기준으로 한다는 것을 기억하자.
상대 팀의 수준은 천차만별이겠지만... 162게임의 긴 시즌을 치르다 보면 여러 상대를 만나게 되므로, 결국 리그 평균에 가까워질 것이라고 볼 수 있다. 따라서, 상대 팀은 9이닝 당 리그 평균인 4.82점을 실점할 것으로 볼 수 있다. 한편 소속 팀의 경우... Lester가 선발로 나온 경기에서 9이닝 중 Lester가 책임져 주는 이닝은 평균 6.35이닝이었다. 나머지 2.65이닝은 리그 평균 수준으로 실점한다고 보고 계산한다. (분석 대상인 투수를 제외하고는 모두 리그 평균을 가정한다. 이렇게 해서 팀 동료들의 활약으로 인해 이득이나 손해를 보는 부분을 제거하고자 하는 것이다.)
이렇게 하면, 상대 팀 9이닝 + Lester 6.35 이닝 + Lester의 동료 구원투수들 2.65이닝 = 총 18이닝이 분모가 된다. 계산을 해 보자.
2번에서의 계산 결과 Lester는 9이닝 당 평균 3.32점을 실점하는 것으로 계산되었다. 한편, 리그 평균 투수들은 4.82점을 실점하므로, Lester는 리그 평균 투수에 비해 9이닝당 1.49점을 덜 내주는 것이 된다. (1.50이 아닌 이유는 소숫점 반올림 때문이다. 아래에 첨부한 엑셀파일 참고.) 이를 4번에서 계산한 9.43점 = 1승의 관계를 이용하여 환산하면, Lester는 리그 평균 투수에 비해 9이닝당 0.158승 소속팀에 더 기여하는 것이 된다. 리그 평균 투수는 이론적으로 승률이 5할일 것이므로, 팀 동료와 상대팀 선수들이 모두 평균 수준일 때 Lester 등판 시의 9이닝 당 기대 승률은 0.500 + 0.158 = 0.658이다.
6. Replacement Level
Replacement Level 팀은 .300 정도의 승률을 가지는 것으로 생각된다. 팀 승률이 .300이라고 해서 선수들이 모두 평균이 50%일 때 각각 30% 정도의 능력을 가지고 있는 것은 아니다. 실제로는 .300 타자, .300 투수, .300 수비의 팀은 승수효과에 의해 .300보다 훨씬 낮은 승률을 기록하게 되어 버리는 것이다.
.300의 팀 승률을 얻기 위해, 선발투수는 .380, 구원투수는 .470 정도의 능력이 요구된다. 이는 어느 정도 통계적으로도 검증된 수치이고... 이론적인 설명을 위해서는 Odds Ratio Method에 대한 배경지식이 필요한데... 이 이야기를 여기서 하게 되면 글이 완전히 산으로 가게 되므로... 이 부분은 추후 별도로 포스팅하도록 하겠다.
여기서는 일단 Tom Tango와 Fangraphs의 주장을 받아들여 Replacement Level의 투수의 승률이 .380인 것을 인정하고 넘어가도록 하자. 이것은, 소속 팀의 다른 동료들이 모두 리그 평균 수준이고, 상대 팀도 전부 리그 평균 수준의 선수들로 구성되어 있을 경우, Replacement Level 투수(예를 들어 AAAA 투수)가 선발 등판하여 9이닝을 던지면 .380의 승률을 기대할 수 있다는 의미이다.
7. WAR/9
9이닝당 Jon Lester의 기대 승률은 0.658이었다. 그리고 Replacement Level 선발투수의 기대 승률은 0.380이었다. 따라서, 9이닝을 기준으로 Lester는 Replacement Level 투수보다 0.658 - 0.380 = 0.278 더 기대 승률이 높다고 할 수 있다.
8. WAR
드디어 마지막 단계까지 왔다. 7번에서 얻은 9이닝 당 숫자를 Jon Lester가 던진 실제 이닝으로 환산하여 주면 되는 것이다. Lester는 203 1/3 이닝을 던졌으므로...
WAR = 0.278 * 203.333333 / 9 = 6.3
결국 2009년 시즌에, Jon Lester는 Replacement Level 투수에 비해 6.3승 더 팀에 기여한 것이다.
- NL 투수 계산하기 -
NL 투수는 AL 투수와 비교하여, 매 경기마다 타석에 들어선다는 중요한 특징이 있다. 거의 대부분의 경우, 투수들은 형편없는 타자들이므로, 타석에서는 팀에 오히려 피해를 입히게 된다. 이를 반영해 주어야 제대로 된 선수 가치의 계산이 가능할 것이다.
2009년 Tim Lincecum의 경우, 투구 내용만 가지고 보면 8.9 WAR의 시즌을 보냈지만, 타석에서 0.7승 만큼 오히려 팀에 해를 끼쳤으므로, 결국 최종 WAR는 8.9 - 0.7 = 8.2 가 되는 것이다.
첨부파일을 통하여 이를 확인하시기 바란다.
- 투수의 수비 -
투수의 수비력은 이 글을 쓰는 현재 WAR에 반영되고 있지 않고 있다. 투수의 UZR 데이터가 없기 때문이다. 수비가 좋은 투수와 좋지 않은 투수의 경우 이를 적절히 감안하여 주어야 할 것이다. 특별한 근거는 없으나 투수 수비의 영향은 가장 극단적인 경우 한 시즌에 최대 +/- 5 Runs 정도 되지 않을까 싶다.