Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

'그 뭐더라'에서 '그' 를 설명하는 블로그

CatBoost, LightGBM, XGBoost 경주 모델에 대해... 본문

경마

CatBoost, LightGBM, XGBoost 경주 모델에 대해...

그그그그 뭐더라 2025. 7. 26. 18:49

경주 모델에 대해 간단하게 설명하고자 한다.

현재 모델은 앙상블 기법을 사용하고 있고 위 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. 첫 번째 모델: 데이터를 보고 예측 (당연히 틀림)
  2. 두 번째 모델: 첫 번째 모델이 틀린 부분을 중점적으로 학습
  3. 세 번째 모델: 앞의 두 모델이 여전히 틀리는 부분을 학습
  4. 반복: 계속해서 실수를 줄여나감

📊 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%: 안정성과 보완적 성능

본 프로젝트의 경우 이런식으로 앙상블을 진행하고 있다.

 

정말 간단한 설명이고

내가 컴퓨터학과이긴했지만 머신러닝과 초면이여서

사실 내부적으로 어떻게 돌아가는지는 잘 알지 못한다.

그래서 전체적으로 얕은 설명이고 좀 더 자세한 설명이 필요한 사람들은 각 라이브러리의 공식 문서를 참고하면 좋을 것 같다!