Bayesian Target Encoding
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.
Bayesian Target Encoding은 범주형 변수(categorical variable)를 수치 변수로 변환 고급 데이터 인코딩 기법 중 하나로, 특히 목표 변수(target variable) 와의 관계를 기반으로 카테고리를 인코딩하는 방식입니다. 이 방법은 전통적인 Target Encoding(또는 Mean Encoding)의 과적합(overfitting) 문제를 완화하기 위해 베이지안 추론(Bayesian Inference)의 개념을 도입한 것입니다. 베이지안 타겟 인코딩은 데이터 과학, 특히 머신러닝 모델의 전처리 단계에서 범주형 변수의 정보를 효과적으로 활용하고 일반화 성능을 향상시키는 데 널리 사용됩니다.
개요
범주형 변수는 머신러닝 모델에서 직접 사용하기 어려우므로 일반적으로 원-핫 인코딩(One-Hot Encoding), 레이블 인코딩(Label Encoding) 등의 방법으로 수치형으로 변환됩니다. 그러나 고유값(cardinality)이 높은 범주형 변수(예: 사용자 ID, 지역 코드 등)의 경우, 이러한 전통적인 방법은 차원 증가 또는 정보 손실 문제를 초래할 수 있습니다.
Target Encoding은 각 범주에 대해 해당 카테고리에 속한 샘플들의 목표 변수의 평균값을 할당하는 방식입니다. 예를 들어, 이진 분류 문제에서 특정 지역의 구매 성공률을 그 지역의 인코딩 값으로 사용할 수 있습니다. 그러나 이 방식은 적은 샘플 수를 가진 카테고리(low-frequency category)에 대해 신뢰할 수 없는 추정치를 생성하여 과적합을 유발할 수 있습니다.
이를 해결하기 위해 도입된 것이 Bayesian Target Encoding입니다. 이 방법은 각 카테고리의 목표 변수 평균을 단순 산술 평균이 아닌, 사전 분포(prior distribution)와 데이터 기반 우도(likelihood)를 결합한 베이지안 추정치로 계산함으로써 신뢰도를 높입니다.
원리 및 수식
Bayesian Target Encoding은 다음과 같은 베이지안 추정 방식을 따릅니다:
[ \text{Encoded Value} = \frac{n_i \cdot \bar{y}i + \alpha \cdot \bar{y}{\text{global}}}{n_i + \alpha} ]
여기서:
- ( n_i ): 카테고리 ( i )에 속한 샘플 수
- ( \bar{y}_i ): 카테고리 ( i ) 내 목표 변수의 평균 (예: 성공률)
- ( \bar{y}_{\text{global}} ): 전체 데이터에서 목표 변수의 평균 (글로벌 평균)
- ( \alpha ): 신뢰도 하이퍼파라미터(smoothing parameter), 작을수록 카테고리 특이값에 가깝고, 클수록 글로벌 평균에 수렴
이 수식은 가중 평균(weighted average) 형태로, 샘플 수가 적은 카테고리는 글로벌 평균에 더 가깝게 인코딩되고, 샘플 수가 많은 카테고리는 자신의 평균에 더 가깝게 인코딩됩니다.
하이퍼파라미터 ( \alpha )의 선택
( \alpha )는 사용자가 설정하거나 교차 검증(cross-validation)을 통해 최적화할 수 있습니다. 일반적으로 다음과 같은 기준을 사용합니다:
- ( \alpha )가 0이면: 일반적인 Target Encoding과 동일 (과적합 위험 높음)
- ( \alpha )가 무한대이면: 모든 카테고리가 글로벌 평균을 갖게 됨 (정보 손실)
따라서 적절한 ( \alpha )는 데이터의 분포와 카테고리 빈도에 따라 조정되어야 합니다.
장점과 단점
✅ 장점
- 과적합 완화: 적은 샘플의 카테고리는 글로벌 평균으로 수렴하여 신뢰도 높은 추정 제공
- 고차원 범주형 변수 처리 용이: 원-핫 인코딩보다 차원 축소 효과
- 정보 보존: 각 카테고리가 목표 변수와의 관계를 수치적으로 반영
- 모델 성능 향상: 특히 Gradient Boosting 계열 모델(XGBoost, LightGBM)과 잘 작동
❌ 단점
- 데이터 누수(Data Leakage) 가능성: 전체 데이터의 타겟 평균을 사용할 경우, 검증/테스트 데이터에 정보가 누출될 수 있음
- 하이퍼파라미터 튜닝 필요: ( \alpha ) 값을 적절히 설정해야 함
- 시간적 데이터에서는 주의 필요: 미래 정보를 기반으로 인코딩하면 실전 성능 저하
💡 데이터 누수 방지 팁: 학습 데이터에서만 인코딩을 학습하고, 검증/테스트 데이터는 학습된 매핑을 사용하여 변환해야 합니다. 또한 K-Fold CV를 사용할 경우, 각 폴드 내에서 out-of-fold 방식으로 인코딩을 적용하는 것이 안전합니다.
구현 예시 (Python)
다음은 [pandas](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/pandas)
와 [numpy](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/numpy)
를 사용한 간단한 Bayesian Target Encoding 구현 예시입니다.
import pandas as pd
import numpy as np
def bayesian_target_encode(series, target, alpha=10):
global_mean = target.mean()
agg = series.map(target.groupby(series).agg(['count', 'mean']))
encoded = (agg['count'] agg['mean'] + alpha * global_mean) / (agg['count'] + alpha)
return encoded
# 예시 데이터
df = pd.DataFrame({
'category': ['A', 'B', 'A', 'C', 'B', 'A', 'D'],
'target': [1, 0, 1, 0, 1, 1, 0]
})
df['encoded'] = bayesian_target_encode(df['category'], df['target'], alpha=5)
print(df)
출력 결과:
category target encoded
0 A 1 0.75
1 B 0 0.50
2 A 1 0.75
3 C 0 0.33
4 B 1 0.50
5 A 1 0.75
6 D 0 0.33
관련 기법
- Target Encoding (Mean Encoding): 베이지안 방식 없이 단순 평균 사용
- Leave-One-Out Encoding: 현재 샘플을 제외한 나머지의 평균 사용, 데이터 누수 완화
- James-Stein Estimator: 베이지안 인코딩과 유사한 통계적 수축(shrinkage) 방법
- M-estimator Smoothing: ( \alpha ) 대신 ( m ) 값을 사용하는 일반화된 방식
참고 자료 및 관련 문서
- Micci-Barreca, D. (2001). A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems
- "Feature Engineering for Machine Learning", Alice Zheng & Amanda Casari
- scikit-learn, category_encoders 라이브러리 문서
- Kaggle 커널: "Target Encoding Done the Right Way"
🔗 추천 라이브러리: Python의
category_encoders
패키지에서는TargetEncoder
가 베이지안 스타일의 스무딩 기능을 내장하고 있습니다.
import category_encoders as ce
encoder = ce.TargetEncoder(smoothing=5.0) # smoothing은 alpha 역할
Bayesian Target Encoding은 고차원 범주형 데이터를 다룰 때 강력한 도구이며, 적절한 정규화와 교차 검증을 통해 모델의 일반화 성능을 크게 향상시킬 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.