4. 01 문제정의 및 데이터 파악
문제1 : KBO 배럴 정의
MLB에 따르면, 배럴 타구는 평균적으로 타율 0.5, 장타율 1.5 이상을 생산하는 잘 맞은 타구를 말한다.
미국 선수들의 타구 데이터로 배럴 타구 기준을 세운 결과,
타구 속도가 98마일 이상인 동시에 발사각이 26~30°인 타구 등이 배럴 타구로 정해졌다.
그러나 이러한 기준은 미국 선수들을 기준으로 정해 졌기에 한국 프로 야구 배럴 기준으로 삼기에는 부적절하다.
우리는 평균적으로 ‘타율 0.5, 장타율 1.5 이상’ 을 생산한다는 MLB의 배럴 타구 정의를 그대로 사용하되,
구체적으로 한국 프로야구 토양에 맞는 배럴 존을 정의하기로 했다.
1) 문제 정의
5. 01 문제정의 및 데이터 파악
1) 문제 정의
SLG와 OBP를 각각 예측한 뒤, 이를 합한 값을 OPS 예측값으로 한다.
(예외: VAR 모형은 OPS를 직접 예측하는 것이 정확도가 높아,
SLG 예측값과 OBP 예측값을 합한 값이 아닌 OPS를 직접 예측한 값을 채택함.)
문제2 : KBO 배럴 기준 기반으로 타자 성적 예측 모형 개발
타자 성적 예측에 주로 이용되는 세이버 매트리스 지표와
앞서 정의한 배럴 기준으로 도출한 배럴 타구 지표를 이용하여
2021 프로야구 정규시즌 중 9월 15일 ~ 10월 8일 간
선수 10명의 OPS, SLG, OBP 예측
6. 01 문제정의 및 데이터 파악
선수
2018 ~ 2021
타자 기본
2018 ~ 2021
HTS
2018 ~ 2021
팀
2016-2021
경기일정
2021
2) 기본 제공 데이터
선수 기본 정보 선수 시즌 기록
PA, SLG, HR, …
선수 타구 결과
각도∙속도
팀 ID : 팀 이름
KBO 경기일정
* 9월 15일 ~ 10월 8일
경기 정보
7. 01 문제정의 및 데이터 파악
STATIZ 10명 선수의 경기별
(2018-2021.09.14)
기록데이터
2) 크롤링 데이터
STATIZ 선수 연도별(2020-2014)
기록 데이터
9. 02 배럴(Barrel) 타구 기준
배럴(Barrel hit) 타구란?
MLB는 ‘평균적으로 타율 0.5, 장타율 1.5 이상을 생산하는 타구‘ 를 배럴 타구라
한다.
배럴존 (Barrel Zone) 이란?
배럴 타구를 판단하는 배럴 존(Barrel Zone) 이라는 구체적인 발사각도와 발사
속도 기준
MLB의 배럴 기준
발사속도 최소 98mph부터 시작하고, 해당 속도에서는 발사각이 26~30-도가
만들어질 경우 배럴 타구로 정의된다. 100mph~116mph까지 1mph증가할
때마다 배럴 타구가 만들어지는 타구 발사각도의 범위가 2~3도 증가하는 것으로
알려져 있다.
한국형 배럴 존 정립의 필요성
한국의 선수들과 미국 타자들의 신체조건 등의 차이로 인해
타구 분포의 차이가 발생하여 MLB의 배럴존을 KBO에 직접 적용하기 어려움
1) 배럴 타구 기준 목표
→평균타율 0.5, 평균 장타율 1.5를 생산하는 한국형 배럴 존 정립을 목표로 삼음
10. 02 배럴(Barrel) 타구 기준
4개년의 HTS데이터 활용하여
• 타구 각도와 속도의 모든 조합 &그에 따른 타구 결과 시각화
• 발사속도와 발사각도에 따라 타구 결과가 달라지는 패턴 확인
• 속도와 각도 조합으로 배럴 존을 고안하는 것의 타당성 검증
2) EDA : 타구속도와 타구각도에 따른 타구결과 시각화
X축 : 발사속도
Y축 : 발사각도
11. 02 배럴(Barrel) 타구 기준
‘장타율’과 ‘타율’은 한 사람의 타석 수, 타수에서 유의미한 타구 개수 비율을 산출하여 만들어낸 지표
해당타구와 속도 조합에서 ‘평균적으로’ 발생하는 장타율과 타율을 계산하기 위해서는 장타율과 타율의 재해석이 필요하다.
아래 그림과 같이 장타율과 타율을 계산하였다.
타구속도
ex) 135~140
타구각도
ex) 30~30.5
ex)
해당 발사각도와 발사 속도 조합에서
장타율의 경우
1∗2+2∗2+3∗2+4∗2
10
= 2.0
타율의 경우
8
10
= 0.8
* Grid에 속한 타구 개수가 5개 미만이면 해당 Grid Cell은 제외
(타구가 5개 미만인 각도와 속도의 조합은 분석에 의미가 없다고 판단)
1루타
2루타
3루타
4루타
아웃타구
12. 02 배럴(Barrel) 타구 기준
Grid Search 알고리즘에서 착안하여 평균적으로 타율 0.5를 생산하는 타구발사각도와 속도 조합을 찾았다.
1. 4년간 타구 데이터의 최저 속도, 최고 속도를 찾고, 그 사이의 범위를 5km/h간격으로 쪼갠다.
2. 4년간 타구 데이터에서 최저 발사각도, 최대 발사각도를 찾고 그 사이의 범위를 0.5도 간격으로 쪼갠다.
3. 위와 같은 방식으로 속도와 각도를 쪼개면 여러 속도와 각도 조합을 가진 Grid Cell이 생성된다.
해당 Grid Cell에서 타율계산에 필요한 타구결과의 개수를 파악하여 해당 속도와 각도 조합의 타율을 계산한다.
* Grid에 속한 타구의 개수가 5개 미만이면 해당 Grid Cell은 계산하지 않는다. (5개 미만인 타구와 속도 조합 분석은 의미가 없다고 해석함)
3) 타율(BA) 0.5이상을 생산하는 발사 속도와 발사 각도 조합 찾기
13. 02 배럴(Barrel) 타구 기준
3) 타율(BA) 0.5이상을 생산하는 발사 속도와 발사 각도 조합 찾기
4개년 HTS 데이터 활용하여,
• 모든 발사 각도와 발사 속도 조합에서 타율을 계산하였고,
그 중 타율 0.5 이상을 넘긴 발사 속도와 발사 각도 조합
을 시각화 하였다.
• 시속 150km/h 미만에서는 속도가 증가할수록 타율
0.5를 생산하는 타구발사각도가 낮아지는 경향을 보인
다.
• 시속 150km/h 이상에서는 타율 0.5를 생산하는 타구
발사 각도의 범위가 큰 폭으로 증가하고, 속도가 빨라질
수록 0.5를 생산할 수 있는 발사각도가 선형적으로 증가
함을 관찰하였다.
발사 속도(HIT_VEL)
발사
각도(HIT_ANGLE)
색 : 타율
타율 0.5를 만드는 발사 속도와 각도 조합 시각화
14. 02 배럴(Barrel) 타구 기준
Grid Search 알고리즘에서 착안하여 평균적으로 장타율 1.5를 만드는 타구발사각도와 속도 조합을 찾았다.
1. 4년간 타구 데이터의 최저속도, 최고 속도를 찾고, 그 사이의 범위를 5km/h간격으로 쪼갠다.
2. 4년간 타구 데이터에서 최저발사각도, 최대 발사각도를 찾고 그 사이의 범위를 0.5도 간격으로 쪼갠다.
3. 위와 같은 방식으로 속도와 각도를 쪼개면 여러 속도와 각도 조합을 가진 Grid Cell이 생성된다.
해당 Grid Cell에 속한 타구 결과 (1루타, 2루타, 3루타, 홈런)의 개수를 파악하여 해당 속도와 각도 조합의 장타율을 계산한다.
4) 평균적으로 장타율(SLG) 1.5이상을 만드는 발사 속도와 발사 각도 조합 찾기
15. 02 배럴(Barrel) 타구 기준
4) 평균적으로 장타율(SLG) 1.5이상을 만드는 발사 속도와 발사 각도 조합 찾기
• 4개년의 HTS 데이터를 활용하여 모든 발사 각도와 발사
속도 조합에서 발생한 타구 결과로 장타율을 계산
• 그 중 장타율 1.5이상인 발사 속도와 발사 각도 조합을 시
각화
• 발사속도가 5km/h씩 증가함에 따라 장타율 1.5이상을 넘
기게 하는
발사 각도의 범위가 증가
발사 속도(HIT_VEL)
발사
각도(HIT_ANGLE)
색 : 장타율
장타율 1.5를 만드는 발사 속도와 각도 조합 시각화
16. 02 배럴(Barrel) 타구 기준
평균 장타율 1.5, 평균 타율 0.5 이상
을 생산하는 속도와 각도 조합에서 중
복되는 속도와 각도의 조합을
한국형 배럴존으로 채택한다.
시각화 결과,
B(=평균 장타율 1.5이상을 만들어내
는 속도와 각도 조합)가
A(=평균 타율 0.5이상을 만들어 내는
발사 속도,각도 조합)에포함됨
>> B이면 A를 자동으로 만족함
>> 배럴존 결정에 A와 B 중 B만 고려
해도 됨
평균 장타율 1.5이상을 생성하는 발사 속도와 각도 조합을 배럴 존으로 정한다.
B. 장타율 1.5를 만드는 발사 속도와 각도 조합
A. 타율 0.5를 만드는 발사 속도와 각도 조합
5) 타율 0.5, 장타율 1.5 를 생산하는 타구 속도와 각도 조합의 겹치는 부분 찾기
17. 02 배럴(Barrel) 타구 기준
6) 배럴존 시작 속도 제시
발사 속도(HIT_VEL)
발사
각도(HIT_ANGLE)
EDA INSIGHT
1. 평균 타율 >= 0.5인 타구:
150km/h를 기준으로
생성되는 발사각도의 범위가
큰 폭으로 넓어진다
2. 평균 장타율 >= 1.5인 타구:
발사속도145km/h 이상부터
생성된다
타율 0.5를 만드는 타구 발사 속도 각도 조합 장타율 1.5를 만드는 발사 속도와 각도 조합
발사
각도(HIT_ANGLE)
발사 속도(HIT_VEL)
18. 02 배럴(Barrel) 타구 기준
6) 배럴존 기준 속도 제시
“배럴 존이 시작되는 속도 : 150km/h Why”
첫번째 근거
‘평균 장타율 1.5 생산하는 발사 속도 각도 조합’ 그래프를 보면,
타구 속도150km/h 미만에서는 장타율 1.5이상이 비교적 불연속적으로 발생한다.
두번째 근거
‘평균타율 0.5 생산하는 발사 속도, 각도 조합’ 그래프를 보면, 발사속도 150km/h 이상을 기준으로 평균
적으로 장타율 1.5를 생산해내는 발사각도의 범위가 뚜렷하게 늘어남을 관찰할 수 있다.
19. 02 배럴(Barrel) 타구 기준
평균 장타율 1.5이상을 만드는 발사각도 검토결과
→ 한국형 배럴존의 각도 범위
• 발사속도 150km/h~155km/h
→ 발사각도 21.5도 ~ 36.0도이면 배럴 타구
• 발사속도 155km/h~160km/h
→ 발사각도 19.0도 ~ 40.0도이면 배럴 타구
• 발사속도 160km/h~165km/h
→ 발사각도 하한 10.5도 ~ 각도 상한선 추정필요
• 발사속도 165km/h~170km/h
→ 발사각도 하한 8.5도, 각도 상한선 추정필요
• 발사속도 170km/h 이상
→ 발사각도 상한과 하한은 추정필요
발사 속도(HIT_VEL)
발사
각도(HIT_ANGLE)
7) 배럴존 – 발사각도
데이터부족으로 발사각도 하한과 상한을
결정 할 수 없어 추정해야 하는 부분
20. 02 배럴(Barrel) 타구 기준
추정 방법
150km/h에서부터 5km/h씩증가 할 때마다 배럴 타구를 생
산하는 각도 범위가 선형적으로 증가하는 경향에서 착안하여,
선형회귀 방법으로 각도 범위를 추정
발사 속도(HIT_VEL)
발사
각도(HIT_ANGLE)
7) 배럴존 – 발사각도 추정
발사속도 165km/h 이상에서 배럴 타구를 만드는 발사각도의 상한 추정 필요
21. 02 배럴(Barrel) 타구 기준
7) 배럴존 – 발사각도 추정
선형 회귀 방법으로 각도 범위를 추정하는 코드
1. 5km/h씩증가하는 속도구간에서 각각 배럴 타구
가 만들어지는 각도 상한과 각도 하한을 파악
2. 위의 데이터를 바탕으로 속도가 한 단위(km/h)증
가함에 따라 선형적으로 증가하는 타구각도의 범
위를 선형회귀 모델로 포착
22. 02 배럴(Barrel) 타구 기준
7) 배럴 존 – 발사각도 추정
그 결과, 아래와 같은 회귀 직선을 구할 수 있었다.
• 발사속도 150km/h 부터 속도가 1km/h 증가 할 때 :
배럴 타구를 생산하는 발사각도는 대체적으로 아래로 0.95 도 씩 넓어짐
y(발사각도하한) = -0.95X(발사속도) + 164.5
• 발사속도 150km/h 부터 속도가 사이에서 속도가 1km/h 증가 할 때 :
배럴 타구를 생산하는 발사각도는 대체적으로 위로 0.6 도 씩 넓어짐
y(발사각도상한) = 0.6X(발사속도) -53.667
발사속도가 1km/h 증가할 때마다 배럴 타구가 형성되는 발사각도는 아래 위로 도합 1.55도 씩 넓어짐
23. 02 배럴(Barrel) 타구 기준
4) 한국형 배럴 타구 기준, 배럴 존 최종 결론
배럴 존 정의
배럴 타구를 평균적으로 타율 0.5, 장타율 1.5를 넘기는 타구라고 했을 때
배럴 타구가 만들어지는 구체적인 발사각도와 발사 속도의 조합을 배럴 존이라 한다.
배럴 타구 정의에 따른 한국형 배럴 존
• 발사속도 150km/h~155km/h 에서 발사각도 21.5도 ~ 36.0도이면 배럴 타구
• 발사속도 155km/h~160km/h 에서 발사각도 19.0도 ~ 40.0도이면 배럴 타구
• 발사속도 160km/h~165km/h 에서 발사각도 10.5도 ~ 45.3도이면 배럴 타구
• 발사속도 165km/h~170km/h 에서 발사각도 8.5도 ~ 48.3도이면 배럴 타구
• 발사속도 170km/h 이상부터는 발사속도가 1km/h 증가 할 때마다
배럴 존에 해당하는 발사각도의 범위의 하한이 0.95도 감소, 상한이 0.6도 증가하여 , 총 범위가 1.55도씩 증가한다.
25. 03 데이터 전처리 및 EDA
전처리 : Barrel 타구 개수 계산 및 변수 추가
1. Barrel 타구 기준에 맞춰 선수 별 Barrel 타구 개수 count : 타자기본 데이터에 Barrel 타구 개수 추가
2. barrel_ratio 계산
선수마다 타석에 오른 횟수가 다르다. 즉, 공을 칠 기회가 모든 선수에게 똑같지 않은 것
∴ 객관적인 ‘배럴 성적’을 비교하기 위해 배럴 개수를 타석수로 나눠준다
26. 03 데이터 전처리 및 EDA
전처리 : OBP, OPS 추가
데이터 내에 OBP와 OPS 변수는 존재하지 않는다!
- 선수 기록을 이용해 OBP와 OPS를 계산해준다
27. 03 데이터 전처리 및 EDA
전처리 : HIT_VEL median 변수 추가
타구의 질에 영향을 미치는 타구 속도와 OPS의 관계
선수 별 타구 속도 median 값 도출
선수의 1년 전 타구 속도의 중앙값(HIT_VEL_LAG1)과 OPS 분포 확인
타구 속도가 빠를수록 OPS도 높아지는 경향성 발견
HIT_VEL의 median 값을 변수로 추가하여, 예측에 활용
28. 03 데이터 전처리 및 EDA
EDA : 1년 전 선수 기본 지표와 1년 후 선수 OPS 상관관계 분석
과거 1년 전 선수 기록 중에서 과연 어떤 지표가 OPS
를 예측하는데 결정적인 역할을 하는지 시각화
과거 1년 전 기록과 당해 년도의 OPS가 어떠한 패턴
을 보인다면 예측에 용이할 것이다.
→ 선형상관계수를 수치적으로 파악 & 시각화
EDA 결과
과거 1년전 스탯들과 1년 후 OPS와 큰 선형상관
계를 보이는 스탯은 찾기 힘들었다.
29. 03 데이터 전처리 및 EDA
EDA : 외야수, 내야수 효과 (낙준)
타자를 포지션 별로 나누어 1년 전 선수 지표(OBP,
SLG, barrel_ratio)가 1년 후 OPS값과 어떤 관계
가 있는지 시각화 하였다.
그러나 타자 포지션에 따라 달라지는 패턴을 찾을 수
없었고, 타자 포지션이 OPS예측에 유의미한 변수는
아님을 파악함.
30. 03 데이터 전처리 및 EDA
STATIZ Crawling
• STATIZ 홈페이지 ‘기록실 > 시즌 기록실’ : 2000년 ~ 2021년 데이터 수집 (총 5811행)
• 팀명, 년도, 포지션 생성
• 기존 데이터 내의 PCODE 유지 : 크롤링 데이터의 동일 선수들에게는 동일 PCODE 부여
• 데이터를 수집하면서 생긴 새로운 선수들에게는 새로운 PCODE 생성
→ 선수 별로 기록을 구분하여 선수 별로 과거 기록을 알 수 있다!
크롤링 Why?
2018년 이전의 기록이
필요할 때 활용하고자 함
↓
유사성 기반 모델에 활용
31. 03 데이터 전처리 및 EDA
EDA : K –means Clustering
K-means Clustering 이란?
유사한 개체를 묶어서 군집을 생성하는 방법
각 군집은 하나의 중심(centroid)을 가짐
각 개체는 가장 가까운 중심에 할당되며, 같은 중심에 할당된 개체들이 모여 하나의 군집 형성
K개의 중심을 임의로 생성 → 생성된 중심을 기준으로 모든 관측치에 군집 할당 →
각 Cluster 의 중심을 다시 계산 → 중심이 변하지 않을 때까지 위의 2~3의 과정을 반복
과거 3년 간의 SLG, OBP 기록만으로 선수들을 군집으로 분류할 수 있을까?
→ 같은 군집인 선수들의 SLG ∙ OBP 기록이 유사하다면 다음 년도의 기록도 유사할 것이다
32. 03 데이터 전처리 및 EDA
EDA : K –means Clustering
군집 분류 후 scatter plot으로 2019년 시즌, 2020년 시즌, 2021년 전반 SLG(X축)과 OBP(Y축) 분포 확인
→ 같은 군집의 선수끼리 유사한 분포를 보인다 ∴ SLG와 OBP의 과거 기록을 예측에 활용할 수 있을 것
군집 분류된 결과를 명목형 변수로 추가하여 모델 적용 : RMSE값에 영향 X ( ∴ 최종 모델에는 활용 X)
→ 모델 자체적으로 여러가지 변수를 고려하여 예측하면서
cluster처럼 유저 별 특징을 추출하는 효과를 주게 된 것으로 보인다.
33. 03 데이터 전처리 및 EDA
전처리 : LAG 변수 생성
성적 예측 시 과거의 선수 기록을 이용하고자 함
선수 기록 (GAMENUM, PA, AB, BA, HIT, HR, TOTB, SLG, SF, BB, KK, IB, HP, GD, OPS, OBP)
→ 1년 전(LAG1), 2년 전(LAG2), 3년 전(LAG3) 의 기록 column 추가
NAME GYEAR OPS SLG OBP OPS_LAG1 SLG_LAG1 OBP_LAG1
강백호 2020 0.955 0.544 0.411 0.910 0.495 0.415
SLG_LAG3 OBP_LAG3
…
예시)
2019년의 OPS, SLG, OBP
+ 즉, Train 데이터 폼을 생성한 것
2020년 행에는
LAG3 가 없음
(2017년의 데이터가
존재하지 않는다)
34. 03 데이터 전처리 및 EDA
전처리 : LAG 변수 생성
성적 예측 시 과거의 선수 기록을 이용하고자 함
선수 기록 (GAMENUM, PA, AB, BA, HIT, HR, TOTB, SLG, SF, BB, KK, IB, HP, GD, OPS, OBP)
→ 1년 전(LAG1), 2년 전(LAG2), 3년 전(LAG3) 의 기록 column 추가
NAME GYEAR OPS SLG OBP OPS_LAG1 SLG_LAG1 OBP_LAG1
강백호 2020 0.955 0.544 0.411 0.910 0.495 0.415
SLG_LAG3 OBP_LAG3
…
예시)
2019년의 OPS, SLG, OBP
+ 즉, Train 데이터 폼을 생성한 것
2020년 행에는
LAG3 가 없음
(2017년의 데이터가
존재하지 않는다)
LAG3를 포함하려면 적어도 2017년 기록이 필요하다
하지만 크롤링을 통해 생성한 2017년 기록에는 Barrel 지표가 없다
따라서 Barrel 변수를 활용하는 모델은 LAG3 사용 X
↓
과거 2년 간의 기록으로 다음 시즌의 기록을 예측!
35. 03 데이터 전처리 및 EDA
전처리 : LAG 변수 생성
성적 예측 시 과거의 선수 기록을 이용하고자 함
선수 기록 (GAMENUM, PA, AB, BA, HIT, HR, TOTB, SLG, SF, BB, KK, IB, HP, GD, OPS, OBP)
→ 1년 전(LAG1), 2년 전(LAG2), 3년 전(LAG3) 의 기록 column 추가
NAME GYEAR OPS SLG OBP OPS_LAG1 SLG_LAG1 OBP_LAG1
강백호 2020 0.955 0.544 0.411 0.910 0.495 0.415
SLG_LAG3 OBP_LAG3
…
예시)
2019년의 OPS, SLG, OBP
+ 즉, Train 데이터 폼을 생성한 것
2020년 행에는
LAG3 가 없음
(2017년의 데이터가
존재하지 않는다)
모델 학습을 위한 Train 데이터
2019, 2018 기록으로 2020년 SLG, OBP 예측
Test 데이터
2020, 2019 기록으로 2021년 전반 SLG, OBP 예측
최종 예측
2021년 전반, 2020 기록으로 최종 예측
크롤링 데이터는 Barrel 지표를 사용하지 않는 모델에 이용하여,
3년 간의 과거 기록으로 향후 성적을 예측하도록 학습할 수 있음
36. 03 데이터 전처리 및 EDA
전처리 : 결측치 채우기
Lag 변수 생성 → 1년 전, 2년 전의 기록이 없는 선수 존재, 결측치 다수
결측치 제거 시 학습 데이터의 수가 현저히 적어짐 ∴ Imputation필요
Imputation방법
1. 선수 평균 : 선수 개인의 기록 반영
2. (선수 평균 + 시즌 평균) /2 : 선수 개개인의 기록 뿐 아니라, 해당 시즌의 흐름을 반영
모델 학습에 두 가지 방법 모두 적용 → 모델 별로 RMSE가 더 낮은 방법 사용
38. 04 예측 모델 선정 검증
모든 모델에 대해 1. 선정이유 2. 훈련결과(MSE 등) 제시
• MARCEL
선정 모델
트리 계열 모형 유사도 기반 모형
시계열 & 딥러닝 모형
• Random forest
• XGBoost
• VAR
• LSTM
기타 모형
• 유사도 기반 자체 알고리즘
• KNN
39. 04 예측 모델 선정 검증
모델링 과정
1. 데이터 선택 및 전처리
2. 변수 선정
3. 모델의 최적 하이퍼파라미터 탐색
4. 최종 model fit
40. • Random feature selection : 데이터의 여러 변수를 모두 고려하면서도 예측하려는 값을
가장 잘 예측하는 변수를 찾아 결정 트리 형성
• 모집단(전체 데이터)에서 무작위 복원 추출 : 여러 개의 학습 데이터 표본 생성
→ 샘플의 다양화로 개별 트리의 다양성 극대화 : 과적합 방지
트리 계열 - Random Forest
RMSE
SLG : 0.07850149712848965
OBP : 0.042991857971427225
04 예측 모델 선정 검증
데이터
선정이유
Test 결과
타자 기본_2018, 2019, 2020, 2021 데이터
• Barrel, 선수 별 기록 LAG1, LAG2 계산
• 결측치 처리 : SLG – 선수 평균, OBP – 선수 평균 및 시즌 평균
• 추가 변수
- SLG : 선수 나이
- OBP : HIT_VEL median
변수 선정
41. 트리 계열 - XGBoost
04 예측 모델 선정 검증
• 회귀에서 뛰어난 예측 성능을 보임 : XGBoost의 장점과 과거 선수의 기록을 바탕으로 다음 년도의
기록을 예측하려는 모델 생성 의도가 합치
• 여러 개의 약한 모델을 결합시켜 단점을 보완하고 그 결과 종합 &
내장된 과적합 방지 기능 ∙ 교차 검증 기능 : 적은 양의 학습 데이터로도 overfitting 없이 예측 가능
데이터
선정이유
Test 결과
변수 선정 • Barrel, 선수 별 기록 LAG1, LAG2 계산
• 결측치 처리 : 선수 기록 평균
• 추가 변수 : Age, HIT_VEL median
RMSE
SLG : 0.08101615679
OBP : 0.04402726127
타자 기본_2018, 2019, 2020, 2021 데이터
42. 추천시스템알고리즘을 공부하면서 알게 된 Collaborative Filtering 알고리즘을 야구 스탯 예측에 적용해 보았다.
해당 알고리즘을 시도해본 계기는 다음 물음에서 출발했다.
역대 과거 선수들과 예측하려는 선수들의 과거 3개년 데이터가 유사하다면 역대 선수들의 다음해 값으로 예측하려는 선수들
의 이듬해 값을 예측할 수 있지 않을까?
그리고, MLB에서 유명한 야구 예측 시스템인 PECOTA도 비슷한 원리를 사용한다고 하여 시도해 보았다.
알고리즘은 다음과 같다.
2000~2021년도 까지 STATIZ에서 연간 선수 별 지표 데이터를 사용한다.
1. 예측하려는 선수들의 1,2,3년전 까지의 OPS, OBP, SLG와 역대 야구 선수들의 3년간의 지표의 유사도를 피어슨 상관계
수로 계산한다.
2. 예측하려는 선수들과 가장 높은 유사도를 보이는 선수 5명을 찾는다.
3. 과거 3년간의 데이터를 기준으로 유사도가 가장 높았던, 과거 5명의 선수들의 이듬해 선수지표를 예측 선수와의 유사도
로 가중 평균 하여 예측한다.
유사도 기반 예측 모델 (자체 알고리즘)
04 예측 모델 선정 검증
선정이유
43. 1. 예측하려는 선수들의 1,2,3년전 까지의 OPS, OBP, SLG와 역대 야구 선수들의 3년간의 지표의 유사도를 피어슨 상
관계수로 계산하여, 상관계수 행렬을 만든다.
2. 예측하려는 선수들과 가장 높은 유사도를 보이는 선수 5명을 찾는다.
유사성 기반 예측 모델(자체 알고리즘)
04 예측 모델 선정 검증
코드 일부
44. 3. 과거 3년간의 데이터를 기준으로 유사도가 가장 높았던, 과거 5명의 선수들의 이듬해 선수지표를 예측 선수와의 유
사도로 가중 평균 하여 예측한다.
유사도 기반 예측 모델(자체 알고리즘)
04 예측 모델 선정 검증
사용 수식
45. 예측하려는 10명의 선수들의 2018,2019,2020년 3개년의 스탯과 역대 선수들의 3년간의 스탯을 비교하여 유사한 선
수 5명을 구했다.
이후 과거 유사한 선수들의 이듬해 스탯으로 예측하려는 10명의 선수들의 2021년 전반기 스탯 예측을 하고, 실제
20121년 전반기 스탯과 비교하여 RMSE를 계산하였다.
유사도 기반 예측 모델(자체 알고리즘)
04 예측 모델 선정 검증
Train & Validation
RMSE
OBP : 0.0500
SLG : 0.0766
OPS : 0.1181
2021년 전반기 스탯 예측 Test 결과
46. 트리 계열 - XGBoost
04 예측 모델 선정 검증
• 회귀에서 뛰어난 예측 성능을 보임 : XGBoost의 장점과 과거 선수의 기록을 바탕으로 다음 년도의
기록을 예측하려는 모델 생성 의도가 합치
• 여러 개의 약한 모델을 결합시켜 단점을 보완하고 그 결과 종합 &
내장된 과적합 방지 기능 ∙ 교차 검증 기능 : 적은 양의 학습 데이터로도 overfitting 없이 예측 가능
데이터
선정이유
Test 결과
변수 선정 • Barrel, 선수 별 기록 LAG1, LAG2 계산
• 결측치 처리 : 선수 기록 평균
• 추가 변수 : Age, HIT_VEL median
RMSE
SLG : 0.08101615679
OBP : 0.04402726127
타자 기본_2018, 2019, 2020, 2021 데이터
47. 유사성 기반 모형 – KNN (K 최근접 이웃) 회귀
LAG1, LAG2, LAG3
POSITION 제외
결측치 drop
04 예측 모델 선정 검증
데이터
선정이유
Test 결과
STATIZ 크롤링 데이터 (2000년 ~ 2021년) + 타자기본 데이터
변수 선정
3개년의 기록 흐름이 유사한 K명의 선수를 찾아, 유사성이 높은 선수에게 높은 가중치를 할당한 가
중평균을 계산하는 모델로, 과거 기록이 유사한 선수들은 향후의 기록도 유사한 양상을 보일 것이라
는 추론에 근거하여 예측값을 도출해볼 수 있다
개별 선수 수를 늘리고, 지난 3년 간의 기록으로 유사성을 계산하고자
2018년 이전의 기록까지 반영하는 크롤링 데이터 활용
RMSE
SLG : 0.07986335607119384
OBP : 0.04649800463532233
48. 1.선수 고유의 역량 반영
각 선수별 기량을 반영한 ‘선수 개인의 시계열’을 통한 예측값을 앙상블에 포함하여
선수 고유의 특성이 예측값에 반영되도록 하기 위함.
2. 정상성 만족
시계열의 정상성(stationality)을 판단하는 ADF 테스트 결과, 대부분의 선수 성적 지표들이 정상성을 만족하며
일부 정상성을 만족하지 않는 변수도 1차 차분으로 정상성을 만족.
시계열 모형 - VAR
04 예측 모델 선정 검증
선정이유
데이터
변수 선정
STATIZ에서 크롤링한 예측선수 10명의 2018년부터 2021년까지의 경기별 데이터
ADF 테스트 결과 정상성을 만족하는 변수와 정상성을 만족하지 않는 변수들 중 1차 차분하여 정상 시계
열이 되는 변수
49. 04 예측 모델 선정 검증
데이터 전처리 1. 정규시즌의 OPS를 예측해야 하므로 2018~2021년 데이터 중 정규시즌의 데이터만 추출
2. 선수들의 데이터 경기별 OPS를 시각화한 결과, 이상치가 발견되어, 경기별 OPS가 0.75미만
또는 1.25 이상인 경기의 데이터는 제거하였다.
시계열 모형 – VAR
전처리 이전 강백호 선수 OPS 시각화 전처리 이후 강백호 선수 OPS 시각화
51. 04 예측 모델 선정 검증
1.선수 고유의 역량 반영
각 선수마다 ‘선수 개인의 시계열 데이터’을 통한 예측값을 앙상블에 포함하여 선수 고유의 특성이 예측값에 반영
되도록 하고자 하였다.
2. LSTM Cell
LSTM Cell은 기본적인 RNN Cell 과 달리 최근의 정보 뿐 아니라 오래 전 정보를 기억할 수 있는 구조로서, 최근
정보 뿐 아니라 오래전 정보를 기억하여 예측할 수 있다.
3. Sequence to Sequence
최근 90경기의 데이터를 가지고 앞의 21경기의 결과를 예측하는 모델을 만들고자 하였다.
이는 ‘many to many’ 문제로서 Sequence to Sequence의 모델 구조를 만드는 것이 적절하다고 판단하였다.
딥러닝 모형 – LSTM Sequence to Sequence
데이터
선정이유
STATIZ에서 크롤링한 10명 선수의 경기별 기록데이터 (2018-2021.09.14)
52. 04 예측 모델 선정 검증
데이터 전처리 1. 정규시즌의 OPS를 예측해야 하므로 2018~2021년 데이터 중 정규시즌의 데이터만 추출
2. 선수들의 데이터 경기별 OPS를 시각화한 결과, 이상치가 발견되어, 경기별 OPS가 0.75미만
또는 1.25 이상인 경기의 데이터는 제거하였다.
딥러닝 모형 – LSTM Sequence to Sequence
전처리 이전 강백호 선수 OPS 시각화 전처리 이후 강백호 선수 OPS 시각화
53. 04 예측 모델 선정 검증
모델 구조 LSTM sequence to sequence 모형은 아래와 같이 데이터를 학습하고 예측값을 만든다.
딥러닝 모형 – LSTM Sequence to Sequence
2018 2021.09.14
Train X
이전 90경기
Train y
이후 21경기
Train X Train y
…
Train X Train y
predictX Prediction
predictX(직전 90경기 데이터)로 예측(Prediction)
54. 04 예측 모델 선정 검증
모델구조
여러 번의 train & validation을 통해 얻은
최종 모델 구조 및 하이퍼 파라미터
은닉층(Hidden Layer) 개수 : 1
→은닉층 개수가 1을 초과하면 모델 과적합 가능성↑
은닉노드(Hidden nodes, or cell dimension) : 100
→ 입력으로 받는 21개의 변수보다 더 많은 은닉 노드가 성능
향상에 큰 도움이 되었다.
학습률(learning rate)
→ Keras의 LearningRateScheduler로
훈련 epoch에 따라 학습률을 조정.
옵티마이저(Optimizer) : Adam
딥러닝 모형 – LSTM Sequence to Sequence
하이퍼 파라미터
55. 04 예측 모델 선정 검증
Test 결과
딥러닝 모형 – LSTM Sequence to Sequence
Train X, Y : test 데이터셋 이전 시점의 데이터
Test X: 2021년 9월 14일로부터 과거 111번째 경기 ~ 과거 20
번째 경기 (총 90경기)
Test Y: 2021년 9월 14일 이전 21경기
검증데이터셋
RMSE
OPS : 0.07832575573653916
OBP : 0.022608483043479108
SLG : 0.08195935819720626
56. MARCEL
Marcel은 Tom Tango* 에 의해 고안된 가장 단순하면서도 직관적인 예측 시스템
최근 3년간의 성적에 가중치를 부여하여 통계적 회귀 방식으로 향후 시즌의 성적 계산.
가장 단순하지만 그에 반해 수준급의 예측력을 보이는 것으로 평가됨.
기타 - MARCEL
Tom Tango : MLBAM Snr Data Architect
04 예측 모델 선정 검증
MARCEL 공식
1. 3년간의 성적에 최근 순으로 5:4:3의 가중치를 부여한 평균값을 구한다.
2. 3년 간 PA 성적에 5:4:3의 가중치를 주어 합한다.
3. 2에서 구한 값을 이용해 신뢰도 계수를 구한다. r = PA/(PA + 1200)
4. 3년 간 리그 평균 성적을 구한다.
5. 신뢰도 계수를 이용해 1과 4를 regression
6. 나이에 따라 5의 결과를 보정한다
29살 이하 : × 0.003
29살 이상 : × 0.006
별다른 학습이 필요 없다
코드 구현 후 대입하기
57. 기타 - MARCEL
04 예측 모델 선정 검증
선정이유
1. 야구 성적 예측을 위해 만들어진 방법
2. 과거 데이터를 활용해 미래의 성적을 예측하는 방법론의 유사성
3. 가중 평균을 활용하여 과거 3년 간 성적 비중을 달리하는 방식. 가까운 시즌의 기록에 더 큰 비중을 두어
예측할 수 있음.
→ 다른 모델에서 1년 전 기록과 2년 전 기록을 동등하게 인식하는 것과는 다른 효과를 낼 수 있을 것 기대
데이터 전처리
1. 크롤링 데이터 활용
2. 과거 3년 간의 OPS, SLG, OBP, PA 기록 이용
성능 검증
RMSE
SLG : 0.060937781003454504
OBP : 0.042287602793685375
기타 - MARCEL
58. 04 예측 모델 선정 검증
RMSE 표
OBP SLG OPS
Random forest 0.079 0.0439
XGBoost 0.044 0.081
유사성 기반 자체 알고리즘 0.05 0.077
KNN 0.046 0.08
VAR 0.035 0.026 0.035
LSTM 0.023 0.082
MARCEL 0.042 0.061
• 소수점 4째 자리에서 반올림
• VAR과 LSTM은 선수별 평균 MSE를 도
출
• VAR 모델은 OPS를 직접 예측하여
RMSE도 계산함
60. 05 최종 모델 구축
앞서 선정한 예측 모델 중 MSE기준 성능이 우수한 모델과
타자 성적의 최신 추세를 반영하기 위한 가장 최근 21 경기의 평균값을 앙상블하였다.
LSTM
VAR
KNN
Random forest
XGBoost
MARCEL
최근 21 경기의
평균값
앙상블하는 과정에서, 시계열 모델과는 달리 트리계열 모델 등은 최근 지표 추세와 다소 어긋난 예측을 하여 트리
모델 중에서는 XGBOOST 모형만을 이용하여 앙상블 하였다.
미사용 모델 사용 모델
61. 05 최종 모델 구축
* 특정선수 : 이정후, 로맥, 강백호, 최정, 양의지, 김현수, 김재환, 전준우, 채은성,박건우
최종 예측 목표
최종 예측 방법
1. 9월 15일 ~ 10월 8일 중 경기가 이루어지는 날은 총 21일로 하루에 5경기씩 총 105경기가 이루어진다.
따라서 해당 기간 중 한 선수가 출전하는 경기는 약 21경기이므로
예측 모델로 각 선수마다 미래 21 경기에 대한 예측값을 생성한다.
2. 각 모델을 통해 생성한 21개 경기의 평균값으로 각 모델을 통한 예측값을 도출한다.
3. 각 모델을 통해 구한 예측값들과 최신 21개 경기의 평균값을 앙상블하여 최종 예측값을 도출한다.
2021 프로야구 정규시즌 중 9월 15일 ~ 10월 8일 간 이루어지는 경기에서 특정선수의 OPS, SLG, OBP 예측
65. 07 결론 및 느낀 점
기대효과
For 선수,
한국형 배럴 기준으로 타구의 질을 높이는 훈련 목표 설정
한국형 배럴
기준에 따른
타자성적 예측
For KBO,
한국형 배럴 기준 마련으로 연봉협상 및 선수 영입에 도움
For 야구팬,
선수별 경기력 예측 성능 강화로 흥미와 몰입감 상승
66. 07 결론 및 느낀 점
느낀 점
기업 데이터인 HTS 데이터를
활용하여 다양한 분석 시도
다양한 예측모델에 대한
이론적 탐구
예측 모델 구현을 위한
프로그래밍 능력 향상
67. 참고문헌
김주희. "데이터 분석을 위한 프로 야구 기록 예측 모델 및 시각화 도구." 국내석사학위논문 한양대학교 대학원, 2017. 서울
1. 논문 및 도서
2. 데이터
STATIZ 기록실
벤저민 바우머, 앤드루 짐발리스트. “세이버메트릭스 레볼루션."한빛비즈, 2015.
황영진. (2013). VAR 모형을 이용한 추세 데이터 예측. 응용경제, 15(3), 133-168.
3. 코드
https://www.analyticsvidhya.com/blog/2020/10/multivariate-multi-step-time-series-forecasting-using-
stacked-lstm-sequence-to-sequence-autoencoder-in-tensorflow-2-0-keras/
https://dacon.io/competitions/official/62540/overview/description