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

xgboost는 머신 러닝 알고리즘 중 하나로, 피처 엔지니어링은 이 알고리즘을 사용하여 모델의 성능을 향상시키는 중요한 단계입니다. 이 글에서는 xgboost에서 피처 엔지니어링을 수행하는 방법에 대해 알아보겠습니다.

1. 결측치 처리

데이터에 결측치가 있는 경우, xgboost는 이를 처리하는 기능을 제공하지 않습니다. 따라서, 결측치 처리는 피처 엔지니어링 단계에서 선행되어야 합니다. 일반적으로 결측치는 평균값, 중간값, 최빈값 등의 통계치로 대체됩니다.

import pandas as pd
from sklearn.impute import SimpleImputer

# 데이터 불러오기
data = pd.read_csv('data.csv')

# 결측치 대체를 위한 SimpleImputer 객체 생성
imputer = SimpleImputer(strategy='mean')

# 결측치 대체
data_filled = imputer.fit_transform(data)

2. 범주형 변수 인코딩

xgboost는 수치형 변수만을 입력으로 받기 때문에, 범주형 변수는 피처 엔지니어링을 통해 인코딩되어야 합니다. 일반적으로는 원핫인코딩이 자주 사용되지만, 카테고리가 많은 경우는 더미 변수화 방법이 유용합니다.

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# 데이터 불러오기
data = pd.read_csv('data.csv')

# 범주형 변수 열 선택
categorical_cols = ['category1', 'category2']

# OneHotEncoder 객체 생성
encoder = OneHotEncoder(sparse=False)

# 범주형 변수 인코딩
encoded_data = encoder.fit_transform(data[categorical_cols])

3. 상호작용 피처 생성

몇 개의 변수들이 함께 사용될 때 더 큰 영향을 미치는 경우가 있을 수 있습니다. 이러한 변수들 간의 상호작용을 고려하여 새로운 피처를 생성할 수 있습니다.

import pandas as pd
from sklearn.preprocessing import PolynomialFeatures

# 데이터 불러오기
data = pd.read_csv('data.csv')

# 상호작용 피처 생성을 위한 PolynomialFeatures 객체 생성
poly_features = PolynomialFeatures(degree=2)

# 상호작용 피처 생성
interactions = poly_features.fit_transform(data)

4. 이상치 처리

이상치는 데이터를 왜곡시키고 모델의 예측 성능을 감소시킬 수 있습니다. 따라서, 이상치를 식별하고 처리하는 것이 중요합니다. 이상치는 주로 통계적인 방법이나 시각화 기법을 사용하여 찾을 수 있습니다.

import pandas as pd
from sklearn.ensemble import IsolationForest

# 데이터 불러오기
data = pd.read_csv('data.csv')

# 이상치 식별을 위한 IsolationForest 객체 생성
outlier_detector = IsolationForest(contamination=0.01)

# 이상치 식별
outliers = outlier_detector.fit_predict(data)

5. 피처 선택

xgboost는 대부분의 변수들을 사용하여 모델을 학습하고 예측합니다. 하지만, 모든 변수를 모델에 포함시키는 것은 모델의 복잡도를 증가시킬 수 있습니다. 따라서, 중요하지 않은 변수를 제거하고 핵심 피처들로 모델을 구성하는 것이 좋습니다.

import pandas as pd
from sklearn.feature_selection import SelectFromModel
from xgboost import XGBClassifier

# 데이터 불러오기
data = pd.read_csv('data.csv')

# 특성 선택을 위한 SelectFromModel 객체 생성
selector = SelectFromModel(estimator=XGBClassifier())

# 피처 선택
selected_features = selector.fit_transform(data.drop('target', axis=1), data['target'])

위에서는 xgboost를 사용하여 피처 엔지니어링을 수행하는 몇 가지 기본적인 방법을 소개했습니다. 피처 엔지니어링은 모델의 성능을 향상시키는 데 중요한 요소이므로, 다양한 피처 엔지니어링 기법을 적용하여 최적의 결과를 얻을 수 있습니다.

이외에도 주어진 데이터의 도메인 지식을 활용하거나, 외부 데이터 소스를 통해 새로운 피처를 생성하는 등 더욱 다양한 피처 엔지니어링 기법을 적용할 수 있습니다.