model combining - 1. aggregation

모형 결합

모형 결합(model combining) 방법은 앙상블 방법론(ensemble methods)라고도 한다. 단일모형으로 예측이 잘 되지 않을 때, 복수의 모형을 결합해 예측성능을 높이고자 할 때 사용한다.

  • 장점
    1. 개별 모형의 성능이 안좋을 때는 결합모형을 하게 되면 성능이 향상된다.
    2. 단일모형으로 할 때보다 과최적화를 방지할 수 있다.

모형 결합 방법은 크게 취합(aggregation) 방법론과 부스팅(boosting) 방법론으로 나눌 수 있다.

  1. 취합(aggregation)

    처음부터 여러 모델로 한 문제를 푼다.

  2. 부스팅(boosting)

    한 모델이 문제를 풀다가 잘 못하면 그 다음 다른모형을 투입한다. 그 두 모형이 풀다가 잘 못푸는 문제가 생기면 한 모델을 또 추가한다. 모형마다 하는 역할이 다르다.

각 방법론의 대표적인 방법들은 아래와 같다.

  • 취합 방법론
    • 다수결 (Majority Voting)
    • 배깅 (Bagging)
    • 랜덤 포레스트 (Random Forests)
  • 부스팅 방법론
    • 에이다부스트 (AdaBoost)
    • 그레디언트 부스트 (Gradient Boost)

1. 취합 aggregation

1) 다수결 방법

: 가장 단순한 모형결합 방법으로, 전혀 다른 모형끼리도 결합할 수 있다. 5가지 모형이 있으면 그 5개의 모형들로 하나의 분류문제를 다 풀어본다.

scikitlearn의 ensemble 서브패키지는 다수결 방법을 위해 VotingClassifier 클래스를 제공하는데, 이를 이용해 모형들을 합치면 이 세 모형이 마치 하나의 모델인것처럼 사용할 수 있게 된다.

이렇게 모델을 취합하는 방법은 두 가지로 나뉜다.

  • hard voting: 모형들의 가중치가 모두 동일한 단순투표. 개별모형의 결과를 단순히 취합.

  • soft voting: 모형마다 가중치를 다르게 주는 가중치 투표. 개별모형의 조건부 확률값을 취합.

두 방식으로 각각 했을때 분류 결과가 달라진다.

예를 들어 로지스틱 회귀모형, QDA 모형, 가우시안 나이브 베이즈 모형, 이 세 가지 모형으로 하나의 이진분류 문제를 다수결방법으로 푼다고 하자. 이 때 가우시안 나이브 베이즈모형에만 다른 모형들에 비해 가중치를 두 배로 주고 예측을 진행하면, 각각의 모형에서 예측한 클래스와 소프트 보팅으로 다수결방법을 했을 때 예측된 클래스는 다음과 같다.

소프트 다수결 모형은 각 모형마다의 가중치를 고려해 확률값의 합으로 클래스를 결정하기 때문에 세 모델의 조건부확률값의 합이 더 큰 클래스 2로 예측한다.

그러나 만약 하드 다수결모형을 사용했다면 1개의 모델(QDA)에서만 선택된 클래스 2가 아닌, 나머지 2개의 모델에서 예측된 클래스 1을 답으로 예측해내게 된다.

모형 결합을 사용한 성능 향상

다수결 모형의 핵심가정 : 개별 모델들은 상호간에 영향을 받지 않고 독립적으로 문제를 예측한다.

위 가정을 따르면 N개의 모델이 모여 정답을 출력할 확률은 아래와 같아진다.

아래 그래프를 보면, 개별모형의 성능이 정답률 60프로일 때, 그런 모형이 10개가 모이면 성능이 80프로, 100개가 모이면 거의 99프로까지도 올라가는 것을 확인할 수 있다.

다만, 개별모형의 성능이 50프로가 안되면 모형결합을 했을 때 오히려 더 성능이 나빠지는 것도 확인된다. 즉, 다수결모형을 만들 때는 최소한 정확도가 50은 넘는 개별모형들로 모아야 한다.

그런데 우리가 지금까지 배운 모형의 종류가 5개 정도밖에 안 되는데 어떻게 10개, 100개의 모형을 모을 수 있을까?

2) 배깅

배깅(bagging)은 동일한 확률모형을 쓰지만 모형마다 데이터를 다르게 줌으로써 서로 다른 결과를 출력하는 다수의 모형을 만들어 다수결모형을 적용하는 방법이다.

부트스트래핑이나 크로스 밸리데이션에서처럼 트레이닝데이터를 랜덤하게 선택해서 각각의 모형에 주면 모형마다 다른 결과가 나오게 된다. 이런 식으로 다른 결과를 출력하는 모델들을 많이 만들어내는 것이다.

배깅은 트레이닝데이터를 선택하는 방식에 따라 다음과 같이 부르기도 한다.

  • 같은 데이터 샘플을 중복사용(replacement)하지 않으면: Pasting

  • 같은 데이터 샘플을 중복사용하면: Bagging

  • 데이터가 아니라 다차원 독립변수 중 일부 차원을 선택하는 경우는: Random Subspaces

  • 데이터 샘플과 독립변수 차원 모두 일부만 랜덤하게 사용하면: Random Patches

배깅 방법은 회귀분석, 분류 등 어떤 문제도 풀어낸다는 장점이 있지만, 계산량이 많다는 단점이 있다.

Scikit-Learn 의 ensemble 서브패키지는 배깅 모형 결합을 위한 BaggingClassifier 클래스를 제공한다.

아래는 모형 한 개를 사용했을 때와 배깅모형을 사용했을 때의 분류 결과를 시각화한 것이다.

  • depth=5로 설정한 개별모형

    빨간 영역 안에 끼어들어간 녹색 아웃라이어 데이터를 분류하기 위해 그 위치에 해당하는 부분만 영역이 나누어졌다. 하지만 이것은 분명한 오버피팅이다. 그 영역에 새로운 데이터가 들어온다면 빨간색일 가능성이 높은데 녹색으로 분류되어버리기 때문이다.

  • 배깅 모형(10개의 개별모형을 합침)

    배깅모형을 사용한 경우에는 오버피팅이 이루어지지 않은 것을 확인할 수 있다. 이유가 뭘까? 배깅방법은 모델들에 데이터를 분배하기 때문에 각 모델에는 데이터의 일부만 들어가게 된다. 따라서 대부분의 모델에는 아웃라이어인 데이터가 안들어갔을 확률이 높다. 즉, 여러 모델 중 아웃라이어에 대해 오버피팅을 하지 않은 모델이 더 많게 된다. 이러한 모델들로 다수결을 하게 되면 오버피팅 발생 확률이 낮아진다. 자동으로 정규화가 되는 것이다.

3) 랜덤 포레스트

의사결정나무 여러 개를 개별모형으로 사용해서 포레스트라는 이름이 붙여진 랜덤포레스트(Random Forest)는 정말 많이 사용되는 다수결방법이다.

배깅과 마찬가지로 랜덤포레스트 방법에서는 트리 여러 개에 데이터들을 분배해서 준다. 각 트리에서 하위 노드로 내려갈 때는, 부모노드에서썼던 그 변수를 그대로 선택하는 게 아니라 전체 데이터에서 다시 한 번 서브스페이싱(subspacing)을 해서 랜덤하게 변수를 선택해 사용한다. 노드마다마다 이렇게 랜덤하게 데이터 서브스페이싱을 새로 한다. 이렇게 하면 개별모델들의 독립성이 증가해 모형성능의 변동이 감소하는 효과가 있다.

원래 개별 의사결정나무는 greedy한 선택, 즉 위에서 내려올 때 항상 그순간에 가장 좋은 변수를 사용한다. 그런데 랜덤포레스트는 제약조건을 줘서 non-greedy한 변수선택을 한다.

랜덤포레스트의 극단적 형태인 Extremely Randomized Trees 모형은 맨 처음 변수를 분배할 때부터 어디부터 어디까지 특정 범위로 주는게 아니라 각 노드마다 아예 하나의 변수를 랜덤하게 준다.

랜덤 포레스트의 장점 중 하나는 각 독립변수의 중요도(Feature Importance)를 계산할 수 있다는 점이다.

  • feature importance

    랜덤하게 선택된 변수들의 IG, 즉 아래 노드로 내려가면서 엔트로피가 얼마나 감소하는지를 비교해보면 각 변수의 중요도를 계산할 수 있다. 의사결정나무의 경우 선택되는 변수들이 정해져 있기 때문에 선택 기회조차 얻지 못하는 변수들에 대해서는 IG를 계산하기가 힘들다. 그런데 랜덤포레스트의 경우 변수가 랜덤으로 선택되기 때문에 좀더 공정하게 변수들의 중요도를 파악할 수 있다.

Share