본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 효율적인 데이터 라벨링을 위한 Active Learning 샘플링 전략 7가지 해결 방법

by Papa Martino V 2026. 4. 23.
728x90

Active Learning
Active Learning

 

 

인공지능 모델 개발 과정에서 가장 큰 병목 현상은 바로 '고품질의 라벨링된 데이터 확보'입니다. 모든 데이터를 라벨링하는 것은 시간과 비용 측면에서 불가능에 가깝습니다. 이때 개발자가 취할 수 있는 가장 영리한 전략이 바로 Active Learning(능동 학습)입니다. Active Learning은 모델이 스스로 "어떤 데이터를 학습하면 내 성능이 가장 많이 오를까?"를 판단하여, 가장 정보 가치가 높은 샘플을 우선적으로 선택하는 기법입니다. 본 포스팅에서는 단순한 이론을 넘어, 파이썬(Python) 환경에서 실무에 즉시 적용 가능한 7가지 샘플링 전략과 그 구현 차이점을 심층 분석합니다.


1. 무작위 추출(Random) vs 능동 학습(Active) 전략 차이 비교

일반적인 학습 방식과 Active Learning이 데이터 효율성 측면에서 어떤 차이를 보이는지 아래 표를 통해 확인해 보겠습니다.

비교 항목 Passive Learning (Random Sampling) Active Learning (Informed Sampling)
데이터 선택 기준 무작위 추출 (기회균등) 모델의 불확실성 또는 정보량 기반
라벨링 비용 매우 높음 (모든 데이터 필요) 매우 낮음 (핵심 데이터 위주)
학습 효율성 선형적 성능 향상 초기에 급격한 성능 향상 (Logarithmic)
데이터 중복성 유사한 샘플 다수 포함 가능 다양하고 정보 가치가 큰 샘플 위주
적용 적합성 데이터가 적고 라벨링이 쉬울 때 데이터는 많지만 라벨링 비용이 비쌀 때

2. Active Learning의 핵심 로직: Query Strategy

Active Learning의 핵심은 쿼리 전략(Query Strategy)에 있습니다. 모델은 라벨링되지 않은 데이터 풀(Unlabeled Pool)에서 특정 기준에 따라 샘플을 골라냅니다. 가장 대표적인 해결 방법은 모델이 분류를 가장 어려워하는 샘플을 고르는 Uncertainty Sampling입니다.


3. 실무 적용을 위한 Python 샘플링 예제 (7가지)

아래 예제들은 파이썬의 핵심 라이브러리(NumPy, Scikit-learn, Scipy)를 활용하여 실제 파이프라인에 즉시 통합할 수 있도록 설계되었습니다.

#1. Least Confidence Sampling (최소 신뢰도 전략)

모델이 가장 높은 확률을 부여한 클래스의 확률값이 가장 낮은 샘플을 선택합니다. 즉, 1등임에도 불구하고 확신이 없는 데이터를 찾습니다.

import numpy as np

def least_confidence(probs):
    # probs: [n_samples, n_classes] 형태의 예측 확률 배열
    max_probs = np.max(probs, axis=1)
    # 확률이 낮을수록(확신이 없을수록) 높은 우선순위 부여
    return 1 - max_probs

# Example
probs = np.array([[0.9, 0.1], [0.55, 0.45], [0.6, 0.4]])
priority = least_confidence(probs)
# 결과: [0.1, 0.45, 0.4] -> 두 번째 샘플 우선 라벨링

#2. Margin Sampling (마진 샘플링)

가장 확률이 높은 클래스와 두 번째로 높은 클래스의 차이가 가장 작은 샘플을 고릅니다. 두 결정 경계 사이에서 모호한 데이터를 찾는 데 특화되어 있습니다.

def margin_sampling(probs):
    part = np.partition(-probs, 1, axis=1)
    margin = -part[:, 0] + part[:, 1]
    return 1 - margin

# 두 클래스 간 격차가 좁을수록 모호한 데이터로 간주

#3. Entropy Sampling (엔트로피 샘플링)

정보 이론의 엔트로피를 활용하여 모든 클래스에 걸쳐 확률이 얼마나 분산되어 있는지 측정합니다. 다중 클래스 분류에서 가장 정교한 지표입니다.

from scipy.stats import entropy

def entropy_sampling(probs):
    return entropy(probs.T)

# 모든 클래스의 확률이 비슷할수록 엔트로피 값이 커짐

#4. Query-By-Committee (QBC) 전략

여러 개의 모델(위원회)을 구성하여, 모델들 간의 예측 의견 차이(Disagreement)가 가장 큰 샘플을 선택합니다.

def qbc_disagreement(committee_probs):
    # committee_probs: [n_models, n_samples, n_classes]
    avg_probs = np.mean(committee_probs, axis=0)
    # Consensus Entropy와 Individual Entropy의 차이 계산
    consensus_entropy = entropy(avg_probs.T)
    individual_entropy = np.mean([entropy(p.T) for p in committee_probs], axis=0)
    return consensus_entropy - individual_entropy

#5. Expected Model Change (EMC)

해당 샘플을 학습했을 때 모델의 가중치(Gradient)가 가장 크게 변할 것으로 예상되는 데이터를 고릅니다. 영향력이 큰 샘플을 찾는 방법입니다.

# 의사 코드 형태의 구현 (Deep Learning 프레임워크 필요)
# 1. 샘플의 가상의 라벨(예측값)을 생성
# 2. Loss 계산 후 Gradient Norm 추출
# 3. Gradient가 큰 샘플을 우선순위 큐에 삽입

#6. Diversity Sampling (K-Means 기반)

불확실성뿐만 아니라 데이터의 분포를 고려합니다. 피처 공간에서 서로 멀리 떨어진(다양한) 샘플을 클러스터링을 통해 추출합니다.

from sklearn.cluster import KMeans

def diversity_sampling(features, n_clusters):
    kmeans = KMeans(n_clusters=n_clusters).fit(features)
    # 각 클러스터의 중심점에서 가장 가까운 샘플 하나씩 선택
    return kmeans.cluster_centers_

#7. Hybrid Strategy (Uncertainty + Diversity)

불확실성이 높은 후보군을 먼저 뽑고, 그 안에서 피처 다양성을 고려하여 최종 라벨링 대상을 선정하는 실무형 복합 전략입니다.

def hybrid_sampling(probs, features, top_k=100):
    # 1. 불확실성 상위 샘플 필터링
    uncertain_idx = np.argsort(entropy_sampling(probs))[-top_k*2:]
    # 2. 필터링된 샘플 중 다양성 고려하여 k개 선택
    # (실제 구현 시 서브셋 클러스터링 수행)
    return uncertain_idx[:top_k]

4. 결론: 규제 대응과 효율성을 위한 제언

Active Learning을 도입하면 데이터 라벨링 비용을 최대 80%까지 절감할 수 있습니다. 하지만 주의할 점은 모델이 가진 편향(Bias)이 샘플링 전략에 반영될 수 있다는 것입니다. 따라서 Random Sampling을 일정 비율(예: 10~20%) 혼합하여 모델의 일반화 성능을 유지하는 것이 실무적인 정석입니다. 특히 의료나 금융 분야처럼 데이터 하나하나의 가치가 높은 도메인에서는 이러한 전략적 샘플링이 프로젝트의 성패를 좌우하게 됩니다.


내용 출처 및 참고문헌:

  • Settles, B. (2009). "Active Learning Literature Survey." University of Wisconsin-Madison.
  • Cohn, D. A., et al. (1996). "Active Learning with Statistical Models." Journal of Artificial Intelligence Research.
  • Scikit-learn documentation: Model Selection and Evaluation.
  • ModAL: Active Learning framework for Python.
728x90