불균형 데이터란?
불균형 데이터란, 정상 범주의 관측치 수와 이상 범주의 관측치 수의 차이가 크게 나타나는 데이터를 말한다. 즉, 클래스 별 관측치의 수가 현저하게 차이가 나는 데이터를 불균형 데이터라고 말한다. 불균형 데이터가 문제가 되는 이유는 다수의 데이터를 정확히 분류하는 것보다 일반적으로 소수의 데이터를 정확히 분류하는 것이 중요하지만 다수의 데이터에 편향된 분류 경계선이 형성되어 소수의 데이터를 정확히 찾아내지 못하기 때문이다.
또한 다음과 같은 `정오행렬(Confusion Matrix)`가 있을 때, 이상(소수) 데이터를 제대로 예측하지 못했음에도 예측 정확도가 높게 나오는 모델 성능에 대한 왜곡이 있을 수 있다.
불균형 데이터의 해결 방안 크게 두 가지로, 데이터를 조정해서 이를 해결하는 방법과 모델을 조정해서 해결하는 방법이 있다.
- 데이터를 조정해서 해결 : 샘플링 기법 → `Sampling Method`
- 모델을 조정해서 해결 : `비용 기반 학습(Cost Sensitive Learning)`, `단일 클래스 분류기법(Novelty Detection)`
언더샘플링(Undersampling)
샘플링 기법은 크게 두 가지로 나눌 수 있다. 먼저 다수 범주를 줄여서 소수 범주와 비슷하게 만드는 `언더샘플링(Undersampling)`, 그리고 소수 범주의 데이터를 증폭시켜 다수 범주의 데이터와 비슷하게 만드는 `오버샘플링(Oversampling)`이 있다.
Random Undersampling
`Random Undersampling`은 다수 범주에서 무작위로 샘플링을 하는 방법이다. 이는 무작위로 샘플링을 수행하기 때문에, 수행 때마다 샘플링 결과가 다르게 나온다. 따라서 샘플링하기 매우 쉬운 방법이지만 분류 경계선이 매번 다르게 나온다는 단점이 있다.
Tomek Links
`Tomek Links`는 다수 범주의 점 하나와 소수 범주의 점 하나를 연결하였을 때 그 거리보다 가까운 다른 관측치가 없는 경우를 말한다. 이 경우 둘 중 하나는 노이즈이거나 둘다 경계선 근처에 있는 경우이다. 이렇게 Tomek Links를 형성한 후 다수 범주에 속한 관측치를 제거하여 Undersampling을 수행한다.
CNN(Condensed Nearest Neighbor)
`CNN(Condensed Nearest Neighbor)`은 마찬가지로 undersampling하는 기법으로, 소수 범주 전체와 다수 범주에서 무작위로 하나의 관측치를 선택하여 서브데이터를 구성한다. 이후 `1-NN` 알고리즘을 통해 원데이터를 분류한다. 이후 정상 분류된 다수 범주 관측치를 제거하여 undersampling을 수행한다.
여기서 확인할 점은, CNN 기법을 통해 undersampling을 수행하는 경우 반드시 1-NN 알고리즘을 통해 원데이터를 분류해야한다는 점이다. 실제 K를 1이 아닌 3이라고 가정해서 3-NN 알고리즘을 통해 분류를 수행하면 다수 범주를 1개만 선택하여 서브데이터를 구성하기 때문에 모든 데이터가 소수 범주로 변하여 의미가 없어진다.
OSS(One-Side Selection)
`OSS(One-Side Selection)`는 기존에 Tomek Links와 CNN을 합친 Undersampling 기법이다. 즉, 분류경계선 쪽의 데이터를 Tomek Links를 통해 제거하고, 다수 범주의 데이터를 CNN을 통해 제거하여 Undersampling을 수행한다.
Undersampling을 요약하자면, 먼저 다수 범주 관측치를 제거하여 계산 시간을 감소시킬 수 있고 데이터 클렌징을 통해 클래스 오버랩을 감소시킬 수 있다는 장점을 가지고 있다. 그러나 데이터를 제거하기 때문에 그로 인해 정보 손실이 발생할 수 있다는 단점이 있다.
오버샘플링(Oversampling)
Resampling
`Resampling`은 소수 범주의 데이터를 새로 생성하기보단 그대로 복제하여 다수 범주의 관측치 수와 비슷해지도 관측치를 늘리는 기법이다. 이를 데이터 형태로 확인하면 다음과 같다.
SMOTE(Synthetic Minority Oversampling TEchnique)
오버샘플링의 단점은 오히려 소수 범주의 데이터에 과적합이 발생할 수 있다는 것이다. 이를 보완하기 위해서 소수 범주에 대해 가상의 관측치를 생성하여 해결하고자 하는 것이 `SMOTE(Synthetic Minority Oversampling TEchnique`) 기법이다. SMOTE는 먼저 소수 범주에서 하나의 데이터를 임의로 선택하고, 해당 데이터와 가장 가까운 K개의 소수 범주 NN(Nearest Neighbor)를 선택한다. 이후 NN으로 선택된 소수 범주 관측치 중 하나를 선택하고 기존에 선택된 데이터와 함께 두 관측치에 대해 다음 식을 통해 가상의 관측치를 생성하게 된다. 이러한 계산을 소수 범주 내 모든 관측에 대해 반복하여 가상 관측치를 생성한다.
SMOTE는 앞서 Undersampling 기법 중 하나였던 CNN과는 다르게 K를 1로 설정하면 안되며, 반드시 2 이상으로 지정해야 한다. K를 1로 설정하는 경우 선택된 1-NN 관측치와 실제 관측치 사이에서만 데이터가 계속 생성되어 다음과 같은 형태가 나타날 수 있다.
Borderline-SMOTE
`Borderline-SMOTE`는 소수 범주와 다수 범주의 분류 모델의 성능을 높여줄 수 있는 경계를 나타내는 Borderline 부분에서만 SMOTE를 수행하는 기법이다. Borderline-SMOTE은 먼저 Borderline을 찾아야 한다. 이를 위해 소수 범주의 데이터에 대해서 K개의 주변을 탐색하여 K개 중 다수 범주의 수를 확인한다. 만약 K=5로 지정했을 경우 다수 범주의 데이터 수가 0개라면 해당 소수 범주 관측치는 Borderline이 아니며 이를 `Safe` 관측치라고 한다. 하지만 다수 범주의 데이터 수가 많이 있을 경우 Borderline이라고 하며 `Danger` 관측치라고 표현한다. 여기에 다수 범주의 데이터 수가 5개라고 나오면 이는 Borderline이 아니며 `Noise`관측치라고 한다. Safe, Danger, Noise 관측치를 구분하는 기준은 다음과 같다. 구분 이후에 Danger 관측치에 대해서만 SMOTE를 수행한다.
ADASYN(Adaptive Synthetic Sampling Approach)
`ADASYN`은 위치에 따라 샘플링하는 개수를 다르게 구성하는 oversampling 기법이다. 각 위치마다의 샘플링 개수를 지정하기 위해 새로운 지표를 활용하는데, 이는 각 소수 클래스 주변에 얼만큼 많은 다수 클래스 관측치가 있는가를 정량화 한 지표이다. 이를 수식으로 나타내면 다음과 같다. 이는 모든 소수 클래스에 대해 주변을 K개만큼 탐색하고 그 중 다수 클래스 관측치의 비율을 계산하는 것이다.
이후에는 모든 r 값을 더한 값으로 스케일링을 수행한 이후 생성하고자 하는 개수 G만큼 곱한다. 여기서 G는 주로 다수 클래스의 개수에서 소수 클래스 개수를 뺀 값이다. 이를 통해 각 소수 클래스를 시드(seed)로 하여 할당한 개수만큼 `SMOTE`를 적용하여 데이터를 생성하게 되고, 따라서 r 값의 정도에 따라 생성되는 샘플의 수가 다르다. 결론적으로, ADASYN은 소수 클래스 주변의 다수 클래스의 수에 따라 유동적으로 Oversampling하는 개수를 정하여 생성이 가능한 기법으로 Borderline 뿐만 아니라 다수 클래스 쪽에 있는 소수 클래스에 더 집중하여 데이터를 생성한다.
이러한 SMOTE, Borderline SMOTE, ADASYN 3가지의 방법에 따라 다른 형태의 데이터가 생성된다.
Generative Adversarial Nets(GAN)
`Generative Adversarial Nets(GAN)`을 통해서도 Oversampling을 수행할 수 있다. GAN의 작동 방식은 다음과 같다.
- 무작위로 노이즈를 생성 → N(0,1)
- `생성자(Generator)`를 통해 가짜 샘플을 생성
- `구분자(Discriminator)`에서 진짜와 가짜 샘플을 판별
- 반복적인 생성자 업데이트를 통해 진짜 샘플과 유사하게 데이터를 생성
Oversampling은 정보 손실이 없으며 대부분의 경우 Undersampling에 비해 높은 분류 정확도를 보인다. 그러나 과적합의 가능성이 있으며 계산 시간이 증가하고, 노이즈 또는 이상치에 민감하다는 단점을 가지고 있다.
이 포스팅은 고려대학교 산업경영공학부 김성범 교수님 유튜브의 핵심 머신러닝 강의를 듣고 작성한 글입니다.