오랑우탄의 반란
[ML] 분류 모델 불균형 데이터에 대한 솔루션 Classification Model Imbalanced Data Solution 본문
[ML] 분류 모델 불균형 데이터에 대한 솔루션 Classification Model Imbalanced Data Solution
5&2 2024. 8. 21. 22:21
불균형 데이터란?
불균형 데이터란 목표 변수가 범주형 데이터일 때 범주별 관측치의 개수/비율 차이가 큰 데이터를 뜻합니다.
이때 데이터가 더 많은 쪽을 다수 범주(majority class), 적은 쪽을 소수 범주(minority class)라고 부릅니다.
실무에서 분류 작업을 진행할 때 균형 데이터보다 불균형 데이터를 다뤄야 하는 경우가 많습니다.
신용카드 회사의 정상 거래 대비 사기 거래, 통신회사 기존 유저 대비 이탈(churn) 유저 등 특정 데이터의 비율이 월등히 크거나 작은 경우가 있겠지요.
그럼 이 불균형 데이터가 왜 머신러닝 분류작업 시 문제가 될까요?
불균형 데이터가 왜 문제인가?
머신러닝으로 분류 작업을 진행할 때 프로그램은 자동으로 다수 범주 데이터에 더 큰 비중을 둬서 소수 범주 데이터마저 다수로 분류해버리며 정확도가 높게 나옵니다. 즉, 실제 negative를 positive로 분류하는 Type I Error, 실제 positive인 것을 negative로 분류하는 Type II Error 가 발생하는 것이지요.
결국 제대로 된 분류 작업에 실패함 모델이 되어버립니다.
더 나아가 샘플링에서 소수 관측치가 적어 잘못하면 과적합에 빠질 위험도 있습니다.
불균형 데이터 처리 솔루션
그러면 불균형 데이터는 어떻게 처리하면 좋을까요?
대표적인 솔루션 4개를 소개하겠습니다.
Solution 1: 임계값 (threshold) 조절
데이터 처리 이후 모델 적합 단계에서 모델 예측 성능을 최적화하기 위한 임계값 조정 기법
일반적인 0, 1 분류에서는 0으로 분류될 확률, 즉 임계값이 0.5인데 이를 0.1~0.3과 같이 매우 낮은 수준으로 직접 설정해서 0으로 분류될 확률을 낮춰줘서 소수 범주로 분류될 수 있게끔 설정하는 방식
Solution 2: 샘플링 (Undersampling, Oversampling)
Undersampling
다수 범주 데이터가 소수 범주 데이터와 비율이 맞게끔 데이터를 축소하는 방식으로, 보유한 데이터가 많을 때 사용
장점: 모델 복잡도, 계산시간, 저장용량 감소
단점: 데이터 제거로 인한 중요 정보 손실 발생 가능
Oversampling
소수 범주 데이터를 다수 범주 데이터 수에 맞게 인위적으로 늘리는 방식
장점: 정보 손실이 없음, 대부분 언더샘플링에 비해 높은 정확도를 보임
단점: (데이터 증가로 인해) 과적합 가능성 발생, 노이즈와 이상치에 민감
Solution 3: 데이터 증강 (SMOTE)
정의: 오버샘플링 중 resampling 방법 (단순히 소수 범주 데이터 무작위로 복제)의 과적합 문제를 보완하기 위해 나온 방식으로, 임의로 정한 K값(>=2), 소수 범주 데이터에 대해, 가장 가까운 K개의 데이터 중 하나를 무작위로 선정해 synthetic 공식으로 가상의 데이터를 생성하는 방식
Solution 4: Two Stage
데이터 전체의 양이 많고 다수 범주의 비율이 과도하게 높아 때 과적합의 위험이 높을 때 사용할 수 있는 방법
(예: 쿠팡의 추천 알고리즘)
1) 언더샘플링으로 훨씩 적은 양의 임시 데이터셋 생성
2) 해당 데이터에 대해 feature importance 를 측정해서 중요도가 높은 순으로 정렬
3) SMOTE로 해당 데이터 오버샘플링
3) 새로 생성된 데이터에 대해 중요도가 낮은 feature 제거하고 새로운 feature를 생성해서 지표가 더이상 개선되지 않을 때까지 모델 평가
분류 모델 평가 지표
분류 모델에 대한 평가를 진행할 때 대표적인 평가 지표와 모델에 적합한 평가 지표를 고르는 방법 참고해주세요.
- F1 score
- Precision
- Recall
- AUC score (AUC & ROC)
'PYTHON > 머신러닝' 카테고리의 다른 글
[ML] 딥러닝 기초이론 (+Tensorflow) (0) | 2024.08.14 |
---|---|
[ML] 비지도학습 K-Means Clustering 군집화(클러스터링) (0) | 2024.08.14 |
[ML] 의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘 (회귀/분류 모델링 알고리즘) (2) | 2024.08.14 |
[ML] 데이터분석 예측모델링 파이썬 실습 (타이타닉) (0) | 2024.08.13 |
[ML] (다중)로지스틱회귀 분류 분석 파이썬 실습 (VSCode) (0) | 2024.08.12 |