위에 그림에서 보듯이, 정상데이터는 파란색, 이상데이터는 빨간색, 나중에 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를 생성하기 때문에)
그런데 어떻게? 데이터의 수를 늘릴까요?
<SMOTE(Synthetic Minority Over-sampling Technique 개념>
낮은 비율의 클래스 데이터를 최근접 이웃을 이용해서 생성합니다.
일반적으로 성공적인 인스턴스 생성을 하지만, 소수데이터들 사이에서 보간하여 작동하기 때문에 모델링셋의 소수데이터들 사이의
특성을 반영하여 새로운 데이터 예측에 취약할수도 있습니다.
* SMOTE방법 python코드
mkjjo.github.io/python/2019/01/04/smote_duplicate.html
그 외에 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:
불러오는 중입니다...
'데이터분석 > 머신러닝' 카테고리의 다른 글
Sensitivity, Specificity, PPV, NPV (0) | 2021.04.26 |
---|---|
Upsampling방법 - SMOTE 알고리즘 (0) | 2021.04.09 |
Tree 모델과 R tree library (0) | 2021.01.27 |
Cross-validation (교차검증) (0) | 2021.01.07 |
Decision Tree (의사결정나무) 분석법 (0) | 2020.11.18 |