ML/Articles

Handling imbalanced datasets in machine learning

a292run 2020. 7. 28. 13:37
반응형

이글은 towardsdatascience.com의 내용임. (링크)

Handling imbalanced datasets in machine learning

Introduction

    회사에서 다양한 측정을 바탕으로 제품이 결함이 있는지 아닌지를 예측하는 모델을 만들라는 요청이 있다고 가정해 보자. 선호하는 분류기를 사용하여 92.6%의 정확도를 얻었다.

    회사는 깜짝 놀라면서 더이상의 테스트 없이 모델 사용을 결정한다. 몇주 후, 회사에서는 모델이 쓸모없음을 강조했다. 정말로 모델은 생산에서 사용된 이후 결함이 있는 어떤 제품도 찾지 못했다.

    얼마간의 조사 후, 회사의 제품 중 약 3.8%만이 결함이 있고 모델은 항상 '결함없음'만을 판단하여 결국 96.2%의 정확도가 되었다는 것을 알았다. 이런 종류의 순진한(naive) 결과는 불균형(imbalanced) 데이터셋으로 작업했기 때문이다. 이 글의 목표는 불균형 데이터를 가진 분류문제 해결에서 사용될 수 있는 다른 방법을 알아보는 것이다.

Outline

    우선 순진한 행동(Naive behaviour)를 탐지하는데 도움이 되는 다른 평가 지표(metrics)에 대한 개요를 살펴보자. 그리고 데이터셋을 재작업하는 다양한 방법을 알아보고 이 방법들이 잘못될 수 있음 또한 살펴보자. 마지막으로 문재를 재작업하는 것은 대부분 가장 좋은 방법임을 본다.

    $\infty$ 기호로 표시되는 몇몇 내용은 좀더 수학적인 내용을 포함하고 이 글의 전체적인 이해에 끼치는 영향없이 건너 뛸 수 있다. 또한 이후 대부분에서 두개의 분류를 가진 분류에 대해 살펴본다. 하지만 추론은 복수 분류로 쉽게 확장될 수 있다.


순진한 행동(naive behaviour) 탐지

    여기서는 "순진한 행동"의 종류를 확실하게 탐지하기 위해 훈련된 분류기를 평가하는 다른 방법을 되짚어본다. Introduction의 예처럼, 중요하지만 피할 수 없는 지표인 정확도는 잘못될 수 있다 그래서 주의깊게 그리고 다른 지표와 함께 사용되어야만 한다. 그러면 어떤 다른 도구가 쓰여질 수 있는지를 살펴보자.

Confusion matrix, Precision, recall and F1

    분류 문제를 다룰때 항상 사용되는 훌륭하면서 간단한 지표는 혼잡 매트릭스(Confusion matrix)이다. 이 지표는 모델이 얼마나 잘 동작하는지에 대한 흥미로운 개요를 제공한다. 따라서, 이는 어떤 분류모델 평가를 위한 훌륭한 시작점이다. 아래 그림에서 혼잡 매트릭스에서 도출할 수 있는 대부분의 지표를 정리해보자.


The confusion matrix and the metrics that can be derived from it.

    이 지표에 대해 간단히 살펴보자.

  • 모델의 정확도(accuracy)는 올바른 예측의 수를 예측한 전체 수로 나눈다.
  • 분류의 정밀도(precision)는 모델이 속한 분류에 대한 대답했을 때 그 결과를 얼마나 신뢰할 수 있는가를 정의한다.
  • 분류의 재현율(recall)은 모델이 얼마나 잘 해당 분류를 탐지할 수 있는가를 나타낸다.
  • 분류의 F1 점수(F1 score)는 정밀도와 재현율의 조화평균(hamonic mean)으로 구해진다$(2 \times \text{precision} \times \text{recall} \div (\text{precision} + \text{recall}))$. 이는 하나의 지표로 정밀도와 재현율을 합친다.

    주어진 분류에 대해 재현율과 정밀도의 다른 조합은 아래 의미를 갖는다.

  • 높은 재현율 + 높은 정밀도

    : 분류(class)는 모델에 의해 완벽하게 처리된다.
  • 낮은 재현율 + 높은 정밀도

    : 모델이 분류를 잘 탐지하지 못하지만 탐지한 경우에는 높은 신뢰도를 갖는다.
  • 높은 재현율 + 낮은 정밀도

    : 분류가 잘되지만 모델이 다른 분류 또한 포함한다.
  • 낮은 재현율 + 낮은 정밀도

    : 모델이 분류를 잘 하지 못한다.

    서론의 예제에서 아래와 같이 10,000개의 제품에 대한 혼잡 매트릭스를 만들 수 있다.


The confusion matrix of our introductory example. Notice that the “defective” precision can’t be computed.

    언급된 바와 같은 정확도는 96.2%이다. 결함이 없는 분류의 정밀도는 96.2%이고 결함이 있는 분류의 정밀도는 계산할 수 없다 (분모가 0). 결함이 없는 분류의 재현율은 1.0으로 완벽하다.(모든 결함이 없는 제품은 레이블링 된다.). 하지만 결함이 있는 분류의 재현율은 0.0으로 나쁜 경우이다.(결함이 있는 제품은 탐지되지 않는다.). 따라서 모델은 이 분류(class)에 대해서는 잘 동작하지 않는다고 결론지을 수 있다. F1 점수는 결함이 있는 제품에 대해서는 계산할 수 없고 결함이 없는 제품에 대해서는 0.981이다. 이 예에서 혼잡 매트릭스를 보면 모델 또는 목표를 다시 생각해야 할 수도 있다. 이는 필요없는 모델을 사용하는 것을 막을 수 있다.

ROC and AUROC

    또다른 흥미로운 지표는 주어진 분류(이후에 C로 나타나는)에 대해 정의된 ROC(Receiver Operating Characteristic) 곡선이다.

    점 x가 있다고 가정하면, 이 점이 $C:P(C | x)$에 속할 확률을 출력하는 모델을 갖는다. 이 확률에 기초하여 $P(C|x) \geqq T$여야만 x가 분류 C에 속한다는 결정 규칙을 정의할 수 있다. 여기서 T는 결정 규칙을 정의하는 임계치(threshold)이다. 만약 T=1이면, 모델이 100% 확신해야만 점이 C에 속하는 것으로 레이블링된다. 만약 T=0이면 모든 점이 C에 속하는 것으로 레이블링된다.

    임계치 T의 모든 값은 점(false positive, true positive)을 생성하고 그렇게 되면 ROC 곡선은 T가 1에서 0으로 변할 때 생성된 점의 앙상블(ensemble)로 설명되는 곡선이다. 이 곡선은 (0, 0)에서 시작해서 (1,1)까지 증가한다. 훌륭한 모델은 0에서 1까지 빠르게 증가하는 곡선을 갖는다.(단지 작은 정밀도만이 높은 재현율을 갖기위해 희생되어야 한다는 것을 의미한다.)


Illustration of possible ROC curves depending on the effectiveness of the model. On the left, the model has to sacrifice a lot of precision to get a high recall. On the right, the model is highly effective: it can reach a high recall while keeping a high precision.

    ROC곡선에 기초하여 더 쉽게 사용하고 모델을 평가하기 위한 다른 지표를 구축할 수 있다. AUROC(Area Under the ROC curve)는 전체 ROC값을 요약하는 스칼라(scalar)값으로써 야간 동작한다. AUROC는 최고의 경우에는 1.0 그리고 최악의 경우에는 0.5를 향하는 경향이있다.

    다시 여기서, 좋은 AUROC 점수는 평가하고 있는 모델이 관측된 분류에서 좋은 재현율을 얻기위해 많은 정밀도를 희생시키지 않는 것을 의미한다.


진짜 문제는 무엇인가?

    문제 해결을 위한 노력 전에 문제를 더 잘 이해해 보자. 이번같은 경우, 두가지 분류에 대한 몇가지 기본적인 면을 빠르게 되짚어보고 불균형(imbalance) 데이터셋에 대한 기본적인 문제를 더 잘 파악하기 위한 아주 간단한 예제를 살펴본다.

불균형 예제

    두 분류 C0와 C1이 있다고 하자. 분류 C0가 평균 0, 편차 4의 1차원 가우시안 분포를 따른다. 분류 C2는 평균 2, 편차 1의 1차원 가우시안 분포를 따른다. 또한 문제에서 C0가 데이터셋의 90%라고 가정하자.(그러면 분류 C1은 남은 10%이다.) 아래 그림에서는 올바른 비율로 두 분류의 이론적 분포를 따른 50개의 점을 포함하는 대표 데이터셋을 나타낸다.


Illustration of our imbalanced example. Dotted lines represent the probability densities of each class independently. Solid lines also take into account the proportions.

    이 예제에서 분류 C0의 곡선은 항상 분류 C1의 곡성 위에 있는 것을 볼 수 있다. 그래서 주어진 점에 대해 해당 점이 분류 C0에 의해 그려질 확률은 항상 C1에 의해 그려질 확률보다 크다. 수학적으로 기본 베이 규칙(basic Bayes rule)을 사용하여 아래처럼 표현할 수 있다.


    여기서 이전의 영향과 어떻게 분류가 항상 다른 것보다 더 높은 상태로 연결될 수 있는지를 명확하게 볼 수 있다.

    이 모두는 완벽한 이론적 관점에서도 만약 이런 데이터에서 분류기를 훈련해야 한다면 분류기의 정확도는 항상 C0로 응당할 때 최고가 된다는 것을 의미한다. 따라서 만약 목표가 가능한 최고의 정확도를 얻는 것이라면 문제가 아닌 사실로 보아야 한다. 이런 특성으로 할수 있는 최선(정확도면에서)은 항상 C0로 응답하는 것이고 이를 수용해야 한다.

분리성(Separability)에 대하여

    주어진 예제에서 두 분류가 잘 분리되지 않는다는 것을 관측할 수 있다.(분류는 서로 떨어져 있지 않다.) 그러나 불규형 데이터셋을 대하는 것이 근본적으로 두 분류가 잘 분리되지 않는다는 것을 의미하지 않고 분류기는 소수의 분류에서 잘 동작할 수 없다는 것을 알 수 있다. 예를 들면 여전히 두 분류 C0(90%)와 C1(10%)가 있다고 해보자. C0의 데이터는 평균 0, 편차 4인 1차원 가우시안 분포를 따르는 반면 C1의 데이터는 평균 10, 편차 1의 1차원 가우시안 분포를 따른다. 이는 아래 그래프처럼 나타낼 수 있다.


In our Gaussian example, if the means are different enough with respect to the variances, even imbalanced classes can be well separable.

    여기서 어전의 경우에 반하여 C0의 곡선이 항상 C1의 곡선 위에 있지 않은 것을 볼 수 있다. 따라서 분류 C0보다 분류 C1으로부터 그려질 가능성이 더 많은 점들이 있다. 이 경우, 두 분류는 불균형을 보상하기 위해 충분히 분류될 수 있다. 분류기는 필수적으로 항상 C0로 응답하지 않는다.

이론적 최소 오차 확률($\infty$)

    마지막으로 분류기가 이론적 최소 오류 확률을 갖는다는 것을 명심해야 한다. 이런 종류의 분류기(하나의 특성, 두개의 분류)에 대해서 도식화하여 이론적 최소 오류 확률이 두 곡선의 최솨값 아래의 면적으로 나타나는 것을 알 수 있다.


Illustration of the theoretical minimal error for different degree of separability of two classes.

    이를 수학적으로 나타낼 수 있다. 정말로 이론적 관점에서부터 가장 가능한 분류기는 각 x 점에 대해 두개의 분류중 가능성이 높은 클래스를 선택한다. 이는 근본적으로 주어진 x에 대해 최고의 이론적 오류 가능성은 이들 두 분류중 가능성이 적은 것에 의해 결정된다는 것을 의미한다.


    그러면 전체적인 오류 가능성을 나타낼 수 있다.


    이는 위에서 본 두 곡선의 최소 아래 면적이다.


데이터셋 재작업이 항상 해법은 아니다.

    시작하기 위해, 불균형 데이터셋을 마추쳤을 때 맨처음 가능한 반응은 데이터가 실제를 대표하지 않는다는 것을 고려하는 것이다. 만약 그렇다면, 실제 데이터가 거의 균형잡혀 있지만 (예를 들면, 수집 방법 때문에) 수집된 데이터에 비율 편차(Proportion bias)가 있다고 가정한다. 이런 경우, 좀 더 대표적인 데이터를 수집하려는 시도가 거의 필수적이다.

    이제 데이터셋이 실제로도 불균형한 경우 할 수 있는 것을 보자. 이 후 글에서는 불균형한 분류를 해결하기 위해 자주 언급되는 몇가지 방법과 그 방법들이 데이터셋 자체를 다루는것을 살펴본다. 특히, 언더샘플링(Undersampling), 오버샘플링(Oversampling) 그리고 인공 데이터 생성(Generating Synthetic data)에 관련된 위험과 더 많은 특성(feature)를 모으는 이점에 대해 살펴본다.

Undersampling, oversampling and generating synthetic data

    이들 방법은 분류기를 데어터셋에 맞추기 전에 데어터셋의 균형을 맞추는 굉장한 방법으로 종종 표현된다. 몇마디로 이들 방법은 아래와 같은 데이터셋에서 동작한다.

  • 언더샘플링은 오로지 이러한 점의 일부만을 유지하기 위해 가장 많은 수의 분류로부터 샘플링하는 것으로 구성된다.
  • 오버샘플링은 카디널리티를 중가시키기 위해 소수의 분류로부터 몇가지 점을 복제하는 것으로 구성된다.

    카디널리티(cardinality) : 관계형 데이터베이스에서 하나의 관계를 구성하는 튜플의 개수

  • 인공 데이터 생성은 카디널리티를 증가시키기 위해 소수의 분류(SMOTE 방법을 예로 보자)로부터 새로운 인공적인 점을 생성하는 것으로 구성된다.

    모든 이런 접근은 데이터셋을 다시 (부분적 또는 적체적으로)균형잡는것이 목표이다. 하지만 두 분류에 대한 많은 데이터를 갖기 위해 데이터셋을 리밸런싱해야 할까? 또는 다수의 분류가 가장 많이 나타다도록 놔둬야 할까? 만약 그렇다면, 어떤 비율로 재조정해야 할까?


Illustration of the effect that different degrees of majority class undersampling have on the model decisions.

    리샘플링(resampling) 방법을 사용할 때(예를 들면, C0에서 C1보다 더 많은 데이터를 모으는 것), 훈련동안 분류기에 두 분류의 잘못된 비율을 보여준다. 이 방법으로 학습한 분류기는 그러면 변경하기 않은 데이터셋에서 훈련된 분리기보다 실제 테스트 데이터에서의 정확더가 더 낮을 것이다. 정말로 분류의 실제 비율은 새로운 점에 대해 알기 위해 중요하며 그 정보는 데이터를 리샘플링할때 손실된다.

    그럼 만약 이들 방법이 완전히 거부되지 않는다면, 신중하게 사용되어야 한다. 이는 만약 새로운 비율이 목적을 가지고 선택되었다면 적절한 접근방법이 된다. 하지만 문제에 대해 더 생각하지 않고 분류를 단지 리밸런싱하는 것은 말도 안된다. 결론을 내리기 위해, 리샘플링같은 방법으로 데이터셋을 수정하는 것은 현실도 변경한다. 따라서 사용시 주의가 필요하다. 그리고 분류기의 출력 결과에 대한 의미를 염두해 두어야 한다.

추가적인 속성 가져오기

    윗 글에서 훈련 데이터셋(분류 비율을 수정하는) 리샘플링은 분류기의 실제 목적에 따라 좋은 생각일 수도 아닐수도 있다는 사실을 살펴보았다. 특히 만약 두 분류가 불균형하고 잘 분리될 수 없으며 가능한 최고의 정확도를 갖는 분류기를 만들어야 한다면, 항상 동일 분류를 반환하는 분류기를 갖는 것이 근본적으로 문제는 아니지만 이들 변수로 더 나은 것을 할 수 없다는 것이 사실이다.

    하지만, 부가적인 특성으로 데이터셋을 강화하여 정화도면에서 더 나은 결과를 얻을 가능성이 남아있다. 분류가 잘 분리되지 않는 첫번째 예제를 다시 살펴보자. 아마도 두 분류간 구분을 할 수 있는 새로운 부가적인 특성을 찾아 분류기의 정확도를 개설할 수 있을 것이다.


Looking for additional features can help separate two classes that were not initially separable.

    실제 데이터를 변경하는 이전 글에서 언급된 접근 방법과 비교하면 실제로부터 더 많은 정보로 데이터를 강화하는 것으로 구성된 이 접근 방법은 사용 가능할 때 훨씬 더 나은 생각이다.


문제 재작업(reworking)이 더 좋다

    지금까지의 결론은 꽤 실망스럽다. 만약 데이터셋이 실제 데이터를 대표한다면, 만약 어떠한 부가적인 정보도 얻지 못하고 가능한 최고 정확도를 가진 분류기를 만들어야 한다면, 순진한 동작('naive behaviour', 항상 동일 분류로 응답하는 것)은 근본적으로 문제가 아니고 단지 사실로써 받야들여야 한다.(만약 순진한 동작이 선택된 분류기의 제한된 능력때문이 아니라면)

    여전히 이 결과에 만족하지 않는다면? 이런 경우는 어떤식으로든 문제가 잘 정의되어 있지 않다는 것(그렇지 않으면 그대로 결과를 받야들여야 한다.)과 더 만족스러운 결과를 얻기 위해 재작업해야 한다는 것을 의미한다.

비용기반 분류(cost-based classification)

    얻은 결과가 좋지 않다는 느낌은 목표 함수가 잘 정의되지 않았다는 사실로부터 시작될 수도 있다. 여기까지 두 종류의 오류('false positive', 'false negative')가 모두 동일한 비용이라고 가정하면서 높은 정확도를 갖는 분류기를 만드는 것을 가정했다. 예제에서 이것은 참 값(true label)이 C1일때 C0를 예측하는 것은 참 값이 C0일때 C1을 예측하는 것만큰 나쁘다고 가정했다는 의미이다. 오류는 대칭적이다.

    글 도입부의 결함이 있는 제품(C1)과 결함이 없는 제품(C0)를 가진 예제를 보자. 이 경우, 결함이 있는 제품을 탐지하지 않는 것(고객 서비스 비용, 만약 위험한 결함이라면 가능한 법류비용 등)이 결함이 없는 제품을 결함이 있는 것으로 잘못 레이블링하는 것(생산비용 손실)보다 회사에 더 비용이 든다는 것을 상상할 수 있다. 이제 참값이 C1일때 C0를 예측하는 것은 참값이 C0일때 C1을 예측하는 것보다 훨씬 나쁘다. 오류는 더이상 대칭적이지 않다.

    아래와 같은 비용을 좀더 구체적으로 생각해보자.

  • 참값이 C1일때 C0를 예측하는 비용 P01
  • 참값이 C0일때 C1을 예측하는 비용 P10 ($0 < P10 << P01$)

    그러면 목표함수를 재정의할 수 있다. 더이상 최고 정확도를 목표로 하지 않지만 대신 더 낮은 예측 비용(Prediction cost)을 찾는다.

이론적 최소 비용($\infty$)

    이론적 관점에서부터 위에서 정의된 오류 확률을 최소화하는 것을 원하지 않지만 기대하는 예측 비용은 아래 식과 같다.


    여기서 C(.)은 분류 함수(classifier function)을 정의한다. 따라서 만약 기대하는 예측 비용을 최소화하려면 이론적인 최고의 분류기 C(.)는 아래 식을 최소화한다.


또는 동등하게, x의 밀도(density)로 나누어 C(.)를 최소화 한다.


    그러면 이 목적 함수로 이론적 관점으로부터 최고의 분류기는 아래와 같을 수 있다.


    비용이 같을 때 'classic' 분류기(정확도에 초첨을 맞춘)의 수식을 복구(recover)한 것을 기억하자.

확률 임계치(Probability threshold)

    분류기에서 비용을 고려하기 위한 가장 가능성있는 하나의 방법은 훈련이후 이를 수행하는 것이다. 이 아이디어는 우선 아래 가능성을 출력하기 위해 어떠한 비용을 추정하는 것 없이 기본적인 방법으로 분류기를 훈련하는 것이다.


    그러면 기대하는 비용은 C0이 될 것이다. 만약 반대라면 C1이다.


    여기서 주어진 점에 대해 각 분류의 가능성을 출력하는 한 사용하고 있는 분류기는 중요하지 않다. 이글의 예제에서 데이터에 Bayes 분류기를 맞출 수 있다.(fit) 그리고 설명된바와 같이 비용 오류로 분류기를 조정(adjust)학 위해 얻은 가능성에 가중치를 다시 적용할 수 있다.(reweight).


Illustration of the probability threshold approach: the outputted probabilities are reweighted such that costs are taken into account in the final decision rule.

분류 가중치 재적용(classes reweight)

    분류 가중치 재적용의 아이디어는 분류기가 훈련하는 동안 직접적인 비용 오류의 비대칭을 고려하는 것이다. 이렇게 하는 것은 각 분류에 대해 출력된 확률은 이미 비용 오류 정보에 포함되고 그렇게 되면 간단한 0.5 임계치인 분류 규칙(classification rule)을 정의하기 위해 사용될 수 있다.

    몇몇 모델(예를 들면 Neural Network classifier)에 대해 훈련동안 드는 비용은 목적 함수(objective function)을 조정하는 것으로 구성될 수 있다. 분류기가 여전히 아래와 같은 결과를 출력하길 원한다.


    그러나 이번에는 아래의 비용 함수를 최소하가는 것과 같이 모델이 훈련된다.


    몇몇 다른 모델(예를 들면 Bayes classifier)에 대해서는 리샘플링 방법은 비용 오류 정보를 분류 비율내부로 넣는것 같은 분류 비율에 편향을 주기위해 사용될 수 있다. 만약 비용 P01과 P10 ($P01 > P10$과 같은)을 고려한다면, 아래 둘중 하나를 사용할 수 있다.

  • 인자 P01/P01 인자에 의한 소수 분류를 오버샘플링 (소수 분류의 카디널리티는 P01/P10으로 곱해져야 한다.)
  • 인자 P10/P01 인자에 의한 다수 분류를 언더샘플링 (다수 분류의 카디널리티는 P10/P01로 곱해져야 한다.)

Illustration of the class reweight approach: the majority class is undersampled with a proportion that is chosen carefully to introduce the cost information directly inside the class proportions.

배운점(Takeaways)

  • ML 알고리즘을 사용하는 언제라도 모델에 대한 평가 지표는 신중하게 선택되어야 한다. 얼마나 잘 모델이 목표에 대해 동작하는지에 대한 최고의 개요(overview)를 제공 할 수 있는 지표를 사욛해야 한다.
  • 불균형 데이터셋을 다룰 때는 만약 분류가 주어진 변수로 잘 분리되지 않고 목표가 가능한 최고의 정확도를 얻는 것이라면 최고의 분류기는 항상 다수 분류를 응답하는 'naive'가 될 수 있다.
  • 리샘플링 방법이 사용될 수 있지만 주의깊게 고려되야야 한다. 리샘플링은 독자적인 해법으로 사용되어서는 안되지만 특정 목표를 위한 문제 재작업(rework)와 함께 사용되어야 한다.
  • 문제 재작업 자체는 때때로 불균형 분류 문제를 해결하는 최고의 방법이다. 분류기와 결정 규칙(decision rule)은 비용 최소화 같은 잘 선택된 목표에 관련하여 설정되어야 한다.

    분류기를 배치(batch) 훈련할 때 유용할 수 있는 "계층화된 샘플링(stratified sampling)"같은 모든 기술에 대해 다루지 않았음을 알아두자. 불균형 분류 문제를 마주치면 그같은 기술은 훈련동안의 안정성을 좀더 확실하게 한다.(배치 내부의 비율 변화를 제거하는 것으로)

    마지막으로 이글의 키워드는 '목표(goal)'이다. 정확하게 얻고자 하는 것을 아는 것은 불균형 데이터셋 문제를 극복하는데 도움이 될 것이다. 그리고 가장 좋은 결과를 얻게 할 것이다. 완벽하게 목표를 정의하는 것은 항상 해야할 첫번째 일이고 ML모델을 생성하기 위해 끝내야하는 어떤 선택의 시작점이다.

반응형