개요
분류 문제, 특히 binary-classification 상황을 고려하자.
class 0, 1이 5 : 5 정도로 깔끔하게 나오는 상황은 분포가 균일하므로 학습에 문제가 없을 것이다.
그러나 이상탐지 문제처럼 하나의 클래스의 비중이 매우 낮아, 데이터가 균일하지 않은 상황에 도달할 수 있다. 이 때는 모델의 학습이 제대로 이루어지지 않을 수 있다.
이 문제를 해결하기 위해 나온 개념이 오버샘플링, 언더샘플링이다.
(사진 출처 : https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets)
언더샘플링
imbalanced class 문제를 해결하는 하나의 방법은 언더샘플링(undersampling)이다. 이는 다수가 속한 class의 데이터 수를 줄임으로서 데이터의 불균형을 해소한다.
문제는, 학습에 사용되는 전체 데이터 수를 급격하게 감소시키기 때문에, 오히려 성능이 떨어질 수 있다.
또한 정보의 가치가 높은 데이터도 버려질 가능성이 높아서, 유용한 데이터가 사라지는 위험이 존재한다.
오버샘플링
오버샘플링은 반대로, 낮은 비율의 class를 높은 비율의 class로 데이터의 수를 늘리면서, 데이터 불균형을 해소한다.
여기서 문제는 어떻게, 데이터를 생성할것인가?로 여러가지 방법을 생각해 볼 수 있다.
오버샘플링의 여러 방법
오버샘플링을 하는 여러 방법이 있는데, 다음 3가지를 확인해보자.
- RandomOverSampler
- ADASYN
- SMOTE
이들을 불러오는 방법은 다음과 같다.
from imblearn.over_samping import *
RandomOverSampler
이 방법의 경우, class가 적은 쪽의 데이터를 뻥튀기 시켜주는 방식이다. 동일한 위치에 동일한 데이터를 복사하는 방식이다. 그렇기 때문에, 오버피팅의 위험이 크다.
SMOTE
이는 k-NN (k-Nearest Neighborhoods)를 기반으로 하는 알고리즘적인 방법이다. 구체적 방법은 간단하다.
1. 소수 샘플을 기준으로, 각각의 샘플들의 knn을 찾는다.
2. 그 이웃들 사이에 선을 그은 후에, 그 사이의 무작위 점을 1개 생성한다.
(사진 출처 : https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets)
이렇게 할 경우, 완전하게 동일하지는 않으면서 샘플들 사이의 특성을 반영한 데이터가 생성된다. 따라서, 앞의 방법에 비해서는 오버피팅에 대해서는 강할 것이다.
ADASYN
SMOTE의 개선된 버전이다. 주위 데이터의 분포에 따라, 발생시킬 합성 데이터의 수를 좀 더 체계적으로 조절하게 된다.
실습
https://github.com/SeongwonTak/TIL_swtak/blob/master/Oversampling_methods.ipynb
'Archive > 데이터 분석 관련' 카테고리의 다른 글
[Data] 로지스틱 회귀분석의 해석 및 개선 (0) | 2021.08.23 |
---|---|
[Data] Ensemble - Gradient Boosting (0) | 2021.08.02 |
[Data] GridSearchCV (0) | 2021.06.14 |
[Data] 분류 알고리즘 - Decision Tree, Random Forest (0) | 2021.06.01 |
[Data] 로지스틱 회귀분석 (0) | 2021.06.01 |