ML & DL/데이터

SMOTE (imblearn, class imbalance)

후리붜너 2022. 9. 12. 13:15

실제 세계에서는 데이터가 고르게 분포해있지 않다.

물론 모델링할 때 ground truth에 해당하는 class값도 마찬가지이다.

classification 과업에 대해서 모델링을 진행할 때 각 class에 대해서 개수의 차이가 극명하다면 개수가 많은 class 위주로 패턴을 학습할 것이다. 이는 개수가 적은 class에 대해서는 학습이 잘 이뤄지지 않아 예측단계에서 큰 오차를 보일 가능성이 높다.

 

SMOTE

SMOTE란, Synthetic Minority Over-sampling Technique의 약자인데 적은 class에 대해서 over sampling을 수행해 class별 개수를 맞춰주는 역할을 한다. 

SMOTE가 필요한 데이터는 일반적으로 정확도(accuracy)는 높지만 재현율(recall)이 매우 낮은 경우에 사용한다.

예를 들어, 기업의 부도를 예측하는 경우에 사용될 수 있는데 아래의 그래프를 보자.

기업 부도 데이터

위의 그래프에서 빨간색 점들이 기업이 부도나는 경우이고 나머지는 부도나지 않은 기업의 데이터라고 가정해보자. 부도나지 않는 경우의 데이터들은 매우 많아서 부도나지 않는다고 예측하는 경우가 많다면 정확도는 높을 것이다. 하지만 실제 부도나는 경우는 매우 적은데 그 데이터들의 일부를 부도나지 않을 것이라고 예측하게 된다면 재현율(recall, 실제 부도나는 기업들 중 예측이 맞은 경우)은 robust하지 않게 수치가 떨어질 것이다.

 

이런 경우에 SMOTE를 사용해서 부도나는 경우와 부도나지 않는 경우의 개수를 맞춰줄 수 있다.

 

동작 방식

SMOTE는 over sampling을 통한 개수 맞추기에 초점이 맞춰있다. 그렇다면 sampling하여 개수를 늘려줘야 하는데 어떻게 늘려주는 것일까?

 

SMOTE는 적은 class의 샘플들을 먼저 고르고 각 샘플들에게서 가장 가까운 이웃 샘플과의 차이를 구해 그 차이에 0~1사이의 난수를 곱해 추가한다. (즉, 이웃샘플들과의 선분을 그었을 때 그 사이에 점을 찍는 방식)

SMOTE 동작 방식

코드

y.value_counts() / y.shape[0]

from imblearn.over_sampling import SMOTE

smote = SMOTE()
sm_x_train, sm_y_train = smote.fit_resample(x_train, y_train)

sm_y_train.value_counts() / sm_y_train.shape[0]

주의

SMOTE는 두 범주의 class에 대해서만 작동한다. 다중 클래스는 지원하지 않는다.

또한 무조건 class의 개수가 맞지 않는다고 모든 알고리즘에서 재현율이 떨어지는 것은 아니며 SMOTE 처리한 데이터라도 알고리즘에 따라서 성능이 좋을 수도 나쁠 수도 있다.

 

 

 

reference

https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTE.html

 

SMOTE — Version 0.9.1

N. V. Chawla, K. W. Bowyer, L. O.Hall, W. P. Kegelmeyer, “SMOTE: synthetic minority over-sampling technique,” Journal of artificial intelligence research, 321-357, 2002.

imbalanced-learn.org

https://mkjjo.github.io/python/2019/01/04/smote_duplicate.html

 

[Python] SMOTE를 통한 데이터 불균형 처리

* 본 포스트는 개인연구/학습 기록 용도로 작성되고 있습니다. 데이터 분석시 쉽게 마주하게 되는 문제 중 하나가 데이터의 불균형이다. 우리가 찾고자하는 데이터의 타겟의 수가 매우 극소수인

mkjjo.github.io

https://john-analyst.medium.com/smote%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%88%EA%B7%A0%ED%98%95-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-5ab674ef0b32

 

SMOTE로 데이터 불균형 해결하기

현실 세계의 데이터는 생각보다 이상적이지 않다.

john-analyst.medium.com