랜덤 포레스트는 결정 트리와 다르며, 결정 트리가 모여서 만들어진 숲(Forest) 같은 모델이라고 생각하시면 쉽습니다.
결정 트리 (Decision Tree) 란
결정 트리는 이름 그대로 ‘의사 결정 규칙’을 나무(Tree) 구조로 도식화한 모델입니다. 데이터의 특징(feature)을 바탕으로 ‘예/아니오’ 질문을 반복하며 데이터를 분류하거나 값을 예측합니다.
-
장점: 모델의 예측 과정을 직관적으로 이해하고 설명하기 쉽습니다. (높은 해석력)
-
단점: 데이터의 작은 변화에도 구조가 크게 바뀔 수 있으며, 훈련 데이터에 과적합(Overfitting)되기 쉽습니다. 즉, 특정 데이터셋에만 잘 맞는 모델이 되어 새로운 데이터에 대한 예측 성능이 떨어질 수 있습니다.
랜덤 포레스트 (Random Forest) 란
랜덤 포레스트는 앙상블(Ensemble) 학습 방법 중 하나로, 여러 개의 결정 트리를 만들어 그 예측을 종합하는 방식입니다.
하나의 똑똑한 전문가(결정 트리)에게만 의존하는 대신, 여러 명의 전문가(결정 트리들)에게 의견을 묻고 다수결로 결정하는 ‘집단 지성’의 원리를 이용하는 것과 같습니다.
랜덤 포레스트의 핵심은 이름에 있는 **‘랜덤(Random)‘**에 있습니다. 두 가지 랜덤 과정을 통해 다양한 트리들을 만듭니다.
-
데이터의 무작위 선택 (배깅, Bagging): 원본 훈련 데이터에서 무작위로 데이터를 샘플링하여 여러 개의 서브 데이터셋을 만듭니다. 각 트리는 이 서로 다른 데이터셋으로 학습합니다.
-
특징(Feature)의 무작위 선택: 각 트리의 노드에서 데이터를 분할할 때, 전체 특징 중에서 일부만 무작위로 선택하여 최적의 분할 기준을 찾습니다.
이렇게 만들어진 여러 개의 트리들이 각자 예측을 하고, 랜덤 포레스트는 이 예측들을 종합(분류는 투표, 회귀는 평균)하여 최종 결론을 내립니다.
결정 트리 Vs 랜덤 포레스트 핵심 차이점
| 구분 | 결정 트리 (Decision Tree) | 랜덤 포레스트 (Random Forest) |
|---|---|---|
| 모델 구조 | 단일 나무 구조 | 여러 개의 나무로 구성된 숲 구조 (앙상블) |
| 과적합(Overfitting) | 발생하기 쉬움 (모델이 훈련 데이터에만 치우침) | 발생 가능성이 낮음 (여러 트리의 결과를 종합하여 과적합 방지) |
| 성능 (정확도) | 일반적으로 더 낮음 | 일반적으로 더 높음 (집단 지성의 힘) |
| 해석력 | 매우 높음 (시각화하여 규칙을 이해하기 쉬움) | 매우 낮음 (수많은 트리의 결정 과정을 일일이 파악하기 어려움) |
| 학습 속도 | 빠름 (트리 하나만 만들면 됨) | 느림 (여러 개의 트리를 만들어야 함) |
면접 예상 질문 & 답변 Tip
Q. “랜덤 포레스트가 결정 트리에 비해 갖는 장점이 무엇인가요?”
A. “랜덤 포레스트는 여러 개의 결정 트리를 사용하는 앙상블 기법으로, 단일 결정 트리의 가장 큰 단점인 과적합 문제를 크게 개선할 수 있습니다. 데이터와 변수를 무작위로 선택하여 다양한 트리를 만들기 때문에 일반화 성능이 뛰어나고, 결과적으로 더 높은 예측 정확도를 가집니다. 따라서 해석이 아주 중요한 상황이 아니라면, 일반적으로 결정 트리보다 더 안정적이고 좋은 성능을 기대할 수 있습니다.”
Q. “그렇다면 랜덤 포레스트의 단점은 무엇일까요?”
A. “랜덤 포레스트는 여러 개의 트리를 만들어야 하므로 단일 결정 트리에 비해 학습 시간이 더 오래 걸리고 메모리 사용량도 많다는 단점이 있습니다. 또한, 수많은 트리의 예측 과정을 종합하기 때문에 결정 트리처럼 왜 그런 예측 결과가 나왔는지 직관적으로 해석하기 어려운, ‘블랙박스’ 모델에 가깝다는 단점도 있습니다.”
랜덤 포레스트는 샘플(데이터)과 특성(Feature)을 둘 다 무작위로 샘플링합니다. 이 두 가지 ‘무작위성’이 랜덤 포레스트의 핵심 원리입니다.
각각을 나누어 설명해 드릴게요.
데이터 샘플링 (행 샘플링) - 배깅 (bagging)
-
어떻게?: 원본 훈련 데이터셋에서 중복을 허용하여 무작위로 데이터를 샘플링합니다. 이것을 **부트스트랩 샘플링(Bootstrap Sampling)**이라고 합니다.
-
예시: 1000개의 데이터 샘플이 있다면, 이 중에서 1000개를 무작위로 복원 추출(중복 허용)하여 첫 번째 트리를 위한 훈련 데이터셋을 만듭니다. 같은 방식으로 두 번째, 세 번째 트리를 위한 데이터셋을 각각 만듭니다. 이 과정에서 어떤 샘플은 여러 번 뽑히고, 어떤 샘플은 한 번도 뽑히지 않을 수 있습니다.
-
목적: 각 트리들이 서로 다른 데이터셋으로 학습하게 하여, 개별 트리가 특정 데이터에 과적합되는 것을 방지하고 다양성을 확보하기 위함입니다. 이는 숲 전체의 일반화 성능을 높여줍니다.
특성 샘플링 (열/차원 샘플링) - 무작위 노드 분할
-
어떻게?: 개별 트리가 노드(node)에서 데이터를 분할할 때, 전체 특성(feature) 중에서 일부만 무작위로 선택합니다. 그리고 선택된 특성들 안에서만 최적의 분할 기준을 찾습니다.
-
예시: 데이터에 10개의 특성(나이, 소득, 직업 등)이 있다면, 트리의 특정 분기점에서 10개 모두를 고려하는 것이 아니라, 무작위로 3~4개만 뽑아서 그중에서 가장 좋은 분할 기준을 찾는 방식입니다.
-
목적: 이것이 랜덤 포레스트를 단순 배깅과 구분 짓는 가장 중요한 특징입니다. 만약 특정 예측 변수가 매우 강력하다면, 대부분의 트리가 모두 그 변수를 상위 노드에서 사용하게 되어 트리들이 서로 비슷해지는(상관관계가 높아지는) 문제가 생깁니다. 특성 샘플링은 이러한 트리 간의 상관관계를 줄여 숲의 다양성을 극대화하고, 개별 트리의 약점을 서로 보완하도록 만들어줍니다.
핵심 정리
| 샘플링 종류 | 대상 | 방법 | 목적 |
| 데이터 샘플링 | 데이터 행 (Sample) | 배깅 (Bagging) / 부트스트랩 | 트리의 다양성 확보, 과적합 방지 |
| 특성 샘플링 | 데이터 열 (Feature) | 무작위로 특성 선택 후 노드 분할 | 트리 간의 상관관계 감소, 다양성 극대화 |