SMOTE
#
Find similar titles
-
최초 작성자
jylee@insilicogen.com
- 최근 업데이트
Structured data
- Category
- Algorithm
Table of Contents
배경 #
인공지능 분류 모델링 시 테스트 데이터셋의 정확도를 저하하는 요인 중 하나는 클래스 불균형이다. 클래스 불균형은 모델링의 대상 데이터에서 각 클래스가 가지는 데이터의 양에서 차이가 큰 현상을 일컫는다. 예를 들어 성별 예측 모형을 생성하기 위한 데이터가 여성 100명, 남성 500명을 포함한다면, 이는 클래스 불균형이라고 할 수 있다. 이러한 불균형은 생성한 예측 모형이 특정 클래스(위에서는 남성)에 치우치게 만들거나, 적절한 평가를 어려워지게 하는 요인으로 작용한다. 이러한 클래스 불균형을 해결하기 위한 방법 중 하나가 SMOTE다.
Undersampling vs. Oversampling #
SMOTE는 대표적인 오버 샘플링 기법 중 하나이므로 먼저 오버 샘플링과 언더 샘플링의 개념을 알아보고자 한다. 언더 샘플링과 오버 샘플링은 클래스 불균형을 해결하기 위한 기법 중 하나이다.
그림 1. 샘플링 방법
언더 샘플링(Undersampling)은 불균형한 데이터셋에서 높은 비율을 차지하던 클래스(위에서 남성)의 데이터 수를 줄임으로써 클래스의 불균형을 해소하는 개념이다. 이 방법은 불균형을 해소할 수 있지만, 학습에 사용할 수 있는 전체 데이터 수를 감소시키고, 분류에 중요한 데이터를 학습 데이터에서 배제하여 성능 저하를 야기할 수 있다는 단점이 있다.
이에 반해 오버 샘플링(Oversampling)은 반대의 개념으로, 불균형한 데이터셋에서 낮은 비율을 차지하던 클래스(위에서 여성)의 데이터 수를 늘림으로써 불균형을 해소한다. 이 방법은 데이터 수가 감소한다는 그리고 중요한 데이터를 잃을 수 있다는 언더 샘플링의 단점을 보완할 수 있다. 하지만 존재하지 않는 데이터의 수를 늘리는 과정에서 과적합을 야기하여 성능을 저하할 수도 있다.
이 글에서는 오버 샘플링 기법 중 빈번하게 사용되는 SMOTE를 설명하고자 한다. 다만 샘플링 기법은 어느 하나가 더 좋다고 할 수 없고 기법마다 장단점이 존재하기에, 주어진 데이터와 과제에 적합한 기법을 활용하여 문제를 해결해야 한다.
SMOTE란? #
SMOTE는 Synthetic Minority Over-sampling Technique의 약자로, 대표적인 오버 샘플링 기법 중 하나이다. 이는 낮은 비율로 존재하는 클래스의 데이터를 최근접 이웃[k-NN 알고리즘] 알고리즘을 활용하여 새롭게 생성하는 방법이다. 오버 샘플링 기법 중 단순 무작위 추출을 통해 데이터의 수를 늘리는 방법도 존재하는데, 데이터를 단순하게 복사하기 때문에 과적합 문제가 발생하기도 한다. 이에 반해 SMOTE는 알고리즘을 기반으로 데이터를 생성하므로, 과적합 발생 가능성이 단순 무작위 방법보다 적다.
SMOTE 동작 방식 #
그림 2. SMOTE 동작 방식
SMOTE의 동작 방식을 간단히 설명하면, 임의의 소수 클래스 데이터 사이에 새로운 데이터를 생성하는 방법이라고 할 수 있다. SMOTE는 데이터 생성을 위해서 원본 데이터에 KNN[k-NN 알고리즘]을 활용하여 같은 클래스의 데이터를 임의로 증식한다. 이 방식을 차례대로 정리하면 다음과 같다.
- 소수 클래스의 데이터 중 특정 벡터(샘플)와 가장 가까운 k개의 이웃 벡터를 선정
- 기준 벡터와 선정한 벡터 사이를 선분으로 이음
- 선분 위의 임의의 점이 새로운 벡터(혹은 이 중 임의의 하나)
그림 3. SMOTE 상세 동작 원리
SMOTE 활용 방법 #
패키지 설치 방법 #
$ pip install -U imbalanced-learn
패키지 사용법 #
# 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)
실행 예시 #
그림 4. SMOTE 실행 예
마무리 #
오버 샘플링 수행 시, 소수였던 클래스의 데이터 수가 보완되면서, 정밀도와 재현율에 변화가 발생한다. 이 변화가 너무 크지 않도록 유의하여 오버 샘플링을 수행해야 한다. SMOTE는 앞서 언급한 바와 같이, 무작위로 오버 샘플링을 수행하는 방법보다는 과적합 가능성이 작다. 또한, 언더 샘플링에 비해 정보가 소실되지 않고, 데이터의 수가 줄어들지 않는다는 장점이 있다. 하지만 단점도 존재하는데, SMOTE의 작동 원리를 통해, 이 방법은 낮은 비율로 존재하는 클래스 외의 다른 클래스는 고려하지 않고 샘플링한다는 것을 알 수 있다. 따라서 생성된 데이터가 다른 클래스의 데이터와 중첩되는 경우가 발생하여 노이즈를 생성할 수도 있다. 위와 같은 단점에도 불구하고, SMOTE은 다양한 과제의 클래스 불균형 문제를 해결하기 위해 빈번하게 사용되고 있다. 이뿐만 아니라, borderline-SMOTE, SMOTE-ENN, SMOTE-Tomek 등 SMOTE과 다른 기법을 혼합한 여러 가지 방법이 소개되고 있다. SMOTE에 대한 이해를 기반으로 다양한 샘플링 기법의 작동 원리, 장단점을 파악하면, 해결하려는 불균형 문제에 적합한 방식을 선정할 수 있을 것이다.
참조 #
- https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-dataset
- https://joonable.tistory.com/27