ASAC 빅데이터 분석가 7기/ML(Machine Learning)

Ensemble [ML 모델의 성능 평가&과적합 방지]

junslee 2025. 1. 20. 09:58

Ensemble(앙상블)

  • 머신러닝에서 여러 개의 모델(또는 예측기)를 결합하여 더 나은 성능을 얻고자 하는 방법론
  • 개별 모델의 예측 결과를 조합함으로써 단일 모델보다 일반화 성능을 개선하고,
    과적합(overfiting)과 같은 문제를 완화하는 데 사용한다.

  • 개별 모델은 데이터의 일부 패턴만 학습할 수 있지만, 여러 모델을 결합하면 더 넓은 패턴을 포착할 수 있다.
  • 서로 다른 모델의 결과를 합치면 편향(bias)과 분산(variance)를 줄일 수 있다.
  • Diversity : 모델 간의 결정 경로와 결과의 차이
    - 모델의 다양성을 확보하여 앙상블 성능을 높이는 핵심 전략
  • 장점
    - 모델의 일반화 성능 향상.
    - 과적합 감소: 다양한 모델의 조합으로 특정 데이터에 치우치는 것을 방지.
    - 유연성: 서로 다른 알고리즘을 결합 가능.
    - 복잡한 문제에서도 뛰어난 성능.
  • 단점
    - 계산량이 증가: 여러 모델을 학습시키고 결합해야 하므로 시간이 더 걸림.
    - 모델 해석이 어려움: 개별 모델의 기여도를 파악하기 어려울 수 있음.
    - 데이터가 충분하지 않을 경우 오히려 성능 저하 가능.

  • 언제 사용할까?
    - 단일 모델의 성능이 충분하지 않을 때.
    - 데이터가 복잡하고 다양한 패턴이 포함되어 있을 때.
    - 다양한 모델을 결합함으로써 강건한 예측이 필요한 경우.

Ensemble의 주요 방법

Voting

  • 여러 모델의 결과를 단순히 다수결(분류) 또는 평균(회귀)으로 결합하여 최족 예측값을 도출하는 방법
  • 유형
    Hard Voting: 각 모델의 최종 예측 결과를 다수결로 결정. (분류)
    Soft Voting: 각 모델의 클래스 확률 값을 평균 내서 최종 결과를 예측. (회귀)
  • Many와 Diversity가 같이 가야 한다.

Bagging (Bootstrap Aggregating)

  • 데이터의 부분 샘플(bootstrapping)을 생성하여
    - 각 샘플에 대해 독립적으로 모델을 학습한 뒤, 결과를 평균 또는 투표로 결합한다.
  • 특징
    - 모델 간의 독립성이 중요하며, 결과를 평균화하거나 투표로 결합함으로써 분산을 감소
    - 입력 데이터를 다양하게 만드는 방법
  • 대표 알고리즘
    - 랜덤 포레스트(Random Forest): 여러 결정 트리를 병렬로 학습하며, 트리 생성 시 일부 변수만 고려하여 모델 다양성을 높힌다.

  • Bootstrapping sampling : 샘플링 방식 -> 중요한 부분은 "복원추출"을 통한 "원래 데이터 수"만큼 선택하게 되는 것
    - 주어진 데이터셋에서 중복을 허용하여 여러 개의 부트스트랩 샘플을 생성
  • Aggregating (예측 결합) : 모든 트리가 독립적으로 학습하여 예측 단계에서는 트리들의 결과를 결합한다.

  • Subspace : 모든 변수를 다 사용하는 것이 아니라 랜덤하게 사용

  • Parameter
    - n_estimator : 랜덤 포레스트의 결정 트리 수 지정, 많이 할수록 좋을 수 있으나, 무조건 좋지는 않으며 시간이 늘어나게 된다.
    - max_feature : 결정 트리에 사용된 최대 피처수. 
    분류 : (변수)^(1/2)
    회귀 : (변수)/3
    - max_depth, min_samples_leaf : 과적합을 개선하기 위해서 사용되는 파라미터

Random Forest의 동작 과정

랜덤 샘플링 → 결정 트리 학습 → Hard Voting(또는 평균화)

  • 1. 랜덤 샘플링 (Bootstrap Sampling)
    - 주어진 데이터셋에서 중복을 허용하며 랜덤하게 샘플링하여 여러 개의 부트스트랩 샘플을 만든다.
    데이터셋 크기가 NN이라면, 각 샘플도 NN개의 데이터를 가지지만 일부 데이터는 중복될 수 있다.
    => 데이터 다양성을 확보

  • 2. 결정 트리 학습
    - 각 부트스트랩 샘플에 대해 결정 트리를 학습합니다.
    - 학습 과정에서 추가적인 랜덤성을 부여합니다:

    - 특징의 랜덤 선택
    분기(split) 시, 모든 특징을 고려하지 않고 무작위로 선택된 일부 특징 중에서 최적의 분기 기준을 찾는다.
    => 트리 간 다양성을 증가

3. Hard Voting 또는 평균화 (Aggregating)
- 분류 문제: 각 트리의 예측 결과를 모아 **다수결(Hard Voting)**로 최종 결과를 결정한다.
예: 트리 100개 중 클래스 1을 예측한 트리가 60개, 클래스 2를 예측한 트리가 40개 → 최종 예측은 클래스 1.
- 회귀 문제: 각 트리의 예측값을 평균하여 최종 결과를 계산한다.


Hard Voting을 사용하는 이유

  • 랜덤 샘플링
    - 데이터 다양성을 증가시켜 **과적합(overfitting)**을 방지.
    - 부트스트랩 샘플링 덕분에 각 트리는 데이터의 서로 다른 부분에 대해 학습.
  • Hard Voting
    - 여러 트리의 결과를 결합함으로써 오류를 상쇄하고 성능을 안정화.
    - 개별 트리가 가진 약점을 보완하고, 더 나은 일반화 성능을 제공.

Random Forest

  • 랜덤 샘플링된 데이터를 기반으로 여러 개의 결정 트리를 학습.
  • 학습된 트리의 결과를 Hard Voting(분류) 또는 평균(회귀)으로 결합해 최종 예측값을 만든다.
  • 랜덤 샘플링과 트리 간 다양성 덕분에 과적합을 줄이고 일반화 성능이 향상된다.

Boosting

  • 이전 모델이 틀린 샘플에 가중치를 부여하여 다음 모델이 해당 샘플을 잘 학습하도록 하는 방식이다.
    모델들이 순차적으로 학습하며, 성능을 점진적으로 개선한다. (이전 모델의 오류를 보완)
  • 특징
    편향을 줄이는 데 효과적이지만 과적합 위험이 있다.
  • 대표 알고리즘
    - AdaBoost (Adaptive Boosting)
    - Gradient Boosting Machines (GBM)
    잔여 오차(residuals)를 최소화하는 방향으로 모델을 학습한다.
    XGBoost, LightGBM, CatBoost (Gradient Boosting의 확장)

Bagging vs Boosting

 

  • Bagging
    - 여러 모델을 병렬로 학습
    - 결과를 평균/투표로 결합하여 분산 감소에 초점을 둔다.
  • Boosting
    - 모델을 순차적으로 학습
    - 이전 모델의 오류를 보완해 편향 감소를 목표로 한다.

 

Gradient Boosting

  • 여러 개의 약한 학습기(weak learner)를 순차적으로 학습시켜,
    모델이 이전 모델의 오류를 점진적으로 보완하도록 설계된 알고리즘
  • 잔차(residual)를 줄이기 위해 그레디언트(기울기)를 사용하여 최적화를 진행

Gradient Boosting의 동작 원리

 

  • 1. 초기 모델 생성
    - 첫 번째 약한 학습기 h1(x)h_1(x)가 데이터에 대한 초기 예측값을 생성
    - 이 예측값은 단순히 평균값이나 상수로 시작할 수 있다.
  • 2. 잔차(residual) 계산
    - 잔차란 현재 모델의 예측값과 실제 값의 차이이다.
    - 각 데이터 포인트에 대해 얼마나 틀렸는지를 나타낸다.

 

  • 3. 다음 모델 학습
    - 새로운 약한 학습기가 이전 모델이 만든 잔차를 예측하도록 학습한다.
    - 그레디언트 디센트(경사 하강법)을 활용하여 잔차의 크기를 줄이는 방향으로 진행된다.
  • 4.모델 결합
    각 학습기의 예측값을 가중치를 적용하여 결합한다.

  • 5. 반복
    위 과정을 여러 단계 반복하여 최적의 예측 모델을 생성한다.

Gradient Boosting의 특징

  • Residual fitting으로 주로 처리
  • A모델론 예측을 하고, 남은 잔차를 B모델로 하고, 또 남은 잔차를 C모델로 해서 잔차를 줄여나가는 방식
  • 약한 분류기를 사용에 있어 주로 트리구조를 사용
    -> gradient boosting tree 에 대해서 최대한 빠르게 구현한 것이 xgboost

  • Error를 명확하게 Target으로 하고 이를 줄이는 방식 -> 최근에는 boost기반의 알고리즘이 많이 사용된다.
  • Gradient Boosting은 이전 모델의 오류를 보완하도록 순차적으로 학습하며, 잔차를 줄이는 방향으로 최적화를 진행하는 알고리즘
  • 회귀와 분류 문제에서 높은 성능을 발휘하며, 다양한 확장 알고리즘(XGBoost, LightGBM 등)으로 발전되어 널리 사용

Xgboost

  • Gradient Boosting 알고리즘을 기반으로 한 강력한 앙상블 학습 기법
  • 높은 성능과 효율성을 목표로 설계

XGBoost의 특징

  • Gradient Boosting 기반
    Gradient Boosting 알고리즘을 확장하여 학습 속도와 성능을 크게 개선한 모델.

  • 병렬 처리
    트리 학습 과정에서 분기(split) 기준을 병렬로 계산해 학습 속도를 극대화한다.

  • 정규화(Regularization)
    모델 복잡도를 제어하기 위해 L1 및 L2 정규화를 지원하며, 과적합을 방지한다.

  • Sparsity Awareness
    희소 데이터(sparse data)를 효율적으로 처리하며, 결측값(missing value)을 자동으로 다룬다.

  • 사용자 정의 손실 함수
    문제에 맞게 사용자 정의 손실 함수를 구현할 수 있다.

  • 모델 저장 및 로드
    모델을 파일로 저장하고 불러오는 기능을 지원하여 재사용 가능.

 

1. 학습 관련 파라미터 (Learning-related Parameters)

학습률, 반복 횟수, 손실 함수 등을 포함합니다.

  • learning_rate (또는 eta)
    - 학습률을 조정
    - 각 트리의 기여도를 줄임으로써 학습 과정의 안정성을 증가시킨다.
    - 낮은 값을 사용하면 더 많은 트리를 필요로 하지만 일반화 성능이 향상될 수 있다.
    - 기본값: 0.3 (추천 범위: 0.01~0.2)
  • num_boost_round
    - 생성할 부스팅 단계(트리)의 개수를 설정한다.
    - 학습률과 함께 과적합을 제어하는 데 중요한 역할을 한다.
  • objective
    - 손실 함수를 정의한다. (문제 유형에 따라 선택)
    reg:squarederror: 회귀 (Mean Squared Error)
    binary:logistic: 이진 분류 (확률 출력)
    multi:softmax: 다중 분류 (클래스 레이블 출력)
    multi:softprob: 다중 분류 (클래스별 확률 출력)
  • eval_metric
    - 평가 지표를 설정한다. 학습 과정에서 모델 성능을 평가하는 데 사용된다.
    예: rmse (Root Mean Squared Error), logloss (Logarithmic Loss), error (Classification Error).
  • n_estimators
    - 학습에 사용할 부스팅 단계(트리)의 수이다.
    - 기본적으로 num_boost_round와 동일하게 동작하며, 학습률과 함께 과적합을 제어한다.
  • seed
    - 학습 과정에서 랜덤성을 제어하는 파라미터이다.
    - 동일한 결과를 재현하려면 설정해야 한다.

2. 모델 관련 파라미터 (Model-related Parameters)

모델 구조와 복잡도를 제어하며, 트리의 크기, 샘플링 비율 등을 포함합니다.

1. 트리 구조 제어

  • max_depth
    트리의 최대 깊이를 설정합니다.
    깊이가 깊을수록 모델 복잡도가 증가하지만 과적합 위험이 커집니다.
    기본값: 6 (추천 범위: 3~10)
  • min_child_weight
    리프 노드가 되기 위한 최소 샘플 가중치 합.
    값이 클수록 과적합을 방지하지만, 학습이 덜 될 가능성이 있습니다.
    기본값: 1
  • gamma
    노드를 분할하기 위한 최소 손실 감소값.
    값이 클수록 과적합을 방지하며, 0이면 제한이 없습니다.
    기본값: 0

2. 샘플링 비율

  • subsample
    각 트리 학습에 사용할 샘플 비율.
    값을 낮추면 과적합 방지에 도움을 주지만, 값이 너무 낮으면 학습이 불안정해질 수 있습니다.
    기본값: 1.0 (전체 데이터 사용)
  • colsample_bytree
    각 트리를 학습할 때 사용할 특징(변수) 비율.
    랜덤하게 선택된 특징만 사용하여 모델 다양성을 증가시킵니다.
    기본값: 1.0
  • colsample_bylevel
    트리의 각 레벨에서 사용할 특징의 비율.
    기본값: 1.0
  • colsample_bynode
    각 노드에서 사용할 특징의 비율.
    기본값: 1.0

3. 정규화***

  • reg_alpha
    L1 정규화 항. 중요하지 않은 변수의 가중치를 0으로 만듭니다.
    기본값: 0
  • reg_lambda
    L2 정규화 항. 과적합 방지에 사용됩니다.
    기본값: 1

4. 기타

  • scale_pos_weight
    불균형 데이터셋에서 양성 클래스와 음성 클래스의 균형을 맞추기 위한 가중치.
    기본값: 1
  • max_delta_step
    트리에서 각 가중치의 최대 변화량을 제한합니다.
    값이 클수록 안정적인 학습을 도모하지만 학습 속도가 느려질 수 있습니다.

정리

  • 학습 관련 파라미터
    -학습 과정의 최적화와 평가를 제어하며, 학습률, 반복 횟수, 손실 함수 등이 포함된다.
  • 모델 관련 파라미터
    - 트리 구조와 데이터 샘플링 방식을 제어하며, 과적합 방지를 위한 정규화 항도 포함됩니다.

Stacking

- 서로 다른 유형의 모델(예: 선형 회귀, 결정 트리, SVM 등)을 학습한 뒤,
각 모델의 예측 결과를 입력으로 받아 최종 메타 모델이 결합한다.
- 특징: 복잡한 문제에서 성능이 뛰어나지만, 설정이 복잡할 수 있다.


공식 메뉴얼상 파라미터 이름

파이썬으로 포장한 것의 파라미터 이름이 다르다


Hyperparameter tunning(하이퍼파라미터 튜닝)

머신러닝 모델의 하이퍼파라미터 값을 조정하여 최적의 성능을 내는 모델을 만드는 과정
하이퍼파라미터는 학습 전에 설정해야 하며, 모델 학습 과정에서 자동으로 최적화되지 않는다.


하이퍼파라미터 튜닝의 중요성

  • 모델 성능에 직접적인 영향을 미친다.
  • 적절한 하이퍼파라미터는 과적합(Overfitting)과 과소적합(Underfitting)을 방지한다.

데이터와 문제의 특성에 따라 최적의 하이퍼파라미터가 달라지므로, 튜닝은 필수적인 과정이다.


하이퍼파라미터 튜닝의 주요 방법

  • 그리드 서치 (Grid Search)
    - 미리 정의한 하이퍼파라미터 값의 모든 조합을 시도하여 최적의 값을 찾는다.
    - 장점:
    간단하고 체계적.
    작은 데이터셋이나 비교적 적은 하이퍼파라미터에서 효과적.
    - 단점:
    탐색 공간이 커질수록 계산 비용이 기하급수적으로 증가.

  • 랜덤 서치 (Random Search)
    - 하이퍼파라미터 값의 조합 중 일부를 랜덤하게 선택하여 평가한다.
    - 장점:
    탐색 공간이 크거나 시간이 제한된 경우 효율적.
    특정 하이퍼파라미터가 중요하지 않은 경우 빠르게 최적의 값을 찾을 가능성.
    - 단점:
    무작위로 선택되므로, 중요한 조합을 놓칠 가능성.

  • 베이즈 최적화 (Bayesian Optimization)
    - 이전 시도 결과를 바탕으로 하이퍼파라미터 공간에서 더 나은 값을 탐색하는 방식이다.
    - 장점:
    탐색 효율성이 높아, 계산 비용을 줄이면서 최적의 값을 찾을 가능성이 크다.
    복잡한 문제에 적합하다.
    - 단점:
    구현이 복잡하며, 라이브러리(Optuna, HyperOpt 등)가 필요할 수 있다.

  • 초월적 탐색 방법 (Hyperband, Population-Based Training)
    - Hyperband: 랜덤 서치를 효율적으로 수행하도록 설계된 알고리즘. 비효율적인 하이퍼파라미터 조합을 조기에 중단한다.
    - Population-Based Training (PBT): 유전 알고리즘과 유사하게, 하이퍼파라미터 조합을 "번식"과 "돌연변이"를 통해 탐색한다.

하이퍼파라미터 튜닝 과정

  • 문제 정의
    회귀, 분류, 클러스터링 등 문제 유형에 따라 주요 하이퍼파라미터를 결정.
  • 하이퍼파라미터 선택
    조정할 하이퍼파라미터와 그 범위를 설정.
    예: 트리 기반 모델의 경우 max_depth, n_estimators, learning_rate 등.
  • 탐색 방법 선택
    문제의 복잡도, 데이터 크기, 계산 자원 등을 고려하여 Grid Search, Random Search, Bayesian Optimization 등을 선택.
  • 모델 학습 및 평가
    교차 검증(Cross-Validation)을 통해 각 하이퍼파라미터 조합의 성능을 평가.
  • 최적값 선택
    성능이 가장 좋은 하이퍼파라미터를 선택하고 모델을 재학습.

튜닝 시 고려 사항

  • 탐색 공간 크기:
    하이퍼파라미터 범위를 너무 넓게 설정하면 계산 비용이 커진다.
    중요하지 않은 하이퍼파라미터는 고정하거나 기본값을 사용.
  • 교차 검증:
    데이터셋이 작거나 불균형하다면 교차 검증을 통해 신뢰도 높은 평가를 해야 한다.
  • 실행 시간:
    Grid Search는 모든 조합을 탐색하므로 시간이 오래 걸릴 수 있습니다.
    계산 자원이 부족하면 Random Search나 Bayesian Optimization을 고려하자.

요약

  • 하이퍼파라미터 튜닝은 모델 성능 최적화를 위한 필수 과정
  • Grid Search, Random Search, Bayesian Optimization 등이 주요 방법이며, 각 방법은 효율성과 계산 비용에서 차이가 있다.
  • 교차 검증과 적절한 탐색 범위 설정은 튜닝 성능과 시간 효율성을 높이는 핵심 요소이다.

  • 모델별로 이제는 파라미터가 많아짐 -> 어떻게 최적의 파라미터를 찾을까

  • Grid Search : 생각할 수 있는 모든 값을 test
    -> 시간이 많이 걸림
  • Random Grid Search : 내가 생각한 값의 범위 내에서 분포를 가지고 test할 셋들을 결정하고 모두 test

  • 앞의 시행의 결과를 바탕으로 다음 시행의 값들을 추정하면서 하자는 방식
    - Bayesian 기반의 파라미터 튜닝 방식을 주로 사용