728x90
데이터 분석시 쉽게 마주하게 되는 문제 중 하나는 데이터의 불균형이다.
비대칭 데이터셋에서는 정확도(Accuracy)가 높아도 재현율(Recall)이 급격히 작아지는 현상이 발생하게 된다. 따라서 데이터 불균형을 처리해야 한다.
예) 100개의 데이터 중 5개 오류인 데이터
모두 정상이라고 예측한 경우
예측 오류 (Predicted Positive) | 예측 정상 (Predicted Negative) | ||
실제 오류 (True Positive) | 0 | 95 | 95 |
실제 정상 (True Negative) | 0 | 5 | 5 |
0 | 100 | 100 |
정확도 : (0 + 95) / 100 -> 95%
재현율 (실제 P중 예측 P) : 0 / (0 + 95) -> 0%
데이터 불균형 처리
https://chaemi720.tistory.com/276
과거에 정리한 데이터이다. 데이터의 불균형 처리 방법은 여러가지 있지만 SMOTE에 집중해보자.
SMOTE (Synthetic Minority Oversampling Technique)
불균형 데이터 처리 방법은 데이터의 특성이나 확보 데이터량에 따라 다를 것이다. 하지만 딥러닝 분석을 위해서는 많은 데이터 확보가 효과적이기 때문에 오버샘플링 기법을 적용하는 것이 좋다.
- SMOTE 알고리즘은 오버 샘플링 기법 중 합성 데이터를 생성하는 방식으로 가장 많이 사용되고 있다.
- 낮은 비율로 존재하는 클래스의 데이터를 최근접 이웃 알고리즘 (KNN 알고리즘)을 활용하여 새롭게 생성하는 방법이다.
- 장점
- 무작위로 오버 샘플링을 수행하는 방법보다 과적합 가능성이 적다.
- 언더 샘플링에 비해 정보가 소실되지 않고, 데이터의 수가 줄어들지 않는다
- 단점
- 새로운 데이터 생성시 다른 클래스는 고려하지 않아 생성된 데이터가 다른 클래스의 데이터와 중첩되는 경우가 발생하여 노이즈를 생성할 수 있다.
SMOTE 동작 방식
SMOTE는 임의의 소수 클래스 데이터 사이에 새로운 데이터를 생성하는 방법이다.
- 소수 클래스의 데이터 중 특정 벡터와 가장 가까운 K개의 이웃 벡터를 선택한다.
- 기준 벡터와 뽑은 벡터 사이를 선분으로 잇는다.
- 선분 위의 임의의 점이 새로운 벡터(새로운 데이터)가 된다.
SMOTE - Python
설치
pip install -U imbalanced-learn
사용
from imblearn.over_sampling import SMOTE
# SMOTE 객체 생성
smote = SMOTE(random_state=42)
# 샘플링
X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train)
728x90
반응형
'TIL - 외 > 빅데이터' 카테고리의 다른 글
[머신러닝] XGBoost (Extreme Gradient Boosting) (0) | 2023.07.07 |
---|---|
[빅데이터] 분류 모형 결과 평가 2. ROC 곡선 (0) | 2023.07.07 |
[빅데이터] 분류 모형 결과 평가 1. 혼동 행렬 (0) | 2023.07.07 |
코호트 분석1 (0) | 2023.06.19 |
[머신러닝] 랜덤 포레스트 (Random Forest) (0) | 2023.05.24 |
댓글