목표 기반 인코딩
목표 기반 인코딩
목표 기반 인코딩(Target-based Encoding)은 범주형 변수(Categorical Variable)를 수치형 변수로 변환 데이터 인코딩법 중 하나로, 특히 지도 학습(Supervised Learning)에서 목표 변수(Target Variable)와의 관계를 활용하여 인코딩을하는 방법입니다. 이 방은 단순한 레이블 인코딩(Label Encoding)이나 원-핫 인코딩(One-Hot Encoding)과 달리, 범주(category)의 의미를 목표 변수의 통계적 특성과 연결시킴으로써 머신러닝 모델의 성능을 향상시킬 수 있습니다.
개요
범주형 변수는 특정 그룹이나 카테고리를 나타내는 변수로, 예를 들어 ‘도시 이름’, ‘제품 카테고리’, ‘성별’ 등이 있습니다. 이러한 변수는 대부분 텍스트 형태이므로 머신러닝 모델이 직접 처리하기 어렵습니다. 따라서 인코딩을 통해 수치 형태로 변환해야 하는데, 목표 기반 인코딩은 이 과정에서 목표 변수의 정보를 활용하여 각 범주를 보다 의미 있는 수치로 매핑합니다.
이 기법은 특히 범주 수가 많은 경우(고차원 범주형 변수)에 유용하며, 차원 축소와 동시에 의미 있는 피처 생성이 가능하다는 장점이 있습니다.
주요 목표 기반 인코딩 기법
1. 평균 인코딩 (Mean Encoding)
가장 일반적인 목표 기반 인코딩 방식으로, 각 범주에 속한 샘플들의 목표 변수의 평균값으로 해당 범주를 대체합니다.
예를 들어, ‘도시’라는 범주형 변수와 ‘소비 금액’이라는 연속형 목표 변수가 있을 때, ‘서울’에 속한 샘플들의 평균 소비 금액이 150,000원이라면, ‘서울’은 150,000으로 인코딩됩니다.
장점
- 범주 수가 많아도 차원 증가 없음
- 모델이 범주와 목표 간의 관계를 쉽게 학습
단점
과적합 방지 기법
- 스무딩(Smoothing): 전체 데이터의 평균과 범주 평균을 가중 평균
smoothed_mean = (count_cat * mean_cat + weight * global_mean) / (count_cat + weight)
- 교차 검증 기반 인코딩: 학습 시 각 폴드에서 다른 데이터를 사용해 인코딩 수행
- 잡음 추가(Noise Injection): 인코딩 값에 작은 잡음을 추가하여 과적합 완화
2. 확률 비율 인코딩 (Probability Ratio Encoding)
이진 분류 문제에서 주로 사용되며, 각 범주 내에서 긍정 클래스의 확률을 계산한 후, 이를 로그 오즈(Log-Odds) 형태로 변환합니다.
예를 들어, 특정 범주에서 클래스 1의 비율이 0.8, 클래스 0의 비율이 0.2라면, 로그 오즈는 log(0.8 / 0.2) = log(4) ≈ 1.386
이 됩니다.
이 방식은 범주가 목표 클래스에 미치는 영향을 정량화하는 데 효과적입니다.
3. 웰치 t-통계 기반 인코딩 (Target Encoding with t-statistic)
범주별 목표 변수의 평균 차이가 통계적으로 유의미한지 평가한 후, 그 통계량을 인코딩 값으로 사용하는 고급 기법입니다. 이는 A/B 테스트에서 사용되는 방식과 유사합니다.
사용 시 고려 사항
항목 | 설명 |
---|---|
지도 학습 전용 | 목표 변수가 필요하므로 비지도 학습에는 적용 불가 |
과적합 위험 | 특히 희소한 범주에서 목표 변수와 강한 상관관계를 보일 수 있음 |
데이터 누수 방지 | 학습 데이터에서만 인코딩 통계를 계산하고, 검증/테스트 데이터에는 적용하지 않음 |
범주 수 제한 | 너무 많은 범주는 여전히 문제를 일으킬 수 있으므로, 낮은 빈도 범주는 통합 필요 |
실제 적용 예시 (Python 코드)
import pandas as pd
from sklearn.model_selection import KFold
import numpy as np
def target_encode_smooth(train_df, test_df, col, target, weight=10):
global_mean = train_df[target].mean()
agg = train_df.groupby(col)[target].agg(['mean', 'count'])
_mean = (agg['mean'] * agg['count'] + global_mean * weight) / (agg['count'] + weight)
# 학습 데이터 인코딩
train_encoded = train_df[col].map(smoothed_mean)
# 테스트 데이터는 학습 데이터의 통계를 기반으로 인코딩
test_encoded = test_df[col].map(smoothed_mean).fillna(global_mean)
return train_encoded, test_encoded
관련 기법 및 비교
인코딩 방식 | 차원 증가 | 과적합 위험 | 목표 변수 사용 | 비고 |
---|---|---|---|---|
원-핫 인코딩 | 높음 | 낮음 | ❌ | 고차원 희소성 문제 |
레이블 인코딩 | 없음 | 중간 | ❌ | 순서 의미 오해 가능성 |
목표 기반 인코딩 | 없음 | 높음 | ✅ | 성능 향상 가능성 큼 |
참고 자료 및 관련 문서
- Micci-Barreca, D. (2001). A preprocessing scheme for high-cardinality categorical attributes in classification and prediction problems.
- sklearn-contrib의
[category_encoders](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%EC%84%9D%20%EB%8F%84%EA%B5%AC/category_encoders)
라이브러리: 다양한 목표 기반 인코딩 지원 - Kaggle 대회에서의 범주형 인코딩 활용 사례 (예: Categorical Feature Encoding Challenge)
목표 기반 인코딩은 데이터 과학 프로젝트에서 피처 엔지니어링의 핵심 기법 중 하나로, 올바르게 사용하면 모델 성능을 크게 개선할 수 있습니다. 그러나 데이터 누수와 과적합에 주의하며, 교차 검증 및 스무딩 기법을 적절히 적용하는 것이 중요합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.