[파이썬] xgboost 범주형 데이터의 처리 방법

xgboost는 범주형 데이터를 처리하기 위해 다양한 방법을 제공합니다. 이 블로그 포스트에서는 xgboost에서 범주형 데이터를 처리하는 세 가지 주요 방법을 살펴보겠습니다.

1. One-Hot Encoding

One-Hot Encoding은 범주형 데이터를 원핫 벡터로 변환하는 방법입니다. 이 방법은 원래 범주형 변수의 카테고리 수만큼의 이진 변수를 생성합니다. 각 변수는 해당하는 카테고리만 1의 값을 가지고 나머지 변수들은 0의 값을 가집니다.

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 범주형 변수를 포함한 데이터 프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow'],
                     'size': ['small', 'large', 'medium', 'small'],
                     'label': [1, 0, 1, 0]})

# LabelEncoder를 사용하여 범주형 변수를 숫자로 인코딩
label_encoder = LabelEncoder()
data['color_encoded'] = label_encoder.fit_transform(data['color'])
data['size_encoded'] = label_encoder.fit_transform(data['size'])

# xgboost 학습을 위해 One-Hot Encoding 적용
data_encoded = pd.get_dummies(data, columns=['color', 'size'])

print(data_encoded)

위의 코드에서는 pandas의 get_dummies 함수를 사용하여 One-Hot Encoding을 적용했습니다. columns 매개변수를 사용하여 인코딩할 변수를 선택할 수 있습니다.

2. Ordinal Encoding

Ordinal Encoding은 범주형 데이터를 순서대로 레이블링하는 방법입니다. 각 카테고리에는 숫자가 할당되며 순서에 따라 작은 값이 작은 카테고리를 나타냅니다.

import pandas as pd
from sklearn.preprocessing import OrdinalEncoder

# 범주형 변수를 포함한 데이터 프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow'],
                     'size': ['small', 'large', 'medium', 'small'],
                     'label': [1, 0, 1, 0]})

# OrdinalEncoder를 사용하여 범주형 변수를 숫자로 인코딩
ordinal_encoder = OrdinalEncoder()
data['color_encoded'] = ordinal_encoder.fit_transform(data[['color']])
data['size_encoded'] = ordinal_encoder.fit_transform(data[['size']])

print(data)

위의 코드에서는 OrdinalEncoder를 사용하여 범주형 변수를 인코딩합니다. fit_transform 메서드를 사용하여 데이터를 변환합니다.

3. CatBoost Encoding

CatBoost Encoding은 xgboost의 CatBoost 패키지에서 제공하는 범주형 데이터 처리 방법입니다. 이 방법은 각 카테고리의 타겟 변수 값을 대체하여 인코딩합니다. 이를 통해 범주형 벡터의 풍부한 정보를 활용하여 예측 성능을 향상시킬 수 있습니다.

import pandas as pd
from category_encoders import CatBoostEncoder

# 범주형 변수를 포함한 데이터 프레임 생성
data = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow'],
                     'size': ['small', 'large', 'medium', 'small'],
                     'label': [1, 0, 1, 0]})

# CatBoostEncoder를 사용하여 범주형 변수를 인코딩
cat_encoder = CatBoostEncoder()
data['color_encoded'] = cat_encoder.fit_transform(data['color'], data['label'])
data['size_encoded'] = cat_encoder.fit_transform(data['size'], data['label'])

print(data)

위의 코드에서는 CatBoostEncoder를 사용하여 범주형 변수를 인코딩합니다. fit_transform 메서드를 사용하여 데이터를 변환하며, 타겟 변수(label) 값도 함께 제공해야 합니다.

이제 xgboost에서 범주형 데이터를 처리하는 세 가지 방법에 대해 알아보았습니다. 어떤 방법을 선택할지는 데이터의 특성과 목적에 따라 달라질 수 있습니다. 적절한 방법을 선택하여 모델의 성능을 향상시키는 데 도움이 되길 바랍니다.