타깃 인코딩
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.
타깃 인코딩
개요
타깃 인코(Target Encoding)은 범형 변수(Categorical Variable)를 수치형 변수로 변환하는 고급 인코딩 기법 중 하나로, 주어진 범주(category)의 값이 종속 변수(target variable)에 미치는 영향을 기반으로 인코딩을 수행합니다. 이 방법은 특히 범주가 많고 희소한(high-cardinality sparse) 데이터에서 효과적이며, 기존의 원-핫 인코딩(One-Hot Encoding)이나 레이블 인코딩(Label Encoding)보다 더 강력한 정보를 모델에 제공할 수 있습니다.
타깃 인코딩은 회귀와 분류 문제 모두에 적용 가능하며, 분류 문제에서는 일반적으로 해당 범주의 평균 타깃 값(예: 이진 분류에서는 1의 비율)을 사용하고, 회귀 문제에서는 해당 범주에 속하는 타깃 값의 평균을 사용합니다.
타깃 인코딩의 원리
기본 개념
타깃 인코딩은 각 범주형 값에 대해 해당 값이 나타나는 데이터 샘플들의 타깃 변수의 통계량(예: 평균, 중앙값, 분산 등)을 계산하여 그 값을 새로운 수치형 피처로 대체합니다.
예를 들어, 이진 분류 문제에서 타깃이 0
또는 1
이고, 범주형 변수 City
에 서울
, 부산
, 대구
등의 값이 있다면:
서울
에 속한 샘플들의 타깃 평균이 0.7 →서울
→ 0.7부산
에 속한 샘플들의 타깃 평균이 0.3 →부산
→ 0.3대구
에 속한 샘플들의 타깃 평균이 0.5 →대구
→ 0.5
이와 같이 범주형 값을 실수 값으로 매핑합니다.
수식 표현
주어진 범주형 변수 ( X )의 값 ( x_i )에 대해 타깃 인코딩 값은 다음과 같이 정의할 수 있습니다:
[ \text{TargetEncoded}(x_i) = \frac{\sum_{j \in \text{group}(x_i)} y_j}{\text{count}(x_i)} ]
여기서: - ( y_j ): 타깃 변수의 값 - ( \text{group}(x_i) ): 범주 ( x_i )에 속한 샘플 집합 - ( \text{count}(x_i) ): 범주 ( x_i )에 속한 샘플 수
장점과 단점
장점
- 고차원 축소: 원-핫 인코딩은 범주 수만큼 새로운 피처를 생성하지만, 타깃 인코딩은 단일 수치형 피처로 변환하므로 차원을 줄일 수 있습니다.
- 의미 있는 표현: 범주 값이 타깃과의 관계를 반영하므로 모델이 더 쉽게 패턴을 학습할 수 있습니다.
- 고카디널리티 데이터에 강함: 예:
고객ID
,제품코드
등 범주 수가 수천 개 이상인 경우 유리합니다.
단점
- 과적합 위험(Overfitting): 특히 샘플 수가 적은 범주에 대해 타깃 평균을 그대로 사용하면 훈련 데이터에 과적합될 수 있습니다.
- 데이터 누수(Data Leakage): 테스트 데이터를 인코딩할 때 훈련 데이터의 통계량만 사용해야 하며, 그렇지 않으면 정보 누수가 발생합니다.
- 타깃 의존성: 지도 학습에서만 사용 가능하며, 타깃이 없는 예측 시점에서는 인코딩 값이 사전에 계산되어야 합니다.
타깃 인코딩의 변형 기법
과적합을 방지하기 위해 타깃 인코딩은 여러 변형 기법과 함께 사용됩니다.
1. 스무딩(Smoothing)
스무딩은 범주별 평균과 전체 데이터의 타깃 평균을 가중 평균하여 안정성을 높입니다.
[ \text{SmoothedEncoding}(x_i) = \frac{(\text{count}(x_i) \times \mu_i) + (\alpha \times \mu_{\text{global}})}{\text{count}(x_i) + \alpha} ]
- ( \mu_i ): 범주 ( x_i )의 타깃 평균
- ( \mu_{\text{global}} ): 전체 데이터의 타깃 평균
- ( \alpha ): 스무딩 계수 (하이퍼파라미터)
스무딩은 소수의 샘플을 가진 범주가 극단적인 값을 가지는 것을 방지합니다.
2. K-Fold 타깃 인코딩
훈련 데이터를 K개의 폴드로 나누고, 각 폴드에 대해 다른 폴드의 타깃 평균을 사용하여 인코딩합니다. 이 방법은 데이터 누수를 방지하고 일반화 성능을 향상시킵니다.
# 예시: K-Fold Target Encoding (의사코드)
from sklearn.model_selection import KFold
import pandas as pd
def kfold_target_encoding(train_df, col, target, n_splits=5):
kf = KFold(n_splits=n_splits, shuffle=True, random_state=42)
train_df[f'{col}_target_encoded'] = 0
for train_idx, val_idx in kf.split(train_df):
train_part = train_df.iloc[train_idx]
global_mean = train_part[target].mean()
mapping = train_part.groupby(col)[target].mean()
train_df.loc[val_idx, f'{col}_target_encoded'] = train_df.loc[val_idx, col].map(mapping).fillna(global_mean)
return train_df
3. 자리 제한 인코딩(Leave-One-Out Encoding)
특정 샘플을 인코딩할 때, 자기 자신을 제외한 동일 범주 내 타깃 평균을 사용합니다. 이는 타깃 누수를 줄이고 과적합을 방지합니다.
사용 사례
- 금융 데이터: 고객의 직업, 지역 등 범주형 변수를 타깃(예: 대출 상환 여부)과 매핑
- 이커머스: 제품 카테고리 → 구매 전환율 인코딩
- 광고 클릭 예측: 사용자 지역 → 클릭률(CTR)로 인코딩
참고 자료 및 관련 문서
- Scikit-learn 공식 문서
- Target Encoding in Machine Learning - Towards Data Science
- CatBoost의 내장 타깃 인코딩 기능
- Feature Engineering for Machine Learning, A. Zheng
타깃 인코딩은 데이터 과학 프로젝트에서 범주형 변수를 효과적으로 활용하기 위한 강력한 도구로, 적절한 정규화와 검증을 통해 모델 성능을 크게 향상시킬 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.