[파이썬] xgboost 불균형 데이터셋 처리

XGBoost는 다양한 머신러닝 작업에서 높은 성능을 발휘하는 강력한 알고리즘입니다. 그러나 때로는 데이터셋이 불균형하게 분포되어 있을 수 있습니다. 이러한 불균형한 데이터셋을 처리하는 방법에 대해 알아보겠습니다.

불균형 데이터셋이란 무엇인가요?

불균형 데이터셋은 클래스 간에 데이터 포인트의 분포가 불균형한 경우를 말합니다. 예를 들어, 이진 분류 문제에서 한 클래스에 대한 데이터 포인트가 매우 적고 다른 클래스에 대한 데이터 포인트가 매우 많은 경우를 말합니다. 이러한 불균형 데이터셋은 예측 모델의 성능을 저하시킬 수 있습니다.

불균형 데이터셋 처리 방법

1. 언더 샘플링 (Under-sampling)

언더 샘플링은 다수 클래스의 데이터 포인트를 제거하여 데이터셋을 균형있게 만드는 방법입니다. 이는 소수 클래스의 샘플링 문제를 해결하는 데 도움이 될 수 있습니다. 그러나 정보 손실이 발생할 수 있으므로 신중한 사용이 필요합니다.

from sklearn.datasets import make_classification
from imblearn.under_sampling import RandomUnderSampler

# 불균형 데이터셋 생성
X, y = make_classification(n_samples=1000, n_features=10, weights=[0.9, 0.1])

# 언더 샘플링
undersampler = RandomUnderSampler()
X_resampled, y_resampled = undersampler.fit_resample(X, y)

2. 오버 샘플링 (Over-sampling)

오버 샘플링은 소수 클래스의 데이터 포인트를 복제하여 데이터셋을 균형있게 만드는 방법입니다. 이는 소수 클래스의 데이터 포인트 수를 증감시킴으로써 데이터의 불균형을 해결하는 데 도움이 될 수 있습니다. 그러나 데이터 포인트의 중복으로 인해 과적합 문제가 발생할 수 있으므로 신중한 사용이 필요합니다.

from sklearn.datasets import make_classification
from imblearn.over_sampling import RandomOverSampler

# 불균형 데이터셋 생성
X, y = make_classification(n_samples=1000, n_features=10, weights=[0.9, 0.1])

# 오버 샘플링
oversampler = RandomOverSampler()
X_resampled, y_resampled = oversampler.fit_resample(X, y)

3. 가중치 부여 (Weighting)

가중치 부여는 데이터의 불균형을 해결하기 위해 각 데이터 포인트에 가중치를 부여하는 방법입니다. 이는 소수 클래스에 높은 가중치를 부여하여 모델이 소수 클래스를 더 잘 학습할 수 있도록 돕습니다.

import xgboost as xgb
from sklearn.datasets import make_classification

# 불균형 데이터셋 생성
X, y = make_classification(n_samples=1000, n_features=10, weights=[0.9, 0.1])

# DMatrix 생성
dtrain = xgb.DMatrix(X, label=y)

# 가중치 부여
weight_ratio = sum(y == 0) / sum(y == 1)
params = {'scale_pos_weight': weight_ratio}

# XGBoost 모델 학습
model = xgb.train(params, dtrain)

마무리

이상으로 XGBoost를 사용하여 불균형 데이터셋을 처리하는 방법에 대해 알아보았습니다. 데이터셋의 불균형 문제를 효과적으로 해결하여 더 좋은 예측 모델을 구축할 수 있습니다. 언더 샘플링, 오버 샘플링, 가중치 부여 중 적합한 방법을 선택하여 데이터셋을 균형있게 만들어야 합니다.