[python] 오버샘플링(Oversampling)

머신러닝에서 클래스 불균형 문제(Class Imbalance Problem)가 발생하는 경우가 종종 있습니다. 클래스 불균형은 한 클래스의 샘플 수가 다른 클래스에 비해 훨씬 적은 상황을 의미합니다. 이러한 경우, 모델이 많은 샘플 수를 갖는 클래스에 치우쳐서 학습되는 경향이 있을 수 있습니다. 오버샘플링은 이러한 클래스 불균형 문제를 해결하는 한 가지 방법입니다.

오버샘플링이란 소수 클래스에 속하는 샘플을 증가시키는 기술입니다. 이를 통해 소수 클래스의 샘플 수를 다수 클래스와 일치시킬 수 있으며, 이는 모델의 학습에 도움이 됩니다. 오버샘플링은 다양한 방법들로 구현될 수 있지만, 대표적인 방법으로는 SMOTE (Synthetic Minority Over-sampling Technique)가 있습니다.

SMOTE (Synthetic Minority Over-sampling Technique)

SMOTE는 오버샘플링을 위한 효과적인 기술 중 하나로, 소수 클래스의 샘플을 합성하여 새로운 샘플을 생성합니다. 이러한 합성된 샘플은 소수 클래스의 특성을 유지하면서 데이터를 확장시킵니다.

SMOTE 알고리즘은 다음과 같은 과정으로 이루어집니다:

  1. 소수 클래스의 샘플을 선택합니다.
  2. 선택한 샘플의 이웃 샘플을 찾습니다.
  3. 이웃 샘플과 선택한 샘플 사이의 거리를 계산합니다.
  4. 거리에 기반하여 새로운 샘플을 생성합니다.

Python에서는 imbalanced-learn 라이브러리를 사용하여 SMOTE를 구현할 수 있습니다. 다음은 간단한 예제 코드입니다:

from imblearn.over_sampling import SMOTE

# X와 y가 주어진다고 가정합니다.
smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)

위 코드에서 fit_resample 메서드를 사용하여 SMOTE를 적용합니다. 입력 데이터 X와 레이블 y는 소수 클래스 샘플을 갖는 클래스의 데이터와 레이블로 구성되어야 합니다. X_resampledy_resampled는 오버샘플링된 데이터와 레이블입니다.

이와 같이 오버샘플링을 통해 클래스 불균형 문제를 해결할 수 있으며, 모델의 성능을 향상시킬 수 있습니다.


참고 문서: imbalanced-learn documentation