Machine Learning & Deep Learning/파이썬 머신러닝 완벽 가이드(공룡책)

불균형 데이터 처리, 언더 샘플링, 오버 샘플링

유방울 2023. 6. 28. 14:53

불균형 데이터

불균형 데이터는 정상 범주의 관측치 수와 이상 범주의 관측치 수가 현저히 차이나는 데이터

불균형한 분포를 가진 데이터 학습 시 성능 문제 발생

ex) 부도예측시 부도는 전체 기업의 3%내외로 극소수

암 발생 환자가 암에 걸리지 않은 사람보다 현저히 적음

신용카드 사기 거래는 정상거래보다 극소수

이상 레이블이 가지는 데이터 건수가 정상 레이블이 가진 데이터 수 너무 작아서 발생

 

이상 레이블은 매우 적어서 다양한 유형 학습 x

<-> 정상 레이블 데이터 수가 많아서 일방적으로 치우친 학습 수행

=> 정확도가 높아도 실제 부실을 부실이라고 예측할 확률인 재현율이 급격히 작아짐

ex) 100개 데이터 중 3개가 부실 -> 모두 정상이라고 예측해도 정확도가 97% 나옴

즉, 불균형 데이터는 이상 데이터를 정확히 찾아내지 못함

 

해결방법

- 소수 클래스의 데이터 추가 수집 (Get more minority data) 
- 불균형 데이터 분류 모델에 적합한 성능평가 지표 선정 
       (evaluation metrics for imbalanced classification)
- 샘플링 방법 (Sampling methods)
   Undersampling
      : Random Sampling, Tomek Links
    Oversampling
      : Resampling, SMOTE, Borderline SMOTE, ADASYN
-비용 또는 가중치 조정 방법 (Cost, Weight)
- Outlier detection 방법
      : One-class SVM, Isolation Forest, DBSCAN clustering
- 확률 튜닝 알고리즘 (Probability Tuning Algorithms)

 

딥러닝 분석을 위해 많은 데이터 확보가 효과적 -> 오버 샘플링 기법 적용 추천

 

1. 언더 샘플링

종류 : 무작위추출, Tomek Links, CNN Rule, One Sided Selection

많은 데이터 세트 -> 적은 데이터 세트 수준으로 감소

과도하게 정상 레이블로 학습/예측하는 부작용 개선

 

1.1 Random Sampling 

무작위로 정상 데이터를 일부만 선택

다수 범주에서 무작위로 샘플링

3번 무작위 추출을 한 결과인데 무작위로 샘플링하기 때문에 할 때마다 다른 결과를 얻는 단점

 

 

1.2 Tomek Link

#랜덤 샘플링의 한계를 보완하는 방법

#유의한 데이터만 남기는 방식(알고리즘 :  EasyEnsemble, BalanceCascade)

두 범주 사이를 탐지하고 정리를 통해 부정확한 분류경계선을 방지하는 방법

다른 클래스의 데이터 두 개 연결 -> 주변에 다른 임의의 데이터 Xk가 존재할 시

선택한 두 데이터에서 Xk까지의 거리보다 선택한 두 데이터 사이의 거리가 짧을 때 선택한 두 데이터 간의 링크를 Tomek Link

왼쪽 : 검은색 선은 Tomek Link 될 수 없음 Xj와 Xi 사이에 Xk가 존재함

오른쪽 : Tomek Link임 

 

원본 데이터로  Tomek Link 나타내면 다음과 같음

보라색 묶음이 Tomek Link 형성함 -> 다수 범주에 속한 관측치를 제거

다수 범주에 속한 관측치를 제거해 언더 샘플링을한 결과는 위 그림과 같음

 

1.3 CNN Rule

Convolutional Neural Network Rule(합성곱 신경망)

소수 범주에 속하는 데이터 전체와 다수 범주에 속하는 데이터 중 임의로 선택한 데이터 한 개 A로 구성된 서브 데이터 형석

다수 범주에 속하는 나머지 데이터 중 하나씩 K=1인 1-NN 방식을 이용함

해당 데이터가 처음에 선택한 범주 데이터 A와 가까운지?

소수 범주와 가까운지?

-> 확인해 가까운 범주로 임시로 분류

그 후 정상 분류된 다수 범주 관측치를 제거해 언더 샘플링

K가 1이 아닌 K-NN방식 사용시 모든 데이터가 이상 범주의 데이터로 분류됨

-> K는 1이어야 함 

즉 데이터가 많은 클래스에 밀집된 데이터가 없을 때까지 데이터를 제거해 데이터 분포에서 대표적인 데이터만 남도록 하는 방법

1.4 One Sided Selection

OSS는 Tomek Links + CNN Rule 

먼저 데이터가 많은 클래스에서 토멕링크에 해당하는 데이터 제거하고

나머지 데이터는 CNN을 통해 밀집된 데이터를 제거

 

1.5 장단점

장점

다수 범주 데이터의 제거로 계산시간 감소

 

단점

데이터 소실이 매우 큼

너무 많은 정상 데이터를 감소시키기 때문에 정상 데이터 제대로 학습 수행 x

중요한 정상 데이터 잃음

 

2. 오버 샘플링

적은 데이터 증식 -> 충분한 데이터

소수 범주의 데이터를 다수 범주의 데이터 수에 만제 늘리는 방식

 

2.1 Resampling

무작위로 소수 데이터 복제

-> 정보가 손실되지 않음

but 소수 범주에 과적합이 발생할 수 있는 단점

 

#유의정보 : 사전에 기준을 정해 소수 데이터 복제

#합성 데이터 생성 : 소수 데이터를 단순히 복제하는 것이 아니라 피처들 조금씩 변경해서 새로운 복제본 만들어 냄

 

2.2 SMOTE(Synthetic Minority Over-sampling Techinque)

적은 데이터에 있는 개별 데이터들의 K 최근접 이웃을 찾음

-> k개 이웃들의 차이를 일정 값으로 만들어서 기존 데이터와 약간 차이나게 만듦

즉,  K값을 정한 후 소수 범주에서 임의의 데이터 선택

선택한 데이터와 가장 가까운 k개의 데이터 중 하나를 무작위로 선정된 Synthetic 공식을 통해 가상의 데이터 생성

-> 이 과정을 소수 범주에 속하는 모든 데이터에 대해 수행해 가상 데이터 생성

주의사항 : K값은 무조건 2 이상

K가 1일 경우 데이터가 이상한 형태로 늘어남(강의 참고)

2.3 Borderline SMOTE

Borderline 부분에서만 SMOTE방식 사용

Borderline을 찾는 것은 임의의 소수 범주의 데이터 한 개에 대해서 주변의 k개 데이터 탐색하고 그중 다수 범주 데이터 수를 확인함

다수 범주 데이터의 수 = k :  소수 범주의 데이터를 Noise 관측치라고 함

k/2 <다수 범주 데이터의 수 < k : Danger 관측치

0 <다수 범주 데이터의 수 < k/2 : Safe 관측치

이 중 Danger 관측치에 대해서만 SMOTE 적용해 오버 샘플링 진행 

검은색이 Danger, 초록색이 생성된 가상 데이터

 

2.4 ADASYN

Borderline SMOTE 방법과 비슷

but 샘플링 개수를 데이터 위치에 따라 다르게 설정

모든 소수 범주 데이터에 대해 주변의 k개의 데이터를 탐색

-> 다수 범주 데이터의 비율 계산

-> 계산된 비율들을 비율의 총합으로 나누고 스케일링 진행

다수 범주 데이터 수 - 소수 범주 데이터 수를 스케일링이 진행된 비율에 곱해주고

반올림된 정수의 값만큼 각 소수 범주 데이터 주변에 SMOTE 방식으로 가상 데이터 생성

소수 범주 데이터 주변의 다수 범주 데이터 수에 따라 유동적으로 생성이 가능하다는 장점이 있음

 

3가지 SMOTE 방식으로 불균형 데이터를 오버 샘플링한 결과는 조금씩 다름

2.5 GAN

Gnnerative Adversarial Nets

생성자와 구분자로 구성되어 있고 딥러닝을 사용하는 최신 오버 샘플링 기법

무작위로 노이즈 생성 -> 생성자를 통해 가짜 샘플을 만듦

-> 구분자에서 진짜 샘플 vs 가짜 샘플 판별 

너무 쉽게 판별시 생성자에게 피드백줌

-> 생성자는 더욱 진짜 샘플과 비슷한 가짜 샘플 만들어내고 구분자에게 판별 시킴

 

=>생성자와 구분자가 서로 경쟁하며 업데이트됨

결국 진짜 샘플과 매우 유사한 형태로 생성

2.6 장단점

장점

데이터를 증가시키기 때문에 손실 없음

대부분 언더 샘플링에 비해 높은 분류 정확도

 

단점

데이터 증가로 계산 시간 증가, 과적합 가능성 존재

노이즈 또는 이상치에 민감

# 보류

비용 민감 학습(Cost Sensitive Learning, CSL)

오분류하는 행위를 비용으로 측정

Total Coast = C(FN) * FN + C(FP) * FP

FN : 잘못 예측된 긍정적인 관찰의 수

FP : 잘못 예측된 부정적 사례의 수

C(FN), C(FP)는 비용이 각각 일치함

C(FN) > C(FP)

 

잘못 분류된 비용을 설명하는 비용 매트릭스를 사용해 불균형 학습 문제 해결

최근 이 방법론은 샘플링 기법으로의 대체로 대두

 

파이썬 패키지 imbalanced-learn

 

참고자료

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

https://casa-de-feel.tistory.com/15

https://blog.naver.com/selina-lee/222520879321