랜덤 포레스트(Random Forest)

•
2026년 11월 01일 발행•2026년 11월 01일 수정
요약

부트스트랩 샘플과 무작위 특징 선택으로 학습한 다수의 결정 트리를 결합하는 앙상블 모델

초급
결정 트리와 앙상블 학습의 기본 개념, 편향과 분산의 관계에 대한 이해가 필요하다.

#개념

랜덤 포레스트(Random Forest)는 여러 개의 결정 트리(Decision Tree)를 서로 다르게 학습시킨 뒤 예측을 결합하는 앙상블 학습 방법이다. Leo Breiman이 2001년 논문에서 체계화했으며, 부트스트랩 샘플링과 분할 시 특징 무작위 선택이라는 두 가지 무작위성으로 트리들을 다양하게 만들어 예측의 분산을 줄인다.
랜덤 포레스트의 기본 단위인 결정 트리는 특징 공간을 축에 평행한 분할로 반복해서 나누어 예측하는 모델이다. 각 노드에서는 분할 후 자식 노드의 불순도(Impurity)가 가장 크게 줄어드는 특징과 임곗값을 고르고, 리프 노드에 도달한 샘플의 다수 클래스나 평균값을 예측으로 사용한다.
분류 트리의 대표적인 분할 기준은 지니 불순도(Gini Impurity)와 엔트로피(Entropy)이다. 노드의 클래스 비율이 $p_k$일 때 지니 불순도는 $G = 1 - \sum_k p_k^2$, 엔트로피는 $H = -\sum_k p_k \log_2 p_k$로 정의하며, 엔트로피 감소량을 정보 이득(Information Gain)이라 한다. 두 기준의 결과는 비슷한 경우가 많고, 회귀 트리는 분할 후 목표값의 제곱 오차가 작아지도록 나눈다.
깊게 자란 단일 결정 트리는 편향은 작지만 훈련 데이터의 작은 변화에도 구조가 크게 바뀌는 고분산 모델이다. 랜덤 포레스트는 이런 트리를 많이 만들어 결합함으로써 편향을 크게 늘리지 않고 분산을 줄이며, 이 아이디어는 Breiman의 배깅(Bagging, Bootstrap Aggregating)에서 출발한다. 학습 절차는 다음과 같다.
랜덤 포레스트 학습 절차
  • 부트스트랩 샘플링: 학습 데이터 $n$개에서 중복을 허용해 $n$개를 뽑아 트리마다 서로 다른 학습 세트를 만든다.
  • 특징 무작위 선택: 각 노드를 분할할 때 전체 $p$개 특징 중 무작위로 고른 $m$개만 후보로 두고 그중 최적 분할을 찾는다. 이 단계가 배깅과 랜덤 포레스트를 구분하는 핵심이다.
  • 트리 성장: 각 트리는 보통 가지치기 없이 깊게 성장시킨다. 개별 트리의 편향은 낮게 유지하고 분산은 앙상블로 줄이는 전략이다.
  • 예측 결합: 회귀는 트리 예측의 평균을, 분류는 다수결 투표를 사용한다. scikit-learn 구현은 원 논문과 달리 각 트리의 클래스 확률을 평균하여 결합한다.
특징 무작위 선택이 필요한 이유는 트리 간 상관 때문이다. 분산이 $\sigma^2$이고 쌍별 상관계수가 $\rho$인 동일 분포 확률 변수 $B$개를 평균하면 분산은 $\rho\sigma^2 + \frac{1-\rho}{B}\sigma^2$이 된다. 트리 수 $B$를 늘리면 두 번째 항은 사라지지만 첫 번째 항은 남으므로, 앙상블의 분산은 결국 트리 간 상관 $\rho$에 의해 제한된다.
배깅만 사용하면 예측력이 강한 몇몇 특징이 모든 트리의 상단 분할을 차지하여 트리들이 비슷해지고 $\rho$가 커진다. 분할 후보를 $m$개로 제한하면 다른 특징도 분할에 쓰일 기회를 얻어 트리 간 상관이 낮아진다. Breiman은 일반화 오차의 상한이 개별 트리의 강도(strength)와 트리 간 평균 상관으로 결정되며, 트리를 계속 추가해도 일반화 오차가 한 값으로 수렴하여 트리 수 증가로 과대적합되지 않음을 보였다.
부트스트랩 샘플에서 특정 샘플이 한 번도 뽑히지 않을 확률은 $(1 - 1/n)^n$이며, $n$이 크면 약 $e^{-1} \approx 0.368$이 된다. 즉 각 트리는 학습 데이터의 약 37%를 보지 못하며, 이를 OOB(Out-of-Bag) 샘플이라 한다. 각 샘플을 그 샘플로 학습하지 않은 트리들만으로 예측해 오차를 계산하면 별도 검증 세트 없이 일반화 오차를 추정할 수 있는데, 이를 OOB 오차라 한다.
OOB 오차는 교차 검증과 비슷한 추정치를 추가 학습 없이 얻을 수 있어 트리 수나 하이퍼파라미터를 점검할 때 유용하다. scikit-learn에서는 oob_score=True로 설정하면 학습 후 oob_score_ 속성으로 확인할 수 있다. 다만 트리 수가 적으면 일부 샘플이 한 번도 OOB가 되지 않아 추정이 불완전할 수 있다.
랜덤 포레스트는 특징 중요도(Feature Importance)를 제공한다는 점에서 해석 도구로도 널리 쓰인다. 어떤 특징이 예측에 크게 기여하는지 확인하면 모델 검증, 특징 선택, 비즈니스 요인 설명에 활용할 수 있다. 대표적인 계산 방식은 두 가지이며 성질이 서로 다르다.
특징 중요도 계산 방식
  • 불순도 감소 중요도(Mean Decrease in Impurity, MDI): 각 특징이 분할에 쓰일 때 줄인 불순도를 모든 트리에 걸쳐 합산해 평균한 값이다. 학습과 동시에 계산되어 빠르지만 훈련 데이터 통계에 기반하므로 과대적합에 쓰인 특징도 높게 나올 수 있다.
  • 순열 중요도(Permutation Importance): 한 특징의 값을 무작위로 섞은 뒤 OOB 또는 검증 데이터에서 성능이 얼마나 떨어지는지로 중요도를 측정한다. Breiman(2001)이 OOB 샘플 기반으로 제안했으며, 모델 구조와 무관하게 다른 모델에도 적용할 수 있다.
Strobl 등(2007)은 지니 중요도가 범주 수가 많은 특징과 연속형 특징을 과대평가하는 편향이 있음을 보였다. 분할 지점 후보가 많은 특징일수록 우연히 좋은 분할을 찾을 가능성이 높기 때문이다. scikit-learn 문서도 고유값이 많은 무작위 수치형 특징이 MDI에서 높은 중요도를 받는 예를 보여 주며 순열 중요도를 함께 확인하도록 권한다. 다만 상관이 높은 특징들이 있으면 순열 중요도도 서로 정보를 대신해 과소평가될 수 있다.
랜덤 포레스트는 기본값으로도 성능이 안정적인 편이지만 주요 하이퍼파라미터(Hyperparameter)의 의미를 알면 조정이 쉬워진다. 트리 간 상관을 조절하는 값과 개별 트리의 복잡도를 조절하는 값으로 나누어 생각하면 이해가 쉽다. 아래 이름은 scikit-learn 기준이다.
주요 하이퍼파라미터
  • n_estimators: 트리 개수이다. 많을수록 예측이 안정되고 과대적합 위험은 늘지 않지만 학습·추론 시간과 메모리가 비례해 증가하며, 기본값은 100이다.
  • max_features: 분할마다 고려하는 특징 수 $m$이다. 작을수록 트리 간 상관이 낮아지지만 개별 트리가 약해진다. 분류기 기본값은 $\sqrt{p}$이며, 『The Elements of Statistical Learning』은 회귀에 $p/3$을 권장한다.
  • max_depth: 트리의 최대 깊이이다. 기본값 None은 리프가 순수해질 때까지 성장시키며, 메모리가 부족하거나 잡음이 많을 때 제한한다.
  • min_samples_leaf: 리프 노드의 최소 샘플 수이다. 값을 키우면 예측이 매끄러워지고 모델 크기가 줄어 과대적합이 완화된다.
엑스트라 트리(Extremely Randomized Trees, Extra Trees)는 Geurts 등(2006)이 제안한 변형으로 무작위성을 한 단계 더 높인다. 후보 특징마다 최적 임곗값을 찾는 대신 임곗값을 무작위로 뽑고 그중 가장 좋은 분할을 고르며, scikit-learn 구현은 기본적으로 부트스트랩 없이 전체 데이터를 사용한다. 분산을 조금 더 줄이는 대신 편향이 약간 늘고, 임곗값 탐색이 없어 학습이 빠르다.
그래디언트 부스팅(Gradient Boosting)과 비교하면 접근 방식의 차이가 분명하다. 랜덤 포레스트는 깊은 트리를 독립적으로 학습해 평균하여 주로 분산을 줄이고, 그래디언트 부스팅은 얕은 트리를 순차적으로 추가하며 이전 모델의 오차를 보정해 주로 편향을 줄인다. 부스팅은 잘 튜닝하면 정형 데이터에서 더 높은 정확도를 내는 경우가 많지만 학습률·트리 수·조기 종료 등 조정할 요소가 많고 트리 단위 병렬화가 어렵다. 랜덤 포레스트의 장단점을 정리하면 다음과 같다.
랜덤 포레스트의 장단점
  • 적은 튜닝 부담(장점): 기본 하이퍼파라미터로도 좋은 성능을 내는 경우가 많고, 특징 스케일링이 필요 없다.
  • 병렬화와 OOB 추정(장점): 트리를 독립적으로 학습하므로 병렬 처리가 쉽고, OOB 오차로 검증 비용을 줄인다.
  • 비선형성과 상호작용 포착(장점): 트리 분할로 특징 간 상호작용을 자동으로 학습하며 이상치에 비교적 강건하다.
  • 모델 크기와 추론 비용(단점): 깊은 트리를 수백 개 저장하므로 메모리 사용량이 크고, 지연 시간이 엄격한 온라인 서빙에서는 부담이 된다.
  • 외삽 불가와 해석 한계(단점): 회귀 예측이 학습 데이터의 목표값 범위를 벗어나지 못하며, 단일 트리처럼 규칙을 직접 읽기는 어렵다.
랜덤 포레스트는 분류(Classification)와 회귀(Regression) 모두에 쓰인다. 신용 위험 평가, 고객 이탈 예측, 설비 고장 예측, 유전자 발현 데이터 분석처럼 특징이 많고 상호작용이 복잡한 정형 데이터에서 강한 기준 모델로 활용되며, 특징 중요도를 이용해 후보 특징을 추리는 특징 선택 단계에도 자주 쓰인다.
이상 탐지(Anomaly Detection) 분야에는 무작위 트리 앙상블 아이디어를 응용한 아이솔레이션 포레스트(Isolation Forest)가 있다. Liu 등(2008)이 제안한 이 방법은 특징과 분할값을 무작위로 골라 데이터를 고립시키며, 이상치는 정상 데이터보다 적은 분할로 고립되어 경로 길이가 짧다는 성질을 이용한다. 레이블 없이 학습하는 비지도 방식이라는 점에서 지도 학습인 랜덤 포레스트와 구별된다.
실무에서는 먼저 기본값으로 학습한 뒤 OOB 오차를 보며 트리 수를 늘려 성능이 수렴하는 지점을 확인하고, max_features와 min_samples_leaf를 교차 검증으로 조정하는 순서가 효율적이다. 클래스 불균형이 있으면 class_weight 옵션이나 샘플링 기법을 함께 고려한다. 대규모 데이터에서는 R의 고속 구현인 ranger나 분산 처리가 가능한 Spark MLlib을 활용할 수 있다.

#관련 용어

결정 트리
특징 공간을 반복 분할하여 예측하는 트리 구조의 모델
배깅
부트스트랩 샘플로 학습한 여러 모델의 예측을 평균하거나 투표로 결합하는 앙상블 기법
지니 불순도
노드의 클래스 분포가 얼마나 섞여 있는지를 나타내는 분할 기준
OOB 오차
각 트리의 부트스트랩 샘플에 포함되지 않은 데이터로 추정한 일반화 오차
순열 중요도
특징 값을 무작위로 섞었을 때의 성능 하락으로 측정한 특징 중요도
아이솔레이션 포레스트
무작위 분할로 데이터를 고립시켜 이상치를 찾는 트리 앙상블 기반 이상 탐지 방법

#직무 연관도

DA
Data Analyst
높음
튜닝 부담이 적은 예측 모델과 특징 중요도로 비즈니스 요인을 분석
DS
Data Scientist
밀접
정형 데이터의 기준 모델 구축, 특징 중요도 분석, 앙상블 설계에 활용
DE
Data Engineer
보통
학습 파이프라인과 서빙 환경에서 모델 크기·추론 지연을 고려하여 배포

#사용 사례

금융의료통신제조전자상거래
개요
랜덤 포레스트는 튜닝 부담이 적고 정형 데이터에서 안정적인 성능을 내어 여러 산업에서 기준 모델로 사용된다. 금융에서는 신용 위험과 사기 거래 분류, 의료에서는 진단 보조와 유전자 데이터 분석, 제조에서는 설비 고장 예측, 전자상거래와 통신에서는 구매·이탈 예측과 요인 분석에 활용된다.
사례
통신사가 요금제·사용량·상담 이력 특징으로 랜덤 포레스트 이탈 예측 모델을 학습하고, 순열 중요도로 이탈 요인을 분석하여 유지 캠페인 대상 고객을 선정한다.

#참고 자료

#추천 포스트

© 2024 diki All rights reserved.