본문 바로가기
Data & Research

[Machine Learning] Random Forest

by TrillionNT 2024. 11. 12.
Dr.Trillion

지난 번에 앙상블 기법의 전반적인 얼개에 대해서 포스팅을 올린적이 있습니다. 

 

랜덤 포레스트의 특성

 

전반적인 얼개에서 좀 더 들어가서 구체적인 Random Forest, Adaboost, Gradient Boosting 등 현업에서 많이 쓰이는 구체적인 기법들에 대해서 좀 더 살펴볼 생각입니다. 첫번째로 랜덤 포레스트(Random Forest)입니다. 랜덤 포레스트는 쉽게 말해 Bagging을 의사결정나무(Decision Tree)에 적용하고 랜덤과정을 추가한 앙상블 모형이라고 보시면 될 것 같습니다. 데이터로부터 Bootstrap 샘플을 추출하고 각 Bootstrap 샘플에 대해 트리를 형성한다는 점은 단순한 Bagging과 유사하지만, 각 node마다 모든 예측 변수 안에서 최적의 분할(Split)을 선택하는 대신 예측 변수들을 임의로 추출하고 추출된 변수 내에서 최적의 분할을 만들어나갑니다. 

이렇게 예측변수를 랜덤하게 선택하는 이유는 당연하게도 과적합(Overfitting) 때문입니다. Boosting 계열의 모형들이 Over-fitting이 심한 편이기 때문에 이런식으로 과적합을 완화하려는 것이죠. 

 

 

랜덤 포레스트의 일반화 오차

일반화 오차(Generalization Erorr)라는 것은 테스트하지 않은 데이터일지라도 최악의 경우 어디까지 안 좋을 수 있는지를 나타내는 척도입니다. 

 

\[ \text{Generalization Error} \leq \frac{\bar{\rho} (1 - s^2)}{s^2} \]

여기서 \( \bar{\rho} \)는 개별 의사결정나무 예측 확률 간 상관계수의 평균값을 나타내고 \( s^2 \)는 마진함수를 나타냅니다.

individual classifier가 더 정확할수록 \( s^2 \)는 더 커지고, Generalization error는 더 작아집니다. classifier 간 상관관계가 낮을 경우에 Generalization error는 더 작아집니다.

 

예시)

reference : 패스트캠퍼스 실무 문제 해결을 위한 데이터사이언스

 

Average correlation = 0.9027 (A & B = 0.8229, A & C = 0.9413, B & C = 0.9438)
Average margin = 0.7460

 

Generalization error <= 0.3074

 

랜덤 포레스트의 변수 중요도 (Feature Importance)

feature importance를 구하는 step은 아래와 같습니다. 

1. 원래 데이터 집합에서 Out of Bag(OOB) Error를 구합니다. 

2. 특정 변수의 값을 임의로 뒤섞은(random permutation) 데이터 집합에 대해서 OOB Error를 구합니다. 

3. 개별 변수의 중요도는 2.와 1. OOB error의 평균과 분산을 고려해서 추정합니다. 

 

m번째 tree에서 변수 i에 대한 Random permutation 전후 OOB error의 차이

\[ d_i^m = p_i^m - e_i^m \]

전체 Tree들에 대한 OOB error 차이의 평균 및 분산

\[ \bar{d}_i = \frac{1}{m} \sum_{i=1}^{m} d_i^m, \quad s_i^2 = \frac{1}{m-1} \sum_{i=1}^{m} (d_i^m - \bar{d}_i)^2 \]

i번째 변수의 중요도:

\[ v_i = \frac{\bar{d}_i}{s_i} \]

 

만약, 랜덤 포레스트에서 Feature importance가 높다면, Random-permutation 전후의 OOB Error 차이가 크게 나타나야 하고, 이 차이의 (Tree 간) 편차가 작아야 합니다.