랜덤 포레스트(Random Forest): 수학적 원리부터 XGBoost 비교, 실전 적용까지

목차

1. 도입: 앙상블 학습의 필요성 및 랜덤 포레스트 개요

1.1. 단일 결정 트리의 본질적 한계

기계 학습에서 단일 결정 트리(Decision Tree, DT)는 그 해석의 용이성과 직관적인 흐름 덕분에 강력한 기본 학습기(base learner)로 인정받습니다. DT는 데이터를 축 정렬(axis-aligned) 규칙을 사용하여 영역으로 분할함으로써 복잡한 비선형 경계를 효과적으로 모델링할 수 있습니다. DT의 작동 방식은 마치 예/아니오 질문의 순서도(flowchart)와 같습니다.

그러나 DT는 본질적인 약점을 가지고 있습니다. DT는 학습 과정에서 탐욕적(greedy) 알고리즘을 사용합니다. 즉, 각 노드에서 국소적인 불순도 감소(예: 지니 불순도 감소)를 최대화하는 최적의 분할 기준을 선택하지만, 이 선택이 전체 트리의 전역적인 최적화를 보장하지는 않습니다. 이러한 탐욕적인 특성은 높은 분산(High Variance)이라는 통계적 불안정성을 유발합니다. 훈련 데이터셋이 아주 미세하게 변경되더라도, 트리의 초기 분할 구조가 크게 바뀔 수 있으며, 결과적으로 트리의 전체 구조가 불안정하게 변동하는 경향을 보입니다. 이는 과적합(overfitting)으로 이어지는 주요 원인이 됩니다.

예를 들어, 상태 기반 모니터링(CBM) 프로젝트에서 단일 DT가 센서 데이터를 분석할 때, “온도가 70°C를 초과하면 결함”이라는 특정 규칙에 의존하도록 학습될 수 있습니다. 이 규칙은 훈련 데이터에서는 완벽할 수 있으나, 실제 운영 환경의 미세한 센서 노이즈나 변동에 대해서는 쉽게 무너져 일반화 성능이 저하됩니다. 높은 분산은 모델이 노이즈까지 학습했음을 나타내는 통계적 서명이자, 예측기가 특정 데이터 표본에 과도하게 민감함을 의미합니다.

1.2. 랜덤 포레스트의 해결책: 앙상블과 무작위성

랜덤 포레스트(Random Forest, RF)는 이러한 단일 결정 트리의 불안정성(높은 분산)을 극복하기 위해 설계된 앙상블(Ensemble) 기법입니다. RF는 다수의 독립적인 결정 트리를 구성하고 그 예측 결과를 결합함으로써 분산을 효과적으로 낮추고 예측 정확도를 향상시킵니다.

RF는 이 목표를 달성하기 위해 두 가지 핵심적인 무작위성 메커니즘을 사용합니다:

1. 부트스트랩 샘플링 (Bootstrap Sampling, Bagging): 포레스트 내의 각 트리는 원본 데이터셋에서 복원 추출(sampling with replacement)된 무작위 부분집합으로 훈련됩니다.

2. 특징 무작위 선택 (Feature Randomness): 각 노드 분할 시, 전체 특징(feature) 중 무작위로 선택된 일부 특징들(m ≪ d)만을 고려하여 최적의 분할 조건을 찾습니다.

이 두 가지 무작위 과정의 결과로, 각 개별 트리는 다른 트리들과 약하게 상관관계를 가지게 됩니다. 다수의 약하게 상관된 트리의 예측을 평균하거나 다수결로 결합할 때, 각 트리가 가지고 있던 개별적인 오류(bias)나 예측의 불안정성(variance)은 상쇄되는 경향이 있습니다.

이는 마치 기계 결함 진단을 위해 100명의 엔지니어에게 독립적인 진단을 요청하는 것과 유사합니다. 각 엔지니어는 자신의 편향을 가질 수 있지만, 전체의 다수결 투표는 일반적으로 훨씬 더 신뢰할 수 있고 정확합니다. RF의 목표는 바로 이 “집단의 지혜(wisdom of the crowd)”를 통해 낮은 분산과 높은 정확도를 달성하는 데 있습니다.

2. 랜덤 포레스트 핵심 원리 및 수학적 구조

2.1. Bagging 원리 및 부트스트래핑의 역할

랜덤 포레스트의 기본 학습 전략은 배깅(Bagging, Bootstrap Aggregating)에 기반합니다. 부트스트래핑(Bootstrapping)은 원본 데이터셋 D에서 N개의 샘플을 복원 추출하여 새로운 훈련 데이터셋을 생성하는 과정입니다. RF는 이 데이터를 사용하여 각 트리를 독립적으로 훈련합니다.

부트스트래핑이 중복 추출(with replacement)을 사용하는 이유는 트리 간의 다양성(diversity)을 확보하기 위함입니다. 만약 비복원 추출(without replacement)을 사용한다면, 각 트리가 보는 데이터 부분집합이 원본 데이터셋과 매우 유사해져 결과적으로 트리들이 거의 동일한 구조를 학습하게 될 것입니다. 이는 트리 간의 상관관계를 높이고 앙상블을 통한 분산 감소 효과를 약화시킵니다.

복원 추출을 통해 통계적으로 각 트리는 원본 데이터의 약 63.2%의 고유한 샘플만을 학습하게 되며, 나머지 약 36.8%의 샘플은 OOB(Out-of-Bag) 데이터로 남게 됩니다. 이 OOB 데이터는 모델 훈련에 사용되지 않았으므로, 별도의 검증 세트 없이도 해당 트리의 일반화 성능을 내부적으로 편향 없이 평가하는 데 활용될 수 있습니다. 트리에 인위적인 무작위성을 부여함으로써, RF는 분산 감소의 핵심인 트리 간 비상관화를 달성합니다.

2.2. Feature Subsampling의 원리와 필요성

랜덤 포레스트는 부트스트랩 샘플링 외에도 각 분할 노드에서 특징 무작위 선택을 시행합니다. 전체 특징이 d개일 때, 각 분할 시점에서는 무작위로 m개 (m ≪ d, 일반적으로 √d 또는 log₂d)의 특징만을 고려하여 최적의 분할 조건을 결정합니다.

이 기법이 필수적인 이유는 트리 간 상관관계(ρ)를 최소화하기 위함입니다. 만약 데이터셋에 예측력이 매우 강력한 특징 X_strong (예: 용접 로봇 센서 데이터에서 전류(Current) 값)이 존재한다면, 모든 트리는 부트스트랩 샘플과 상관없이 루트 노드에서 이 X_strong을 사용하여 분할할 가능성이 높습니다. 결과적으로 모든 트리가 거의 동일한 상위 구조를 가지게 되어, 앙상블 효과가 사라지고 분산 감소가 제한됩니다.

무작위 특징 선택은 의도적으로 X_strong을 일부 트리에게서 숨김으로써, 다른 약한 특징들(예: Vibration, Load, Pressure)이 분할에 사용되도록 강제합니다. 이는 각 트리가 독립적이고 다양한 경로를 학습하게 만들어 구조적 다양성을 창출합니다. 앙상블의 분산은 트리 간의 상관계수 ρ에 비례하며, ρ를 낮추는 것이 RF 성능의 점근적 한계를 결정합니다. 따라서 특징 부분 집합 선택은 분산을 효율적으로 감소시키기 위한 수학적 필수 조건입니다.

2.3. 수학적 공식화

랜덤 포레스트의 최종 예측은 T개의 개별 트리 예측을 결합하여 이루어집니다.

분류 (Classification):

분류 문제에서 포레스트는 다수결 투표(majority vote)를 통해 최종 클래스를 결정합니다.

ŷ(x) = majority_vote{ŷ₁(x), ŷ₂(x), …, ŷ_T(x)}

회귀 (Regression):

회귀 문제에서 포레스트는 개별 트리의 예측값의 산술 평균을 최종 예측값으로 사용합니다.

ŷ(x) = (1/T) Σ ŷ_t(x)

랜덤 포레스트는 이진 분류뿐만 아니라 다중 분류(multi-class classification) 문제에서도 효율적으로 사용될 수 있습니다.

2.4. Python 구현 예시

산업 현장의 CBM 데이터(센서 데이터 기반 설비 고장 예측)를 가정한 scikit-learn 기반의 Python 구현은 RF의 실용성을 보여줍니다.

# Import libraries
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 1. Generate synthetic data (features = 10 sensors, samples = 1000)
X, y = make_classification(
    n_samples=1000,           # 데이터 포인트 수
    n_features=10,            # 특징(센서) 수
    n_informative=5,          # 유의미한 특징 수
    n_redundant=2,            # 상관관계 있는 센서 수
    random_state=42
)

# 2. Train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 3. Train Random Forest
rf = RandomForestClassifier(
    n_estimators=100,         # 트리의 수
    max_features="sqrt",      # 각 분할 시 고려할 특징 수 (sqrt(d) 사용)
    bootstrap=True,           # 부트스트래핑 사용
    random_state=42
)
rf.fit(X_train, y_train)

# 4. Predictions
y_pred = rf.predict(X_test)

# 5. Accuracy
print("Test Accuracy:", accuracy_score(y_test, y_pred))

# 6. Feature Importance
print("Feature Importances:", rf.feature_importances_)

이 예시에서 rf.feature_importances_의 결과는 어떤 센서 특징(예: Current, Voltage)이 예측에 가장 중요한 영향을 미치는지 정량적으로 보여주며, 이는 CBM 분야에서 XAI(Explainable AI)를 실현하는 데 매우 유용합니다.

3. Random Forest의 강점과 Decision Tree의 한계 극복

3.1. Decision Tree의 Greedy 특성 분석

단일 결정 트리가 국소적인 최적의 분할을 고집하는 탐욕적인 방식으로 성장하는 것은 트리를 불안정하게 만드는 주요 원인입니다. 이 탐욕성은 데이터의 미세한 변동이나 노이즈에 의해 쉽게 교란되어, 트리가 과도하게 깊어지고 높은 분산을 갖게 합니다. DT는 그 해석력은 높지만, 훈련 데이터에 대한 과도한 적합성 때문에 일반화 성능이 취약해질 수 있습니다.

3.2. RF가 Greedy 문제를 해결하는 방식

랜덤 포레스트는 개별 트리를 덜 탐욕적으로 만들지는 않습니다. RF 내의 모든 트리는 여전히 탐욕적인 알고리즘으로 성장합니다. 그러나 RF는 앙상블 수준에서 이 탐욕적인 특성의 단점(높은 분산과 불안정성)을 중화시키고 제거합니다.

핵심은 다양성(Diversity)의 확보앙상블 평균화입니다.

1. 부트스트랩 (데이터 다양성): 각 트리가 다른 데이터 표본을 보게 하여, 한 트리가 내린 “잘못된 탐욕적 결정”이 다른 트리에 의해 공유되지 않도록 합니다.

2. 특징 부분 집합 (구조적 다양성): 강한 특징의 지배를 막아 각 트리가 다른 경로와 분할 구조를 탐색하도록 강제합니다.

이러한 메커니즘을 통해, 포레스트는 가능한 여러 개의 국소 최적 해(local optima)를 포착하며, 개별 트리의 탐욕적인 실수가 앙상블 평균화 과정에서 상쇄됩니다. 결과적으로 RF는 단일 DT에 비해 예측의 안정성이 극대화되고 과적합에 대한 강건성(robustness)이 높아집니다. RF의 안정성은 개별 트리의 예측 불안정성(분산)을 평활화(smoothing out)하는 데서 비롯됩니다.

3.3. 비선형성과 Feature Interaction 처리 원리

랜덤 포레스트는 비선형성(nonlinearity)과 특징 간 상호작용(feature interaction)을 명시적인 모델링 과정 없이 자연스럽게 다룰 수 있습니다.

이 원리는 결정 트리의 구조 자체에 내재되어 있습니다. 트리는 데이터 공간을 직사각형의 영역(piecewise-constant regions)으로 분리하며, 이는 선형 모델과 달리 본질적으로 비선형적인 결정 경계를 생성합니다. 또한, 트리 분할은 조건문(예: IF A AND B THEN Y)의 연속이므로, 특징 X₁과 X₂가 결합된 논리적 조건(예: “Temp > 70°C and Load > 80%” 일 때 이상 발생)을 자연스럽게 학습합니다.

즉, RF는 여러 특징의 조합이 예측에 미치는 복잡한 상호작용을 자동으로 포착하며, 이는 선형 모델에서 복잡한 교차항(cross-term)을 수동으로 설계해야 하는 어려움을 해결해줍니다.

3.4. Random Forest의 간단한 해석 가능성 예시

RF는 블랙박스 모델로 간주되는 딥러닝 모델보다는 해석하기 용이하며, 특히 단일 트리의 불안정성과 과적합 문제를 피하면서도 설명력을 제공한다는 점에서 실용적입니다.

RF가 제공하는 가장 기본적인 해석은 특징 중요도(Feature Importance)입니다. 예를 들어, 용접 로봇의 센서 데이터(온도, 진동, 전류, 속도)를 사용하여 불량 여부를 예측하는 모델을 학습한 결과, 특징 중요도가 다음과 같이 나타났다고 가정해봅니다:

  • Current: 0.45
  • Vibration: 0.35
  • Temp: 0.15
  • Speed: 0.05

이 결과는 전류와 진동 센서 값이 불량 판단에 가장 큰 영향을 미치는 핵심 신호임을 명확히 보여주며, 이는 CBM 엔지니어가 모니터링 초점을 어디에 두어야 하는지에 대한 직관적인 XAI(Explainable AI) 정보를 제공합니다.

4. Bagging vs. Boosting 심층 비교: RF와 XGBoost

랜덤 포레스트와 XGBoost는 모두 결정 트리를 기반으로 하는 앙상블 학습 방법이지만, 근본적인 학습 철학에서 명확히 구분됩니다. RF는 배깅(Bagging) 계열, XGBoost는 부스팅(Boosting) 계열의 대표 주자입니다.

4.1. 작동 원리 및 학습 방식 비교

구분 Random Forest (Bagging) XGBoost (Boosting)
학습 방식 병렬적 (독립적): 각 트리는 다른 트리의 영향을 받지 않고 독립적으로 훈련됨. 순차적 (의존적): 각 트리는 이전 앙상블 모델의 오류(잔차)를 보정하도록 훈련됨.
주요 목표 분산 (Variance) 감소 및 안정성 확보. 편향 (Bias) 감소 및 예측 정확도 극대화.
결합 방식 다수결 투표 (분류) 또는 산술 평균 (회귀). 가중치가 적용된 순차적 보정값의 합.
핵심 기법 부트스트랩 샘플링 + 특징 부분집합 선택. 잔차(Residual) 학습 및 2차 미분(Gradient/Hessian) 기반 최적화.

 

XGBoost가 일반적으로 Random Forest보다 높은 예측 성능을 보이는 이유는, RF가 독립적인 약한 예측기들의 평균을 취해 분산을 줄이는 데 집중하는 반면, XGBoost는 이전 모델이 해결하지 못한 오차(잔차)에 집중하여 다음 트리를 학습시키기 때문입니다. 즉, XGBoost는 손실 함수를 직접 최소화하는 방향으로 트리를 순차적으로 추가함으로써 체계적인 오류(Bias)를 지속적으로 감소시켜 더 정교한 강한 예측기(strong learner)를 생성합니다.

4.2. 수치 데이터 기반 예시

온도(Temp)에 따라 기계 결함(1) 또는 정상(0)을 예측하는 간단한 데이터셋을 가정하여 작동 원리를 비교합니다.

Sample Temp (°C) Label (y)
1 30 0
2 40 0
3 50 1
4 60 1

 

RF (Bagging) 방식:

트리 1, 2, 3이 각기 다른 부트스트랩 샘플에 대해 독립적으로 학습합니다.

  • Tree 1: {S₁, S₂, S₃}로 학습 → Rule: Temp > 45°C → 1.
  • Tree 2: {S₂, S₃, S₄}로 학습 → Rule: Temp > 55°C → 1.
  • Tree 3: {S₁, S₃, S₄}로 학습 → Rule: Temp > 50°C → 1.

새로운 데이터 Temp=45°C가 들어오면, 세 트리는 모두 0을 예측합니다. 다수결 투표 결과는 0입니다. 이는 하나의 불안정한 규칙에 의존하는 위험을 줄입니다.

XGBoost (Boosting) 방식:

트리를 순차적으로 학습하며 잔차를 보정합니다.

  • Step 1. Tree 1: 모든 샘플을 0으로 예측합니다.
  • 잔차 (Error): Sample 3, 4에서 오차 +1 발생 (Residuals = [0, 0, +1, +1]).
  • Step 2. Tree 2: 잔차 [0, 0, +1, +1]을 예측하도록 학습합니다. Tree 2는 “Temp > 45°C → residual = +1″이라는 보정 규칙을 학습합니다.
  • Step 3. 최종 예측: Model = Tree 1 + Tree 2.
  • S₃(50°C): 0 + (+1) = 1. (정확히 예측).

이처럼 XGBoost는 약한 학습기(shallow tree)를 순차적으로 추가하여 이전에 발생한 오류를 명확하게 집중하고 수정함으로써 정확도를 단계적으로 개선합니다.

4.3. Variance vs. Bias 목표의 차이 해설

랜덤 포레스트 (Variance 감소): 배깅은 기본적으로 높은 분산을 가진 예측기(DT)의 집합을 생성하고, 이들의 예측을 평균하여 노이즈와 데이터 표본 추출에 따른 불안정성을 상쇄합니다. 따라서 RF는 모델의 안정성(Variance)을 줄이는 데 주력하며, 개별 트리가 가진 평균적인 예측 오차(Bias)는 그대로 유지되는 경향이 있습니다.

XGBoost (Bias 감소): 부스팅은 트리를 순차적으로 학습하면서, 매번 새로운 트리가 이전 모델의 잔차(체계적 오차)를 감소시키도록 설계됩니다. 이는 모델이 참값 f(x)로부터 벗어난 체계적인 편향을 지속적으로 보정하는 과정이며, 이로 인해 XGBoost는 편향(Bias)을 줄이는 데 중점을 둡니다. 따라서 XGBoost는 약한 학습기를 사용하여도 전체 모델이 매우 강한 예측력을 갖게 됩니다.

4.4. 트리 깊이 비교 이유

일반적으로 Random Forest의 트리는 완전히 성장(full depth)하도록 허용되며, XGBoost의 트리는 얕게(shallow, 보통 깊이 3~6) 제한됩니다. 이러한 차이는 각 앙상블 방법의 목표와 밀접하게 관련됩니다.

1. Random Forest (깊은 트리): RF는 개별 트리가 고분산/저편향(High Variance/Low Bias)을 가지도록 만듭니다. 즉, 트리가 데이터를 과적합하더라도 상관없습니다. RF는 이 높은 분산을 부트스트래핑과 특징 무작위 선택을 통해 앙상블 수준에서 제어하여 안정화합니다. 따라서 깊고 복잡한 트리를 사용합니다.

2. XGBoost (얕은 트리): XGBoost는 개별 트리가 약한 학습기(Weak Learner, High Bias/Low Variance)여야 효과적입니다. 깊이가 얕은 트리는 단순한 패턴만 학습하며 낮은 분산을 갖습니다. XGBoost는 이러한 얕은 트리를 순차적으로 쌓아 올려 복잡성을 점진적으로 증가시키고, 단계적인 잔차 보정을 통해 전체 모델의 편향을 줄입니다.

5. 심화 이론 I: 통계적 본질과 Bias-Variance 분해

랜덤 포레스트의 통계적 안정성을 이해하기 위해서는 예측 오차의 구조를 수학적으로 분석하는 것이 필수적입니다. RF는 단순한 트리의 집합이 아니라 비모수적 회귀 추정기(nonparametric regression estimator)로 해석될 수 있습니다.

5.1. 평균 제곱 오차 분해의 유도 및 의의

예측 오차의 핵심 지표인 평균 제곱 오차(Mean Squared Error, MSE)는 통계적으로 세 가지 구성 요소로 분해될 수 있습니다: 편향 제곱(Bias²), 분산(Variance), 그리고 소음(Noise).

특정 입력 x에 대한 목표 변수 Y가 Y = f(x) + ε로 정의되고, 학습된 예측기가 f̂(x)일 때, MSE는 다음과 같이 분해됩니다:

MSE(x) = Bias²(x) + Variance(x) + Noise(x)

1. Bias 제곱: 모델이 여러 훈련 데이터셋에 대해 평균적으로 예측한 값과 실제 참값 사이의 차이입니다. 이는 모델의 체계적인 오류(systematic error)를 나타냅니다.

2. Variance: 특정 입력에 대해, 예측기가 훈련 데이터셋의 변화에 따라 얼마나 변동하는지를 나타냅니다. 이는 모델의 불안정성(instability)을 측정합니다.

3. Noise (Irreducible Error): 데이터 자체에 내재된 무작위성(노이즈)으로, 어떤 모델을 사용하더라도 줄일 수 없는 최소 오차입니다.

RF는 앙상블 평균화라는 메커니즘을 통해 모델의 불안정성, 즉 분산(Variance) 항을 적극적으로 공격하여 전체 MSE를 낮춥니다.

5.2. 앙상블 분산 공식 및 상관계수의 역할

RF가 분산을 줄이는 정도는 개별 트리의 분산 σ²뿐만 아니라 트리 간의 상관계수 ρ에 의해 결정됩니다. T개의 독립적인 기본 학습기의 평균의 분산은 다음과 같이 유도됩니다:

Var = ρσ² + ((1-ρ)/T)σ²

이 공식은 RF의 통계적 본질을 가장 명확하게 보여줍니다.

ρ의 중요성 (Variance Convergence Limit):

트리의 수 T가 무한대로 증가한다고 가정해봅니다 (T → ∞). 이때 ((1-ρ)/T)σ² → 0이 되지만, 분산은 ρσ²으로 수렴하게 됩니다.

결론: 앙상블의 분산은 T를 무한히 늘려도 ρσ² 이하로 떨어지지 않습니다.

이는 트리 간의 상관관계 ρ를 낮추는 것이 RF 성능 향상에 있어 T를 늘리는 것보다 점근적으로 더 중요함을 수학적으로 증명합니다. RF가 부트스트랩 샘플링과 특징 부분 집합 선택(mtry)이라는 무작위성 기법을 사용하는 궁극적인 이유가 바로 이 ρ를 최소화하여 앙상블의 분산 감소 효과를 극대화하는 데 있습니다.

5.3. RF의 통계적 일관성 증명 요건

통계적 일관성(Consistency)은 훈련 데이터의 크기 n이 무한대로 증가할 때, 예측이 참값으로 수렴하는 성질을 의미합니다. 이는 MSE → 0을 만족하는 것을 목표로 합니다. RF는 조건부 기대값을 국소적으로 평균하는 비모수적 추정기(nonparametric estimator)와 유사하게 작동하며, 특정 조건 하에서 일관성을 만족하는 것으로 알려져 있습니다.

일관성 증명을 위한 핵심 요구 사항은 다음과 같습니다:

1. 분할 셀의 축소 (Shrinking Cells): 리프 노드의 영역의 직경이 n → ∞에 따라 0으로 수렴해야 합니다. 이는 예측이 국소화(localness)되는 것을 보장합니다.

2. 리프 샘플 수 증가 (Growing Leaf Size): 각 리프에 포함된 훈련 샘플 수가 n → ∞에 따라 무한대로 증가해야 합니다. 이는 국소 평균 예측값의 분산을 제어합니다.

3. 충분한 무작위성: 분할 과정에 충분한 무작위성(예: 순수 무작위 분할 또는 데이터 분할 기반의 정직성)이 부여되어야, 알고리즘이 특정 노이즈에 과도하게 적합되는 것을 방지할 수 있습니다.

RF의 기본 설계(매우 깊은 트리 사용, 부트스트랩)는 대규모 데이터셋에서 이러한 일관성 조건을 근사하며, RF가 예측기의 역할을 안정적으로 수행할 수 있는 이론적 근거를 제공합니다.

5.4. OOB 에러 추정 이론

OOB 에러 추정은 랜덤 포레스트의 가장 실용적이고 강력한 통계적 장점 중 하나입니다.

메커니즘:

각 트리가 부트스트랩 샘플을 통해 훈련될 때, 원본 데이터셋의 약 36.8%의 샘플은 해당 트리의 훈련에 포함되지 않습니다. 이 포함되지 않은 샘플(OOB 데이터)은 그 트리에 대해 마치 홀드아웃(held-out)된 테스트 데이터처럼 예측에 사용될 수 있습니다.

각 관측치에 대해, 이를 보지 않은 트리들의 집합을 사용하여 OOB 예측을 계산합니다.

의의:

OOB 에러는 모든 샘플에 대한 손실을 평균하여 계산되며, 훈련 과정에서 별도의 검증 세트를 분리하거나 k-겹 교차 검증(k-fold CV)을 수행할 필요 없이 일반화 오차(generalization error)의 신뢰할 수 있는 추정치를 제공합니다. 이는 RF가 모델 훈련과 검증을 동시에, 그리고 계산 비용 없이 수행할 수 있게 하는 핵심 메커니즘입니다.

6. 심화 이론 II: Feature Importance 해석 및 신뢰도

Random Forest의 특징 중요도(Feature Importance)는 XAI에 중요한 역할을 하지만, 측정 방법에 따라 편향이 발생할 수 있습니다. 가장 많이 사용되는 MDI(Gini Importance)의 한계를 이해하고, MDA 및 SHAP과 같은 통계적으로 정당화된 대안을 사용하는 것이 중요합니다.

6.1. MDI 원리 및 한계

원리:

MDI는 트리가 특정 특징을 사용하여 노드를 분할할 때 발생하는 불순도 감소량(ΔGini)을 측정합니다. 이 감소량에 해당 노드에 도달한 샘플 수를 가중치로 곱한 후, 모든 노드와 모든 트리에 걸쳐 합산하고 정규화하여 계산됩니다.

MDI의 편향 (Bias):

MDI는 계산이 빠르고 sklearn 등 라이브러리에 기본 내장되어 있지만, 몇 가지 통계적 편향을 갖습니다.

  • 연속형/고유성 특징 편향: 연속형 특징이나 카디널리티가 높은 범주형 특징은 분할 후보가 많아 우연히도 더 높은 불순도 감소를 유발할 가능성이 높습니다. 따라서 MDI는 이러한 특징들을 과대평가하는 경향이 있습니다.
  • 상관된 특징 편향: 두 특징이 서로 강하게 상관되어 있을 경우, 중요도가 두 특징에 걸쳐 분산되거나 또는 모델이 특정 특징에 과도하게 의존하여 중요도가 불안정하게 할당될 수 있습니다.

6.2. MDA 원리 및 통계적 정당화

원리:

MDA (Mean Decrease in Accuracy)는 훈련된 모델을 고정한 상태에서 특정 특징의 값을 검증 데이터셋에서 무작위로 섞어(순열, permute) 해당 특징과 목표 변수 사이의 통계적 연관성을 끊었을 때, 모델의 성능(정확도 또는 손실)이 얼마나 하락하는지를 측정합니다. 성능 하락의 크기가 클수록 해당 특징은 모델 예측에 중요했다고 판단합니다.

통계적 정당화:

MDA는 모델 비종속적(model-agnostic)이며, 학습된 모델이 특정 특징에 실제로 얼마나 의존하는지를 반영합니다. 이는 해당 특징을 “정보 없는 상태”로 만들었을 때의 일반화 손실 증가량(increase in generalization risk)을 추정하는 것으로, 통계적으로 MDI보다 더 신뢰할 수 있는 지표로 간주됩니다. 특히 OOB 데이터를 사용하여 MDA를 측정하는 것이 권장되는데, 이는 훈련 데이터에 대한 낙관적 편향(optimistic bias)을 피할 수 있기 때문입니다.

CPI (Conditional Permutation Importance):

CBM 데이터와 같이 센서 특징 간에 높은 상관관계(예: 전류와 전력)가 있을 경우, 순수한 MDA는 두 특징 중 하나를 섞었을 때 다른 특징이 여전히 정보를 제공하므로, 중요도를 과소평가할 수 있습니다. CPI는 이 문제를 해결하기 위해, 상관된 특징이 주어진 조건 하에서만 해당 특징을 순열함으로써, 그 특징의 고유한(unique) 기여도를 더 정확하게 파악합니다.

6.3. SHAP Value의 역할

SHAP (SHapley Additive exPlanations) 값은 협력적 게임 이론의 샤플리 값(Shapley Value)에 기반하며, 각 샘플에 대해 특징이 모델의 출력(예: 불량 확률의 로그 오즈)을 얼마나 밀어 올렸거나 내렸는지를 일관되고 국소적으로 측정합니다.

SHAP 값은 공리적으로 정당화된 로컬 특성 기여도를 제공하며, 이들의 합이 모델 예측의 기준 값과의 차이와 일치한다는 특성을 가집니다. SHAP의 평균 절대값을 사용하여 글로벌 중요도를 계산하면, MDI나 MDA보다 특징 상호작용과 중복성을 더욱 엄격하게 고려한 정교한 순위를 얻을 수 있습니다. TreeSHAP은 트리 앙상블에 특화되어 이 값을 효율적으로 계산합니다.

6.4. Feature Importance의 신뢰구간 추정

특징 중요도 추정치는 데이터나 모델 훈련 시의 무작위성에 따라 변동하는 확률 변수이므로, 그 불확실성을 정량화하기 위해 신뢰구간(CI)을 제공해야 합니다.

1. 반복 순열 표준 오차 (for MDA): MDA 계산을 여러 번 반복(B회)하여 중요도의 표본 표준편차를 계산하고, 이를 기반으로 표준 오차를 사용하여 CI를 추정합니다.

2. 중첩 부트스트랩 (Nested Bootstrap): 데이터 행을 부트스트랩하고(Outer Bootstrap), RF를 재훈련한 후, 내부적으로 MDA나 SHAP 중요도를 계산합니다. 이 외부 부트스트랩 분포의 경험적 백분위수(예: 2.5% ~ 97.5%)를 사용하여 CI를 설정하는 방법이 가장 통계적으로 안정적입니다.

방법론 원리 측정 지표 주요 장점 주요 한계
MDI (Gini Importance) 노드 분할 시 불순도 감소량의 평균 Gini/Entropy 감소량 빠르고 내장되어 있음 연속형 특징 편향, 상관성 이슈
MDA (Permutation Importance) 특정 특징을 무작위로 섞었을 때 예측 정확도의 하락 정도 Loss 증가량/정확도 감소량 실제 모델 의존성 반영, 통계적 정당성 계산 비용 높음, 상관성 시 신뢰도 하락
SHAP (TreeSHAP) 각 특징이 예측에 기여하는 공헌도 (Shapley Value) Mean Absolute SHAP Value 일관된 로컬/글로벌 해석 제공, 상호작용 반영 계산 복잡성 (MDA보다 느릴 수 있음)

 

7. Random Forest의 확장 및 한계

7.1. 훈련 데이터 범위 외 추정 불가

랜덤 포레스트는 훈련 데이터의 범위 밖(out-of-range)에 있는 입력값에 대해서는 예측을 일반화할 수 없습니다. 이 문장의 의미는 RF가 새로운 입력이 기존의 훈련 데이터셋 내에 속하는 특징 공간의 영역에 대해서만 잘 예측할 수 있다는 것입니다.

RF는 특징 공간을 계단형 영역으로 분할하고, 새로운 입력이 해당 리프 노드에 도달하면 그 리프 노드의 평균(회귀) 또는 다수결(분류) 값을 반환합니다. 만약 테스트 데이터가 훈련 데이터의 최대 온도 80°C를 훨씬 초과하는 100°C라면, 해당 데이터는 80°C를 포함하는 리프 노드 영역에 속하게 되며, 모델은 80°C에서 학습된 예측값만을 반환할 뿐입니다. RF는 80°C와 100°C 사이의 증가하는 경향을 추정하지 못합니다.

이 한계는 CBM 분야에서 중요합니다. 예를 들어, 기계 고장이 임박했을 때 센서 값이 훈련 시 관찰된 최고치를 넘어선다면, RF는 최고치에서의 예측(최대 결함 수준)만을 제공할 뿐, 이례적으로 높은 값에 대한 실제 심각성을 과소평가할 수 있습니다.

7.2. Oblique / Rotation RF 실험

표준 결정 트리는 한 번에 하나의 특징에 대해서만 분할을 수행하는 축 정렬 분할 방식을 사용합니다. 만약 데이터의 실제 결정 경계가 대각선 형태를 띤다면(oblique boundary), RF는 이 경계를 근사하기 위해 수많은 축 정렬 분할(계단 모양 경계)을 필요로 합니다. 이로 인해 트리의 깊이가 깊어지고 학습 효율이 떨어질 수 있습니다.

Rotation ForestOblique Random Forest는 이 문제를 해결하기 위한 확장 기법입니다.

1. Oblique RF: 노드 분할 시 단일 특징 대신 특징들의 선형 결합을 사용하여 분할 조건을 생성합니다.

2. Rotation Forest: 훈련 전 무작위로 특징 부분집합에 대해 PCA(주성분 분석) 회전을 적용하여 데이터 공간을 변환한 후, 이 회전된 공간에서 표준 RF를 훈련합니다. 회전된 공간에서는 여전히 축 정렬 분할을 사용하지만, 원래 특징 공간으로 돌아오면 이는 사선 분할(oblique split)의 효과를 가집니다.

이러한 기법들은 RF가 더 유연하고 얕은 트리로도 복잡한 경계를 학습할 수 있게 하여, 특정 데이터셋에서 성능 향상(편향 감소)을 가져올 수 있습니다. 연구자는 PCA나 무작위 가우시안 투영(Gaussian Random Projection)을 사용하여 특징을 증강한 후 표준 RF를 훈련하는 방식으로 Oblique RF의 효과를 간접적으로 실험해볼 수 있습니다.

8. 결론 및 CBM 연구에의 적용

8.1. 앙상블 모델의 전략적 포지셔닝

랜덤 포레스트는 분산 감소를 통한 안정성에 초점을 맞추는 반면, XGBoost는 잔차 학습을 통한 편향 감소 및 성능 극대화에 초점을 맞춥니다. XGBoost가 일반적으로 최고 정확도를 제공하지만, RF는 최소한의 튜닝으로도 강력한 안정성과 준수한 정확도를 보장하며, OOB 에러 추정이라는 고유한 장점을 제공합니다. 특히 노이즈가 심하거나 데이터셋이 상대적으로 작은 산업 데이터(CBM)의 초기 모델링 단계에서는, RF가 XGBoost보다 더 강력한 강건성(robustness)과 해석 가능성의 균형을 제공할 수 있습니다.

8.2. 전문가 권고 사항

CBM 또는 산업 환경에서의 이상 탐지(Anomaly Detection) 모델 개발을 위한 RF 활용 시, 다음의 고급 기법들을 반드시 고려해야 합니다.

1. 신뢰할 수 있는 중요도 측정 필수: 기본 MDI(Gini)는 특징 상관관계와 카디널리티 편향에 취약하므로, 반드시 MDA (순열 중요도)SHAP 값을 사용하여 모델의 실제 예측 의존성을 평가해야 합니다.

2. 시계열 데이터 처리: CBM 데이터는 시계열 특성을 가지므로, MDA를 계산할 때 시간적 누출(temporal leakage)을 방지하기 위해 Temporal Blocked Permutation을 적용해야 합니다. 이는 무작위 순열이 시간 순서를 섞어버리는 것을 막습니다.

3. OOB 검증의 활용: OOB 에러 추정은 CV(교차 검증) 비용 없이 모델의 일반화 성능을 빠르게 평가하는 데 유용하며, 특히 대규모 훈련 데이터셋에서 효율성을 극대화합니다.

4. 불확실성 정량화: 특징 중요도에 대한 신뢰도를 높이기 위해, 반복 순열이나 중첩 부트스트랩을 활용하여 특징 중요도의 신뢰구간(CI)을 반드시 추정해야 합니다.

5. 확장 모델 탐색: 예측된 잔여 수명(Remaining Useful Life, RUL)과 같은 회귀 문제에서 불확실성을 표현하려면, 평균 예측값 외에 신뢰구간을 제공하는 Quantile Random Forest와 같은 RF 변형 모델을 탐색하는 것이 유용합니다.

9. 부록: 앙상블 모델 최종 비교 및 핵심 Python 코드

9.1. Random Forest 대 XGBoost 최종 요약

구분 Random Forest XGBoost
학습 방식 병렬 (Bagging) 순차 (Boosting)
목적 Variance 감소 Bias 감소
Tree 깊이 깊음 (Full depth) 얕음 (Depth 3~6)
Feature Importance Gini 감소량, MDA, SHAP Gain, Weight, Cover, SHAP
Extrapolation 불가 (region-based) 거의 동일
대표적 장점 안정성·간단함·OOB 검증 고성능·정교함·최적화된 구현

 

9.2. 고급 분석을 위한 Python 코드 블록

MDA는 RF의 실제 예측 의존성을 측정하는 데 가장 신뢰할 수 있는 방법입니다. 다음 코드는 훈련된 RF 모델에 대해 MDA를 계산하는 방법을 보여줍니다.

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.inspection import permutation_importance
from sklearn.datasets import make_classification
import numpy as np

# 1. Prepare Data
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)
feature_names = [f"Feature_{i}" for i in range(10)]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 2. Train Model
rf = RandomForestClassifier(n_estimators=200, random_state=42)
rf.fit(X_train, y_train)

# 3. Compute MDA (Permutation Importance) on the test set
# n_repeats=50: 반복 횟수를 늘려 중요도의 안정성을 확보합니다 (CI 계산 기반).
perm = permutation_importance(
    rf, X_test, y_test, 
    n_repeats=50, 
    random_state=42, 
    scoring="accuracy"
)

# 4. Summarize Results
mda_mean = pd.Series(perm.importances_mean, index=feature_names).sort_values(ascending=False)
mda_std = pd.Series(perm.importances_std, index=feature_names).loc[mda_mean.index]

print("MDA (Permutation) Mean drop in accuracy:\n", mda_mean, "\n")
print("Std of drops (Stability):\n", mda_std)
# mda_std 값을 통해 중요도 추정치의 변동성(신뢰구간)을 파악할 수 있습니다.

참고 자료

  • What is the Random Forest Algorithm.pdf

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다