PaperReview

[RF] Random Forests

Black940514 2026. 1. 25. 23:52

Random Forests


저자: Leo Breiman

발행년도: 2001년

인용수: 120000회

논문 링크: https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf

arXiv ID: 1604.07143


---


Random Forests: 단순함 속의 지혜, 그리고 20년 후의 재평가


2001년, Leo Breiman이 제안한 Random Forests는 머신러닝 역사상 가장 영향력 있는 알고리즘 중 하나가 되었다. 12만 회가 넘는 인용수가 이를 증명한다. 하지만 정말로 이 방법이 당시의 문제들을 근본적으로 해결했을까? 20년이 지난 지금, 딥러닝 시대의 관점에서 이 고전을 다시 읽어보았다.


문제 정의 (Problem Definition)


Breiman이 해결하려던 핵심 문제는 결정트리의 고질적인 과적합이었다. 결정트리는 해석 가능성이라는 큰 장점에도 불구하고, 훈련 데이터의 작은 변화에도 완전히 다른 트리 구조를 만들어내는 불안정성을 보였다.


당시 머신러닝 커뮤니티는 이미 이 문제를 인식하고 있었다. 실제 데이터에는 노이즈가 있고, 측정 오류가 있으며, 샘플링 편향도 존재한다. 단일 결정트리는 이런 불완전한 데이터에서 "완벽한" 규칙을 찾으려 하다가 결국 노이즈까지 학습해버리는 것이었다.


더 근본적인 문제는 바이어스-분산 트레이드오프였다. 깊은 트리는 낮은 바이어스를 가지지만 높은 분산으로 인해 일반화가 어려웠다. 반대로 얕은 트리는 안정적이지만 복잡한 패턴을 포착하지 못했다. 이 딜레마를 해결할 방법이 필요했다.


> 하지만 여기서 의문이 든다. Breiman은 과적합 문제를 "결정트리만의 문제"로 한정했지만, 사실 이는 모든 복잡한 모델이 가진 보편적 문제 아닌가? 문제 정의가 너무 좁았던 것은 아닐까?


기존 방법의 한계 (Motivation)


당시 대표적인 해결책은 크게 세 가지였다. 첫째, pruning을 통해 트리 복잡도를 제한하는 방법이었다. 하지만 이는 모델의 표현력을 희생하는 대가를 치러야 했다.


둘째, Bagging (Bootstrap Aggregating)은 여러 개의 트리를 학습하여 평균을 내는 방식이었다. 이론적으로는 분산을 줄일 수 있었지만, 실제로는 트리들이 서로 비슷해지는 문제가 있었다. 부트스트랩 샘플이 원본 데이터와 크게 다르지 않았기 때문이다.


셋째, Boosting은 순차적으로 약한 학습기를 결합하는 방식이었다. AdaBoost가 대표적이었지만, 노이즈가 있는 데이터에서는 오히려 과적합이 심해지는 경향을 보였다.


이 방법들의 공통적 한계는 다양성 부족이었다. 앙상블의 힘은 개별 모델의 독립성에서 나오는데, 기존 방법들은 이를 충분히 보장하지 못했다.


> Breiman은 Boosting을 다소 불공정하게 평가한 감이 있다. 실제로 후속 연구들은 적절한 regularization을 통해 Boosting의 과적합 문제를 상당 부분 해결했다. 당시 Boosting의 한계는 방법론 자체보다는 구현의 문제였을 수도 있다.


제안 방법의 핵심 아이디어 (Key Idea)


Random Forests의 핵심은 "통제된 무작위성으로 다양성을 확보한다"는 것이었다. 단순히 데이터만 다르게 하는 것이 아니라, 각 분할점에서 사용할 수 있는 특성까지 무작위로 제한했다.


이를 직관적으로 설명하면, 여러 명의 전문가에게 각자 다른 정보만을 가지고 판단하게 하는 것과 같다. 한 명은 나이와 성별만으로, 다른 한 명은 소득과 직업만으로 예측하게 하는 식이다. 개별적으로는 부족한 정보지만, 모두의 의견을 종합하면 더 나은 판단이 가능하다.


기존 Bagging과의 결정적 차이는 특성 수준에서의 무작위성이었다. 이는 트리 간 상관관계를 크게 낮추어 진정한 앙상블 효과를 만들어냈다.


> 이 아이디어가 정말 혁신적이었을까? 사실 특성 부분집합을 사용하는 아이디어는 이전에도 있었다. Breiman의 진짜 기여는 이를 체계적으로 정리하고, 이론적 근거를 제시한 것이라고 봐야 한다.


아키텍처 설명 (Architecture)


Random Forest의 구조는 놀라울 정도로 단순했다. 전체 파이프라인은 다음과 같이 구성되었다.


# Pseudo-code for Random Forest
def train_random_forest(X, y, n_trees, max_features):
forest = []
for i in range(n_trees):
# 1. Bootstrap sampling
X_sample, y_sample = bootstrap_sample(X, y)

# 2. Train tree with feature randomness
tree = DecisionTree(max_features=max_features)
tree.fit(X_sample, y_sample)

forest.append(tree)
return forest

def predict(forest, X):
predictions = [tree.predict(X) for tree in forest]
# Classification: majority vote
# Regression: average
return aggregate_predictions(predictions)

각 트리 학습 시, 분할점에서 전체 특성이 아닌 무작위로 선택된 m개 특성만을 고려했다. Breiman은 분류 문제에서 `m = sqrt(전체 특성 수)`를, 회귀에서는 `m = 전체 특성 수 / 3`을 권장했다.


핵심은 깊은 트리를 pruning 없이 끝까지 성장시키는 것이었다. 개별 트리는 과적합되지만, 앙상블을 통해 이를 상쇄시켰다.


> 이 구조의 단순함은 장점이자 한계다. 트리 간 정보 공유가 전혀 없고, 각 트리가 독립적으로 같은 실수를 반복할 수 있다. 현대의 관점에서 보면 너무 단순하다고 볼 수도 있다.


접근 방법의 특징 및 설계 의도 (Design Choices)


Random Forest의 설계에는 몇 가지 중요한 선택이 있었다. 첫째, OOB (Out-of-Bag) 오차 추정이었다. 부트스트랩 과정에서 선택되지 않은 약 37%의 샘플을 검증에 활용했다. 이는 별도의 검증 세트 없이도 일반화 성능을 추정할 수 있게 했다.


둘째, 변수 중요도 측정이었다. 각 특성을 무작위로 섞었을 때의 성능 하락 정도로 중요도를 평가했다. 이는 블랙박스 모델에 해석가능성을 더하는 시도였다.


셋째, 하이퍼파라미터 단순화였다. 사실상 트리 개수와 특성 선택 개수만 조정하면 되었다. 이는 실무자들에게 큰 장점이었다.


이런 설계 선택들은 "실용성"을 최우선으로 둔 결과였다. Breiman은 이론적 완벽함보다 현실적 유용성을 추구했다.


> 하지만 이런 실용주의적 접근이 이론적 발전을 제한했을 수도 있다. 특히 변수 중요도 측정은 상관관계가 높은 특성들에서 편향된 결과를 보이는데, Breiman은 이를 충분히 다루지 않았다.


실험 결과 분석


논문의 실험 결과는 인상적이었다. 다양한 데이터셋에서 Random Forest는 기존 방법들을 일관되게 능가했다. 특히 Adaboost와의 비교에서 노이즈가 있는 데이터에서 더 강건한 성능을 보였다.


그러나 실험 설계에는 몇 가지 의문점이 있었다. 첫째, 사용된 데이터셋이 주로 UCI repository의 것들로, 실제 산업 데이터의 복잡성을 충분히 반영했는지 의문이다. 둘째, 하이퍼파라미터 튜닝이 각 방법에 공정하게 적용되었는지 명확하지 않았다.


OOB 오차가 실제 테스트 오차를 잘 근사한다는 주장도 데이터셋에 따라 편차가 있었다. 특히 시계열 데이터나 공간적 상관관계가 있는 데이터에서는 OOB 추정이 과도하게 낙관적일 수 있다.


> 가장 큰 문제는 계산 복잡도에 대한 분석이 부족했다는 점이다. Random Forest는 병렬화가 쉽다고 하지만, 메모리 사용량이나 예측 시간에 대한 구체적 분석이 없었다. 실무에서는 이런 부분이 중요한데 말이다.


총평: 개인적 해석과 후속 연구 방향


Random Forest는 "단순함의 승리"를 보여준 알고리즘이었다. 복잡한 이론보다 실용적 직관을 따랐고, 그것이 오히려 광범위한 성공으로 이어졌다. 하지만 20년이 지난 지금, 이 방법의 한계도 명확히 보인다.


실무 적용 관점에서 Random Forest는 여전히 매력적이다. 하이퍼파라미터 튜닝이 간단하고, 전처리가 거의 필요없으며, 과적합에 강건하다. 특히 테이블 형태의 정형 데이터에서는 여전히 1차 선택지다.


하지만 고차원 데이터나 비선형성이 강한 문제에서는 한계가 있다. 트리 기반 방법의 근본적 한계인 extrapolation 불가능도 여전하다. 또한 메모리 사용량이 크고, 실시간 학습이 어렵다는 단점도 있다.


만약 내가 이 연구를 발전시킨다면, 다음 방향을 고려할 것이다. 첫째, 적응적 특성 선택이다. 모든 분할에서 같은 수의 특성을 사용하는 대신, 데이터 특성에 따라 동적으로 조정하면 어떨까? 둘째, 트리 간 정보 공유다. 완전히 독립적인 트리 대신, 일부 정보를 공유하면서도 다양성을 유지하는 방법을 찾을 수 있을 것이다.


셋째, 증분 학습 능력이다. 새로운 데이터가 들어올 때 전체를 다시 학습하지 않고 업데이트하는 방법이 필요하다. 넷째, 해석가능성 개선이다. 개별 예측에 대한 설명을 제공하는 방법을 체계화할 필요가 있다.


> Random Forest는 "완벽한 이론"보다 "충분히 좋은 실용성"이 더 중요할 수 있음을 보여주었다. 하지만 이제는 둘 다를 추구할 때다. 딥러닝의 표현력과 Random Forest의 강건함을 결합하는 새로운 패러다임이 필요하다. 그것이 앞으로 20년의 과제가 아닐까?