[파이썬] lightgbm 범주형 데이터의 인코딩 방법

머신 러닝에서 범주형 데이터는 종종 모델의 입력으로 사용됩니다. 그러나 lightgbm과 같은 알고리즘은 기본적으로 숫자 데이터만 다루는 경향이 있습니다. 따라서 범주형 데이터를 숫자로 인코딩해야 합니다. 이 글에서는 lightgbm에서 범주형 데이터를 인코딩하는 주요 방법을 살펴보겠습니다.

1. Label Encoding

가장 일반적인 범주형 데이터 인코딩 방법 중 하나는 Label Encoding입니다. 이 방법은 각 범주를 숫자로 매핑하는 방식입니다. 예를 들어, [“red”, “blue”, “green”]와 같은 범주형 변수를 [0, 1, 2]로 인코딩할 수 있습니다. Label Encoding은 sklearn.preprocessing 패키지의 LabelEncoder 클래스를 사용하여 쉽게 구현할 수 있습니다.

from sklearn.preprocessing import LabelEncoder

# 범주형 데이터 생성
categories = ["red", "blue", "green", "red", "blue"]

# LabelEncoder 객체 생성 및 학습
encoder = LabelEncoder()
encoder.fit(categories)

# 범주형 데이터 인코딩
encoded_categories = encoder.transform(categories)

print(encoded_categories)

결과:

[0 1 2 0 1]

Label Encoding은 범주 사이의 순서를 부여하지 않고 단순히 레이블로 매핑하기 때문에 순서에 의미를 갖는 범주형 변수에는 적합하지 않을 수 있습니다.

2. One-Hot Encoding

다른 범주형 데이터 인코딩 방법은 One-Hot Encoding입니다. One-Hot Encoding은 각 범주를 이진 특성으로 변환하는 방법입니다. 이 방법은 범주의 개수만큼의 새로운 열을 생성하고 해당 범주에 해당하는 열에 1을 할당하고 다른 열은 0으로 채웁니다.

lightgbm은 범주형 데이터의 One-Hot Encoding을 지원하는 categorical_feature 매개 변수를 제공합니다. 이 매개 변수에 One-Hot Encoding이 필요한 열의 인덱스 또는 열 이름을 입력하면 lightgbm은 자동으로 범주형 데이터를 처리합니다.

import lightgbm as lgb
import pandas as pd

# 범주형 데이터 생성
data = {'color': ["red", "blue", "green", "red", "blue"], 'size': [1, 2, 3, 1, 2]}
df = pd.DataFrame(data)

# One-Hot Encoding을 적용할 열 지정
categorical_columns = ['color']

# LightGBM 데이터셋 생성
dataset = lgb.Dataset(data=df.drop(columns=['color']), label=df['size'], categorical_feature=categorical_columns)

# 모델 학습 및 예측
model = lgb.train(params, dataset)

One-Hot Encoding을 사용하면 범주형 데이터를 숫자로 변환하지 않고도 lightgbm에서 바로 사용할 수 있습니다. 그러나 One-Hot Encoding은 범주의 개수에 따라 많은 특성을 생성할 수 있으므로, 범주의 개수가 많은 경우 메모리 소비와 과적합 문제가 발생할 수 있습니다. 따라서 One-Hot Encoding을 사용할 때는 신중하게 고려해야 합니다.

종합

이번 글에서는 lightgbm에서 범주형 데이터를 인코딩하는 두 가지 주요 방법인 Label Encoding과 One-Hot Encoding을 살펴보았습니다. Label Encoding은 순서를 부여하지 않는 범주형 데이터에 적합하며, One-Hot Encoding은 순서에 의미가 있는 범주형 데이터에 적합합니다. lightgbm은 편리한 categorical_feature 매개 변수를 제공하여 One-Hot Encoding을 간단하게 사용할 수 있도록 도와줍니다.

데이터의 속성과 모델의 요구사항에 따라 적절한 인코딩 방법을 선택하여 lightgbm을 효과적으로 활용할 수 있도록 노력해야 합니다.