KBO Hitter Type Analyzer
데이터를 바탕으로 KBO 타자 유형을 분석하는 프로젝트입니다.
AI 비지도 학습을 이용한 KBO 타자 유형 분석
- 프로젝트명: IRIS KBO 타자 유형 분석
- 기간: 2026년 IRIS 방학 프로젝트
- 역할: Developer
- 분야: AI / Data Analysis / Desktop Application
- 사용 기술: Python, Tkinter, Requests, BeautifulSoup, Scikit-learn, K-Means, StandardScaler, Threading, PyInstaller
- 데이터 출처: KBO 공식 기록실
야구를 좋아해서 평소에도 선수들의 타율, 홈런, OPS 같은 기록을 자주 찾아보곤 했다. 그런데 기록을 보다 보니 단순히 타율이 높은 선수와 홈런이 많은 선수를 보는 것에서 끝나는 것이 아니라, 여러 기록을 함께 보면 선수마다 다른 타격 스타일이 보인다는 생각이 들었다.
예를 들어 타율은 높지만 홈런이 많지 않은 선수도 있고, 타율은 조금 낮아도 홈런과 OPS가 높은 선수도 있다. 이런 선수들을 단순히 한 가지 기록으로만 비교하기보다는 여러 기록을 함께 사용해서 비슷한 유형끼리 나눠보면 재미있을 것 같았다. 그래서 2026년 IRIS 방학 프로젝트로 KBO 타자 유형 분석 프로그램을 만들게 됐다.
목표: 최신 KBO 기록을 수집해 비슷한 타격 특성을 가진 선수끼리 자동으로 분류하고, 결과를 쉽게 확인할 수 있는 프로그램 만들기
처음에는 내가 직접 기준을 만들어서 선수를 교타자형, 장타자형으로 나누려고 했다. 예를 들어 타율이 일정 수치 이상이면 교타자형, 홈런이 많으면 장타자형처럼 분류할 수도 있었다. 하지만 그렇게 하면 결국 내가 미리 정한 기준에 맞춰 선수를 나누는 것뿐이라고 생각했다.
그래서 이 프로젝트에서는 선수 유형의 정답을 미리 입력하지 않는 비지도 학습 방식을 사용했다. 비지도 학습은 “이 선수는 장타자형이다” 같은 답을 알려주지 않고, 선수들의 실제 기록만 보고 비슷한 특징을 가진 선수끼리 자동으로 묶는 방식이다. 그중에서도 K-Means 알고리즘을 사용해서 선수들을 두 개의 군집으로 나누었다.
데이터는 2025시즌 기록이나 통산 기록을 사용하지 않고, 반드시 2026시즌 KBO 정규시즌 현재까지 누적된 기록만 사용하도록 구성했다. 또한 프로그램을 실행할 때마다 KBO 공식 기록실에 접속해서 최신 기록을 다시 수집하도록 만들었다. 이미 저장된 오래된 데이터를 사용하는 것이 아니라, 실행 시점에 가능한 최신 기록을 가져오는 방식이다.
수집한 주요 기록은 타율, 홈런, OPS, 볼넷, 삼진이다. 이 다섯 가지 기록을 K-Means 학습에 사용했다. 추가로 경기 수, 타석, 안타, 타점, 출루율, 장타율도 함께 수집해서 사용자가 선수를 검색했을 때 더 많은 정보를 확인할 수 있도록 만들었다.
프로그램을 만들면서 가장 먼저 어려웠던 부분은 데이터 수집이었다. 처음에는 KBO 기록실의 타자 순위 표 하나만 가져오면 될 거라고 생각했다. 하지만 등번호, OPS, 볼넷, 삼진 같은 정보는 기본 기록 표에 모두 들어 있지 않았고, 선수별 세부 기록 페이지에서 따로 확인해야 하는 경우가 있었다.
그래서 기본 기록 페이지에서 선수 이름과 선수 ID를 가져오고, 각 선수의 세부 기록 페이지에 다시 접속해서 필요한 기록을 수집하도록 만들었다. 선수 수가 많기 때문에 한 명씩 순서대로 가져오면 시간이 오래 걸릴 수 있었다. 이를 해결하기 위해 여러 선수의 기록을 동시에 가져오는 방식을 사용했다. 이 과정에서 인터넷 요청, HTML 구조, 페이지마다 다른 데이터 위치 같은 부분을 직접 확인하면서 웹 데이터 수집이 생각보다 복잡하다는 것을 느꼈다.
수집한 데이터를 바로 K-Means에 넣지는 않았다. 타율은 0.2나 0.3처럼 작은 소수점 값이고, 홈런이나 삼진은 수십 단위의 숫자다. 이런 상태로 학습하면 삼진이나 홈런처럼 숫자가 큰 기록이 분석에 더 큰 영향을 줄 수 있다. 그래서 StandardScaler로 모든 기록을 같은 기준으로 변환한 뒤 K-Means를 실행했다.
K-Means는 선수들의 기록을 기준으로 두 개의 군집을 만들지만, 그 결과를 바로 “교타자형”, “장타자형”이라고 알려주지는 않는다. 단순히 0번 군집, 1번 군집처럼 나눠준다. 그래서 각 군집의 평균 홈런과 평균 OPS를 계산해서, 평균 홈런과 OPS가 더 높은 군집을 장타자형으로 해석했다. 반대 군집은 상대적으로 교타자형으로 표시했다.
중요: 교타자형·장타자형이라는 답을 모델에 미리 넣지 않았다. 기록만으로 군집을 만든 뒤, 평균 홈런과 OPS를 바탕으로 사람이 결과를 해석했다.
여기서 중요한 점은 교타자형과 장타자형이라는 라벨을 학습 데이터에 넣지 않았다는 것이다. 모델이 유형명을 외워서 맞힌 것이 아니라, 기록만 보고 비슷한 선수끼리 나눈 뒤 결과를 분석해서 의미를 붙인 것이다. 이 과정을 통해 비지도 학습은 정답을 맞히는 것보다 데이터 속의 패턴을 발견하는 데 활용할 수 있다는 점을 알게 됐다.
프로그램 화면은 Tkinter를 사용해서 만들었다. 사용자가 선수 이름을 입력하면 해당 선수의 팀, 등번호, 타율, 홈런, OPS, 볼넷, 삼진을 확인할 수 있고, 분석 결과로 나온 선수 유형도 함께 볼 수 있다. 처음에는 단순히 콘솔 창에 결과를 출력하는 방식도 생각했지만, 다른 사람이 사용하기에는 화면이 있는 프로그램이 더 편할 것 같았다.
그래서 선수 정보는 카드 형태로 보여주고, 타율·홈런·OPS·볼넷·삼진은 각각 따로 강조해서 표시했다. 또한 프로그램을 실행할 때 데이터 수집 중이라는 상태를 보여주고, 수집 날짜와 수집된 선수 수도 화면에 표시하도록 만들었다. 최종적으로는 PyInstaller를 사용해서 Python이 설치되지 않은 환경에서도 실행할 수 있는 .exe 파일로 변환했다.
이 프로젝트를 하면서 단순히 K-Means 코드를 작성하는 것보다 그 앞뒤 과정이 더 중요하다는 것을 느꼈다. 정확한 데이터를 어디서 가져올지, 데이터를 어떻게 정리할지, 서로 크기가 다른 기록을 어떻게 비교할지, 분석 결과를 어떤 기준으로 해석할지까지 모두 고민해야 했다.
또한 AI는 데이터를 넣으면 자동으로 완벽한 답을 만들어주는 기술이 아니라는 것도 알게 됐다. K-Means가 만든 군집 결과를 보고 어떤 의미를 부여할지 결정하는 과정에는 사람의 해석이 필요했다. 그래서 데이터 분석에서는 모델을 사용하는 능력뿐 아니라 결과를 이해하고 설명하는 능력도 중요하다고 느꼈다.
IRIS 프로젝트는 내가 좋아하는 야구와 AI를 연결해서 직접 만들어본 프로젝트다. 처음에는 선수 기록을 나눠보자는 단순한 생각에서 시작했지만, 실제 데이터를 수집하고, 전처리하고, 머신러닝 모델을 적용하고, 프로그램 화면과 실행 파일까지 만드는 경험으로 이어졌다.
앞으로는 타자 기록뿐 아니라 투수 기록, 수비 기록, 시즌별 기록 변화도 함께 분석해보고 싶다. 또한 군집을 두 개가 아니라 더 다양하게 나누거나, 선수별 그래프와 비교 기능을 추가해서 더 발전된 스포츠 데이터 분석 프로그램으로 만들어보고 싶다.