엑스트라 트리(Extra Trees)란? AI에서 무작위 경계 후보로 여러 트리를 만드는 방법
TL;DR
엑스트라 트리는 특징마다 무작위 분할 경계 후보를 만들고, 그 후보 가운데 좋은 분할을 골라 만든 여러 트리의 예측을 결합하는 모델입니다. 랜덤 포레스트보다 분할 경계를 고르는 과정에 무작위성을 더합니다. scikit-learn의 기본 설정은 각 트리에 전체 학습 데이터를 쓰며, 분류와 회귀의 예측을 각각 확률 평균과 수치 평균으로 모읍니다. 무작위성을 늘렸다고 성능이나 속도가 항상 좋아지는 것은 아닙니다.
핵심 3줄 요약
- 핵심 1
경계 후보도 무작위로 만듭니다. 최적 경계를 모두 탐색하는 대신 임의로 뽑은 후보끼리 분할 품질을 비교합니다. - 핵심 2
여러 트리의 결과를 결합합니다. 한 트리의 임의 분할을 그대로 최종 답으로 쓰는 방식과 다릅니다. - 핵심 3
설정과 검증을 따로 확인합니다. 분류·회귀의 특징 수 기본값, 부트스트랩과 OOB 조건, 비용과 독립 평가를 함께 봅니다.
이 글에서 다룰 내용
- 엑스트라 트리의 한 문장 정의
- 센서 이상 상태를 분류하는 쉬운 예시
- 특징과 경계 후보에 무작위성을 주는 이유
- 전체 표본 사용과 예측 평균의 작동 방식
- 랜덤 포레스트·단일 트리·부스팅·배깅과의 차이
- 주요 설정과 실전 점검 순서
- OOB 평가·특성 중요도·과적합의 주의점
엑스트라 트리를 한 문장으로 정의하면 무엇인가요?
엑스트라 트리(Extra Trees, Extremely Randomized Trees)는 노드마다 무작위로 만든 분할 경계 후보를 비교해 트리를 학습하고, 여러 트리의 예측을 평균하는 지도학습 앙상블입니다.
노드는 데이터를 나누는 지점이고 경계값은 온도가 특정 값보다 높은지처럼 두 갈래를 정하는 기준입니다. 임의로 고른 경계라도 어느 후보가 정답을 더 잘 구분하는지 비교합니다. 라벨을 보지 않고 데이터만 무조건 나누는 방법은 아닙니다.
scikit-learn에서는 클래스 예측에
ExtraTreesClassifier
를, 연속적인 숫자 예측에
ExtraTreesRegressor
를 사용합니다. 이름에 무작위가 들어가지만 학습 뒤에는 저장된 분기 규칙으로 입력을 처리합니다. 생성형 AI의 문장 샘플링 설정과도 다른 개념입니다.
한 줄 정리: 엑스트라 트리는 임의의 경계 후보를 평가해 서로 다른 트리를 만들고 그 예측을 모으는 방법입니다.
쉬운 예시로 이해해 볼까요?
온도와 진동 크기를 보고 장비가 정상인지 이상 상태인지 예측한다고 가정해 보겠습니다. 학습 자료에는 각 시점의 센서값과 사람이 확인한 상태 라벨이 있습니다. 온도만 높아도 이상인 경우와 진동까지 커져야 이상인 경우를 조건 분기로 구분합니다.
한 노드에서 온도와 진동을 특징 후보로 골랐다면, 각 특징에 무작위 경계 후보를 만듭니다. 온도를 어느 지점에서 나눌지와 진동을 어느 지점에서 나눌지를 임의로 제안한 뒤, 두 후보 중 라벨을 더 잘 구분하는 분할을 선택합니다. 다음 노드에서는 후보를 다시 만듭니다.
설명을 위해 세 트리가 같은 입력의 이상 상태 확률을 0.9, 0.7, 0.2로 예측했다고 해 보겠습니다. 확률을 평균하면 0.6입니다. 이는 계산 원리를 설명하는 가상 값이며 실제 센서 데이터로 얻은 측정 결과가 아닙니다. 클래스 이름만 다수결하는 계산과도 구분합니다.
쉬운 예시: 여러 판단자가 서로 다른 경계 후보를 시험하고, 좋은 후보로 만든 판단 결과를 모으는 과정으로 이해하면 쉽습니다.
왜 AI에서 엑스트라 트리가 중요한가요?
트리 사이의 비슷한 판단을 줄입니다
같은 자료에서 늘 비슷한 최적 경계를 찾으면 트리들도 비슷한 실수를 할 수 있습니다. 엑스트라 트리는 경계 후보에 무작위성을 더해 트리 사이 차이를 키웁니다. 예측을 평균했을 때 개별 트리의 흔들림을 줄이려는 목적입니다.
분산과 편향의 관계를 살펴볼 수 있습니다
공식 가이드는 추가 무작위성이 분산을 더 줄이는 대신 편향을 늘릴 수 있다고 설명합니다. 분산은 학습 자료가 달라질 때 예측이 흔들리는 정도이고, 편향은 모델이 관계를 충분히 표현하지 못해 생기는 체계적인 오차입니다. 무작위성이 강할수록 언제나 유리하지는 않습니다.
표 데이터의 비교 모델로 검토합니다
고객 기록이나 장비 센서처럼 행과 열로 정리한 데이터에서 비선형 조건과 특징 간 관계를 트리로 학습합니다. 딥러닝만 후보로 삼지 않고 다른 트리 앙상블과 비교할 때 유용합니다. 최적 경계를 찾는 탐색 방식은 다르지만 실제 학습 시간은 데이터와 설정에 따라 측정해야 합니다.
핵심 인사이트: 엑스트라 트리의 차이는 트리를 많이 만든다는 데만 있지 않습니다. 분할 경계 후보를 만드는 규칙에 있습니다.
엑스트라 트리는 어떻게 작동하나요?
1. 학습 표본과 특징 후보를 정합니다
scikit-learn의 분류기와 회귀기는 기본적으로
bootstrap=False
입니다. 이 조건에서는 각 트리가 전체 학습 자료를 사용합니다. 같은 표본을 쓰더라도 특징과 경계 후보의 무작위성 때문에 트리 구조가 달라집니다. 원본 자료를 트리마다 서로 겹치지 않는 조각으로 나누는 것은 아닙니다.
2. 무작위 경계 후보에서 좋은 분할을 고릅니다
각 노드에서는
max_features
에 따라 고려할 특징 수를 정합니다. 후보 특징마다 임의 경계를 만든 뒤 분할 기준으로 평가하고 좋은 후보를 선택합니다. 분류의 지니 불순도는 나눈 그룹에 여러 클래스가 얼마나 섞였는지 보는 기준입니다. 무작위 제안과 품질 평가가 함께 들어갑니다.
선택한 분할로 자료를 나눈 다음 자식 노드에서 같은 과정을 반복합니다. 깊이 한도나 잎의 표본 수 같은 조건을 만나면 더 나누지 않습니다. 트리 수를 정하는 설정과 한 트리의 성장을 제한하는 설정은 역할이 다릅니다.
3. 분류 확률이나 회귀 예측을 평균합니다
학습된
ExtraTreesClassifier
의
predict_proba
는 트리별 클래스 확률을 평균합니다.
predict
는 평균 확률이 가장 높은 클래스를 선택하며, 확률 배열의 클래스 순서는
classes_
와 맞춰 읽습니다. 회귀기는 각 트리가 예측한 숫자의 평균을 돌려줍니다.
실전 팁: 무작위성은 주로 학습 과정에 있습니다. 같은 학습 모델에 같은 입력을 넣는 것과 새로운 시드로 모델을 다시 학습하는 것을 구분하세요.
엑스트라 트리와 헷갈리는 용어는 무엇이 다른가요?
랜덤 포레스트와의 차이
일반적인 랜덤 포레스트는 분기 후보 특징을 고르고 그 안에서 좋은 경계를 탐색합니다. 엑스트라 트리는 경계 후보 자체도 무작위로 만듭니다. scikit-learn에서는 랜덤 포레스트가 기본적으로 복원 추출을 쓰는 반면 엑스트라 트리는 전체 표본을 씁니다. 두 차이를 각각 확인해야 같은 모델의 별칭으로 오해하지 않습니다.
단일 엑스트라 트리와의 차이
ExtraTreeClassifier
는 무작위 분할을 하는 트리 하나이고
ExtraTreesClassifier
는 여러 트리를 묶는 모델입니다. 단수와 복수의 이름이 비슷해도 객체와 역할이 다릅니다. 단일 트리 API 문서는 이 트리를 앙상블 안에서 사용하도록 경고합니다.
그래디언트 부스팅과의 차이
그래디언트 부스팅은 앞 단계의 예측을 보완하도록 다음 모델을 순차적으로 학습합니다. 엑스트라 트리는 앞 트리의 잔차를 다음 트리에 넘겨 수정하는 방식이 아닙니다. 여러 트리를 만들고 결과를 결합하므로 트리별 학습을 병렬로 처리할 수 있습니다.
배깅과의 차이
배깅은 복원 추출한 표본으로 여러 예측기를 학습해 결합하는 방식입니다. 엑스트라 트리는 분할 규칙까지 정하는 구체적인 트리 앙상블이며 기본 설정에서는 복원 추출을 쓰지 않습니다. 부트스트랩을 켤 수도 있지만 그 옵션만으로 엑스트라 트리의 경계 후보 규칙이 사라지지는 않습니다.
비교 정리: 트리의 개수, 표본을 뽑는 방식, 분할 경계를 만드는 규칙, 예측 결합 방식을 나누어 보면 모델 이름이 비슷해도 차이가 드러납니다.
실전에서는 어디에 쓰이나요?
정상·이상처럼 범주를 예측합니다
장비 상태나 제품 불량 여부처럼 라벨이 있는 분류 과제의 후보로 검토합니다. 이상 상태가 드물다면 전체 정확도만 보지 않고 해당 클래스의 재현율과 오탐을 확인합니다. 라벨 없이 이상점을 찾는 아이솔레이션 포레스트와는 학습 목표가 다릅니다.
처리 시간이나 수요 같은 숫자를 예측합니다
정답이 연속적인 수치라면 회귀기를 사용합니다. 기본 제곱 오차 기준에서는 잎의 평균값을 이용하지만 다른 분할 기준도 있으므로 설정을 기록합니다. 회귀 API의 예측 결합은 트리별 숫자의 평균이며, 분류 확률과 같은 의미로 읽지 않습니다.
예측에 쓰이는 특징을 점검합니다
feature_importances_
는 불순도 감소에 따른 특징의 기여를 요약합니다. 어떤 열이 많이 활용되는지 살펴보는 출발점이지만 원인의 증거는 아닙니다. 공식 비교 예제는 훈련 자료에서 계산한 중요도와 별도 자료에서 특징값을 섞어 측정한 순열 중요도를 구분해 보여 줍니다.
실전 팁: 모델을 선택할 때는 동일한 평가 분할에서 랜덤 포레스트와 엑스트라 트리의 오류 유형, 학습 시간, 예측 지연을 함께 비교하세요.
엑스트라 트리를 적용할 때 어떤 순서로 확인하나요?
1. 예측 대상과 평가 자료를 분리합니다
분류인지 회귀인지 정하고 예측 시점에 알 수 있는 열만 준비합니다. 같은 장비의 연속 기록이나 같은 고객의 반복 관측이 있다면 검증 분할에 그 관계를 반영합니다. 라벨이나 미래 정보가 입력에 새면 무작위 트리도 잘못된 신호를 배웁니다.
2. 트리 수와 트리 크기를 확인합니다
n_estimators
는 트리 개수이고
max_depth
는 최대 깊이입니다.
min_samples_leaf
는 잎에 필요한 최소 표본 수를 조절합니다. 기본값으로 트리를 깊게 키우면 저장 크기와 메모리 부담이 커질 수 있습니다. 트리 수만 늘려 과적합을 해결하려 하지 않습니다.
3. 특징 수와 표본 옵션을 따로 기록합니다
현재 scikit-learn 공식 API에서
max_features
기본값은 분류기가
"sqrt"
이고 회귀기가
1.0
입니다. 회귀기의 이 값은 모든 특징을 후보로 봅니다. 특징 수를 줄이지 않아도 경계 후보의 무작위성은 남습니다. 두 과제의 같은 이름 옵션이 같은 기본 동작이라고 가정하지 않습니다.
두 클래스 모두 기본값은
bootstrap=False
이며 OOB 평가는
bootstrap=True
일 때만 지원됩니다. 복원 추출을 끈 채
oob_score=True
만 지정하는 것은 올바른 조합이 아닙니다. 사용하는 라이브러리 버전과 실제 파라미터를 함께 저장합니다.
4. 시드와 품질·비용을 함께 남깁니다
random_state
는 특징 후보와 경계값 추출, 부트스트랩을 켰을 때 표본 추출의 무작위성을 관리합니다. 시드를 고정해 비교 조건을 맞추되 한 번의 좋은 점수만으로 모델을 선택하지 않습니다.
n_jobs
는 병렬 작업을 조절하지만 작업 수만큼 속도가 비례해 늘어난다는 보장은 없습니다.
한 줄 정리: 분류·회귀 구분, 데이터 분리, 트리 크기, 특징·표본 옵션, 품질과 운영 비용을 차례로 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 임의 경계가 데이터 오류를 지우지는 않습니다. 잘못된 라벨과 누수된 특징은 여러 트리가 함께 학습할 수 있습니다. 학습 점수만 보고 판단하지 말고 보지 못한 자료의 성능을 확인합니다.
둘째, OOB 점수의 조건과 역할을 구분합니다. 전체 표본을 쓰는 기본 설정에는 OOB 평가가 없습니다. 복원 추출을 켜더라도 고객 집단이나 시간 순서를 고려한 검증 설계까지 대신하지는 않습니다.
셋째, 평균 확률을 실제 정답률의 보증으로 읽지 않습니다. 확률값을 승인·거절의 기준으로 사용한다면 별도 평가 자료에서 확률과 임계값을 점검합니다. 모델이 반환한 클래스 순서도 확인합니다.
넷째, 특성 중요도를 인과관계로 해석하지 않습니다. 공식 가이드는 불순도 기반 중요도가 고유값이 많은 특징을 선호하고 훈련 자료의 통계에 의존한다고 경고합니다. 성능이 부족한 모델의 중요도 순위만으로 업무 결정을 내리지 않습니다.
다섯째, 입력 처리와 구현 버전을 확인합니다. 문자열 범주의 변환, 결측값 처리, 입력 열의 순서를 학습과 운영에서 맞춥니다. 현재 공식 API의 결측값 지원을 과거 버전이나 다른 라이브러리에도 그대로 적용하지 않습니다.
주의: 엑스트라 트리는 무작위 경계를 활용하는 예측 모델입니다. 자동 이상치 삭제 도구나 결과의 안전성을 보증하는 장치는 아닙니다.
자주 묻는 질문
Q1. 엑스트라 트리는 랜덤 포레스트의 다른 이름인가요?
아닙니다. 둘 다 트리 앙상블이지만 엑스트라 트리는 경계 후보에도 무작위성을 더합니다. scikit-learn의 부트스트랩 기본값도 다릅니다. 이름 대신 사용한 클래스와 옵션을 확인하세요.
Q2. 경계를 무작위로 정하면 정답 라벨은 필요 없나요?
라벨이 필요합니다. 경계 후보를 임의로 제안한 다음 분할 품질로 후보를 비교합니다. 무작위 제안이 지도학습의 평가 과정을 없애지는 않습니다.
Q3. 모든 특징을 후보로 보면 무작위성이 사라지나요?
아닙니다. 특징 선택의 무작위성이 줄어도 경계 후보를 임의로 만드는 과정은 남습니다. 회귀기의 기본
max_features=1.0
도 이 구분을 적용해 읽습니다.
Q4. 기본 설정에서 OOB 평가를 바로 쓸 수 있나요?
쓸 수 없습니다. 기본 설정은 복원 추출을 끕니다. OOB를 사용하려면 부트스트랩을 켜야 하며, 그 점수와 마지막 독립 테스트 결과의 역할은 구분합니다.
Q5. 무작위성이 많으니 랜덤 포레스트보다 항상 좋은가요?
그렇지 않습니다. 분산이 줄어도 편향이 늘 수 있고 트리 크기와 데이터에 따라 비용도 달라집니다. 같은 검증 조건에서 실제 성능과 지연, 메모리를 비교해야 합니다.
출처
마무리
엑스트라 트리는 특징별 무작위 경계 후보에서 좋은 분할을 고르고 여러 트리의 예측을 결합하는 모델입니다. 기본 전체 표본 사용, 분류 확률과 회귀 수치의 평균, 특징 수 옵션의 과제별 차이를 나누어 이해하면 이름만 비슷한 모델들과 구분하기 쉽습니다.
처음에는 경계 후보를 만드는 단계와 후보를 평가하는 단계를 구분하세요. 실제 사용에서는 데이터 분리와 트리 크기, OOB의 조건을 기록하고 독립 성능과 비용을 비교합니다. 더 많은 무작위성보다 자신의 자료에서 얻는 검증 결과가 선택의 근거입니다.
