LightGBM 모델
LightGBM은 트리 기준 분할이 아닌 리프 기준 분할 방식을 사용한다. 트리의 균형을 맞추지 않고 최대 손실 값을 갖는 리프 노드를 지속적으로 분할하면서 깊고 비대칭적인 트리를 생성하는 것인데,
이렇게 하면 트리 기준 분할 방식에 비해 예측 오류 손실을 최소화할 수 있다.
- 트리를 리프 중심으로 성장시키는 방식(Tree Leaf-Wise)을 채택하여 더 적은 메모리로 학습 속도를 높이고 예측 성능을 높인다.
- 트리의 모든 리프 중에서 오차를 가장 크게 줄일 수 있는 리프를 선택하여 분할
>> 더 큰 오차를 줄일 수 있는 리프를 집중적으로 개선하여 모델의 예측 정확도를 높이는 방식 - 레벨 중심 분할에 비해 트리가 불균형하게 성장할 수 있어 복잡한 패턴을 유연하게 모델링할 수 있음
- 트리의 모든 리프 중에서 오차를 가장 크게 줄일 수 있는 리프를 선택하여 분할
- 대규모 데이터셋에 적합하고 빠른 속도를 자랑하지만, 과적합 가능성이 있으므로 하이퍼파라미터 튜닝이 중요하다.
- 트리가 불균형하게 깊어지므로 과적합(overfitting)의 가능성이 높아짐
- 공식문서 기준 10,000건 이하의 적은 데이터셋에서 overfitting의 가능성이 높다고 함
- 학습하는 데 시간이 짧고 메모리 사용량이 상대적으로 적으므로 대용량 데이터를 처리하는 데 적합
Catboost 모델
기존의 부스팅 기법
1. 실제 값들의 평균과 실제 값의 차이인 잔차(Residual)를 구한다.
2. 데이터로 이 잔차들을 학습하는 모델을 만든다.
3. 만든 모델로 예측하여, 예측 값에 Learning_rate 를 곱해 실제 예측 값(평균 + 잔차예측 값*lr) 을 업데이트 한다.
4. 1~3 반복
여기에는 1. 느린 학습 속도 2. 오버피팅 의 문제점이 존재한다.
Catboost의 특징
뒤에서 설명할 XGBoost와 더불어 Catboost는 Level-wise 로 트리를 만들어 나간다. (BFS랑 비슷하다고 생각하면 된다.)
기존의 부스팅 모델이 일괄적으로 모든 훈련 데이터를 대상으로 잔차계산을 했다면,
Catboost는 일부만 가지고 잔차계산 > 모델 생성 > 나머지 데이터의 잔차는 해당 모델로 예측한 값을 사용한다.
이것을 Ordered Boosting이라고 하는데 더 자세히 알아보자면,
일반적으로 Gradient Boosting에서는 모든 데이터를 사용해 이전 트리의 잔차를 계산하고, 그 잔차를 기반으로 새로운 트리를 학습하게 된다. 그러나 CatBoost는 Ordered Boosting 방식에서 다음과 같은 방식을 채택합니다:
- 데이터를 순서에 따라 부분적으로 나눠 사용:
- 모델 학습 중 잔차 계산 시 데이터의 일부만 사용하여 트리를 생성
- 이후, 나머지 데이터를 예측할 때는 해당 트리에서 얻어진 예측값을 사용하여 잔차를 계산한다. 이를 통해 잔차 계산 시 학습에 사용하지 않은 데이터로 모델이 예측을 수행하므로, 데이터 누수(Data Leakage)를 방지하게 된다.
- Ordered Boosting을 통한 과적합 방지:
- 순차적 학습 방식을 통해, 과적합을 방지하고 일반화 성능을 높일 수 있다. 이는 특히 소규모 데이터셋이나 data leakage가 우려되는 데이터셋에서 효과적이다.
- 이 방식은 매 학습 단계에서 모델이 전체 데이터를 보지 않고 일부 데이터로 예측값을 계산하여, 미래 데이터를 미리 알지 못하는 상황을 시뮬레이션하는 효과가 있다.
데이터 누수(Data Leakage)
모델 학습 과정에서 테스트 데이터의 일부 정보가 학습에 유입되어, 실제 예측 성능보다 과도하게 높은 성능이 나타나는 상황
Ordered Boosting에서는 훈련 시 데이터의 순서를 고려하여, 미래의 데이터를 미리 학습하지 않도록 구조화되어 있기에 data leakage를 막는 데 효과적이다.
Catboost 모델은 특히 Categorical feature(범주형 변수) 처리에 유용하다고 알려져있다.
별도의 인코딩 없이도 이를 효과적으로 다룰 수 있는 고유한 방식인 Ordered Target Statistics와 Ordered Encoding을 사용한다.
XGBoost 모델
- Boosting 이란?
- 여러 개의 약한 의사결정나무(Decision Tree)를 조합해서 사용하는 앙상블(Ensemble) 기법 중 하나
- 즉, 약한 예측 모형들의 학습 에러에 가중치를 두고, 순차적으로 다음 학습 모델에 반영하여 강한 예측모형을 만든다.
XGBoost는 고성능의 Gradient Boosting 알고리즘 중 하나로, 정확도와 효율성을 모두 고려한 머신러닝 라이브러리이다.
Gradient Boosting
여러 개의weak learners, 일반적으로 결정 트리(Decision Tree)를 순차적으로 학습하여, 점진적으로 성능을 향상시키는 앙상블 학습 기법이다. 이 방법은 매 단계마다 이전 모델의 오차를 줄이는 방식으로 새로운 모델을 추가해, 최종적으로 강력한 예측 모델을 만든다.
Gradient Boosting은 특히 회귀나 분류 문제에서 강력한 성능을 보여준다.
XGBoost 특징
(1) 정규화 기법을 통한 과적합 방지
- XGBoost는 과적합을 줄이기 위해 L1 및 L2 정규화(Lasso 및 Ridge Regularization)를 지원
- 기존의 Gradient Boosting 모델은 일반적으로 과적합 위험이 크지만 XGBoost는 트리의 분기나 리프 노드의 가중치에 정규화 항을 추가하여 더 일반화된 모델을 생성
- 트리의 복잡성을 제한해 과적합을 방지
(2) Level-wise Tree Growth (레벨 중심 트리 성장)
- XGBoost는 레벨 중심(Tree-level) 성장 방식을 사용하여 트리를 생성
- LightGBM처럼 불균형한 트리 구조를 만드는 것이 아니라, 균형 있는 트리를 형성하여 모델의 예측 안정성을 높임
세 모델 간의 차이점
특징LightGBMCatBoostXGBoost
특징 | LightGBM | CatBoost | XGBoost |
데이터 처리 방식 | 리프 중심(Tree-leaf) 성장 방식 | 순차적 카테고리 인코딩 지원 | 레벨 중심(Tree-level) 성장 방식 |
카테고리형 데이터 처리 | 직접 처리 불가 (수작업 인코딩 필요) | 자동 카테고리 인코딩 지원 | 직접 처리 불가 (수작업 인코딩 필요) |
속도 | 매우 빠름 | 다소 느리나 CatBoost 자체 최적화 | LightGBM보다 느림 |
과적합 방지 | 다양한 하이퍼파라미터로 조절 가능 | 내장된 Ordered Boosting 기능 제공 | 규제 옵션으로 조절 가능 |
데이터 순서 민감도 | 데이터 순서에 덜 민감 | 순서 민감, 순차적 부스팅으로 극복 가능 | 데이터 순서에 덜 민감 |
주요 장점 | 대규모 데이터와 높은 속도에 최적화 | 카테고리형 데이터에 강함 | 안정적이고 높은 예측 성능 |
전처리 > null값 확인 후 50이상 drop, 나머지는 최빈값으로 채움
LightGBM > object를 category로 인코딩 > 테스트 데이터 예측 > 15.9s > score: 0.71
CatBoost > object를 category로 인코딩 > cat_featyre에 카테고리형 변수 지정 (자동으로 카테고리형 변수 처리 가능) > 테스트 데이터 예측 > timeout.... 15분 이상 걸려서 중지함
XGBBoost > 원-핫 인코딩(카테고리형 변수 처리 불가) > 테스트 데이터 예측 > 1m 19.9s > score: 0.42