본 포스트는 고려대학교 김성범 교수님의 Youtube 강의 "[핵심 머신러닝] 불균형 데이터 분석을 위한 샘플링 기법"을 참고하였습니다. Boosting과 GAN은 별도로 다룰 예정입니다.

불균형 데이터 문제

모델을 학습시킴에 있어 클래스 간 샘플 수의 차이가 너무 크게 되면 분류기는 더 많은 샘플이 존재하는 클래스로 편향(bias, 바이어스)된다. 이 경우 전체적인 정확도는 높게 나올지라도 샘플 수가 적은 클래스에 대한 재현율(recall)이 작아지게 된다. (즉, 특정 클래스에 오버피팅 된다.) 이러한 문제를 데이터 불균형 문제 혹은 비대칭 문제라고 부른다.

암환자를 분류하는 문제를 생각해보자. 암에 걸린 사람보다는 암에 걸리지 않은 사람이 더 많기 때문에 암환자로부터 얻어진 샘플이 그렇지 않은 경우의 샘플보다 훨씬 적을 수 있다. 이 경우 데이터 불균형 문제를 해결하지 않고 학습하게 되면 분류기는 정상인의 샘플에 더 많은 가중치를 두고 학습할 것이고, [그림 1]과 같이 분류 경계면에 바이어스가 존재하게 되어 암환자를 정상인으로 잘못 분류할 수 있게 된다. 이러한 문제는 불량품과 양품을 구분하는 경우에도 발생할 것이다. 즉, 현실 세계에서 우리가 풀고자하는 많은 문제들은 클래스 간 데이터 불균형 문제가 항상 있으며, 보통은 더 중요하게 여겨지는 클래스(예를 들면, 암환자 클래스, 불량품 클래스)의 데이터가 더 적은 것이 일반적이다.

text [그림 1] 클래스 간 데이터 불균형에 의한 오분류 예시

데이터 불균형이 심한 경우 모델의 일반화 성능을 이끌어내기 어렵기 때문에 데이터 불균형 문제를 먼저 해결하고 모델을 학습시켜야 한다. 더 많은 데이터를 수집하여 이 문제를 해결하면 좋겠지만 그렇지 못할 경우, 불균형 데이터 문제를 완화할 수 있는 기법들이 무엇이 있는지 알아보자.


해결 방안

클래스 간 데이터 불균형을 해결하는 방법들은 다양한데 크게 아래 [그림 2]와 같이 나눌 수 있다.

  • 언더 샘플링
    - 다수 범주의 데이터를 줄여서 소수 범주의 샘플 수와 비슷하게 만든다.
    - 다수 범주 관측치 제거로 계산 시간 감소
    - 데이터 클랜징으로 클래스 오버랩 감소
    - 데이터 제거로 인한 정보 손실 발생 (중요 정보가 삭제될 시 치명적)
  • 오버 샘플링
    - 소수 범주의 데이터를 증폭시켜서 다수 범주의 샘플 수와 비슷하게 만든다.
    - 정보 손실이 없다.
    - 보통 언더 샘플링보다 분류 정확도가 높다.
    - 과적합 가능성이 있고, 계산 시간이 오래 걸리며, 노이즈나 이상치에 민감하다.

text [그림 2] 불균형 데이터 해결 방안 ([1] 재구성)

언더 샘플링 기법들

Random Undersampling

  • 다수 범주의 샘플들을 무작위로 선택
  • 샘플 선택에 아무런 제약이 없기 때문에 처리 시간이 빠르다.
  • 무작위 선택으로 인해 샘플링 결과에 따라 분류 경계면의 변동이 심하다.

    text [그림 3] Random Undersampling (샘플링 할 때마다 분류 경계가 달라질 수 있음)

  • 두 범주에서 하나씩 추출한 포인트를 각각 xix_ixjx_j라 할 때, d(xi,xk)<d(xi,xj)d(x_i, x_k) < d(x_i, x_j) 또는 d(xj,xk)<d(xi,xj)d(x_j, x_k) < d(x_i, x_j)가 되는 관측치 xkx_k가 없는 경우, 두 샘플 xix_ixjx_j가 Tomek Link를 형성한다고 한다.
  • Tomek link를 형성하는 두 샘플 중 하나는 노이즈이거나 둘 다 경계선 근처에 있다.
  • Tomek link를 형성한 샘플 중 다수 범주에 속한 샘플을 제거한다.
  • [그림 4]는 Tomek link의 예제를 보여준다. 좌측과 같은 데이터 세트에 대하여 Tomek link를 형성하면 가운데 그림과 같이 된다. Tomek link를 형성한 파란색 샘플들을 제외하면 우측 그림과 같이 되는데 샘플을 제외하기 이전보다 두 범주의 구분이 보다 명확히 됨을 알 수 있다. 따라서 두 범주 간의 분류 경계면을 찾는데 도움이 된다.
  • Tomek link는 다수 범주의 데이터의 중심 분포는 거의 유지하면서 분류 경계를 조정하는 효과를 얻기 때문에 random undersampling에 비해 정보의 유실을 크게 줄일 수 있지만, 제거되는 샘플이 한정적이기 때문에 큰 언더 샘플링의 효과를 얻을 수는 없다.

text [그림 4] Tomek Link 적용 예시 (source: [4])

Condensed Nearest Neighbor (CNN)

  • 본래 KNN 알고리즘을 사용하기 위한 목적으로 데이터 세트의 크기를 줄이기 위해 고안되었다.
  • 다수 범주에서는 하나의 샘플을 무작위로 선택하고 동시에 소수 범주에서는 모든 샘플을 선택하여 서브 데이터를 구성한다.
  • 원데이터를 서브 데이터를 기준으로 1-nearest neighbor(1-NN) 분류한다.
    - 서브 데이터를 구성할 때, 다수 범주에서 하나의 샘플을 선택하였기 때문에 반드시 1-NN을 사용하여야 한다. (그렇다면 3개의 샘플을 선택하면 3-NN을 해도 될까??)
  • 다수 범주에서 소수 범주로 분류된 샘플과 서브 데이터만을 남기고 나머지 샘플은 삭제한다.
  • 위 과정을 통해 다수 범주의 데이터는 다운 샘플링 되며, 이렇게 얻어진 샘플들을 이용해 분류 경계면을 학습한다.
  • 위 과정을 도식적으로 나타내면 아래 [그림 5]와 같다.

text [그림 5] Condensed Nearest Neighbor의 적용 예시

One-Sided Selection (OSS)

  • Tomek link + CNN
  • Tomek link로 다수 범주의 데이터를 제거 후 CNN을 사용하여 다시 한 번 언더 샘플링 수행한다.
    - Tomek link로 클래스의 경계면에 있는 데이터를 제거하고 CNN으로는 경계면에서 멀리 떨어진 다수 범주의 데이터를 제거한다.
    - Tomek link와 CNN의 한계를 상호 보완

text [그림 6] One-Sided Selection의 적용 예시 (source: [6])

오버 샘플링 기법들

Resampling

  • 소수 범주의 데이터를 단순히 복제하여 데이터의 수를 늘린다.
  • 단순 복제이므로 새로운 데이터를 생성하는 것은 아니다. 그렇지만 분류 경계면을 결정할 때 소수 클래스에 대한 가중치가 증가하기 때문에 성능 향상에 도움이 된다.
  • 소수 범주의 데이터 세트가 전체 모집단을 대표한다는 보장이 없기 때문에 소수 범주에 과적합이 발생할 가능성이 있다.
  • 아래 [그림 7]의 좌측은 원시 데이터이고 우측은 Resampling된 데이터 세트이다. 우측 그림의 숫자가 의미하는 바는 해당 샘플이 복제된 횟수이다.

text [그림 7] Resampling의 적용 예시 (source: [6])

Synthetic Minority Oversampling TEchnique (SMOTE)

  • 소수 범주의 데이터를 단순 복제하는 Resampling 기법과는 다르게 소수 범주의 데이터를 가상으로 만들어 낸다.
  • [그림 8]의 좌측과 같은 원시 데이터 세트가 있다고 할 때, SMOTE는 다음과 같은 절차로 이루어진다.
    1. 소수 범주의 데이터 중 무작위로 하나를 선택한다. 선택된 데이터를 XX라 하자.
    2. 무작위로 선택된 데이터를 기준으로 KNN을 수행한다. (k>1k>1, [그림 8]에서는 k=5k=5)
    3. 선택된 K-nearest neighbor 중 하나를 임의로 선택한다. 선택된 데이터를 X(NN)X(NN)이라고 하자. ([그림 8]의 우측 그림에서 보라색으로 표시)
    4. 다음 수식을 통해 가상의 데이터를 생성한다. 여기서 μ\mu은 0~1사이의 균일 분포에서 추출된 임의의 값이다.
    XSynthetic=X+μ(X(NN)X)X_{Synthetic} = X+\mu\big(X(NN)-X\big)
    위 식의 의미는 XXX(NN)X(NN)를 잇는 라인의 임의의 위치에 가상의 데이터를 생성한다는 것이다.
    5. 소수 범주 내 모든 데이터에 대하여 1~4과정을 반복한다.

text [그림 8] SMOTE의 적용 예시

Borderline SMOTE

  • 범주 간의 경계부분에만 오버 샘플링을 하는 것이 분류모델을 학습시킬 때 더 도움이 될 것이라는 생각에서 제안되었다.
  • 소수 클래스 xix_i에 대해서 kk개 주변을 탐색하고 kk개 중 다수 클래스의 수를 확인한다. 다수 클래스의 수를 mm이라고 할 때,
    - k=mk=m: Noise 관측치 (borderline이 아니다.)
    - k/2<m<kk/2 < m < k: Danger 관측치 (borderline이라고 판단)
    - 0mk/20 \leq m \leq k/2: Sfe 관측치 (borderline이 아니다.)
  • 즉, kk개 모두 다수 클래스는 아니면서 절반 이상은 다수 클래스인 경우 xix_i가 borderline에 위치해 있다고 판단한다.
  • Danger 관측치에 대하여만 SMOTE 적용한다.
  • SMOTE 적용할 때 KNN 알고리즘 적용시에는 소수 관측치의 모든 데이터를 사용한다.
  • 결과적으로 borderline 근처에만 새로운 데이터들이 생기게 된다.

text [그림 9] Borderline SMOTE의 적용 예시 (source: [7])

ADAptive SYNthetic sampling approach (ADASYN)

  • Borderline SMOTE와 유사하지만 샘플링하는 개수를 위치에 따라 다르게 적용한다.
  • 샘플링 개수를 정하는 규칙과 전체적인 알고리즘 과정은 다음과 같다. ([그림 10] 참고)
    - ii번째 소수 클래스 데이터 xix_i를 기준으로 KNN 적용 후 다수 클래수의 수(mim_i)를 센다. 그리고 다수 클래스의 비율을 ri=mi/kr_i=m_i/k라고 정의한다.
    - 모든 ii에 대한 rir_i의 계산이 끝나면 rir_i의 합이 1이 되도록 정규화한다.
    - 정규화 된 rir_ir^i\hat{r}_i라 하고, 다수 클래수와 소수 클래스 간의 데이터 개수 차이를 GG라고 하면, 앞에서 계산된 r^i\hat{r}_iGG를 곱하고, 반올림한다. 이렇게 주어진 숫자가 xix_i를 기준으로 오버샘플링 될 데이터의 개수가 된다.
    - 모든 ii에 대하여 계산된 개수만큼 SMOTE 알고리즘을 적용하여 오버샘플링을 수행한다.
  • ADASYN은 Borderline 뿐만 아니라 다수 클래스 쪽에 있는 소수 클래스 데이터 주변에도 많은 샘플을 생성한다.

text [그림 10] ADASYN의 적용 예시 (source: [1])


참고 자료

[1] https://www.youtube.com/watch?v=Vhwz228VrIk&list=PLpIPLT0Pf7IoTxTCi2MEQ94MZnHaxrP0j&index=7
[2] https://shinminyong.tistory.com/34
[3]https://datascienceschool.net/03%20machine%20learning/14.02%20%EB%B9%84%EB%8C%80%EC%B9%AD%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%AC%B8%EC%A0%9C.html
[4] https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets
[5] https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm
[6] Gretel Fernández, "Balancing Techniques," (silde: https://slideplayer.com/slide/13128031/)
[7] Han, Hui, Wen-Yuan Wang, and Bing-Huan Mao. "Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning." International conference on intelligent computing. Springer, Berlin, Heidelberg, 2005.

profile
연구와 개발의 중간 어디쯤

0개의 댓글