'그 뭐더라'에서 '그' 를 설명하는 블로그
CatBoost, LightGBM, XGBoost 경주 모델에 대해... 본문
경주 모델에 대해 간단하게 설명하고자 한다.
현재 모델은 앙상블 기법을 사용하고 있고 위 CatBoost, LightGBM, XGBoost 머신러닝을 사용중이다.
여기서 머신러닝이란?
컴퓨터가 데이터를 보고 패턴을 학습하여 예측을 하는 기술이다. 마치 사람들이 경험을 통해 배우는것과 같다!
경마 예측의 경우
- 입력 : 말의 정보, 경주 정보, 기수 조교사 성적, 주로 상태...등등
- 타켓 : 말의 경주 완주 시간
으로 학습하고 있다.
CatBoost, LightGBM, XGBoost는 모두 트리 기반 모델이다.
말의 나이가 5세 이상인가?
├─ 예: 기수 경력이 10년 이상인가?
│ ├─ 예: 1등 확률 80%
│ └─ 아니오: 1등 확률 40%
└─ 아니오: 최근 성적이 좋은가?
├─ 예: 1등 확률 60%
└─ 아니오: 1등 확률 20%
이러한 과정을 3개 모델이 모두 진행해 앙상블을 한다.
CatBoost : 이 말 1등
LightGBM : ㄴㄴ 2등
XGBoost : 나도 1등
-> 다수결로 1등
각 모델을 간단하게 설명하기 전에
우리는 Gradient Boosting의 핵심 아이디어를 알아야한다.
Boosting이란?
약한 학습기들을 순차적으로 학습시켜서 강한 학습기를 만드는 방법입니다.
과정 설명:
- 첫 번째 모델: 데이터를 보고 예측 (당연히 틀림)
- 두 번째 모델: 첫 번째 모델이 틀린 부분을 중점적으로 학습
- 세 번째 모델: 앞의 두 모델이 여전히 틀리는 부분을 학습
- 반복: 계속해서 실수를 줄여나감
📊 1. XGBoost (eXtreme Gradient Boosting)
가장 먼저 나온 현대적인 gradient boosting 라이브러리이다.
높은 정확도랑 다양한 문제 유형 (회귀, 분류, 랭킹)을 지원한다.
본 프로젝트는 여기서 랭킹과 회귀를 사용했다.
메모리 사용량이 많고 튜닝이 복잡하다는 문제가 있다.
또 카테고리 데이터 처리가 번거롭다.
⚡ 2. LightGBM (Light Gradient Boosting Machine)
XGBoost에 비해 속도가 빠르고 메모리가 효율적이다.
Leaf-wise Tree Growth
- XGBoost: 레벨별로 트리를 키움 (폭 우선)
- LightGBM: 가장 유용한 잎부터 키움 (깊이 우선)
XGBoost 방식: LightGBM 방식:
ROOT ROOT
/ \ / \
A B A B
/ \ / \ / \ \
C D E F C D E
/ / / \
G H F I
따라서 매우 빠른 학습 속도를 가졌고 카테고리 데이터도 자동으로 처리한다.
🎯 3. CatBoost (Categorical Boosting)
이름만 봐도 알 수 있듯이 카테고리 데이터를 처리하는데 좋다.
크게 3가지 기술이 있는데
1. Ordered Boosting
ranking모델은 그룹안에서 상대적으로 데이터를 줄 세우는게 가장 중요하다
1경주 10마리 말중 상대적으로 어떤말이 강한지를 판단해야한다는 것 이다.
근데 이런 줄 세우기할떄는 어떤 데이터의 평균(직전 경주 기록이 이정도인데 1등이네?) 말이 평균적으로 3.7세일떄 우승을하네 이러한 수치가 필요한데
그럼 데이터를 구할때 내부적으로 과적합이 될 수 있다.
모여있는 데이터에서 그냥 평균을 냈는데 6세말이 우승을 잘하네! -> 랜덤하게 데이터를 못모은거
catboost는 Ordered 데이터를 랜덤하게 무작위 순열로 뽑아 데이터의 치팅(데이터 누수)를 막는다.
2. Oblivious Tree
트리의 각 층에서 모든 말에게 같은 질문을 한다. 예를 들어, 1층에서 거리가 1200m보다 적어? 2층에서 나이<=4 이런식으로
그래서 경로가 균형이 잡히고 한쪽으로 가지가 깊어지는걸 막는다
3. 카테고리 네이티브 처리(CTR)
주로 상태(건조, 다습...)/날씨(맑음, 비..)/혈통 (모계 부계의 가지 수?)는 범주형 카테고리형 데이터이다. 문자열로 처리가 되어있거나
수치가 적고 크다고 말에게 좋은 영향을 주는건 아닌 이런 경우 범주형 속성으로 넣어야한다.
catboost의 경우 원-핫 대신 안전한 평균 성적으로 바꿔 쓴다.
원-핫은 맑음, 비, 강품, 흐림이 있으면
맑음을 기준으로
맑음, 비, 강품, 흐림
1 0 0 0
이런식으로 0/1플래그만 제공해 카테고리형을 깊게 학습하지 못한다.
CTR의 경우
범주형 값이 날씨=맑음이면 이전 표본들에서 맑음일때 타킷의 평균을 계산해 학습에 반영한다.
또 조합 CTR로 날씨 x 주로상태로 상호작용을 자동으로 포착한다.
오늘은 간단하게 설명하기 위해 글을 썻으니 이만 설명을 마치겠다.
아무튼 이런 catboot특징으로 과적합이 없고 카테고리 속성을 잘 처리한다는 장점을 가지고 있다.
그래서 본 프로젝트는 위 3개 라이브러리를 앙상블하여 사용한다.
앙상블은 여러 모델을 합치는건데 각 모델의 가중치를 정할 수 있다.
- CatBoost 50%: 카테고리가 많은 경마 데이터에서 가장 강력
- LightGBM 25%: 빠른 학습으로 다양한 패턴 포착
- XGBoost 25%: 안정성과 보완적 성능
본 프로젝트의 경우 이런식으로 앙상블을 진행하고 있다.
정말 간단한 설명이고
내가 컴퓨터학과이긴했지만 머신러닝과 초면이여서
사실 내부적으로 어떻게 돌아가는지는 잘 알지 못한다.
그래서 전체적으로 얕은 설명이고 좀 더 자세한 설명이 필요한 사람들은 각 라이브러리의 공식 문서를 참고하면 좋을 것 같다!
'경마' 카테고리의 다른 글
| 8월 2일 경마 예측 (4) | 2025.08.02 |
|---|---|
| 8월 1일 경마 예측 (9) | 2025.08.01 |
| 7월 25일 (금) 제주 경마 1경주부터 14경주까지 (6) | 2025.07.26 |
| 7월 20일 경마 AI 예측 결과 (7) | 2025.07.20 |
| 7월 19일 경마 모델 예측과 결과입니다. (8) | 2025.07.19 |