동적 앙상블 선택(DES)과 다양성 지표: 지역 적합도 기반 예측

다양성 지표와 동적 앙상블 선택(DES)의 지역 적합도, 분류기 풀, 선택 규칙을 중심으로 불균형과 드리프트 환경의 설계·운영 고려사항을 정리합니다.

2026-08-14 · 최초 발행 2024-04-29

예측이 어려운 지역에서 분류기 조합을 바꾸는 방식

앙상블 학습은 단일 모델이 놓치는 오류를 다른 모델의 판단으로 보완한다. 이때 분류기들이 같은 방식으로 틀린다면 모델 수를 늘려도 효과가 제한된다. 다양성 지표는 개별 분류기가 서로 다른 오류를 내는 정도를 수량화하고, 동적 앙상블 선택(Dynamic Ensemble Selection, DES)은 입력 샘플마다 적합한 분류기 하위집합을 골라 예측한다.

DES는 지역 적합도(region of competence)를 추정하는 단계와 선택 규칙(selection rule)으로 구성된다. DCS(Dynamic Classifier Selection)가 단일 최적 분류기를 고르는 방식이라면, DES는 복수 분류기의 서브셋을 선택한다. DES는 안정성과 정확도 측면에서 우위 경향을 보인다.

다양성을 정확도와 함께 다루기

분류기 사이의 관계를 보는 방법은 크게 pairwise 지표와 non-pairwise 지표로 나뉜다.

Pairwise 지표에는 Q-statistic, 상관계수, Disagreement rate, Double-fault 등이 있다. 두 분류기의 예측 행렬을 바탕으로 상관성이나 불일치 정도를 계산한다. Non-pairwise 지표는 앙상블 전체의 출력을 대상으로 하며, ensemble output entropy, Kohavi–Wolpert variance, κ-통계 등이 여기에 해당한다. 이들은 출력 분산과 분류기 간 합의 정도를 측정한다.

다양성 자체가 목표는 아니다. 다양성이 지나치게 낮아도, 반대로 지나치게 높아도 성능이 떨어질 수 있다. 목표 정확도와 함께 조정해야 하는 설계 변수다.

분류기 풀과 DSEL을 연결하는 과정

DES를 적용하려면 먼저 서로 다른 구조, 하이퍼파라미터, 학습 샘플을 이용해 분류기 풀을 만든다. 부트스트랩, 특징 서브샘플링, 알고리즘 이질성을 활용할 수 있다.

그다음 검증 집합인 DSEL에서 k-NN 기반의 국소 영역을 정의한다. 후보 분류기마다 해당 지역의 정확도와 신뢰도를 계산해 적합도를 추정한다. 선택 단계에서는 KNORA-E/U 같은 규칙 기반 방식, META-DES 같은 메타 학습 방식, 임계값 또는 랭킹 기반 전략을 사용할 수 있다. 선택된 분류기는 소프트·하드 보팅, 가중 평균, 캘리브레이션을 통해 결합한다.

선택 규칙에 따라 달라지는 특성

KNORA-E와 KNORA-U는 지역에서 올바르게 예측한 분류기를 기준으로 선택한다. KNORA-E는 올바른 예측을 한 분류기만 남기고, KNORA-U는 최소 하나라도 올바르게 예측했다면 포함한다. 구조가 간명하고 지역성을 활용하는 데 강점이 있다.

OLA와 LCA는 Overall/Local Accuracy를 바탕으로 가중치를 주며 연속 가중 결합에 활용할 수 있다. 계산 효율성이 우수하다.

META-DES는 지역, 출력, 불확실성 메타특징을 입력으로 하여 오라클 근사 메타 분류기를 학습한다. 높은 성능을 기대할 수 있는 대신 학습과 추론 비용이 증가한다.

운영에서 먼저 확인할 항목

DES는 지역 탐색과 선택 단계를 추가하므로 추론 지연이 늘어난다. 배치와 온라인 요구사항에 맞춰 k, DSEL 크기, 후보 상한을 조정해야 한다.

데이터 분포가 변하는 환경에서는 지역성을 활용하는 특성상 드리프트 대응력이 있다. 다만 DSEL 갱신과 윈도잉 전략이 필요하다. 확률 보정과 불균형 대응도 함께 검토한다. Platt/Isotonic 캘리브레이션 후 가중 결합을 적용하고, 소수 클래스에는 지역 가중이나 코스트 민감 설계를 둘 수 있다.

금융 사기 탐지와 이상거래처럼 클래스 불균형과 패턴 변화가 겹치는 환경에서는 규칙 기반 모델과 트리 기반 모델을 혼합한 풀을 구성할 수 있다. 제조 불량 검출과 설비 이상 예지에서는 라인·설비별로 다른 국소 패턴을 DSEL의 온라인 윈도우 갱신으로 다룬다. 의료 영상과 병리 슬라이드에서는 세그먼트별 텍스처와 조직 이질성에 대응하기 위해 CNN 특성 추출, 경량 분류기 풀, DES를 결합해 정확도와 안정성을 함께 확보할 수 있다.

임계값 통과미통과/공백입력: 샘플 x특징 공간에서 k-NN로 지역정의(DSEL 검증 집합 기반)후보 분류기 f1..fm의 지역적합도 계산- 지역 정확도/신뢰도/불확실성- 다양성 지표 참조(보조)선택 규칙선택된 서브셋 S폴백: 정적 앙상블또는 Top-K 강제 선택결합: 가중소프트보팅/캘리브레이션출력: 예측 y_hat, 불확실성u_hat모니터링/로깅: 지역 분포·선택로그, 지연·정확도

선택 결과가 비어 있으면 정적 앙상블로 폴백하거나 최소 K개를 강제로 선택할 수 있다. 지역의 클래스가 단일화됐을 때는 k를 확장하거나 거리 가중 k-NN을 적용한다. 예측 확률의 편향이 감지되면 온디맨드 캘리브레이션을 다시 적용한다.

정적 결합과 지역 기반 선택의 차이

지표 정적 앙상블 동적 앙상블 선택 (DES)
성능 평균적 안정 성능, 분포 변동에 취약 데이터 지역성 반영, 난샘플에서 성능 우위 경향
확장성 모델 수 증가에 선형 확장 지역 탐색 비용로 추론 지연 증가, 최적화 필요
일관성 재현성 높음, 선택 변동 적음 지역·선택 규칙에 따른 변동 존재
안정성 노이즈에 중간 수준 강건 DSEL 품질·크기에 민감
운영 편의 간단 배포, 유지보수 용이 구성요소(풀·DSEL·규칙) 다층 관리 필요

KNORA-E로 구성하는 예시

전제조건: Python 3.9+, scikit-learn, deslib 설치

  • 설치: pip install scikit-learn deslib
# 데이터 준비: 불균형 이진 분류 예시
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.base import clone
from sklearn.metrics import f1_score, roc_auc_score
from deslib.des.knora_e import KNORAE

X, y = make_classification(n_samples=5000, n_features=30, n_informative=10,
                           n_redundant=5, weights=[0.9, 0.1],
                           class_sep=1.0, random_state=42)

# 분할: 학습(풀) / DSEL(지역 적합도) / 테스트
X_train, X_tmp, y_train, y_tmp = train_test_split(X, y, test_size=0.5, stratify=y, random_state=42)
X_dsel, X_test, y_dsel, y_test = train_test_split(X_tmp, y_tmp, test_size=0.5, stratify=y_tmp, random_state=42)

# 분류기 풀 구성: 이질성은 다양성 증가에 유리
base = DecisionTreeClassifier(class_weight="balanced", min_samples_leaf=5)
pool = []
for i in range(25):
    clf = clone(base).set_params(max_depth=None if i % 2 == 0 else 6,
                                 max_features=None if i % 3 == 0 else "sqrt",
                                 random_state=100 + i)
    clf.fit(X_train, y_train)
    pool.append(clf)

# DES: KNORA-E
des = KNORAE(pool_classifiers=pool, k=7)  # k-NN 지역 크기
des.fit(X_dsel, y_dsel)

# 예측 및 평가
y_pred_des = des.predict(X_test)
y_proba_des = des.predict_proba(X_test)[:, 1]

# 정적 앙상블(소프트 보팅) 비교
probas = np.stack([c.predict_proba(X_test)[:, 1] for c in pool], axis=1)
y_proba_static = probas.mean(axis=1)
y_pred_static = (y_proba_static >= 0.5).astype(int)

print("F1 (DES):   ", f1_score(y_test, y_pred_des))
print("ROC-AUC (DES):", roc_auc_score(y_test, y_proba_des))
print("F1 (Static):", f1_score(y_test, y_pred_static))
print("ROC-AUC (Static):", roc_auc_score(y_test, y_proba_static))

DSEL은 학습·테스트 집합과 분리된 대표성 있는 샘플로 구성한다. 드리프트 환경에서는 슬라이딩 윈도우로 주기적으로 갱신한다. 지연이 부담되면 k를 축소하고, FAISS/Annoy 기반 근사 최근접 탐색이나 Top-K 후보 사전 랭킹 캐시를 검토할 수 있다. 각 분류기에 Platt/Isotonic을 적용한 뒤 가중 소프트 결합을 사용하는 방식도 가능하다.

난샘플과 희소영역에서는 F1, Recall이 절대 26%p 개선될 수 있고, 소수 클래스 ROC-AUC는 14%p 개선 가능하다. 정적 앙상블과 비교하면 추론 지연은 1.2~3.0배 증가할 수 있다. 모델 풀을 다시 학습하지 않고도 DSEL 갱신으로 환경 변화에 적응하기 쉬운 점은 운영상 장점이다.

이질적인 분류기 풀을 만들고, 대표성 있는 DSEL을 확보한 뒤, 선택 규칙과 k를 조정한다. 이어 캘리브레이션과 폴백을 설계하고 지연·성능을 모니터링한다. 불균형, 드리프트, 높은 이질성이 함께 나타나는 데이터 환경에서 우선 검토할 수 있다.

앙상블 학습동적 앙상블 선택다양성 지표메타 학습머신러닝