Over-Sampling & Under-Sampling & SMOTE

2022. 2. 9. 14:24Data Analysis/Machine Learning

안녕하세요.

데이터 분석하는 랩장 대학원생, 석사 3학기 고니입니다.

 

이번 시간에는 클래스 불균형 자료와 다양한 샘플링 기법에 대해 이야기를 나누어보려고 합니다. 지난 포스팅에서 분류와 예측에 대해 이야기를 나누었던거 기억나시나요? 분류는 범주형 타겟변수를 대상으로 하는 것이었고, 예측은 연속형 타겟변수를 대상으로 하는 것이었습니다. 이번 시간에 다룰 내용은 바로 분류와 관련된 내용입니다. 클래스 불균형 자료란 무엇이며, 샘플링 기법은 또 무엇인지 하나씩 살펴보겠습니다!

# 클래스 불균형 자료(Imbalanced Data)

클래스 불균형 자료는 타겟변수의 클래스가 불균형한 자료를 의미합니다. 타겟변수의 클래스가 불균형하다는게 무슨 말인지 잘 이해가 되지 않으신다고요? 언제나 그랬듯이 이번에도 간단한 예시와 함께 살펴봅시다! 자, 여기에 이메일 데이터가 있습니다. 총 35통의 이메일이 있으며, 이들 중에 32통은 정상 메일이고 3통의 메일은 스팸 메일입니다.

35통의 이메일 (정상: 32통, 스팸: 3통)


만약 위 데이터를 통해 특정 메일이 정상 메일인지 스팸 메일인지를 분류하는 모델을 만든다고 가정해봅시다. 우리가 맞춰야 하는 정답 즉, 타겟변수는 메일의 종류(정상, 스팸)입니다. 그렇다면 타겟변수의 클래스는 무엇일까요? 바로 타겟변수가 가지는 범주들을 의미합니다. 즉, 정상 메일스팸 메일입니다. 자, 그러면 지금까지 우리가 알고 있는 내용을 아래와 같이 정리해봅시다.


「예시: 스팸 메일 분류 모델」
1. 타겟변수: 메일의 종류
2. 타겟변수의 클래스: 정상 메일, 스팸 메일
3. 타겟변수의 클래스 별 빈도: 정상 메일(32개), 스팸 메일(3개)


클래스 불균형 자료는 타겟변수의 클래스가 불균형한 자료를 의미한다고 말씀드렸습니다. 위의 예시는 타겟변수의 클래스 별 빈도가 정상 메일 32개, 스팸 메일 3개로 불균형한 자료입니다. 비율로 따지면 0.91 : 0.09로 불균형이 매우 심함을 알 수 있습니다. 바로 위와 같은 데이터를 클래스 불균형 자료라고 부릅니다. 그렇다면 비율이 어느정도 차이가 나면 불균형 자료라고 할 수 있을까요? 아쉽게도 이 부분에 대해서는 정확히 딱 수치가 정해져 있지는 않습니다. 불균형의 정도가 심한지 아닌지는 여러분의 주관에 따라 판단해주시면 됩니다.

그렇다면 클래스 불균형 자료가 가지는 문제점은 어떤 것이 있을까요?
바로 정확도의 역설(Accuracy Paradox)입니다.

 

# 정확도의 역설(Accuracy Paradox)

분류 알고리즘들은 정확도(Accuracy) 즉, 주어진 데이터를 얼마나 정확하게 잘 분류하는 지에 목적을 두고 있습니다. 이 때문에 위에서 살펴본 예시처럼 클래스의 비율이 크게 불균형한 자료의 경우, 치명적인 문제가 발생하게 됩니다. 무엇이 문제가 되는지 잘 모르시겠다고요? 차근차근 생각해봅시다.

클래스의 불균형이 심한 데이터로 모델을 학습시키게 되면 모델은 다수의 클래스에 대해서는 충분한 학습을 하게 되지만 소수의 클래스에 대해서는 충분한 학습을 하지 못하게 됩니다. 소수의 클래스에 대해 학습을 충분히 하지 못하는 것이 그렇게 큰 문제가 되냐고요? 문제가 됩니다. 모델이 왠만해서는 새로운 데이터들을 자기가 충분히 학습한 다수 클래스로만 분류하려고 하게 되기 때문입니다.

만약 우리가 만든 스팸 메일 분류 모델이 모든 메일을 정상 메일이라고 분류한다고 가정해봅시다. 즉, 스팸 메일을 하나도 탐지하지 못하고 모든 메일을 정상 메일이라고만 판단하는 것입니다. 아래의 예시처럼 16개의 새로운 메일에 대해 분류를 시켰더니 16개의 메일을 모두 정상 메일로 분류했습니다. 그 중 2개의 메일은 스팸 메일이었는데도 말입니다! 스팸 메일을 하나도 탐지하지 못하는 스팸 메일 분류 모델이 탄생했습니다.
그러나 이 모델의 정확도를 살펴보면 88%라는 굉장히 높은 성능이 나옵니다. 비록 스팸 메일은 하나도 못맞췄지만 정상 메일들은 모두 정상 메일이라고 잘 맞췄기 때문입니다. 이러한 현상을 두고 정확도의 역설이라고 합니다. 그렇다면 결국 정확도가 높으니 이 모델은 좋은 모델일까요? 그렇지 않습니다.

 


위에서 말씀드렸던 예시처럼 스팸 메일을 분류하거나, 혹은 암 환자를 진단하는 등의 대부분의 문제에서는 다수 클래스보다 소수 클래스를 정확히 잘 분류하는 것이 중요합니다. 정상인 사람에게 암 환자라고 오진을 하는 것보다 암 환자에게 정상이라고 오진을 하는 것이 훨씬 더 위험한 상황입니다. 따라서 정상인에 대한 분류 정확도가 조금 떨어지더라도 암환자에 대한 분류 정확도를 높이는 것이 더 중요한 이슈입니다. 이를 위해서는 소수 클래스에 대해서도 다수 클래스만큼 학습을 할 수 있도록 만들어줄 필요가 있습니다.

이를 위해 탄생한 기법이 바로 샘플링(Sampling) 기법입니다.
이번 포스팅에서는 대표적인 네 가지 샘플링 기법에 대해 함께 알아보겠습니다.
1. Over-Sampling

2. Under-Sampling

3. Over&Under-Sampling

4. SMOTE

 

# Over-Sampling

Over-Sampling은 말 그대로 데이터의 수를 Over하게 만드는 기법입니다. 샘플링을 하는 목적은 다수 클래스와 소수 클래스의 비율을 맞춰주기 위함이라고 했습니다. 따라서 Over-Sampling은 소수 클래스의 수를 기존보다 Over하게 만들어서 다수 클래스의 수만큼 맞춰주는 것입니다. 어떻게 그럴 수가 있냐고요? 방법은 간단합니다. 소수 클래스의 데이터를 다수 클래스의 데이터 수만큼 랜덤 복원 추출하는 것입니다.

Over-Sampling


위의 경우처럼 어떤 임의의 데이터의 타겟변수가 다수 클래스 10,000개, 소수 클래스 100개로 이루어져 있다면 소수 클래스의 데이터를 랜덤으로 복원추출해서 1만 개까지 늘리는 것입니다. 이렇게 하면 총 데이터의 수는 10,100개에서 20,000개로 늘어나고 타겟변수의 두 클래스 모두가 10,000개로 동일한 비율을 갖게 됩니다.


# Under-Sampling

Under-Sampling은 말 그대로 데이터의 수를 Under하게 만드는 기법입니다. Over-Sampling과는 달리 Under-Sampling은 다수 클래스의 수를 기존보다 Under하게 만들어서 소수 클래스의 수만큼 맞춰주는 것입니다. 다수 클래스의 데이터를 소수 클래스의 수만큼 랜덤하게 추출하여 두 클래스가 동일한 비율을 갖게 합니다. 그러나 Under-Sampling은 다수 계급에 대해 많은 양의 정보가 유실된다는 단점이 있습니다.

 

Under-Sampling


위의 경우처럼 어떤 임의의 데이터의 타겟변수가 다수 클래스 10,000개, 소수 클래스 100개로 이루어져 있다면 다수 클래스의 데이터를 랜덤으로 추출해서 100개만 선택하는 것입니다. 이렇게 하면 총 데이터의 수는 10,100개에서 200개로 줄어들고 타겟변수의 두 클래스 모두가 100개로 동일한 비율을 갖게 됩니다.

# Over&Under-Sampling

Over&Under-Sampling은 말 그대로 Over-Sampling과 Under-Sampling의 특징을 반반씩 섞은 기법입니다. 다수 클래스와 소수 클래스 중 한 쪽만을 무작정 늘리거나 줄이는 대신, 소수 클래스에는 Over-Sampling을 적용하고 다수 클래스에는 Under-Sampling을 적용해서 두 클래스가 동일한 비율을 갖게 합니다. 각각의 클래스의 빈도가 두 클래스의 빈도의 평균만큼 되도록 샘플링을 수행하면 됩니다.

Over&Under-Sampling


위의 경우처럼 어떤 임의의 데이터의 타겟변수가 다수 클래스 10,000개, 소수 클래스 100개로 이루어져 있다면 두 클래스의 빈도의 평균은 5,050입니다. 따라서 다수 클래스의 데이터는 랜덤으로 추출해서 5,050개만 선택하고, 소수의 클래스는 5,050개가 될 때까지 랜덤 복원 추출을 합니다. 이렇게 하면 총 데이터의 수는 10,100개로 기존과 동일하게 유지되면서 타겟변수의 두 클래스 모두가 5,050개로 동일한 비율을 갖게 됩니다.

# SMOTE

SMOTE 기법은 Over-Sampling과 마찬가지로 소수 클래스의 개체수를 늘리는 방법입니다. Over-Sampling과의 중요한 차이점은 기존의 데이터를 랜덤으로 복원 추출하는 것이 아니라 기존의 데이터들을 적절하게 조합하여 새로운 데이터를 만들어낸다는 것입니다. 새로운 데이터를 만든다는 것이 핵심입니다. 어떻게 그런 일이 가능할까요?

우선 소수 클래스의 데이터 중 임의의 데이터 한 개를 기준으로 잡고 해당 데이터와 가장 가까운 거리에 있는 k개의 데이터를 찾습니다. 이때 k개의 데이터는 모두 소수 클래스의 데이터입니다. 그리고 선별된 데이터들과 처음 기준으로 잡았던 데이터와의 연결선 상에 새로운 데이터를 만들어냅니다. 이 과정을 계속해서 반복하는 것입니다. 이렇게 새로운 데이터를 하나씩 만들어가며 소수 클래스의 데이터 수를 늘립니다.

역시 글로만 보면 이해가 쉽지 않죠? 아래의 그림과 함께 살펴보면 이해가 쉬울실겁니다!😎

SMOTE


위와 같은 데이터가 있다고 가정해봅시다. 7개의 동그라미가 소수 클래스, 16개의 네모가 다수 클래스입니다. 자, 이제 소수 클래스의 수를 늘려봅시다. 우선, 소수 클래스 중 하나를 기준으로 잡습니다. 그리고 기준과 가장 가까운 k개의 소수 클래스 데이터를 찾습니다. 위의 예시에서는 k=5라고 가정해보았습니다. 이제 기준으로 잡은 데이터와 k=5개의 데이터와의 연결선 상에 가상의 데이터를 새롭게 만드는 것입니다. 이제 새로운 기준 데이터를 잡아가면서 위 과정을 계속해서 반복하는 것입니다. 이해가 되셨을까요?👍

 

이번 포스팅에서는 클래스 불균형 자료와 그 문제점을 해결하기 위한 다양한 샘플링 기법에 대해 알아보았습니다. 타겟변수의 클래스 불균형을 가진 데이터 즉, 범주형 타겟변수를 가지는 분류 모델에 적용하는 기법이라는 점을 꼭 기억해주세요! 제 글에 대해 추가로 궁금하신 점이나 지적해주실 부분이 있으시다면 언제든지 댓글 부탁드립니다!

'Data Analysis > Machine Learning' 카테고리의 다른 글

의사결정나무(Decision Tree)  (0) 2022.02.24
분류 vs 예측  (2) 2022.02.09
지도학습 vs 비지도학습  (0) 2022.02.08
인공지능 vs 머신러닝 vs 딥러닝  (0) 2022.02.07