[파이썬] lightgbm에서의 피처 엔지니어링

LightGBM은 Gradient Boosting 알고리즘을 기반으로 한 빠른 속도와 높은 성능을 제공하는 머신 러닝 프레임워크입니다. 따라서, 효과적인 피처 엔지니어링은 LightGBM을 사용하여 모델을 개발하는 데 중요한 역할을 합니다. 이 글에서는 LightGBM에서의 피처 엔지니어링을 다루고, Python을 사용하여 실제 예제 코드를 제공하겠습니다.

데이터 불러오기

피처 엔지니어링을 시작하기 전에, 우선 데이터를 불러와야 합니다. 여기서는 예제로 pandas 라이브러리를 사용하여 CSV 파일을 불러오는 방법을 보여드리겠습니다.

import pandas as pd

# CSV 파일 불러오기
data = pd.read_csv('data.csv')

결측치 처리

결측치는 모델의 성능에 부정적인 영향을 미칠 수 있으므로, 결측치를 처리해야 합니다. LightGBM은 결측치를 자체적으로 처리하기 때문에, 대부분의 경우 결측치 처리를 따로 수행할 필요가 없습니다. 하지만, 일부 특정한 상황에서는 결측치 처리가 필요할 수 있습니다.

# 결측치 처리
data.fillna(0, inplace=True)

피처 스케일링

일부 피처는 다른 피처 대비 값의 범위가 매우 크기 때문에, 피처 스케일링을 통해 범위를 조정하는 것이 필요할 수 있습니다. LightGBM은 피처 스케일링에 대한 영향이 적기 때문에, 피처 스케일링을 생략할 수 있습니다. 하지만, 모델 학습 시간을 단축하기 위해 피처 스케일링을 수행할 경우, 성능이 약간 향상될 수 있습니다.

from sklearn.preprocessing import StandardScaler

# 피처 스케일링
scaler = StandardScaler()
data[['feature1', 'feature2']] = scaler.fit_transform(data[['feature1', 'feature2']])

범주형 변수 인코딩

범주형 변수를 LightGBM 모델에 적용하기 위해서는 범주형 변수를 숫자형으로 변환해야 합니다. 일반적으로는 LabelEncoder 또는 OneHotEncoder와 같은 인코딩 방법을 사용합니다.

from sklearn.preprocessing import LabelEncoder

# 범주형 변수 인코딩
encoder = LabelEncoder()
data['category'] = encoder.fit_transform(data['category'])

파생 변수 생성

원본 데이터에서 파생 변수를 생성하여 모델의 성능을 향상시킬 수 있습니다. 예를 들어, 날짜 데이터에서 연, 월, 일 등의 파생 변수를 생성할 수 있습니다.

# 날짜 데이터 파생 변수 생성
data['year'] = pd.to_datetime(data['date']).dt.year
data['month'] = pd.to_datetime(data['date']).dt.month

피처 선택

모델의 학습 시간을 단축하고, 과적합을 방지하기 위해 피처 선택을 수행할 수 있습니다. LightGBM은 feature_importances_ 메서드를 통해 피처의 중요도를 계산하여 피처 선택에 활용할 수 있습니다.

import lightgbm as lgb

# LightGBM 모델 학습
model = lgb.LGBMClassifier()
model.fit(data.drop('target', axis=1), data['target'])

# 피처 중요도 계산
feature_importances = model.feature_importances_

# 중요도가 높은 피처 선택
selected_features = data.columns[feature_importances > 0.2]

위의 예제 코드는 LightGBM에서의 일반적인 피처 엔지니어링 작업을 보여주고 있습니다. 하지만, 실제 데이터에 따라 다양한 피처 엔지니어링 기법이 필요할 수 있으므로, 적절한 기법을 선택해야 합니다. 마지막으로, 피처 엔지니어링을 통해 데이터를 적절하게 가공한 후에 LightGBM 모델을 학습시키면 높은 정확도를 기대할 수 있습니다.