모두의 AI
머신러닝AI논문
로딩 중…

배우기

🏅내 업적

Ch.07

XGBoost, LightGBM, CatBoost: 실전 머신러닝의 3대장

우리가 엑셀 표처럼 생긴 데이터(정형 데이터)를 다룰 때, 딥러닝조차 가볍게 이겨버리는 머신러닝 생태계의 절대 강자들이 있습니다. 바로 부스팅(Boosting) 계열의 모델들입니다.
부스팅이란 여러 명의 '평범한 학생(약한 모델)'이 순서를 정해놓고, 앞사람이 틀린 문제만 집중적으로 공부해서 결국 '천재적인 정답지(강한 모델)'를 만들어내는 아주 똑똑한 협업 방식입니다. 이 챕터에서는 실무와 데이터 분석 대회(Kaggle 등)를 휩쓸고 있는 부스팅 3대장(XGBoost, LightGBM, CatBoost)의 특징을 완벽하게 해부하고, '내 데이터에는 어떤 모델을 골라야 할지' 명확한 기준을 세워드립니다.

챕터별 머신러닝 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 머신러닝 흐름을 한눈에 보세요.

세 라이브러리는 트리를 키우는 규칙이 다릅니다. 레벨와이즈·리프와이즈·대칭(oblivious) 성장을 패널별 애니메이션으로 비교해 보세요.

 

XGBoost레벨와이즈같은 깊이를 채운 뒤 다음 층으로
LightGBM리프와이즈손실 감소가 큰 리프부터 분할
CatBoostOblivious같은 깊이에서 동일 분할(대칭)
XGBoostLightGBMCatBoost레벨와이즈같은 깊이를 채운 뒤 다음 층으로리프와이즈손실 감소가 큰 리프부터 분할Oblivious같은 깊이에서 동일 분할(대칭)

CH07 부스팅 3대장: 오답 노트를 완벽하게 정복하는 알고리즘

1. 부스팅(Boosting)의 핵심 원리: 오답 노트 이어달리기
개념: 부스팅은 여러 개의 결정 트리(Decision Tree)를 순차적으로 연결하는 앙상블 기법입니다. 핵심은 '앞선 트리가 예측에 실패한 오차(잔차)를 다음 트리가 집중적으로 학습'하는 것입니다.
직관적 비유: 수학 시험을 준비하는 스터디 그룹을 상상해 보세요. 1번 학생이 모의고사를 푼 뒤, 틀린 문제들만 모아 '오답 노트'를 만듭니다. 2번 학생은 이 오답 노트만 미친 듯이 파고들어 보완합니다. 3번 학생은 2번 학생이 또 틀린 문제만 풉니다. 이렇게 수백 명이 약점을 보완해 나가면 최종적으로 틀릴 확률이 거의 없는 완벽한 팀이 됩니다.
핵심 수식: Ft(x)=Ft−1(x)+ηht(x)F_t(x)=F_{t-1}(x)+\eta h_t(x)Ft​(x)=Ft−1​(x)+ηht​(x)
- Ft(x)F_t(x)Ft​(x): 이번 단계(ttt)까지 합쳐서 만든 최종 예측값
- Ft−1(x)F_{t-1}(x)Ft−1​(x): 이전 단계까지의 예측값
- ht(x)h_t(x)ht​(x): 이전 단계의 오류(오답 노트)만 집중적으로 맞히려고 새로 투입된 트리
- η\etaη (에타): 학습률(learning rate). 새로 투입된 트리의 의견을 얼마나 반영할지 정하는 '신뢰도'입니다. 이 값이 작을수록 꼼꼼하게 학습하지만 시간이 오래 걸릴 수 있습니다.
실전 적용: 은행의 대출 부도 예측, 쇼핑몰의 고객 이탈 예측, 광고 클릭률(CTR) 예측 등 표 형태로 된 데이터에서는 이 부스팅 방식이 현재 인류가 가진 최고의 무기 중 하나입니다.
2. XGBoost (eXtreme Gradient Boosting): 흔들리지 않는 국밥 같은 기본기
개념: 가장 먼저 대중화되어 부스팅의 부흥기를 이끈 전설적인 모델입니다. 오차를 줄이는 것에 더해, 모델이 너무 복잡해지는 것을 막는 정규화(Regularization) 수식이 기본적으로 포함되어 있어 매우 안정적입니다.
직관적 비유: 아주 엄격하고 꼼꼼한 선생님입니다. 진도를 나가는 것도 중요하지만, 학생들이 얕은 지식으로 아는 척(과적합)을 하면 가차 없이 페널티를 주어 기초를 탄탄하게 다지도록 만듭니다.
3. LightGBM: 대용량 데이터도 순식간에 읽어내는 스피드광
개념: XGBoost가 좋긴 한데, 데이터가 수백만 건이 넘어가면 학습 시간이 너무 오래 걸렸습니다. 이를 해결하기 위해 마이크로소프트에서 만든 모델이 LightGBM입니다. 데이터를 히스토그램(연속값을 구간으로 묶어 bin 표현)으로 처리해 계산을 줄이고, 트리를 양옆으로 균형 있게 키우는 레벨 와이즈 대신 오차가 가장 큰 리프 하나를 깊게 파고드는 리프 와이즈(leaf-wise) 성장 전략을 씁니다.
직관적 비유: 두꺼운 전공 서적을 읽을 때, 이미 아는 챕터는 과감히 건너뛰고 시험에 꼭 나올 것 같은 챕터 하나만 밤새워 깊게 파고드는 '효율성 끝판왕' 대학생과 같습니다.
실전 주의점: 한 우물만 너무 깊게 파기 때문에 과적합(Overfitting)에 취약합니다. 그래서 트리의 최대 깊이(`max_depth`)나 잎에 남아야 할 최소 데이터 수(`min_data_in_leaf`)를 반드시 제한해 주어야 합니다.
4. CatBoost: 범주형 데이터의 마술사
개념: 얀덱스(Yandex)에서 개발한 모델로, 이름부터 Category와 Boosting의 합성어입니다. 직업(개발자, 의사, 학생), 지역(서울, 부산, 제주) 같은 범주형 변수(Categorical Feature)를 복잡한 전처리(예: 원-핫 인코딩) 없이 스스로 잘 처리합니다.
직관적 비유: 과거 데이터만 보고 미래를 맞혀야 하는데, 실수로 미래 정보가 섞이면 점수가 부풀려지는 데이터 누수를 막아야 합니다. CatBoost의 Ordered Statistics 같은 설계는 이런 누수 위험을 줄이는 데 도움이 됩니다. 덕분에 설정을 많이 만지지 않아도 기본값만으로 꽤 강한 성능을 내는 경우가 많습니다.
5. 수식, 더 쉽게 읽는 법 (기호 뜻 + 계산 예시)
아래 3개 식은 부스팅/XGBoost에서 가장 자주 나옵니다. 각 식은 (a) 기호 뜻을 먼저 보고, (b) 숫자 예시를 짧게 계산해 보면 훨씬 빨리 익숙해집니다.

(1) 누적 예측 업데이트
Ft(x)=Ft−1(x)+ηht(x)F_t(x)=F_{t-1}(x)+\eta h_t(x)Ft​(x)=Ft−1​(x)+ηht​(x)
- Ft−1(x)F_{t-1}(x)Ft−1​(x): 이전 단계까지의 예측값(현재까지 합계)
- ht(x)h_t(x)ht​(x): 이번에 새로 추가한 트리가 제안한 보정값
- η\etaη: 학습률(보정값을 얼마나 "세게" 반영할지)
해석: 이전 예측에 새 트리의 보정값을 더해, 오차를 단계적으로 줄입니다.
숫자 예시: 이전 예측이 10, 새 트리 출력이 +4, 학습률이 η=0.25\eta=0.25η=0.25라면
Ft=10+0.25×4=11F_t=10+0.25\times4=11Ft​=10+0.25×4=11 입니다.

(2) 목적함수 = 데이터 맞춤 + 복잡도 페널티
L=∑il(yi,y^i)+Ω(f)\mathcal{L}=\sum_i l(y_i,\hat y_i)+\Omega(f)L=∑i​l(yi​,y^​i​)+Ω(f)
- ∑il(yi,y^i)\sum_i l(y_i,\hat y_i)∑i​l(yi​,y^​i​): 실제값 yiy_iyi​와 예측값 y^i\hat y_iy^​i​의 오차 합
- Ω(f)\Omega(f)Ω(f): 모델이 너무 복잡해지는 것을 막는 정규화 항
해석: "정확도"만 올리는 것이 아니라, "너무 복잡한 모델"에는 벌점을 줘서 과적합을 억제합니다.
숫자 예시: 데이터 오차 합이 18, 정규화 항이 3이면 전체 목적함수는
L=18+3=21\mathcal{L}=18+3=21L=18+3=21 입니다.

(3) 분할 이득 계산에 쓰는 도함수
gi=∂y^lg_i=\partial_{\hat y}lgi​=∂y^​​l, hi=∂y^2lh_i=\partial^2_{\hat y}lhi​=∂y^​2​l
- gig_igi​: 1차 도함수(기울기) — 예측을 어느 방향으로 바꿔야 오차가 줄어드는지
- hih_ihi​: 2차 도함수(곡률) — 그 변화가 얼마나 급하고 안정적인지
해석: XGBoost류는 gi,hig_i, h_igi​,hi​를 함께 써서 분할의 이득을 계산하므로, 단순 기울기만 쓰는 것보다 업데이트가 더 안정적일 수 있습니다.
직관 포인트:
- ∣gi∣|g_i|∣gi​∣가 크면 "아직 많이 틀린 샘플"일 가능성이 큽니다.
- hih_ihi​는 업데이트 폭을 조절하는 완충 장치처럼 작동해 과격한 분할을 줄여 줍니다.
🔵 공통 파라미터: 볼륨 노브와 돋보기
① `learning_rate` (학습률): 오디오의 볼륨 노브와 같습니다. 새 트리가 만든 '보정 의견'을 기존 결과에 얼마나 강하게 반영할지 정합니다. 볼륨을 낮추면(작은 학습률) 소리가 튀지 않고 안정적이지만 원하는 크기까지 올리려면 노브를 여러 번 돌려야 하듯, 반복 횟수(`n_estimators`)를 늘려야 합니다. 반대로 볼륨을 너무 팍 높이면 빨리 맞추는 대신 모델이 심하게 흔들리거나 과적합될 수 있습니다.
② `n_estimators` / `iterations` (반복 횟수): 오답 노트 복습을 몇 번이나 반복할지 정합니다.
③ `max_depth` / `depth` (트리 최대 깊이): 문제를 얼마나 깊게 파고들지 정하는 현미경의 배율입니다. 깊어질수록 복잡하고 미세한 패턴을 잘 찾아내지만, 쓸데없는 잡음(노이즈)까지 모조리 외워버리는 과적합(Overfitting) 위험도 덩달아 커집니다. 처음에는 학습률 `0.03~0.1`, 깊이는 `4~8` 정도에서 무난하게 출발하는 것이 가장 안전합니다.
🟣 XGBoost: '정확도'와 '보수성'의 황금 밸런스 잡기
XGBoost는 모델이 너무 자만하여 과적합에 빠지지 않도록 꽉 잡아주는 '브레이크' 파라미터들을 자주 만집니다.
① `subsample` (데이터 샘플링): 매번 전체 학생을 다 부르지 않고, 무작위로 일부 학생(데이터)만 뽑아서 가르칩니다. 특정 데이터에만 목매는 현상을 완화합니다.
② `colsample_bytree` (피처 샘플링): 모든 과목(특성)을 다 보지 않고, 이번 트리에선 '국어, 수학'만, 다음엔 '영어, 과학'만 보게 합니다. 특정 변수에 모델이 과도하게 의존하는 것을 줄여줍니다.
③ `min_child_weight`: 너무 근거가 부족한(데이터가 적은) 자잘한 분할을 막아주는 든든한 안전장치입니다.
④ `reg_lambda` / `reg_alpha`: 모델의 덩치가 너무 커지지 않게 직접적으로 꾹 눌러주는 강력한 정규화 브레이크입니다.
🟢 LightGBM: 잎사귀(Leaf) 중심의 정교한 가지치기
LightGBM은 트리가 비대칭으로 한쪽만 깊게 자라는 특징(Leaf-wise)이 있어, 이 '잎사귀'를 통제하는 것이 튜닝의 전부라고 해도 과언이 아닙니다.
① `num_leaves` (최대 잎사귀 수): 트리가 가질 수 있는 최종 잎사귀의 개수입니다. 이 값을 늘리면 굉장히 정교한 분할이 가능해져 성능 잠재력이 폭발하지만, 동시에 과적합 위험도 수직 상승합니다. (일반적으로 2max_depth2^{\text{max\_depth}}2max_depth 보다 작게 설정합니다.)
② `min_data_in_leaf`: 잎사귀 하나에 최소한 몇 개의 데이터가 남아있어야 하는지 정합니다. 잎사귀가 너무 잘게 쪼개져서 '나 홀로 데이터'가 되는 것을 막아 안정성을 크게 높여줍니다.
③ `feature_fraction` / `bagging_fraction`: 이름만 다를 뿐, XGBoost의 샘플링(`colsample_bytree`, `subsample`)과 완전히 똑같은 역할을 합니다. 과적합 기미가 보일 때 이 비율을 1.0 아래로 살짝 낮춰주면 특효약이 됩니다.
🟠 CatBoost: 카테고리 데이터의 마술사
CatBoost는 복잡한 숫자 놀음보다는 범주형(카테고리) 데이터를 모델에게 얼마나 잘 알려주느냐가 관건입니다.
① `cat_features`: 가장 중요합니다! 데이터 중 어느 열이 '성별', '지역' 같은 카테고리인지 배열 형태로 정확히 지정해 주어야 CatBoost가 본연의 마법을 부릴 수 있습니다.
② `depth` (대칭 트리 깊이), `iterations` (반복 횟수): 공통 파라미터와 같지만, CatBoost는 트리를 좌우 대칭으로 꽉 채워서 예쁘게 키우기 때문에 깊이에 조금 더 민감하게 반응할 수 있습니다.
③ `l2_leaf_reg`: 과도하고 극단적인 예측값을 부드럽게 깎아내려 주는 든든한 정규화 파라미터입니다.
실무 데이터의 '치트키'
이미지나 텍스트가 아닌, 회사에서 매일 엑셀로 보는 데이터(DB 테이블)를 다룰 때는 딥러닝보다 오히려 부스팅 모델들이 빠르고 정확한 경우가 많습니다. 복잡한 딥러닝을 설계하기 전, 가장 강력한 기준선(Baseline)을 세울 때 1순위로 쓰입니다.
데이터의 성격에 따른 무기 선택
이 3대장의 특징을 알면 프로젝트 성공률이 올라갑니다.
- 데이터가 적당하고 극강의 안정성이 필요하다면? XGBoost
- 데이터가 수천만 건이고 서버 비용·시간을 아껴야 한다면? LightGBM
- 범주형(문자열 카테고리) 피처가 너무 많아 전처리가 골치 아프다면? CatBoost
비용과 성능의 예술적인 줄다리기
부스팅은 강력한 만큼 제어해야 할 하이퍼파라미터가 많습니다. 학습률(`learning_rate`), 트리의 깊이(`max_depth`), 트리 개수(`n_estimators`)의 관계를 이해하면, 과적합을 막으면서도 최고의 정확도에 가깝게 모델을 다듬을 수 있습니다.
① 실무 파이프라인의 정석
결측치를 다루고 카테고리를 다루는 전처리를 한 뒤 →\rightarrow→ 데이터를 학습용/검증용으로 나눕니다 →\rightarrow→ 부스팅 모델을 학습시키고 →\rightarrow→ SHAP 등으로 "왜 이 고객이 이탈할 것이라 예측했는지" 특성 중요도를 시각화해 비즈니스 팀에 공유합니다.
② 운영 팁: 멈출 때를 아는 지혜 (Early Stopping)
트리를 무한정 많이 만든다고 항상 좋은 것은 아닙니다. 오답 노트를 너무 많이 쓰면 결국 '그 문제집의 정답 위치'만 외워버리는 과적합이 생깁니다. 검증 데이터(Validation Set) 점수가 더 이상 오르지 않고 오히려 떨어지기 시작하면, 그 즉시 학습을 멈추는 얼리 스토핑(Early Stopping)은 실무에서 사실상 필수에 가깝습니다.
③ 비즈니스 목표와 지표 맞추기
모델이 수학적으로 잘 학습하는 것도 중요하지만, 회사의 목표와 맞아야 합니다.
- 고객 이탈 여부 맞히기(분류): 단순 정확도보다 AUC나 F1을 함께 봅니다.
- 내일의 주가·매출 예측(회귀): RMSE나 MAE로 실제 값과 얼마나 어긋나는지 추적합니다.