인공지능공학연구소 김성범소장님의 자료 

 

위에 그림에서 보듯이, 정상데이터는 파란색, 이상데이터는 빨간색, 나중에 test data로 쓰일 이상데이터들은 회색으로 표현이 됩니다. 

잘 분류한다는 것은 파란색과 실제 이상관측치 분포를 구분해 내는것인데 모델은 아래처럼 다르게 학습됩니다. 

오분류하는 모델의 예시 (인공지능공학연구소 김성범소장님의 자료) 

 

이렇듯, 데이터가 압도적으로 많은 정상데이터로 분류를 잘하는 모델을 만들 수 있지만, 이와 반면, 이상데이터를 잘 분류하지 못하는 모델을 만들더라도, accuracy를 계산하였을 때 매우 높은 값이 나올 수 있지만 이 사실을 믿어서는 안됩니다. 

 

특히, 타겟이 1%의 굉장히 소수인 데이터에 대해서 이러한 문제를 개선할 방법들이 존재합니다. 예를 들면, 위조지폐를 찾아낼때 outcome의 수가 적기 때문에 이를 개선하기 위해 많은 방법들이 고안되어 왔습니다.

 

Class imbalance Problem?

- 각 클래스의 개수비가 현저히 차이나는 것을 말합니다. 

fraud detection, medical diagnosis, anomaly detection, facial recognition 등에서 주로 생기는 문제입니다. 

 

크게 두가지 접근 방법으로 imbalanced problem을 해결합니다. 

  •  Cost function based approach: rare class에 가중치를 더 주거나, rare class를 잘못분류 했을때 cost, loss, param을 조정하는 방법
  •  Sampling based approach: 데이터 자체를 늘리고 줄이는 방법 ex) 업샘플링, 다운샘플링, SMOTE

 

오늘은 abnormal을 detection하는 classifier를 학습하는데 좋은방법들을 고려해보았습니다.

  • 적절한 metrixs를 사용하여 평가하기
  • resample the training set: under sampling and over sampling
  • 서로다른 데이터셋으로 학습 후 앙상블하기
  • clustering하여 rare class와 모델 학습하기
  • 딥러닝을 이용한 학습과 클래스 가중치주기

 

1. 적절한 metrix사용해서 평가하기 

no information rate이 높은 경우 기본적으로 model의 error와 함께, FN rate을 비교해서 전체 1중에 0이라고 예측한 비율을 줄이는 방향으로 해석해야합니다. 또한, 모델의 accuracy로 평가하되, 이또한, accuracy가 no information rate보다 낮게 나왔다고 나쁜 모델이라고 말할수는 없습니다.  

예를 들면, 달리기 선수에게 역도를 시켰는데 능률이 평균 이하로 나온다고 역도선수를 운동을 못한다고 판단할 수 없습니다.

이럴때는, sensitivity와 specificity를 확인하여 모델이 정말로 학습을 해서 분류를 잘한것인지, 혹은 하나의 classification으로 판단을 하는지 확인해야합니다.   

또한, accuracy와 sensitivity, specificity 모두 낮은 모습을 보였지만, 어느정도 AUC값이 높게 나온다면 무시해도 될 정도의 수준이라고 할 수 있습니다.  

 

2. resample the training set: under sampling and over sampling (drawback가능성 있음)

- under sampling의 경우 (=down-sampling), abundant class에서 무작위추출을 통해 rare class의 수와 1:1의 outcome의 비율을 만들 수 있으나, 데이터 수를 떨어트림으로 학습효율을 줄어들게 할 수 있습니다.

중요한 정상데이터를 잃어버리는 경우가 생길수도 있습니다. 

(어느정도 데이터가 적절할까? 누가봐도 변수에 비해 데이터가 적지않다고 생각되는 정도수준)  

 

- over sampling의 경우(=up-sampling), outcome에서 rare class의 데이터를 증축시켜 abundant class의 데이터를 늘리는 방법입니다. 적은 rare class에서 복원추출로 abundant class와 비율을 맞춰주는 것입니다. 

무작위로 소수의 데이터를 복제해서 늘리는 방법이 있어 정보가 손실되지는 않지만 overfitting의 가능성이 큽니다. 

 

* over-sampling을 하기전, 무조건 k-cross validation을 수행하여야합니다. (over-sampling은 rare sample기반으로 distribution function을 통해 random data를 생성하기 때문에)

 

https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets

그런데 어떻게? 데이터의 수를 늘릴까요? 

 

<SMOTE(Synthetic Minority Over-sampling Technique 개념>

 

낮은 비율의 클래스 데이터를 최근접 이웃을 이용해서 생성합니다. 

일반적으로 성공적인 인스턴스 생성을 하지만, 소수데이터들 사이에서 보간하여 작동하기 때문에 모델링셋의 소수데이터들 사이의 

특성을 반영하여 새로운 데이터 예측에 취약할수도 있습니다. 

 

https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets

 

간략한 SMOTE코드

* SMOTE방법 python코드

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

 

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

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

mkjjo.github.io

 

그 외에 repitition, bootstraping 등의 방법이 있습니다.

하나의 리샘플링 방법이 다른 리샘플링보다 월등히 좋은 것은 없습니다. 

각 데이터별로 다르게 작용하기 때문에 모두 시도해보는 것을 추천합니다. 

 

3. 서로 다른 데이터셋으로 앙상블하기

가장 간단하고 쉬운 방법이며, rare class에 맞게 abundant class를 n개로 나눈뒤, 각각 abundant class와  rare class를 합쳐,

n번의 모델학습을 하여 결과를 합치거나 ,평균내서 사용합니다. 

 

 

4. clustering하여 rare class와 학습하기

clustering을 통해, abundant class를 r groups로 clustering하는 것을 제안합니다. classes의 개수를 r로하고, 각 그룹에 대해 

medoid(center of cluster)에 유지됩니다. 모델을 학습할 땐 rare class와 medoid로 학습하면 됩니다.   

 

5. 딥러닝을 이용한 학습과 class 가중치 주기

=> 소수 클래스에서 정답을 맞추지 못한 경우, loss에 패널티를 더 줘서 학습을 시킴

=> auc를 최적화하는 방향으로도 학습시킬 수 있음

 

클래스 가중치 주기

reference cite: 

ourcstory.tistory.com/240

 

Imbalanced data를 처리하는 기술 7가지

7 Techniques to Handle Imbalanced Data intrusion detection real-time bidding Introduction fraud detection in banking real-time bidding in marekting intrusion detection in networks 위 분야에서는 1%보..

ourcstory.tistory.com

불러오는 중입니다...

 

 

+ Recent posts