Target Encoding

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.01
조회수
8
버전
v1

Target Encoding

Target Encoding(타겟 인코딩)은 범주형 변수(categorical variable)를 수치형 변수로환하는 고급 인코딩 기법 하나로, 머신러닝 모델의 성능 향상을 위해 널리 사용된다. 이 방법은 각 범주(category)를 그 범주에 속한 관측값들의 목표 변수(target variable)의 평균값으로 대체하는 방식을 취한다. 특히, 고차원의 범주형 변수(high-cardinality categorical features)가 존재할 때 유용하며, 전통적인 원-핫 인코딩(One-Hot Encoding)이나 레이블 인코딩(Label Encoding)보다 더 풍부한 정보를 제공할 수 있다.


개요

범주형 변수는 모델이 직접 처리하기 어려운 형태이므로, 대부분의 머신러닝 알고리즘에서는 이를 수치형으로 변환해야 한다. Target Encoding은 단순히 범주에 번호를 매기는 것(레이블 인코딩)이나 더미 변수를 생성하는 것(원-핫 인코딩)과 달리, 목표 변수와의 관계를 반영하여 인코딩을 수행한다. 이로 인해 모델이 범주별로 목표 변수와의 상관관계를 학습하기 쉬워지고, 예측 성능이 향상될 수 있다.

그러나 Target Encoding은 과적합(overfitting)과 데이터 누수(data leakage)의 위험이 있어, 적절한 정규화나 교차 검증 기법을 함께 사용해야 한다.


작동 원리

Target Encoding은 다음과 같은 단계로 진행된다:

  1. 범주형 변수의 각 고유 값(카테고리)을 식별한다.
  2. 각 카테고리에 속한 샘플들의 목표 변수(target) 값을 평균한다.
  3. 그 평균값으로 해당 카테고리를 대체한다.

예를 들어, 도시라는 범주형 변수가 있고, 목표 변수가 구매 여부(1: 구매, 0: 미구매)라면, 서울에 속한 고객들의 구매 비율(평균)을 계산하여, 서울이라는 범주를 그 비율(예: 0.65)로 대체한다.

수식 표현

범주 ( c )에 대한 Target Encoding 값은 다음과 같이 정의할 수 있다:

[ \text{TargetEncoded}(c) = \frac{\sum_{i \in C_c} y_i}{|C_c|} ]

여기서: - ( C_c ): 범주 ( c )에 속한 샘플의 집합 - ( y_i ): 샘플 ( i )의 목표 변수 값 - ( |C_c| ): 범주 ( c )에 속한 샘플 수


장점

  • 고차원 범주형 변수 처리에 효과적: 수백 개 이상의 범주를 가진 변수도 하나의 수치형 피처로 압축 가능.
  • 정보 밀도 증가: 범주가 단순한 레이블이 아니라 목표 변수와의 관계를 반영한 값이 됨.
  • 모델 성능 향상: 특히 트리 기반 모델(랜덤포레스트, XGBoost 등)과 잘 어울림.

단점 및 주의사항

1. 데이터 누수 (Data Leakage)

훈련 데이터 전체의 타겟 평균을 사용하면, 검증/테스트 데이터에 대한 정보가 훈련 과정에 유출될 수 있다. 이는 과적합을 유발한다.

2. 희소 범주 문제

범주에 속한 샘플 수가 매우 적을 경우, 평균이 불안정해지고 노이즈에 민감해진다.

3. 타겟 리밸류 (Target Leakage)

목표 변수를 직접 사용하기 때문에, 인코딩 과정에서 정보 누수가 발생하지 않도록 주의해야 한다.


정규화 기법

Target Encoding의 단점을 완화하기 위해 다음과 같은 정규화 기법이 사용된다.

1. Smoothing (스무딩)

각 범주의 타겟 평균을 전체 데이터의 타겟 평균과 가중 평균으로 조정한다:

[ \text{Smoothed}(c) = \frac{n_c \cdot \bar{y}c + \alpha \cdot \bar{y}{\text{global}}}{n_c + \alpha} ]

  • ( n_c ): 범주 ( c )의 샘플 수
  • ( \bar{y}_c ): 범주 ( c )의 타겟 평균
  • ( \bar{y}_{\text{global}} ): 전체 데이터의 타겟 평균
  • ( \alpha ): 스무딩 파라미터 (보통 1~10 사이)

스무딩은 소수의 샘플을 가진 범주에 대해 과도한 영향을 완화한다.

2. K-Fold Target Encoding

훈련 데이터를 K개의 폴드로 나누고, 각 폴드에서는 다른 폴드의 정보만을 사용하여 인코딩 값을 계산한다. 이를 통해 데이터 누수를 방지할 수 있다.

3. Leave-One-Out Encoding

각 샘플을 인코딩할 때, 자신을 제외한 동일 범주의 타겟 평균을 사용한다. 이는 단일 샘플의 영향을 줄이고 과적합을 방지한다.


사용 예시 (Python 코드)

import pandas as pd
from sklearn.model_selection import KFold
import numpy as np

def target_encode_smooth(df, col, target, alpha=5):
    global_mean = df[target].mean()
    agg = df.groupby(col)[target].agg(['mean', 'count'])
    smooth_mean = (agg['mean'] * agg['count'] + global_mean * alpha) / (agg['count'] + alpha)
    return df[col].map(smooth_mean)

# 예시 데이터
data = pd.DataFrame({
    'city': ['서울', '부산', '서울', '대구', '부산', '서울'],
    'target': [1, 0, 1, 0, 1, 0]
})

data['city_encoded'] = target_encode_smooth(data, 'city', 'target', alpha=2)
print(data)


관련 기법

기법 설명
Mean Encoding Target Encoding과 동의어로 사용됨.
Leave-One-Out Encoding 자기 자신을 제외한 평균 사용.
Bayesian Target Encoding 베이지안 추정을 기반으로 사전 분포 적용.
CatBoost Encoding CatBoost에서 제안한 자동 타겟 인코딩 방식.

참고 자료 및 관련 문서

  • [1] Micci-Barreca, D. (2001). "A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems"
  • [2] "Practical Lessons from Predicting Clicks on Ads at Facebook" (Facebook, 2014)
  • [3] Scikit-learn 공식 문서: sklearn.preprocessing
  • [4] [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) 라이브러리 (Python): 다양한 인코딩 기법 구현 제공

Target Encoding은 데이터 과학에서 고차원 범주형 변수를 효과적으로 처리하는 강력한 도구이지만, 신중한 적용과 정규화가 필수이다. 적절히 사용하면 모델의 정확도와 일반화 능력을 크게 향상시킬 수 있다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?