1. 앙상블 학습이란?
여러 개의 약한 학습기(Weak Learner)를 결합하여 더 강력한 모델을 만드는 기법
핵심 아이디어: “집단 지성”
- 한 명의 전문가보다 여러 전문가의 의견을 종합하면 더 정확
- 개별 모델의 약점을 서로 보완
- 과적합 위험 감소
앙상블의 조건
- 다양성(Diversity): 각 모델이 서로 다른 오류를 만들어야 함
- 독립성(Independence): 모델들이 독립적으로 학습되어야 함
- 성능(Accuracy): 각 모델이 랜덤 추측보다는 나아야 함
2. 앙상블 학습의 주요 방법론
배깅 (Bagging - Bootstrap Aggregating)
같은 알고리즘을 여러 번 학습시키되, 각각 다른 데이터 샘플로 학습
동작 원리
- 부트스트랩 샘플링: 원본 데이터에서 중복을 허용하여 여러 개의 샘플 생성
- 병렬 학습: 각 샘플로 독립적으로 모델 학습
- 집계: 모든 모델의 예측을 평균(회귀) 또는 투표(분류)로 결합
특징
- 분산(Variance) 감소에 효과적
- 과적합 방지
- 병렬 처리 가능
부스팅 (Boosting)
약한 학습기를 순차적으로 학습시키며, 이전 모델의 오류를 다음 모델이 보완
동작 원리
- 순차적 학습: 모델을 하나씩 차례대로 학습
- 오류 집중: 이전 모델이 틀린 데이터에 가중치 부여
- 가중 결합: 각 모델의 성능에 따라 가중치를 두고 결합
특징
- 편향(Bias) 감소에 효과적
- 높은 정확도
- 순차적 처리 필요
스태킹 (Stacking)
여러 다른 종류의 모델을 학습시킨 후, 이들의 예측을 입력으로 받는 메타 모델을 학습
동작 원리
- 1단계: 다양한 기본 모델들(Base Models) 학습
- 2단계: 기본 모델들의 예측을 특징으로 사용하여 메타 모델(Meta Model) 학습
특징
- 다양한 모델의 장점 결합
- 복잡도가 높음
- 과적합 위험 존재
3. 랜덤 포레스트 (Random Forest)
의사결정나무를 기반으로 한 배깅 앙상블
핵심 메커니즘
1. 부트스트랩 샘플링
원본 데이터에서 중복을 허용하여 N개의 서브셋 생성
2. 랜덤 특징 선택
각 노드에서 분할할 때, 전체 특징 중 무작위로 일부만 선택
- 일반적으로 개의 특징 사용
- 트리 간의 상관관계 감소 → 다양성 증가
3. 예측 집계
- 분류: 다수결 투표 (Majority Voting)
- 회귀: 평균 (Averaging)
수학적 표현
분류
회귀
- : t번째 트리의 예측
- : 전체 트리 개수
하이퍼파라미터
파라미터 | 설명 | 일반적 값 |
---|---|---|
n_estimators | 트리 개수 | 100-500 |
max_depth | 트리 최대 깊이 | 10-30 |
max_features | 노드 분할시 고려할 특징 수 | sqrt(n) 또는 log2(n) |
min_samples_split | 노드 분할 최소 샘플 수 | 2-10 |
min_samples_leaf | 리프 노드 최소 샘플 수 | 1-5 |
특징 중요도 (Feature Importance)
각 특징이 모델 예측에 얼마나 기여하는지 측정
- 각 트리에서 해당 특징으로 분할했을 때의 불순도 감소량 평균
장단점
장점
- 과적합에 강함
- 특징 스케일링 불필요
- 결측치 처리 가능
- 특징 중요도 제공
- 노이즈와 이상치에 강건
단점
- 해석력이 떨어짐
- 메모리 사용량이 큼
- 학습과 예측이 느릴 수 있음
- 외삽(Extrapolation) 불가능
4. 그래디언트 부스팅 (Gradient Boosting)
손실 함수의 그래디언트 방향으로 약한 학습기를 순차적으로 추가하는 부스팅 기법
핵심 아이디어
“잔차(Residual)를 학습하기”
- 초기 모델로 예측
- 실제값과 예측값의 차이(잔차) 계산
- 잔차를 타겟으로 새로운 모델 학습
- 새 모델을 앙상블에 추가
- 2-4 반복
알고리즘
초기화
반복 (m = 1 to M):
-
잔차 계산
-
잔차에 대한 트리 학습
-
모델 업데이트
- : 학습률 (learning rate)
최종 모델
주요 하이퍼파라미터
파라미터 | 설명 | 효과 |
---|---|---|
n_estimators | 트리 개수 | 많을수록 성능 향상 (과적합 위험) |
learning_rate | 학습률 | 작을수록 안정적 (더 많은 트리 필요) |
max_depth | 트리 깊이 | 깊을수록 복잡 (보통 3-5) |
subsample | 샘플링 비율 | 1.0보다 작으면 확률적 그래디언트 부스팅 |
min_samples_split | 분할 최소 샘플 | 클수록 단순 |
정규화 기법
1. Shrinkage (학습률)
- 각 트리의 기여를 줄여 과적합 방지
- 가 작을수록 더 많은 트리 필요
2. Subsampling
각 반복마다 데이터의 일부만 사용
- Stochastic Gradient Boosting
- 과적합 감소, 학습 속도 향상
3. Early Stopping
검증 손실이 개선되지 않으면 학습 조기 종료
5. XGBoost (eXtreme Gradient Boosting)
그래디언트 부스팅의 최적화된 구현으로, 속도와 성능이 크게 개선된 라이브러리
주요 개선사항
1. 정규화된 목적 함수
- : 손실 함수
- : 정규화 항
- : 리프 노드 개수
- : 리프 노드의 가중치
2. 2차 테일러 근사
손실 함수를 2차까지 근사하여 더 정확한 최적화
- : 1차 기울기
- : 2차 기울기
3. 효율적인 분할 알고리즘
- Weighted Quantile Sketch
- Sparsity-aware Split Finding (결측치 처리)
4. 병렬 처리
- 트리 구축시 특징별 병렬 처리
- 캐시 최적화
고유 기능
1. 결측치 자동 처리
각 분할에서 결측치를 왼쪽 또는 오른쪽으로 보내면서 최적 방향 학습
2. 내장 교차 검증
학습 중 교차 검증 수행 가능
3. 조기 종료
검증 세트 성능 모니터링하며 자동 종료
주요 하이퍼파라미터
트리 관련
파라미터 | 설명 | 권장값 |
---|---|---|
max_depth | 트리 최대 깊이 | 3-10 |
min_child_weight | 리프 노드 최소 가중치 합 | 1-5 |
gamma | 분할 최소 손실 감소 | 0-0.5 |
부스팅 관련
파라미터 | 설명 | 권장값 |
---|---|---|
learning_rate (eta) | 학습률 | 0.01-0.3 |
n_estimators | 트리 개수 | 100-1000 |
subsample | 행 샘플링 비율 | 0.5-1.0 |
colsample_bytree | 열 샘플링 비율 | 0.5-1.0 |
정규화 관련
파라미터 | 설명 | 권장값 |
---|---|---|
lambda (L2) | L2 정규화 | 1 (기본값) |
alpha (L1) | L1 정규화 | 0 (기본값) |
튜닝 전략
1단계: 트리 개수와 학습률
- 높은 학습률(0.1)로 시작
- 조기 종료로 최적 트리 개수 찾기
2단계: 트리 파라미터 튜닝
- max_depth, min_child_weight
- gamma
3단계: 정규화
- subsample, colsample_bytree
- lambda, alpha
4단계: 학습률 감소
- 학습률 낮추고 트리 개수 증가
6. LightGBM
Leaf-wise 트리 성장 방식을 사용하는 고속 그래디언트 부스팅 프레임워크
핵심 차이점
Level-wise vs Leaf-wise
XGBoost (Level-wise) | LightGBM (Leaf-wise) |
---|---|
같은 레벨의 모든 노드 확장 | 손실 감소가 가장 큰 리프만 확장 |
균형잡힌 트리 | 비대칭 트리 |
느리지만 안정적 | 빠르지만 과적합 위험 |
주요 기법
1. GOSS (Gradient-based One-Side Sampling)
- 큰 그래디언트 샘플: 모두 유지
- 작은 그래디언트 샘플: 일부만 샘플링
- 계산량 감소, 정확도 유지
2. EFB (Exclusive Feature Bundling)
- 상호 배타적인 특징들을 묶어 차원 축소
- 희소 특징 공간에서 효과적
장점
- 속도: XGBoost보다 훨씬 빠름
- 메모리 효율: 적은 메모리 사용
- 대용량 데이터: 수백만 행도 처리 가능
- 범주형 특징: 자동 처리
주의사항
7. CatBoost
범주형 특징 처리에 특화된 그래디언트 부스팅 프레임워크
주요 특징
1. 순서형 부스팅 (Ordered Boosting)
- 예측 이동(Prediction Shift) 문제 해결
- 더 나은 일반화 성능
2. 범주형 특징 자동 처리
- One-hot encoding 불필요
- Target Statistics 활용
- 오버피팅 방지 메커니즘 내장
3. 대칭 트리
- 빠른 예측
- CPU 캐시 효율적
장점
- 범주형 변수 많을 때 강력
- 하이퍼파라미터 튜닝 덜 민감
- GPU 가속 우수
8. 앙상블 비교표
성능 비교
알고리즘 | 속도 | 정확도 | 메모리 | 과적합 저항성 | 해석력 |
---|---|---|---|---|---|
Random Forest | 보통 | 좋음 | 높음 | 우수 | 보통 |
Gradient Boosting | 느림 | 매우 좋음 | 보통 | 보통 | 낮음 |
XGBoost | 빠름 | 매우 좋음 | 보통 | 좋음 | 낮음 |
LightGBM | 매우 빠름 | 매우 좋음 | 낮음 | 보통 | 낮음 |
CatBoost | 빠름 | 매우 좋음 | 보통 | 좋음 | 낮음 |
사용 가이드
Random Forest 사용
- 빠른 베이스라인 모델
- 해석 가능성 중요
- 과적합 걱정 없이 사용
XGBoost 사용
- 정형 데이터 대회
- 높은 정확도 필요
- 충분한 튜닝 시간
LightGBM 사용
- 대용량 데이터 (>10만 행)
- 빠른 학습 필요
- 메모리 제약
CatBoost 사용
- 범주형 특징 많음
- 빠른 프로토타이핑
- GPU 사용 가능
9. 실전 팁
앙상블 선택 가이드
데이터 크기별
- 작은 데이터 (<1만): Random Forest, XGBoost
- 중간 데이터 (1-10만): XGBoost, CatBoost
- 큰 데이터 (>10만): LightGBM
문제 유형별
- 분류 (균형): 모든 앙상블 적용 가능
- 분류 (불균형): XGBoost (scale_pos_weight), LightGBM (is_unbalance)
- 회귀: 모든 앙상블 적용 가능
- 시계열: Gradient Boosting (순차적 특성 활용)
하이퍼파라미터 튜닝 우선순위
1순위: 트리 개수와 학습률
n_estimators: [100, 200, 500, 1000]
learning_rate: [0.01, 0.05, 0.1, 0.3]
2순위: 트리 구조
max_depth: [3, 5, 7, 10]
min_child_weight: [1, 3, 5]
3순위: 샘플링
subsample: [0.5, 0.7, 0.9, 1.0]
colsample_bytree: [0.5, 0.7, 0.9, 1.0]
4순위: 정규화
lambda: [0.1, 1, 10]
alpha: [0, 0.1, 1]