[머신러닝] 불균형 데이터 처리
데이터 불균형의 문제점
데이터 불균형의 정의
데이터 불균형(Imbalanced Data)이란, 분류할 클래스(Label or Category)간의 데이터 수가 현저히 차이 나는 현상을 의미합니다. 예를 들어, 이진 분류 문제에서 두 클래스가 있을 때 하나의 클래스는 수천 개의 사례를 가지고 있지만, 다른 클래스는 수십 개의 사례만 가지고 있는 경우가 해당됩니다. 이런 불균형 데이터는 머신러닝 모델의 학습 과정에서 일반화 능력을 저하시키면서 예측 성능에 큰 영향을 줄 수 있습니다.
모델 성능에 미치는 영향
데이터 불균형은 모델이 다수의 클래스에 과적합되게 만들 수 있으며, 소수 클래스의 중요 패턴을 학습하지 못할 가능성을 높입니다. 결과적으로, 모델은 소수 클래스에 대한 예측을 잘 못하게 됩니다. 예측 성능의 지표 중 하나인 정밀도, 재현율, F1 점수 등이 심각하게 왜곡될 수 있습니다.
처리 방법
오버 샘플링
오버 샘플링은 소수 클래스의 사례를 증가시켜 데이터 불균형 문제를 해결하는 방법입니다. 가장 간단한 형태는 소수 클래스의 사례를 임의로 복제하는 것입니다. 하지만 이 방법은 모델이 특정 사례에 과적합될 위험이 있습니다.
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
언더 샘플링
언더 샘플링은 다수 클래스의 사례를 감소시켜 데이터 불균형 문제를 해결하는 방법입니다. 이는 다수 클래스에서 무작위로 사례를 삭제함으로써 진행됩니다. 언더 샘플링은 정보의 손실이 있을 수 있기 때문에 신중하게 사용해야 합니다.
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_resample(X, y)
SMOTE 기법 이용
SMOTE(Synthetic Minority Over-sampling Technique)는 소수 클래스의 사례 사이를 보간하여 새로운 합성 데이터 포인트를 생성하는 방식으로 오버 샘플링을 수행합니다. 이 기법은 소수 클래스 데이터의 다양성을 증가시키는 데 효과적입니다. SMOTE는 다음과 같이 Python에서 쉽게 사용할 수 있습니다.
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
데이터 불균형 문제의 해결은 모델의 성능을 크게 향상시킬 수 있으며, 특히 의료, 금융 분야 같은 중요한 분야에서 소수 클래스의 패턴 인식은 매우 중요합니다. 따라서 불균형 데이터를 적절히 처리하는 것은 머신러닝 프로젝트의 성공에 있어 핵심적인 고려사항 중 하나입니다.