Python&Django 개발은 기본, eBook 발간까지!
#인공지능 

Model Ensembling(모델 앙상블) Guide

2024-06-10 | 신유진

모델 앙상블 이란 다양한 머신러닝 문제의 정확도를 향상시킬 수 있는 매우 효과적인 기법입니다. Ensemble (앙상블)기법이란 여러 개의 분류기를 생성하고 그 예측을 결합합으로써 보다 정확한 예측을 도출하는 기법을 말합니다. 이는 강력한 하나의 모델을 사용하는 대신, 보다 약한 모델 여러 개를 조합하여 더 정확한 예측에 도움을 주는 방식입니다. 앙상블 기법은 일반적으로

  • Bagging
  • Boosting
  • Stacking

위 3가지 유형으로 나눌 수 있습니다.
그 외에도 Voting(Complement of Bagging), Blending(subtype of Stacking)등이 있습니다. 두 방법은 기존 방법의 하위 방법이지만 앙상블 학습에 많이 활용되므로 위 3가지 방법을 설명하면서 각 하위 방법을 설명하겠습니다. 이후 앙상블의 장점과 단점을 간단히 설명하겠습니다.

모델 앙상블 1 – Bagging(배깅)

모델 앙상블 을 위해 대표적인 방법으로는 Bagging(배깅)이 있습니다. Bagging은 Boostrap Aggregating의 약자입니다. 이름에서 알 수 있다시피 부트스트랩을 이용합니다. 부트스트랩은 주어진 데이터셋에서 무작위 샘플링을 통해 새로운 데이터셋을 생성하는 것을 의미합니다. 부트스트랩으로 생성된 여러 데이터셋을 이용해 weak learner를 훈련시키고, 그 결과를 Voting하여 최종 예측을 만듭니다.

여기서 voting이란?

“단순한 투표방식”이라고 접근하면 쉽습니다. voting(보팅)이라는 표현에서 알 수 있듯이, 서로 다른 알고리즘을 가진 분류기 중 투표를 통해 최종 예측 결과를 결정하는 방식입니다. 알고리즘에는 흔희 알고 있는 결정 트리(Decision Tree)나 KNN(K-Nearest Neighbor), 로지스틱(Logistic) 같은 걸 의미합니다. 보팅은 최종 결과 선정 방식에 따라 Hard Voting (하드 보팅), Soft Voting(소프트 보팅) 두 가지로 나뉩니다.

  • Hard Voting: 다수결의 원칙을 따르는 방식으로, 각각의 분류기의 결과값 중 가장 많은 걸 따릅니다.
  • Soft Voting: 분류기의 확률을 더하고 각각 평균을 내서 확률이 제일 높은 값을 결과값을 선정합니다.

하나의 예시를 들겠습니다.
우주에 관한 임무를 실행할 때에는 모든 신호(signal)들이 순서대로 잘 배치되는것이 중요합니다. 우리가 가진 신호가 다음과 같은 이진 문자열이라 해봅시다.

1110110011101111011111011011

만약 신호가 다음과 같이 망가졌다면, (두번째 1 한 개가 0으로 바뀐 상태):

1010110011101111011111011011

하나의 생명을 잃을 수도 있습니다. 에러 수정 코드에서 해결책을 찾을 수 있습니다. 가장 단순한 방법은 repetition-code입니다. 이 방법은 신호를 동일한 크기의 덩어리로 여러 번 반복하고, 다수결 투표 방식을 적용하는 것입니다.

Original Signal: 1110110011

Encoded: 10,3 101011001111101100111110110011

	Decoding: 1010110011    # 두번째 자리 0 주목

	                 1110110011  # 두번째 자리 0이 1로 바뀐 상태

                         1110110011  # 두번째 자리 0이 1로 바뀐 상태  
                
   Majority Vote: 1110110011  # 바뀐 1이 유지되는 상태

신호가 손상되는 경우는 흔하지 않습니다. 따라서 다수결 투표방식이 오히려 신호를 손상 시킬 가능성은 더욱 낮습니다. 이 방법으로 신호 손상을 100% 예측할 수는 없지만, 이러한 방식으로 손상된 신호를 원래 신호로 복구할 수 있습니다.

머신러닝에서의 예시

우리가 10개의 샘플을 가지고 있다고 가정해봅시다. 이 샘플들의 실제 정답(ground truth)은 모두 1입니다.

1111111111

세 개의 이진 분류기(binary classifiers)가 있으며, 각각의 모델은 70%의 정확도를 가지고 있습니다. 이 모델들은 70% 확률로 1을 예측하고, 30% 확률로 0을 예측하는 난수 생성기로 볼 수 있습니다. 이러한 랜덤 모델들도 다수결 투표 방식을 통해 78%의 정확도를 달성할 수 있습니다. 이를 수학적으로 설명하면 다음과 같습니다: 3명의 분류기가 다수결 투표를 할 때 4가지 결과를 예상할 수 있습니다.

  • 세 개 모두 정답일 확률: 0.7 * 0.7 * 0.7 = 0.3429
  • 두 개만 정답일 확률: 0.7 * 0.7 * 0.3 + 0.7 * 0.3 * 0.7 + 0.3 * 0.7 * 0.7 = 0.4409
  • 한 개만 정답일 확률: 0.3 * 0.3 * 0.7 + 0.3 * 0.7 * 0.3 + 0.7 * 0.3 * 0.3 = 0.189
  • 세 개 모두 오답일 확률: 0.3 * 0.3 * 0.3 = 0.027

여기서 우리는 약 44%의 경우에서 다수결 투표가 오답을 정답으로 고칠 수 있다는 것을 알 수 있습니다. 이러한 투표는 정답률을 78%로 올려줍니다. (0.3429 + 0.4409 = 0.7838)

다시 Bagging으로 돌아와서, 대표적인 예시로 Random Forest가 있습니다.

  • Random Forest(랜덤 포레스트)

모델 앙상블 2 – Boosting(부스팅)

모델 앙상블 을 위한 대표적인 방법으로는Boosting(부스팅)이 있습니다. Boosting(부스팅)은 순차적으로 모델을 학습시키고, 이전 모델이 잘못 예측한 부분을 다음 모델이 개선할 수 있도록 하는 방법입니다. 각 모델의 예측 결과를 가중 평균하여 최종 예측을 만듭니다. Boosting 기법은Adaptive Boosting(AdaBoost, 아다부스트)와 Gradient Boosting Model (그라디언트 부스팅, GBM) 계열로 나눌 수 있습니다.

모델명 설명 장점 단점
AdaBoost AdaBoost는 가장 초기의 부스팅 알고리즘 중 하나로, 약한 학습기(weak learners)를 순차적으로 학습시킵니다. 이전 학습기에서 잘못 분류된 샘플에 더 많은 가중치를 부여하여 이후 학습기가 이를 더 잘 맞추도록 합니다. 단순한 모델을 결합하여 강력한 예측 성능을 발휘합니다. 노이즈에 민감할 수 있으며, 계산 비용이 많이 들 수 있습니다.
GradientBoost GBM은 순차적으로 모델을 학습시키면서 각 단계에서 이전 모델의 오차를 줄이는 방향으로 새로운 모델을 추가합니다. 주로 결정 트리를 약한 학습기로 사용합니다. 높은 예측 성능을 가지고 있으며, 다양한 손실 함수를 지원합니다. 계산 시간이 오래 걸릴 수 있으며, 하이퍼파라미터 튜닝이 필요합니다.
XGBoost XGBoost는 GBM의 확장 버전으로, 성능과 효율성을 높이기 위해 여러 최적화 기법을 적용했습니다. 예를 들어, 병렬 처리, 정규화, 트리 부스트 알고리즘 등을 포함합니다. 매우 빠르고, 성능이 뛰어나며, 과적합을 방지하는 다양한 기법을 포함합니다. 복잡한 모델로 인해 해석이 어려울 수 있습니다
LightGBM LightGBM은 대용량 데이터와 높은 차원 데이터에서 효율적으로 학습할 수 있도록 설계되었습니다. 리프 중심 트리 분할 방식을 사용하여 빠른 학습 속도와 낮은 메모리 사용을 실현합니다. 매우 빠르고, 대용량 데이터에서 성능이 뛰어납니다. 적은 데이터에서는 과적합이 발생할 수 있습니다.
CatBoost CatBoost는 범주형 데이터를 처리하는 데 최적화된 부스팅 알고리즘입니다. 순서 인코딩을 사용하여 범주형 특성을 자동으로 처리합니다. 범주형 데이터에 대한 강력한 성능과, 오버피팅을 방지하는 여러 기법을 포함합니다. 학습 속도가 다른 부스팅 알고리즘보다 느릴 수 있습니다.
NGBoost NGBoost는 확률적 예측을 목표로 하는 부스팅 알고리즘으로, 각 예측에 대해 불확실성을 추정합니다. 자연 그라디언트(Natural Gradient)를 사용하여 확률 분포를 예측합니다. 예측의 불확실성을 제공하여 더 많은 정보를 제공합니다. 다른 부스팅 알고리즘에 비해 덜 알려져 있으며, 구현이 복잡할 수 있습니다.

모델 앙상블 3 – Stacking(스태킹)

모델 앙상블 을 위해 대표적인 방법으로는Boosting(부스팅)이 있습니다. 스태킹(Stacking), 또는 스태킹 제너럴라이제이션(Stacking Generalization)은 1992년 David H.Wolpert in 1992가 제안한 방법입니다. 이 기법은 여러 개의 서로 다른 모델(베이스 모델)을 학습시키고, 그 예측 결과를 조합하여 최종 예측을 만드는 방식입니다. 이 방법의 핵심 요소는 메타 모델(Meta-model)입니다.
다음은 이 방법을 더 직관적이고 깔끔하게 설명한 내용입니다:

  1. 스테이지 0 (베이스 모델 학습):
    • 여러 개의 다른 모델(베이스 모델)을 k-폴드 교차 검증을 이용해 학습시킵니다.
    • 각 폴드에서 베이스 모델은 검증 세트에 대한 예측을 수행합니다.
    • 이러한 예측 결과를 모아 새로운 데이터셋을 만듭니다. 이는 메타 모델이 베이스 모델이 학습한 데이터를 직접 보지 않도록 하여 과적합을 방지하는 데 도움을 줍니다.
  2. 스테이지 1 (메타 모델 학습):
    • 베이스 모델의 예측 결과로 구성된 새로운 데이터셋을 사용하여 메타 모델을 학습시킵니다.
    • 메타 모델은 이 예측 결과를 조합하여 최종 출력을 만듭니다.

스태킹의 장점은 다양한 모델의 강점을 활용하여 전체적인 성능을 향상시킬 수 있다는 것입니다. 스테이지 0에서 k-폴드 교차 검증을 사용함으로써 과적합을 방지하고 견고한 성능을 보장할 수 있습니다.


스태킹(Stacking)은 여러 일반화 모델들을 비선형적으로 결합하여 새로운 일반화 모델을 만드는 방법입니다. Stage 0에서 사용하는 머신러닝 모델들의 예측 결과가 다양할수록 성능이 향상된다고 합니다.
다음으로, Stacking에서 k-fold 교차 검증을 생략하고 one-hold out 방식을 사용하는 Blending에 대해 알아보겠습니다.

그 외 – Blending

모델 앙상블 을 위한 위 3자기 방법외에 Blending이라는 방법이 있습니다. 이 방법은 Stacking에서 사용하는 k-fold 교차 검증을 생략하고, 데이터를 훈련-검증-테스트 세트로 나누어 각 ML 모델을 한 번씩 훈련시킨 후, 예측된 값을 사용하여 메타 모델을 학습하는 방식으로, Stacking보다 단순합니다. Blending의 장점은 비교적 단순하고, Stage 0 모델이 학습하는 데이터와 Stage 1 모델이 학습하는 데이터가 달라 정보 누출 가능성이 적으며, 시간 절약 효과가 있다는 것입니다. 단점으로는 사용되는 데이터 양이 적고, 검증 세트에 과적합될 가능성이 있다는 점이 있습니다.

 

장점과 단점

장점

  • 향상된 성능: 여러 모델의 예측을 결합함으로써 단일 모델보다 더 높은 정확도를 달성할 수 있습니다. 이는 특히 다양한 데이터셋과 조건에서 일관된 성능 향상을 기대할 수 있습니다.
  • 과적합 방지:여러 모델을 결합함으로써 특정 데이터 포인트에 지나치게 최적화되는 문제를 효과적으로 방지할 수 있습니다.
  • 다양성을 기반으로 한 안전성: 모델의 다양성이 증가함에 따라 개별 모델의 약점을 상쇄하여 예측의 변동성을 줄이고 일관성을 높일 수 있습니다. 이는 예측의 안정성이 높아지는데 효과적이며 특히 노이즈가 많은 데이터에서 성능 향상으로 이어질 수 있습니다.
  • 유연성: 다양한 모델을 결합함으로써 복잡한 데이터에 대한 대응력을 높일 수 있습니다.

단점

  • 복잡성 증가: 여러 모델을 결합하다 보니 시스템의 복잡성이 증가하여 구현과 유지보수가 어려워질 수 있습니다.
  • 계산 비용: 다수의 모델을 훈련하고 예측을 결합하는 과정에서 많은 계산 자원이 필요할 수 있습니다.
  • 해석의 어려움: 앙상블 모델은 단일 모델보다 결과를 해석하기가 어려워질 수 있으며, 이를 통해 얻은 통찰력을 설명하는 데 한계가 있을 수 있습니다.