앙상블 학습은 무엇인가?
앙상블(Ensemble)학습은 여러 개의 학습 알고리즘을 사용하고 그 예측을 결합함으로 보다 정확한 최종 예측을 도출하는 기법입니다.
“하나의 강한 머신러닝 알고리즘보다 여러 개의 약한 머신러닝 알고리즘이 좋다”로 조별과제를 하는 이유와 비슷한 의미로 이해하시면 좋습니다.
Voting & Averaging
Voting과 Averaging은 가장 기본적인 앙상블 기법으로 이 둘은 서로 다른 알고리즘을 가진 분류기를 결합하는 방식입니다.
Voting은 분류(Categorical Data), Averaging(Continuous Data)은 회귀에서 사용합니다.

Hard Voting
다수결의 원칙을 따르는 방식으로 각각의 분류기의 결과값 중 가장 많은 걸 따릅니다.
다시 말해, 여러 모델이 각각의 예측 결과를 투표하여 가장 많이 선택된 클래스를 최종 예측으로 선택합니다.
이진 분류의 경우, 0 또는 1로 결정하는 경우가 대표적입니다.
Soft Voting
분류기의 확률을 더하고 각각 평균을 내서 확률이 제일 높은 값을 결과값으로 선정합니다.
다시 말해, 모든 모델의 예측 확률의 평균을 계산하고 평균적으로 가장 높은 확률을 갖는 클래스를 선택합니다.
예측 결과에 대한 확률을 고려하여 최종 예측을 수행하므로 일반적으로 Soft Voting이 더 선호됩니다.
Simple Averaging
가장 기본적인 형태의 기법으로 여러 모델의 예측값을 단순히 평균내어 최종 예측값을 구하는 방법입니다.
예를 들어, 세 모델이 각각 10, 15, 20의 예측값을 낸다면 Simple Averaging을 통해 구한 최종 예측값은 15 ((10 + 15 + 20 )/ 3)가 됩니다.
이 방법은 간단하지만 각 모델의 성능을 고려하지 않고 동일한 가중치를 부여하는 단점이 있습니다.
Weighted Averaging
각 모델의 예측값에 서로 다른 가중치를 부여한 후 평균을 내는 방법으로 모델의 성능에 따라 가중치를 달리할 수 있어 더 성능이 좋은 모델에 더 높은 가중치를 부여할 수 있습니다.
예를 들어, 세 모델이 각각 10, 15, 20의 예측값을 내고, 가중치가 각각 0.2, 0.3, 0.5라면 Weighted Averaging을 통해 구한 최종 예측값은 (10 0.2 + 15 0.3 + 20 * 0.5) = 17이 됩니다.
이 방법은 성능이 좋은 모델의 기여도를 높일 수 있기에 Simple Averaging보다 더 좋은 성능을 보이는 경우가 많습니다.
Bagging

배깅은 Bootstrap Aggregating의 줄임말로 여러 개의 동일한 모델을 독립적으로 학습시켜 각각의 예측을 결합하여 최종 예측을 수행하는 앙상블 기법입니다.
Bootstrap은 중복을 허용한 리샘플링을 의미합니다. 따라서 주어진 데이터셋에서 중복을 허용하여 샘플을 여러번 랜덤하게 추출하는 방법입니다.
이렇게 생성된 서브셋을 기반으로 각각의 모델을 학습시키는 것이 배깅의 기본 개념입니다.
배깅의 가장 대표적인 모델이 바로 RandomForest 입니다.
주요 과정
- Bootstrap Sampling : 주어진 데이터셋으로부터 중복을 허용한 랜덤 샘플링을 수행하여 복수의 훈련 데이터셋을 생성합니다.
- 독립적인 모델 학습 :각 부트스트랩 샘플로부터 독립적인 모델을 학습합니다. 이 모델들은 동일한 알고리즘을 사용하지만 서로 다른 데이터로 학습됩니다.
- 예측 결합 : 각 모델은 테스트 데이터에 대한 예측을 수행하고 이 예측 결과들을 결합하여 최종 예측을 만듭니다. 회귀 문제에서는 평균을 내거나 분류 문제에서는 투표를 통해 최종 예측을 수행합니다.
장점
- 과적합 감소 : Bagging은 여러 개의 학습 데이터를 무작위로 샘플링하여 여러 모델을 학습시킵니다. 이로 인해 개별 모델이 과적합(overfitting)될 가능성이 줄어들고, 앙상블된 결과는 더 일반화된 성능을 보이게 됩니다.
- 모델 성능 향상 : 다수의 모델을 결합함으로써 단일 모델보다 더 좋은 성능을 기대할 수 있습니다. 특히, 불안정한 모델(예: 결정 트리)에서는 Bagging을 사용했을 때 성능 향상이 두드러집니다.
- 모델 분산 감소 : Bagging은 동일한 학습 알고리즘으로 생성된 여러 모델의 예측을 평균화하거나 투표하여 최종 예측을 만듭니다. 이를 통해 개별 모델의 예측 분산을 줄이고, 더 안정적인 예측을 제공합니다.
- 잡음에 강함 : Bagging은 각 모델이 독립적으로 훈련되고 예측하기 때문에 데이터의 잡음이나 이상치에 대한 민감도가 낮아집니다. 이는 개별 모델이 잡음에 의해 크게 영향을 받더라도, 앙상블된 결과가 더 안정적일 수 있게 합니다.
- 병렬화 가능성 : Bagging의 각 모델은 독립적으로 학습되고 예측되기 때문에, 병렬화(parallelization)가 용이합니다. 이는 학습 및 예측 속도를 높이는 데 기여할 수 있습니다.
단점
- 계산 비용 증가 : Bagging은 여러 개의 모델을 학습시켜야 하므로, 단일 모델에 비해 계산 비용이 크게 증가합니다. 특히, 대규모 데이터셋이나 복잡한 모델을 사용할 경우, 시간과 자원의 소모가 많아집니다.
- 모델 해석력 저하 : Bagging은 여러 모델의 결과를 결합하는 방식이기 때문에, 개별 모델의 예측이 합쳐져 최종 예측이 만들어집니다. 이는 최종 모델의 예측을 해석하는 데 어려움을 줄 수 있으며, 모델이 왜 특정 예측을 내렸는지 이해하기 어렵게 만듭니다.
- 데이터가 적을 때 효과 제한 : Bagging은 데이터의 일부를 여러 번 샘플링하여 각 모델을 학습시킵니다. 그러나 데이터가 충분하지 않으면, 각 모델이 학습할 데이터의 양이 부족해지고, 이로 인해 성능이 떨어질 수 있습니다.
- 복잡성 증가 : 여러 모델을 결합하는 과정에서 시스템의 복잡성이 증가합니다. 이는 모델 관리와 배포를 어렵게 만들 수 있습니다.
- 과소적합(Underfitting) 가능성 : Bagging은 기본적으로 여러 모델의 예측을 평균화하거나 투표하는 방식이므로, 모델 간의 편향(bias)이 높으면 개별 모델의 성능을 충분히 향상시키지 못할 수 있습니다. 특히, 단순한 모델을 사용하면 전체 앙상블이 과소적합될 위험이 있습니다.
Boosting

부스팅(Boosting)은 앙상블 학습 기법 중 하나로, 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시켜 강한 예측 모델을 만드는 방법입니다. 약한 학습란 단독으로는 좋은 성능을 내지 못하는 모델을 의미하며, 부스팅은 이러한 모델들을 결합하여 높은 예측 성능을 달성합니다.
부스팅의 주요 아이디어는 이전 모델이 잘못 예측한 샘플에 더 높은 가중치를 부여하여 다음 모델이 이러한 샘플을 더 잘 학습하도록 하는 것입니다. 이를 반복하여 여러 모델을 학습시킨 후, 각 모델의 예측을 결합해 최종 예측을 수행합니다.
주요 과정
- 초기 모델 학습 : 첫 번째 약한 학습자를 사용해 데이터를 학습합니다. 이 모델은 전체 데이터셋에 대해 학습을 수행하며, 초기 예측을 생성합니다.
- 오류 계산 및 가중치 조정 : 첫 번째 모델이 잘못 예측한 샘플의 가중치를 증가시킵니다. 이로 인해 다음 단계에서 학습하는 모델이 이러한 샘플에 더 집중하게 됩니다.
- 순차적 모델 학습 : 각 단계에서 새 모델이 추가로 학습되며, 이전 단계의 오류를 보완하도록 설계됩니다. 이 과정은 지정된 수의 모델을 학습시킬 때까지 반복됩니다.
- 최종 예측 결합 : 각 모델의 예측을 가중 평균하거나 다수결 투표 등의 방식으로 결합하여 최종 예측을 생성합니다. 이때, 일반적으로 성능이 높은 모델일수록 더 높은 가중치를 부여합니다.
장점
- 높은 예측 성능 : 부스팅은 약한 학습자들이 협력하여 강력한 모델을 만들기 때문에, 높은 예측 성능을 자랑합니다.
- 과적합 방지 : 순차적인 학습 과정에서 모델들이 서로의 오류를 보완하며 학습하기 때문에, 과적합(overfitting)이 줄어드는 경향이 있습니다.
- 유연성 : 부스팅은 다양한 종류의 학습자와 함께 사용할 수 있으며, 분류 문제뿐만 아니라 회귀 문제에도 적용될 수 있습니다.
단점
- 느린 학습 속도 : 부스팅은 순차적으로 모델을 학습시키기 때문에, 학습 시간이 오래 걸릴 수 있습니다.
- 매개변수 조정의 복잡성 : 최적의 성능을 내기 위해서는 학습률(learning rate), 약한 학습자의 수, 깊이 등의 하이퍼파라미터를 신중하게 조정해야 합니다.
- 잡음에 민감함 : 부스팅은 잡음이 있는 데이터에 과도하게 적응하여 과적합할 위험이 있습니다.
Bagging vs Boosting

1. 모델 생성 방식
- Bagging:
- 병렬 처리: 각 모델이 독립적으로, 동시에 학습됩니다.
- 데이터 샘플링: 원본 데이터셋에서 중복을 허용한 샘플링(부트스트랩)을 통해 여러 훈련 데이터셋을 생성합니다.
- Boosting:
- 순차적 처리: 각 모델이 순차적으로 학습됩니다. 이전 모델이 만든 오류를 다음 모델이 보완합니다.
- 데이터 가중치: 이전 모델이 잘못 예측한 샘플에 가중치를 높여, 다음 모델이 그 샘플을 더 잘 학습하도록 합니다.
2. 목적
- Bagging:
- 분산 감소: 모델의 예측 분산을 줄여, 더 안정적이고 일반화된 예측을 목표로 합니다.
- 과적합 방지: 각 모델이 서로 다른 데이터로 학습되므로, 과적합(overfitting)을 줄일 수 있습니다.
- Boosting:
- 편향 감소: 약한 학습기(weak learner)를 순차적으로 결합해 편향을 줄이고, 강한 예측 모델을 만드는 것이 목적입니다.
- 오류 보완: 이전 단계에서 잘못된 예측을 다음 단계에서 보완하며 성능을 점진적으로 향상시킵니다.
3. 최종 예측 결합 방식
- Bagging:
- 평균 또는 투표: 회귀에서는 예측값을 평균내고, 분류에서는 다수결 투표로 최종 예측을 만듭니다.
- Boosting:
- 가중 합산: 각 모델의 예측에 가중치를 부여하여 최종 예측을 만듭니다. 성능이 좋은 모델일수록 더 높은 가중치를 받습니다.
4. 성능과 학습 시간
- Bagging:
- 빠른 학습: 모델들이 독립적으로 학습되므로 병렬 처리가 가능하여 학습 속도가 빠릅니다.
- 안정적인 성능: 과적합이 적고, 전체적으로 안정적인 성능을 보입니다.
- Boosting:
- 느린 학습: 모델들이 순차적으로 학습되기 때문에 시간이 더 오래 걸립니다.
- 높은 예측 성능: 잘 조정된 Boosting은 매우 높은 예측 성능을 보일 수 있습니다. 하지만 잡음에 민감하여 과적합의 위험이 있습니다.
5. 대표적인 모델
- Bagging : Random Forest
- Boosting : XGBoost, LightGBM, CatBoost
Stacking

Stacking은 여러 개의 서로 다른 모델(기반 모델 또는 1차 모델)을 학습시켜 이들의 예측 결과를 결합하는 기법입니다. 이때 결합된 예측을 최종적으로 조합하는 모델(메타 모델 또는 2차 모델)을 추가로 학습시켜 최종 예측을 수행합니다.
과정
- 1차 모델 학습: 서로 다른 알고리즘을 사용해 여러 개의 모델을 학습시킵니다.
- 예측 생성: 각 1차 모델이 주어진 데이터에 대해 예측을 수행합니다.
- 메타 모델 학습: 1차 모델들의 예측 결과를 새로운 입력 데이터로 사용하여 메타 모델을 학습시킵니다. 이 메타 모델은 각 1차 모델의 예측을 입력으로 받아 최종 예측을 수행합니다.
특징
- 높은 성능: 서로 다른 유형의 모델을 결합함으로써 각 모델의 장점을 최대한 활용할 수 있어 매우 높은 예측 성능을 달성할 수 있습니다.
- 복잡성: 모델이 여러 단계로 구성되므로, 복잡도가 증가하며 학습 및 해석이 어려울 수 있습니다.
Kaggle, DACON 등에서 많이 사용됩니다.
Blending

Blending은 Stacking과 유사하지만 더 간단한 앙상블 기법입니다. 주된 차이점은 메타 모델 학습 시 데이터를 분할하여 사용하는 방법입니다.
과정
- 훈련 데이터 분할: 훈련 데이터를 두 부분으로 나눕니다(예: 70%와 30%).
- 1차 모델 학습: 첫 번째 데이터 부분(70%)을 사용하여 여러 개의 1차 모델을 학습시킵니다.
- 예측 생성: 1차 모델들이 나머지 데이터(30%)에 대해 예측을 수행합니다. 이 예측 결과는 새로운 입력 데이터로 사용됩니다.
- 메타 모델 학습: 이 예측 결과를 사용하여 메타 모델을 학습시킵니다.
- 최종 예측: 테스트 데이터에 대해 1차 모델과 메타 모델을 사용해 최종 예측을 수행합니다.
특징
- 간단함: Stacking보다 구현이 간단하며, 일반적으로 과적합의 위험이 적습니다.
- 성능: Blending은 일반적으로 Stacking만큼의 성능을 내지 못할 수 있습니다. 그러나, 구현의 용이성으로 인해 실무에서 많이 사용됩니다.