K-Stuff+가 만들어진 이야기: Probit에서 z-score까지

점수 체계를 잘못 잡으면 무슨 일이 생기는가

지표는 완성된 모습으로 공개되지 않는다. K-Stuff+도 예외가 아니었다. 첫 배포에서 점수 체계를 잘못 잡았고, 그 잘못은 173점짜리 투수와 20점짜리 투수를 동시에 만들어냈다. 이 글은 그 실패와 수정 과정을 순서대로 남긴 기록이다. 지금 쓰고 있는 100 ± z × 5 체계가 왜 이렇게 생겼는지도 여기서 나온다.

1. 첫 배포: 거의 모든 투수가 90에서 105 사이에 있었다

최초로 K-Stuff+를 배포했을 때, 거의 대부분의 투수가 90에서 105 사이에 몰려 있었다. 통계적으로는 정상이다. 구위가 비슷한 투수가 다수이고, 극단값은 소수만 나오는 것이 자연스러운 분포다.

문제는 콘텐츠 관점이었다. 리더보드를 열었을 때 모두가 비슷한 점수를 받고 있으면, 그 표에서 무엇을 읽어야 하는지 알기 어렵다. 좋은 투수의 구위가 더 돋보이게 만들 방법이 필요했다. 그래서 손댄 것이 점수 체계, 그중에서도 스케일링 방식이었다.

2. Probit이라는 선택

Probit 스케일링은 한마디로 점수 분포의 양 끝을 더 넓게 펴는 방식으로 이해하면 된다. 가운데 몰려 있던 값들은 대체로 가운데에 남고, 이미 위쪽에 있던 값들은 더 위로 밀려 올라간다. 상위권을 눈에 띄게 만들고 싶다는 목표에는 잘 맞아 보이는 선택이었다.

여기서 한 가지 짚어둘 점이 있다. 스케일링은 측정을 바꾸는 작업이 아니라, 이미 측정된 값을 읽는 단위를 바꾸는 작업이다. 모델이 뽑아낸 원시 신호는 그대로 두고 그 위에 눈금을 얹는 것이다. 그래서 눈금을 잘못 고르면 측정이 틀린 것처럼 보이는 결과가 나온다. 실제로 그렇게 됐다.

여기서 z-score와의 차이가 드러난다. z-score는 점수를 새로 만들어내지 않는다. 이미 나온 원시 신호가 평균에서 얼마나 떨어져 있는지를 그대로 옮겨 적기만 한다. 그래서 투수들의 순서가 바뀌지 않고, 값 사이의 간격도 비율이 유지된다. 반면 분포를 억지로 펴는 방식은 원시 신호의 순서는 지켜도 간격은 마음대로 바꿔 놓는다. 이 차이가 나중에 결정적인 문제로 돌아왔다.

3. 173점과 20점이 동시에 나왔다

시즌이 얼마 되지 않은 시점에서 결과를 확인했고, 기대와는 전혀 다른 숫자가 나왔다. K-Stuff+ 173점짜리 투수와 20점짜리 투수가 등장했다. 100을 리그 평균으로 두는 스케일에서 173과 20은 해석이 불가능한 값이다.

원인은 스케일 자체가 아니라 스케일을 얹는 방식이었다. 그때 잡았던 기준 표준편차가 1.54였다. 표준편차가 이렇게 작으면, 원시 점수 1점 차이가 공개 점수로는 9.7점 차이로 증폭된다. 작은 차이가 순위표에서는 거대한 격차처럼 보이게 되는 구조다. 데이터가 충분히 쌓이지 않은 상태에서는 그 흔들림이 더 크게 드러난다.

증폭은 위쪽만 키우지 않는다. 아래쪽도 같은 비율로 끌어내린다. 그래서 평균 아래에 있는 투수가 실제 모습보다 훨씬 나쁜 투수처럼 보이는 부작용도 함께 생긴다. 점수 하나가 173이 되고 다른 하나가 20이 되는 순간, 그 표는 더 이상 투수를 비교하는 도구가 아니다.

4. MLB 모델 세 곳을 확인하고 Probit을 걷어냈다

바로 고치지 않고 먼저 확인했다. MLB에서 쓰이는 모델 세 곳을 조사했고, 그중 Probit을 쓰는 곳은 단 하나도 없었다. 확인이 끝나자 즉시 Probit을 제거했다. 173점과 20점은 그렇게 사라졌다.

여기서 얻은 교훈은 단순하다. 분포를 예쁘게 보이게 만드는 일은 지표의 목적이 아니다. 지표의 목적은 비교다. 서로 다른 투수를 놓고 "누가 더 낫고 얼마나 차이가 나는가"를 흔들림 없이 말할 수 있어야 한다. 이 기준을 통과하지 못한 스케일은 아무리 보기 좋아도 쓸 수 없다.

시점변경 내용결과
첫 배포대부분 90~105 구간에 집중변별력 부족
Probit 시도상위권을 돋보이게 하려고 스케일 확대표준편차 1.54, 173점과 20점 발생
Probit 제거MLB 모델 3곳 모두 미사용 확인 후 즉시 제거극단값 소멸
2026-04-03K-Stuff+, K-Location+ 전 지표 z-score 전환평균과 표준편차 기반으로 통일
2026-06-19100 ± z × 5 체계로 재정규화해석 단위 5점 간격 확정

5. 왜 100이 리그 평균이어야 하는가

2026년 4월 3일, K-Stuff+와 K-Location+ 전 지표에 z-score 스케일링을 적용했다. z-score는 어떤 값이 평균에서 표준편차 몇 개만큼 떨어져 있는지를 나타내는 숫자다. 여기에 100과 5를 얹으면, 100이 리그 평균이고 표준편차 하나가 5점인 스케일이 된다.

공개 점수 = 100 + z × 5
점수의미
100리그 평균 수준
105+1 표준편차, 상위 약 16%
110+2 표준편차, 상위 약 2%
95-1 표준편차, 하위 약 16%

이 체계에서는 점수 하나만 봐도 그 투수가 리그에서 어디쯤인지 바로 읽힌다. 173이나 20처럼 해석이 불가능한 값이 나올 자리도 없다. 팀을 넘어 투수를 비교하고, 시즌을 넘어 변화를 추적하려면 공통 눈금이 필요하다. 100 기준 스케일이 필요한 이유가 이것이다.

2026년 6월 19일에는 최종 공개 점수를 100 ± z × 5 체계로 재정규화했다. 원시 모델 구조는 그대로 두고 사용자 해석 단위만 5점 간격으로 맞춘 작업이다. 모델을 다시 만든 것이 아니라, 이미 있는 모델에 읽기 쉬운 눈금을 씌운 것이다. 이때 확인된 K-Stuff+의 시즌간 안정성(stickiness)은 0.80이다. 스케일은 값을 읽는 방식에 관한 문제이고, 측정 대상은 그대로 남는다는 것을 보여주는 숫자다.

지표를 읽는 사람은 대개 숫자 하나만 본다. 그 숫자가 무엇을 기준으로 한 값인지가 공유되지 않으면, 같은 점수를 놓고도 서로 다른 이야기를 하게 된다. 리그 평균을 100으로 고정하는 일은 그래서 통계의 문제이면서 동시에 소통의 문제다. 눈금을 맞추는 데 시간을 들인 이유도, 결국 같은 표를 보는 사람들이 같은 결론에 도달하게 만들기 위해서였다.

6. 정리하며

Probit은 좋은 투수의 구위를 돋보이게 하려던 시도였고, 결과적으로 173점과 20점을 만들었다. z-score 전환은 그 실패를 되돌린 작업이고, 100 ± z × 5 재정규화는 해석 단위를 정리한 작업이다. 스케일은 값을 예쁘게 만드는 도구가 아니라, 비교를 가능하게 하는 약속이라는 것이 이 과정에서 남은 결론이다.

K-Stuff+와 K-Location+의 정의, 피처 구성, 검증 지표는 K-Stuff+ 가이드에 정리해 두었다. Probit 회고와 VAA 교란 제거 항목도 같은 문서에 있다.

실제 점수는 K-Stuff+ 리더보드에서 볼 수 있다. 점수를 읽을 때는 100이 기준선이라는 사실만 기억하면 된다. 105는 상위 약 16%, 110은 상위 약 2%다.