모델 다양성 (Model Diversity)
1. 개요
모델 다양성(Model Diversity)이란 [앙상블 학습] 시스템 내에서 결합되는 개별 학습 모델들이 서로 다른 예측 패턴을 가지거나, 서로 다른 종류의 오류를 범하는 정도를 의미한다. 앙상블 학습은 여러 개의 [약한 학습기]를 결합하여 하나의 [강한 학습기]를 만드는 기법으로, 이때 개별 모델들이 모두 동일한 예측을 한다면 앙상블의 효과는 사라진다. 따라서 모델 간의 다양성을 확보하는 것은 앙상블의 핵심이며, 이는 최종 모델의 [일반화] 성능을 향상시키는 결정적인 요인이 된다.
2. 모델 다양성의 필요성
단일 모델은 학습 데이터에 [과적합]되어 [분산]이 높아지거나, 모델의 표현력이 부족하여 [편향]이 높아지는 문제를 겪는다.
모델 다양성이 확보된 앙상블은 다음과 같은 원리로 전체 오차를 감소시킨다:
- 오류 상쇄 효과: 서로 다른 모델이 서로 다른 데이터 영역에서 오류를 범할 때, 이를 다수결(Voting)이나 평균(Averaging)으로 결합하면 개별 모델의 무작위 오류가 상쇄된다.
- 분산 감소: 특히 [배깅]과 같은 기법은 데이터 샘플링의 다양성을 통해 모델의 분산을 낮추어, 새로운 데이터에 대한 예측 안정성을 높인다.
- 결정 경계의 보완: 각 모델이 학습 데이터의 서로 다른 특징(Feature)에 주목함으로써, 단일 모델이 포착하지 못한 복잡한 결정 경계를 보다 정교하게 형성할 수 있다.
3. 다양성을 확보하는 방법
모델 다양성을 확보하기 위한 전략은 크게 데이터, 알고리즘, 하이퍼파라미터, 그리고 검증 전략 수준으로 나뉜다.
3.1. 데이터 수준의 다양성
- [배깅]: 복원 추출을 통해 서로 다른 훈련 데이터셋을 생성하여 각 모델에 제공하는 병렬적 학습 방식이다.
- [부스팅]: 이전 모델이 틀린 데이터에 더 높은 가중치를 부여하는 순차적 학습 방식(Sequential Learning)을 통해, 모델들이 데이터의 서로 다른 취약 지점에 집중하게 만들어 이전 모델의 오차를 보완한다.
[배깅 vs 부스팅 학습 구조 도식]
- Bagging: Input Data $\rightarrow$ (Bootstrap Sample 1 $\rightarrow$ Model 1), (Bootstrap Sample 2 $\rightarrow$ Model 2), (Bootstrap Sample 3 $\rightarrow$ Model 3) $\rightarrow$ Aggregation (Parallel)
- Boosting: Input Data $\rightarrow$ Model 1 $\rightarrow$ (Error Analysis $\rightarrow$ Weight Update) $\rightarrow$ Model 2 $\rightarrow$ (Error Analysis $\rightarrow$ Weight Update) $\rightarrow$ Model 3 $\rightarrow$ Weighted Sum (Sequential)
3.2. 알고리즘 및 하이퍼파라미터 수준의 다양성
- 이종 학습기(Heterogeneous Learners): 결정 트리, [서포트 벡터 머신], 신경망 등 서로 다른 수학적 원리를 가진 알고리즘을 혼합한다.
- 하이퍼파라미터 튜닝: 동일한 알고리즘이라도 학습률(Learning Rate), 트리 깊이(Max Depth), 규제 강도 등을 다르게 설정하여 서로 다른 가중치 공간을 탐색하게 한다.
3.3. 교차 검증(Cross-Validation) 전략
- Out-of-Fold (OOF) 예측: K-폴드 교차 검증을 통해 각 폴드에서 학습된 모델들이 서로 다른 데이터 부분집합을 학습하게 함으로써, [스태킹] 모델의 입력값으로 사용될 예측치들의 다양성과 신뢰성을 동시에 확보한다.
[표 1] 기법별 다양성 확보 전략 비교
| 구분 |
주요 기법 |
다양성 생성 원리 |
주요 목적 |
| 데이터 |
[[배깅]] |
부트스트랩 샘플링 (데이터 부분집합 변경) |
분산 감소 및 과적합 방지 |
| 데이터 |
[[부스팅]] |
오답 가중치 부여 (데이터 중요도 변경) |
편향 감소 및 정확도 향상 |
| 알고리즘 |
Heterogeneous |
서로 다른 모델 아키텍처 사용 |
모델 간 예측 오류의 독립성 확보 |
| 파라미터 |
Hyper-tuning |
학습 설정값 변경 |
최적의 결정 경계 탐색 |
| 검증 |
OOF Prediction |
폴드별 학습/검증 데이터 분리 |
스태킹 시 데이터 누수 방지 및 다양성 확보 |
4. 다양성 측정 지표
모델 간의 다양성을 정량적으로 측정함으로써 앙상블의 효율성을 평가할 수 있다.
- Q-statistic: 두 모델의 예측 결과가 얼마나 일치하지 않는지를 측정한다.
- 수식: $Q = \frac{\sum_{i=1}^{n} (y_{1,i} - \bar{y}_1)(y_{2,i} - \bar{y}_2)}{\sqrt{\sum_{i=1}^{n} (y_{1,i} - \bar{y}_1)^2 \sum_{i=1}^{n} (y_{2,i} - \bar{y}_2)^2}}$
- 기준: 0에 가까울수록(또는 음수일수록) 다양성이 높다.
- Disagreement Measure: 두 모델이 서로 다른 클래스로 예측한 샘플의 비율을 측정한다.
- 수식: $D = \frac{1}{n} \sum_{i=1}^{n} I(y_{1,i} \neq y_{2,i})$ (단, $I$는 지시함수)
- 기준: 값이 1에 가까울수록 다양성이 높다.
- Correlation Coefficient (상관계수): 모델 간 예측값의 상관관계를 측정한다.
- 수식: $\rho = \text{corr}(y_1, y_2)$
- 기준: $\rho \to 0$일 때 다양성이 최대가 된다.
[표 2] 다양성 측정 지표별 장단점 비교
| 지표 |
장점 |
단점 |
적합한 상황 |
| Q-statistic |
모델 간의 상호 의존성을 정밀하게 측정 가능 |
계산 복잡도가 상대적으로 높음 |
이진 분류 모델 평가 |
| Disagreement |
직관적이며 계산이 매우 빠름 |
모델의 정확도를 고려하지 않은 단순 차이 측정 |
다중 클래스 분류 |
| Correlation |
연속적인 예측값의 경향성을 파악하기 좋음 |
비선형적인 다양성을 포착하기 어려움 |
회귀(Regression) 모델 평가 |
5. 다양성과 성능의 트레이드오프
다양성을 무조건적으로 높이는 것이 항상 성능 향상으로 이어지지는 않는다. 이를 다양성-정확도 트레이드오프(Diversity-Accuracy Trade-off)라고 한다.
- 과도한 다양성의 위험: 모델의 다양성을 높이기 위해 너무 성능이 낮은 모델을 포함하거나, 데이터를 지나치게 제한적으로 제공하면 개별 모델의 정확도가 급격히 떨어진다. 이는 앙상블 결과의 전체적인 품질 저하를 초래한다.
- 최적 균형점: 앙상블의 성공 조건은 "개별 모델이 충분히 정확하면서, 동시에 서로 다른 오류를 범하는 것"이다. 따라서 적절한 성능 임계치(Threshold)를 설정한 모델들 중에서 다양성이 높은 조합을 선택하는 전략이 필요하다.
6. 활용 사례 및 예시
6.1. 실전 활용 사례
- Kaggle 등 경진대회: 단일 모델(예: XGBoost)만으로는 데이터의 모든 특성을 포착하기 어렵기 때문에, 서로 다른 특성을 가진 모델들을 결합하는 [스태킹] 기법이 상위권의 표준으로 사용된다.
- 구체적 전략: 트리 기반 모델(LightGBM, CatBoost, XGBoost)과 선형 모델(Ridge, Lasso), 그리고 딥러닝 모델(MLP, TabNet)을 1차 학습기로 구성한다. 각 모델의 OOF(Out-of-Fold) 예측값을 생성하여 이를 새로운 특성(Feature)으로 삼고, 최종적으로 Logistic Regression이나 Ridge와 같은 단순한 메타 모델(Meta-learner)을 통해 최종 예측값을 도출함으로써 과적합을 방지하고 일반화 성능을 극대화한다.
- 최신 LLM(대규모 언어 모델)의 앙상블:
- MoE (Mixture of Experts): 모델 내부에 여러 개의 '전문가(Expert)' 네트워크를 두고, 입력값에 따라 적절한 전문가를 선택적으로 활성화하여 모델 내부의 다양성을 확보한다.
- Self-Consistency: 동일한 LLM에 서로 다른 프롬프트를 제공하거나 샘플링 온도를 조절하여 여러 개의 답변을 생성한 뒤, 다수결로 최종 답안을 도출하여 추론 성능을 높인다.
6.2. 파이썬 코드 예제 (Voting/Stacking)
아래 코드는 서로 다른 분류기를 결합하여 다양성을 확보하는 간단한 예시이다.
from sklearn.ensemble import VotingClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 1. 이종 학습기 정의 (다양성 확보)
clf1 = LogisticRegression()
clf2 = DecisionTreeClassifier(max_depth=5)
clf3 = SVC(probability=True)
# 2. Soft Voting 앙상블 (확률 기반 결합)
voting_clf = VotingClassifier(
estimators=[('lr', clf1), ('dt', clf2), ('svc', clf3)],
voting='soft'
)
# 3. Stacking 앙상블 (메타 모델을 통한 결합)
stacking_clf = StackingClassifier(
estimators=[('lr', clf1), ('dt', clf2), ('svc', clf3)],
final_estimator=LogisticRegression()
)
# 학습 및 평가
for clf in [voting_clf, stacking_clf]:
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print(f"{type(clf).__name__} Accuracy: {accuracy_score(y_test, pred):.4f}")
# Expected Output:
# VotingClassifier Accuracy: 0.8750
# StackingClassifier Accuracy: 0.8850
Categories: #기술 #인공지능 #앙상블
# 모델 다양성 (Model Diversity)
## 1. 개요
**모델 다양성(Model Diversity)**이란 [[앙상블 학습]](Ensemble Learning) 시스템 내에서 결합되는 개별 학습 모델들이 서로 다른 예측 패턴을 가지거나, 서로 다른 종류의 오류를 범하는 정도를 의미한다. 앙상블 학습은 여러 개의 [[약한 학습기]](Weak Learner)를 결합하여 하나의 [[강한 학습기]](Strong Learner)를 만드는 기법으로, 이때 개별 모델들이 모두 동일한 예측을 한다면 앙상블의 효과는 사라진다. 따라서 모델 간의 다양성을 확보하는 것은 앙상블의 핵심이며, 이는 최종 모델의 [[일반화]](Generalization) 성능을 향상시키는 결정적인 요인이 된다.
## 2. 모델 다양성의 필요성
단일 모델은 학습 데이터에 [[과적합]](Overfitting)되어 **[[분산]](Variance)**이 높아지거나, 모델의 표현력이 부족하여 **[[편향]](Bias)**이 높아지는 문제를 겪는다.
모델 다양성이 확보된 앙상블은 다음과 같은 원리로 전체 오차를 감소시킨다:
- **오류 상쇄 효과**: 서로 다른 모델이 서로 다른 데이터 영역에서 오류를 범할 때, 이를 다수결(Voting)이나 평균(Averaging)으로 결합하면 개별 모델의 무작위 오류가 상쇄된다.
- **분산 감소**: 특히 [[배깅]](Bagging)과 같은 기법은 데이터 샘플링의 다양성을 통해 모델의 분산을 낮추어, 새로운 데이터에 대한 예측 안정성을 높인다.
- **결정 경계의 보완**: 각 모델이 학습 데이터의 서로 다른 특징(Feature)에 주목함으로써, 단일 모델이 포착하지 못한 복잡한 결정 경계를 보다 정교하게 형성할 수 있다.
## 3. 다양성을 확보하는 방법
모델 다양성을 확보하기 위한 전략은 크게 데이터, 알고리즘, 하이퍼파라미터, 그리고 검증 전략 수준으로 나뉜다.
### 3.1. 데이터 수준의 다양성
- **[[배깅]](Bagging, Bootstrap Aggregating)**: 복원 추출을 통해 서로 다른 훈련 데이터셋을 생성하여 각 모델에 제공하는 **병렬적 학습 방식**이다.
- **[[부스팅]](Boosting)**: 이전 모델이 틀린 데이터에 더 높은 가중치를 부여하는 **순차적 학습 방식(Sequential Learning)**을 통해, 모델들이 데이터의 서로 다른 취약 지점에 집중하게 만들어 이전 모델의 오차를 보완한다.
**[배깅 vs 부스팅 학습 구조 도식]**
- **Bagging**: `Input Data` $\rightarrow$ `(Bootstrap Sample 1 $\rightarrow$ Model 1)`, `(Bootstrap Sample 2 $\rightarrow$ Model 2)`, `(Bootstrap Sample 3 $\rightarrow$ Model 3)` $\rightarrow$ `Aggregation (Parallel)`
- **Boosting**: `Input Data` $\rightarrow$ `Model 1` $\rightarrow$ `(Error Analysis $\rightarrow$ Weight Update)` $\rightarrow$ `Model 2` $\rightarrow$ `(Error Analysis $\rightarrow$ Weight Update)` $\rightarrow$ `Model 3` $\rightarrow$ `Weighted Sum (Sequential)`
### 3.2. 알고리즘 및 하이퍼파라미터 수준의 다양성
- **이종 학습기(Heterogeneous Learners)**: 결정 트리, [[서포트 벡터 머신]](SVM), 신경망 등 서로 다른 수학적 원리를 가진 알고리즘을 혼합한다.
- **하이퍼파라미터 튜닝**: 동일한 알고리즘이라도 학습률(Learning Rate), 트리 깊이(Max Depth), 규제 강도 등을 다르게 설정하여 서로 다른 가중치 공간을 탐색하게 한다.
### 3.3. 교차 검증(Cross-Validation) 전략
- **Out-of-Fold (OOF) 예측**: K-폴드 교차 검증을 통해 각 폴드에서 학습된 모델들이 서로 다른 데이터 부분집합을 학습하게 함으로써, [[스태킹]](Stacking) 모델의 입력값으로 사용될 예측치들의 다양성과 신뢰성을 동시에 확보한다.
### [표 1] 기법별 다양성 확보 전략 비교
| 구분 | 주요 기법 | 다양성 생성 원리 | 주요 목적 |
| :--- | :--- | :--- | :--- |
| **데이터** | [[배깅]] | 부트스트랩 샘플링 (데이터 부분집합 변경) | 분산 감소 및 과적합 방지 |
| **데이터** | [[부스팅]] | 오답 가중치 부여 (데이터 중요도 변경) | 편향 감소 및 정확도 향상 |
| **알고리즘** | Heterogeneous | 서로 다른 모델 아키텍처 사용 | 모델 간 예측 오류의 독립성 확보 |
| **파라미터** | Hyper-tuning | 학습 설정값 변경 | 최적의 결정 경계 탐색 |
| **검증** | OOF Prediction | 폴드별 학습/검증 데이터 분리 | 스태킹 시 데이터 누수 방지 및 다양성 확보 |
## 4. 다양성 측정 지표
모델 간의 다양성을 정량적으로 측정함으로써 앙상블의 효율성을 평가할 수 있다.
- **Q-statistic**: 두 모델의 예측 결과가 얼마나 일치하지 않는지를 측정한다.
- 수식: $Q = \frac{\sum_{i=1}^{n} (y_{1,i} - \bar{y}_1)(y_{2,i} - \bar{y}_2)}{\sqrt{\sum_{i=1}^{n} (y_{1,i} - \bar{y}_1)^2 \sum_{i=1}^{n} (y_{2,i} - \bar{y}_2)^2}}$
- 기준: **0에 가까울수록(또는 음수일수록) 다양성이 높다.**
- **Disagreement Measure**: 두 모델이 서로 다른 클래스로 예측한 샘플의 비율을 측정한다.
- 수식: $D = \frac{1}{n} \sum_{i=1}^{n} I(y_{1,i} \neq y_{2,i})$ (단, $I$는 지시함수)
- 기준: **값이 1에 가까울수록 다양성이 높다.**
- **Correlation Coefficient (상관계수)**: 모델 간 예측값의 상관관계를 측정한다.
- 수식: $\rho = \text{corr}(y_1, y_2)$
- 기준: **$\rho \to 0$일 때 다양성이 최대가 된다.**
### [표 2] 다양성 측정 지표별 장단점 비교
| 지표 | 장점 | 단점 | 적합한 상황 |
| :--- | :--- | :--- | :--- |
| **Q-statistic** | 모델 간의 상호 의존성을 정밀하게 측정 가능 | 계산 복잡도가 상대적으로 높음 | 이진 분류 모델 평가 |
| **Disagreement** | 직관적이며 계산이 매우 빠름 | 모델의 정확도를 고려하지 않은 단순 차이 측정 | 다중 클래스 분류 |
| **Correlation** | 연속적인 예측값의 경향성을 파악하기 좋음 | 비선형적인 다양성을 포착하기 어려움 | 회귀(Regression) 모델 평가 |
## 5. 다양성과 성능의 트레이드오프
다양성을 무조건적으로 높이는 것이 항상 성능 향상으로 이어지지는 않는다. 이를 **다양성-정확도 트레이드오프(Diversity-Accuracy Trade-off)**라고 한다.
- **과도한 다양성의 위험**: 모델의 다양성을 높이기 위해 너무 성능이 낮은 모델을 포함하거나, 데이터를 지나치게 제한적으로 제공하면 개별 모델의 정확도가 급격히 떨어진다. 이는 앙상블 결과의 전체적인 품질 저하를 초래한다.
- **최적 균형점**: 앙상블의 성공 조건은 **"개별 모델이 충분히 정확하면서, 동시에 서로 다른 오류를 범하는 것"**이다. 따라서 적절한 성능 임계치(Threshold)를 설정한 모델들 중에서 다양성이 높은 조합을 선택하는 전략이 필요하다.
## 6. 활용 사례 및 예시
### 6.1. 실전 활용 사례
- **Kaggle 등 경진대회**: 단일 모델(예: XGBoost)만으로는 데이터의 모든 특성을 포착하기 어렵기 때문에, 서로 다른 특성을 가진 모델들을 결합하는 [[스태킹]](Stacking) 기법이 상위권의 표준으로 사용된다.
- **구체적 전략**: 트리 기반 모델(LightGBM, CatBoost, XGBoost)과 선형 모델(Ridge, Lasso), 그리고 딥러닝 모델(MLP, TabNet)을 1차 학습기로 구성한다. 각 모델의 OOF(Out-of-Fold) 예측값을 생성하여 이를 새로운 특성(Feature)으로 삼고, 최종적으로 Logistic Regression이나 Ridge와 같은 단순한 메타 모델(Meta-learner)을 통해 최종 예측값을 도출함으로써 과적합을 방지하고 일반화 성능을 극대화한다.
- **최신 LLM(대규모 언어 모델)의 앙상블**:
- **MoE (Mixture of Experts)**: 모델 내부에 여러 개의 '전문가(Expert)' 네트워크를 두고, 입력값에 따라 적절한 전문가를 선택적으로 활성화하여 모델 내부의 다양성을 확보한다.
- **Self-Consistency**: 동일한 LLM에 서로 다른 프롬프트를 제공하거나 샘플링 온도를 조절하여 여러 개의 답변을 생성한 뒤, 다수결로 최종 답안을 도출하여 추론 성능을 높인다.
### 6.2. 파이썬 코드 예제 (Voting/Stacking)
아래 코드는 서로 다른 분류기를 결합하여 다양성을 확보하는 간단한 예시이다.
```python
from sklearn.ensemble import VotingClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 1. 이종 학습기 정의 (다양성 확보)
clf1 = LogisticRegression()
clf2 = DecisionTreeClassifier(max_depth=5)
clf3 = SVC(probability=True)
# 2. Soft Voting 앙상블 (확률 기반 결합)
voting_clf = VotingClassifier(
estimators=[('lr', clf1), ('dt', clf2), ('svc', clf3)],
voting='soft'
)
# 3. Stacking 앙상블 (메타 모델을 통한 결합)
stacking_clf = StackingClassifier(
estimators=[('lr', clf1), ('dt', clf2), ('svc', clf3)],
final_estimator=LogisticRegression()
)
# 학습 및 평가
for clf in [voting_clf, stacking_clf]:
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print(f"{type(clf).__name__} Accuracy: {accuracy_score(y_test, pred):.4f}")
# Expected Output:
# VotingClassifier Accuracy: 0.8750
# StackingClassifier Accuracy: 0.8850
```
Categories: #기술 #인공지능 #앙상블