본문 바로가기
데이터 분석

랜덤 포레스트(Random Forest) 동작 원리 및 OOB, Random Subspace

by Data Lib 2023. 9. 21.

저번 포스팅에서 Random Forest의 특징에 대해 살펴봤다면 이번 포스팅에서는  그 동작원리와 OOB 개념, 그리고 파라미터 튜닝 등에 대해 알아보도록 하겠습니다. 

 

알고리즘 동작 원리

Random Forest 알고리즘은 Bootstrap 기법(복원 추출)을 이용하여 다수 훈련 데이터 생성합니다. 이것을 이전 포스팅에서 이야기 했듯이 배깅(Bagging)이라고 합니다. 생성된 훈련 데이터로 무작위 변수를 이용한 의사결정나무 모델 구축합니다. 이것을 Random Subspace 방식이라고 하는데, 아래에 다시 다루겠습니다. 마지막으로 예측 종합(Final predicted value) 과정을 거칩니다. 

  1. Bootstrap 기법으로 데이터 추출
  2. 무작위 변수를 이용한 다수의 Decision Tree 구축
  3. 최종적으로 예측 종합하여 결과 도출

 

Random Forest는 앙상블 모델입니다. 배깅도 앙상블의 하나의 종류입니다. 만약 앙상블이 궁금하시다면 아래를 참고해 주세요.

 

Random Forest와 앙상블

OOB 란

OOB(Out of Bag estimate of error rate)는 알고리즘 train에 사용되지 않은 데이터를 사용하는 error 추정치를 의미합니다. 즉, Bagging 실행할 때 bag(가방)에 미포함 데이터로 성능을 측정한다는 이야기입니다. OOB error estimation을 37% 한다고 한다고 예를 들겠습니다. 각 예측기의 63% 정도만 샘플링이 됩니다. 그리고 선택되지 않는 훈련 샘플의 37%를 OOB샘플이라고 합니다. 학습에 쓰이지 않는 데이터를 빼어두었다가 검증 데이터(validation set)로 사용합니다. Baggging 성능 측정을 위한 좋은 지표로 활용 가능합니다. oob_score=True로 지정하면 훈련 후 oob평가를 하게 됩니다. 

 


Random patch vs Random Subspace

랜덤 패치 방식은 훈련 데이터와 특성(feature) 모두 샘플링하는 방식을 말합니다. 다시말해 훈련 데이터도 일부 raw만 사용하고, feature도 선택적으로 사용한다는 의미입니다. 랜덤 서브스페이스 방식은 훈련 샘플을 모두 사용합니다. sampling 하지 않습니다. 대신 특성(feature)을 샘플링하는 방식을 말합니다. 의사결정나무의 분기점을 탐색할 때, 원래 변수의 수보다 적은 수의 변수를 선택하여 해당 변수들 만을 고려 대상으로 하는 방식입니다. 

 

Random patch vs Random Subspace
Random patch vs Random Subspace


Random Forest의 핵심 아이디어(Diversity, Random)

Bagging과 Random Subspace 기법은 각 모델들의 독립성, 일반화, 무작위를 최대화 시켜 모델간의 상관관계를 감소시킵니다. 이것으로 앙상블 모델의 요건이 충족됩니다. 

  • Bagging(bootstrap) : 데이터 샘플을 무작위로 선택
  • Random Subspace : 특성(feature)을 무작위로 선택

개별 Tree의 정확도를 기반으로 각각의 독립성을 가짐으로써 Random Forest 알고리즘은 Decision Tree에 비해 성능 높아질 가능성이 높아집니다. Tree의 다양성(Diversity)을 부여하여 편향 증가, 분산 감소 효과가 있습니다. 

 

 

하이퍼파라미터

  • n_estimators :Decision Tree의 수, 보통 2000개 이상의 Tree 필요함, Case에 따라 다르며 500개에서 2만개까지도 생성
  • max_features : Decision Tree에서 무작위 선택 feature의 개수, 정하지 않으면 기존의 feature와 동일한 개수가 설정하여 전체를 사용하는 것과 같음
  • n_jobs : 사용할 CPU 코어 수를 지정, CPU 코어 개수에 비례하여 속도 빨라지며 n_jobs=-1로 지정하면 컴퓨터의 모든 코어를 사용함

하이퍼파라미터 튜닝

랜덤 포레스트는 기본적으로 성능이 뛰어나 hp 튜닝을 많이 하지 않아도 잘 동작합니다. 그래도 n_estimators와 max_feaures는 각각 아래와 같이 튜닝할 수 있습니다.n_estimators는 클수록 좋습니다. 값이 클수록 과대적합을 줄여 안정적인 모델을 생성하기 때문입니다. 하지만 가용 시간을 고려해 메모리 만큼 설정하는 것이 좋습니다. 

 

max_features는 Tree를 서로 얼마나 달라지도록 만들 것인가의 핵심 매개변수라고 할 수 있습니다. 1로 하면 모든 feature를 사용합니다. 크게 하면 random forest 트리들은 매우 비슷해지며, 두드러진 특성을 이용해 맞춰집니다. 이는 underfitting을 유발합니다. 낮게 하면 random forest 트리들이 많이 달라지고 각 트리는 데이터에 맞추기 위해 깊어집니다. 이는 overfitting을 유발합니다. 그래서 적절한 크기를 조정할 필요가 있습니다. 힌트를 주자면 작은 것보다는 큰 게 낫습니다. 너무 작으면 overfitting이 문제가 아니라 학습이 안되는 문제가 발생합니다. 보통 분류(Classification)할 경우는 √(변수의 수 ) 즉, 특성 수의 제곱근을 값으로 설정합니다. 그리고 회귀(Regression) 일때는 feature수/3 값을 설정합니다. 

 

의사결정나무가 앙상블 모델의 base모델로 활용도가 높은 이유

의사결정나무는 데이터의 크기가 방대한 경우에도 모델을 빨리 구축할 수 있습니다. 그리고 데이터 분포에 대한 전제가 필요하지 않습니다. 또한 정규분포 등 선형회귀 전제 조건 같은 것이 필요 없습니다.