타겟 인코딩

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

📋 문서 버전

이 문서는 2개의 버전이 있습니다. 현재 버전 1을 보고 있습니다.

타겟 인코딩

개요

타겟 인코딩(Target Encoding)은 머신러닝에서 범주형 변수(Categorical Variable) 수치형 변수 변환하는 고급코딩 기법 중 하나입니다. 이 방법은주형 변수의 범주(Category)를 그 범주에 속하는 목표 변수(Target Variable)의 통계적 요약값(예: 평균, 중앙값, 분산 등)으로 대체하는 방식을 사용합니다. 특히, 분류 문제회귀 문제에서 범주형 피처가 목표 변수와 강한 관계를 가질 때 효과적인 성능 향상을 기대할 수 있습니다.

타겟 인코딩은 레이블 인코딩(Label Encoding)이나 원-핫 인코딩(One-Hot Encoding)과 달리, 범주의 의미를 목표 변수와의 관계를 통해 수치화하므로 정보 손실을 줄이고 모델의 예측력을 높이는 데 유리합니다. 그러나 주의하지 않으면 데이터 누수(Data Leakage) 및 과적합(Overfitting) 문제가 발생할 수 있어, 적절한 정규화와 교차 검증 기법의 적용이 필수적입니다.


타겟 인코딩의 원리

타겟 인코딩은 다음과 같은 기본 아이디어를 따릅니다:

  • 범주형 변수의 각 값(예: "서울", "부산", "대구")에 대해, 해당 범주에 속하는 목표 변수의 평균값을 계산합니다.
  • 이후 해당 범주를 그 평균값으로 대체합니다.

예를 들어, 주어진 데이터셋에서 도시라는 범주형 변수와 구매 여부(0 또는 1)라는 이진 목표 변수가 있을 때:

도시 구매 여부
서울 1
부산 0
서울 1
대구 1
부산 1

이 경우 각 도시의 타겟 인코딩 값은 다음과 같이 계산됩니다:

  • 서울: (1 + 1) / 2 = 1.0
  • 부산: (0 + 1) / 2 = 0.5
  • 대구: 1 / 1 = 1.0

이제 도시 변수는 각각 1.0, 0.5, 1.0의 수치로 변환되어 모델에 입력됩니다.


타겟 인코딩의 장점

  • 고유 카테고리 수가 많은 경우 효과적: 예를 들어, 우편번호, 사용자 ID, 제품 코드 등 고유값이 수천 개 이상인 경우 원-핫 인코딩은 차원이 과도하게 증가하지만, 타겟 인코딩은 단일 수치 피처로 압축 가능.
  • 목표 변수와의 관계 반영: 범주의 실제 영향력을 수치로 표현하므로 모델이 더 의미 있는 패턴을 학습할 수 있음.
  • 모델 성능 향상: 특히 부스팅 계열 모델(XGBoost, LightGBM, CatBoost)에서 뛰어난 성능을 보임.

타겟 인코딩의 단점 및 주의사항

1. 데이터 누수 (Data Leakage)

  • 전체 데이터셋의 타겟 평균을 사용하면 훈련 데이터와 테스트 데이터가 서로 정보를 공유하게 되어, 검증 단계에서 과적합이 발생할 수 있습니다.

2. 저빈도 범주 (Low-frequency Categories)

  • 특정 범주에 샘플이 매우 적을 경우, 타겟 평균이 불안정해지고 노이즈가 커짐. 예: 1개의 샘플만 있는 도시가 타겟 평균 1.0을 가지면 오해의 소지 있음.

3. 과적합 위험

  • 특히 작은 데이터셋에서 타겟 인코딩은 모델이 훈련 데이터에 지나치게 최적화되는 경향이 있음.

타겟 인코딩의 정규화 기법

타겟 인코딩의 단점을 완화하기 위해 다음과 같은 정규화 기법이 사용됩니다:

1. Smoothing (스무딩)

  • 범주별 평균과 전체 평균을 가중 평균하여 계산:

$$ \text{Encoded Value} = \frac{(\text{count} \times \text{category\_mean}) + (\text{weight} \times \text{global\_mean})}{\text{count} + \text{weight}} $$

여기서 weight는 하이퍼파라미터로,통 5~10 정도로 설정.

2. Additive Smoothing (라플라스 스무딩)

  • 범주별 성공/실패 카운트에 작은 상수를 더하여 불안정성 감소.

3. Leave-One-Out (LOO) 인코딩

  • 각 샘플을 인코딩할 때, 자기 자신을 제외한 동일 범주의 타겟 평균을 사용. 데이터 누수를 줄이는 데 효과적.

4. K-Fold 타겟 인코딩

  • 훈련 데이터를 K개의 폴드로 나누고, 각 폴드에서 다른 폴드의 평균을 사용하여 인코딩. 교차 검증 기반의 안전한 방법.

활용 예시 (파이썬 코드)

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

def kfold_target_encoding(train_df, test_df, cat_col, target_col, weight=10):
    # 전체 데이터의 글로벌 평균
    global_mean = train_df[target_col].mean()
    
    # 결과 저장용
    train_encoded = np.zeros(len(train_df))
    test_encoded = np.zeros(len(test_df))
    
    # K-Fold 적용
    kf = KFold(n_splits=5, shuffle=True, random_state=42)
    for train_idx, val_idx in kf.split(train_df):
        X_train, X_val = train_df.iloc[train_idx], train_df.iloc[val_idx]
        # 학습 데이터 기반 인코딩 맵 생성
        encoding_map = X_train.groupby(cat_col)[target_col].agg(['mean', 'count'])
        encoding_map['smoothed'] = (
            (encoding_map['mean'] * encoding_map['count']) + (global_mean * weight)
        ) / (encoding_map['count'] + weight)
        
        # 검증 데이터 인코딩
        X_val_encoded = X_val[cat_col].map(encoding_map['smoothed']).fillna(global_mean)
        train_encoded[val_idx] = X_val_encoded.values
    
    # 테스트 데이터 인코딩
    encoding_map_full = train_df.groupby(cat_col)[target_col].agg(['mean', 'count'])
    encoding_map_full['smoothed'] = (
        (encoding_map_full['mean'] * encoding_map_full['count']) + (global_mean * weight)
    ) / (encoding_map_full['count'] + weight)
    test_encoded = test_df[cat_col].map(encoding_map_full['smoothed']).fillna(global_mean)
    
    return train_encoded, test_encoded


관련 기술 및 대안

기법 설명 장점 단점
원-핫 인코딩 각 범주를 이진 벡터로 변환 간단하고 직관적 고차원, 희소성 문제
레이블 인코딩 범주를 정수로 매핑 차원 감소 순서 부여 오류 가능
임베딩 딥러닝에서 저차원 밀집 벡터로 변환 복잡한 관계 학습 가능 대량의 데이터 필요
CatBoost 인코딩 CatBoost 내장 인코딩 방식 자동화, 과적합 방지 모델 종속적

참고 자료 및 관련 문서

  • [1] Micci-Barreca, D. (2001). A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems. ACM SIGKDD Explorations.
  • [2] Target Encoding Done the Right Way, Kaggle Blog, 2020.
  • [3] scikit-learn-contrib의 category_encoders 라이브러리: https://contrib.scikit-learn.org/category_encoders/
  • [4] LightGBM, CatBoost 공식 문서 – 범주형 변수 처리 방식

타겟 인코딩은 데이터 과학 실무에서 자주 사용되는 강력한 기법이지만, 신중한 적용과 정규화가 필수적입니다. 특히 고차원 범주형 피처가 많은 현실 데이터셋에서 그 진가를 발휘하며, 현업의 머신러닝 파이프라인에서 중요한 위치를 차지하고 있습니다.

AI 생성 콘텐츠 안내

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

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

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