본문 바로가기
머신러닝

[데이터 불균형][해결방안] Random UnderSampling

by 방구석 데이터사이언티스트 2022. 2. 11.
728x90
반응형

분류문제에서 우리가 예측하고자 하는 값(target)이 불균형이라면, 그 상태로 모델을 학습시킨다면 recall, precision 성능지표가 매우 낮게 나올 것입니다. 이진분류로 예를 들면 target : 0의 값이 target : 1의 값보다 압도적으로 많다면 0에 대해서는 충분히 학습이 되겠지만 1에 대해서는 충분히 학습되지 못해 1을 잘 예측하지 못하게 되고 recall, precision이 낮아지게 되는 것입니다. 

 

따라서 Target이 불균형이라면 균형을 맞춰 균형있는 학습을 할 수 있게 해야합니다. 그 방법으로는 크게 2가지가 있습니다. 

- oversampling :  낮은 비중을 차지하는 클래스의 값을 더 많이 생성해 높은 비중의 클래스 값에 맞추는 기법

- undersampling :  높은 비중을 차지하는 클래스의 값을 제거해 낮은 비중의 클래스 값에 맞추는 기법

이 글에서는 undersampling의 가장 기본적인 기법인 Random UnderSampling에 대해 다뤄보겠습니다. 

출처 : resampling으로 imbalanced data(불균형 데이터 문제) 해결하기 :: 준나이의 블로그 (tistory.com)

1. Random UnderSampling 이란?

더 많은 비중을 차지하는 입력값을 랜덤으로 제거하는 방법

- 장점 : 실행 시간과 용량을 줄일 수 있다.

- 단점 : 정보 손실

2. Random UnderSampling 코드

1
2
3
4
5
6
7
8
9
X_train=train.iloc[:,:-1]
y_train=train.iloc[:,-1]
X_valid=valid.iloc[:,:-1]
y_valid=valid.iloc[:,-1]
 
#불균형 처리
import imblearn
from imblearn.under_sampling import RandomUnderSampler
X_train, y_train = RandomUnderSampler(random_state=2021).fit_resample(X_train, y_train)
cs

데이터를 train / validation / test로 나눴다면 학습을 위한 train 데이터에는 랜덤 언더샘플링을 통해 데이터 불균형 문제를 해결합니다. 그리고 검증을 위한 validation 데이터에는 언더샘플링을 적용하지 않습니다. 왜냐하면 불균형한 데이터를 예측하기 위한 모델의 검증 또한 불균형으로 진행하며 그 성능을 측정해야 하기 때문입니다.  

3. Random UnderSampling 전 후 비교 

 

불균형 처리 전

불균형 데이터를 그대로 학습하여 생성한 모델은 위와 같이 정확도는 높지만 recall 과 F-1 스코어가 낮은 것을 알 수 있습니다. 이는 0에 비해 1은 충분히 학습되지 않았기에 1을 잘 예측하지 못하게 됩니다. 

 

언더 샘플링 적용

언더 샘플링을 적용한 후에 결과를 살펴보면 recall과 F-1 스코어가 조금 향상된 것을 알 수 있습니다. 다만 precision 수치는 오히려 더 떨어지는 것을 확인할 수 있습니다. 모델이 예측한 1에 비해 실제 1이 0.485라는 것은 1을 너무 많이 예측했을 가능성이 있습니다. 우리가 검증하는 데이터는 불균형이기에 적절하게 1을 예측할 필요가 있고, 임의로 0으로 제거하여 균형을 맞춰주는 방식은 0과 1의 균형을 맞춰줄 수 있지만, 적은 클래스의 1값을 많이 예측해버리는 단점이 발생할 수 있다는 것을 알 수 있네요. 

728x90
반응형

댓글