GIL's LAB

클래스 불균형 문제 (1) 문제 정의 본문

데이터사이언스/머신러닝

클래스 불균형 문제 (1) 문제 정의

GIL~ 2021. 9. 2. 17:31

1. 들어가며: 정확도 99.99%의 암환자 판별 모델

간단한 생체 정보만 입력하면 암 보유 여부를 99.99%의 정확도로 판별하는 인공지능 모델이 개발되었다고 하자. 이 모델을 평가할 때 사용했던 혼동 행렬(confusion matrix)은 아래 표와 같다.

 

 

과연 이 인공지능 모델이 상용화되어 실제로 암을 판별하는데 사용될 수 있을까?

당연히도 정답은 “그렇지 않다”이다. 왜 그런지 이 혼동 행렬을 다시 한번 자세히 살펴보자. 이 모델은 평가 샘플로 사용된 1만 명 모두를 “정상”이라고 분류했다. 즉, 이 모델은 정확도가 99.99%에 달하지만, 어떠한 생체 정보가 입력되더라도 “정상”이라고 밖에 이야기하지 못하는 완전히 무가치한 모델이다. 본 장에서는 이처럼 편향된 모델을 학습하게 하는 클래스 불균형 문제와 그 해법을 살펴보고자 한다.

 

2. 클래스 불균형 문제: 개요

정의 및 용어

클래스 불균형 문제(class imbalance problem)란 학습 데이터의 클래스 변수가 균일하게 분포하지 않고 하나의 값에 치우쳐서 편향된 모델을 학습하는 문제를 의미한다. 여기서 편향된 모델이란 대부분의 샘플을 치우친 클래스로 분류하는 모델을 의미하며, 치우친 클래스를 다수 클래스(majority class), 그렇지 않은 클래스를 소수 클래스(minority class)라고 한다. 아래 그림을 바탕으로 더 자세히 살펴보자.

이 그림에서 하나의 점은 샘플을, 색상은 대응되는 클래스를 나타내며, 파란색 점이 주황색 점보다 훨씬 많은 것을 볼 수 있다. 즉, 여기서는 파란색 클래스가 다수 클래스, 주황색 클래스가 소수 클래스이며, 파란색 점은 다수 클래스 샘플, 주황색 점은 소수 클래스 샘플이 된다. 이제 이 데이터를 분리하기 위해 직선을 아래와 같이 그어보도록 하자.

위 그림에서 빨간 직선 왼쪽에는 주황색 샘플이, 오른쪽에는 파란색이 더 많으므로, 왼쪽 공간은 주황색으로 오른쪽 공간은 파란색으로 분류할 것이다. 이 그림을 통해, 클래스 불균형 문제가 있으면 다수 클래스에 대한 결정 공간이 훨씬 넓음을 알 수 있다 (즉, 파란색으로 분류되는 공간이 훨씬 넓다). 또한, 파란색은 파란색으로 상대적으로 잘 분류되지만, 주황색은 주황색으로 잘 분류되지 않는다. 구체적으로, 파란색 샘플 천 개는 모두 정분류된데 반해, 주황색 샘플 열 개 가운데 겨우 한 개만 정분류되었다. 저자가 임의로 그은 빨간 직선이 아니라, 실제 어떤 종류의 분류기를 쓰더라도 비슷한 결과를 얻게 될 것이다. 요약하자면, 클래스 변수의 분포가 한 쪽에 치우친 데이터로 학습한 분류기는 대부분의 입력에 대해 다수 클래스라고 분류하게 되며, 그에 따라 소수 클래스에 대한 예측 성능이 매우 저하된다.

 

클래스 불균형 문제를 반드시 해결해야 하는 이유

(1) 일반적으로 소수 클래스가 우리의 관심 대상(긍정 클래스)이다. 예를 들어, 암 환자를 판별하는 분류 문제에서 우리의 관심 대상은 암환자이며, 암환자는 정상인보다 소수이다. 다른 예로, 제품의 불량을 판별하는 문제에서 우리의 관심 대상은 불량품이며, 불량품은 양품보다 적다. 여기서는 두 가지 예만 들었지만, 실제로 소수 클래스가 긍정 클래스가 아닌 경우를 찾는 것이 훨씬 힘들다.

(2) 높은 정확도를 보인다. 정확도는 매우 직관적이라는 장점때문에, 널리 사용되는 분류 결과 평가 척도이다. 그런데 클래스 불균형 문제로 인해 편향된 모델은 매우 높은 정확도를 보인다. 높은 정확도를 보이는 것이 문제인 이유는, 전혀 쓸모없는 수준의 모델일지라도 정확도가 높아 좋은 모델이라고 착각하게 만들 수 있기 때문이다. 저자가 임의로 그은 직선을 다시 살펴보자. 이 직선은 총 1010개(파란색:1000개, 주황색:10개)의 샘플 가운데, 1001개를 정분류했다. 즉, 1001/1010 = 99.1%라는 매우 높은 정확도를 보인다. 심지어 이 정확도는 새로 들어온 데이터(테스트 데이터)에 대해서도 유지될 가능성이 높다. 그런데 주황색 샘플만 놓고 보면, 10개 가운데 1개만 정분류되어 잘 분류되었다고 보기 힘들다.

 

클래스 불균형 문제가 있는 데이터를 사용하면, 다수 클래스에 편향된 모델이 학습되는 이유는 무엇일까?

그 이유는 분류 모델의 비용 함수(cost function)에 있다. 일반적으로 사용되는 비용 함수는 거짓 양성 비용(false positive cost; 부정 클래스를 긍정 클래스로 오분류했을 때 발생하는 비용)과 거짓 음성 비용(false negative cost; 긍정 클래스를 부정 클래스로 오분류했을 때 발생하는 비용)의 합으로 구성되며, 특별한 경우를 제외하고는 두 비용을 같게 설정한다. 여기서 문제는 거짓 음성 비용이 거짓 양성 비용보다 훨씬 크다는데 있다. 예를 들어, 암환자를 정상인으로 오분류하게 되면 이 환자는 스스로 정상이라 생각하여 아무런 조치를 취하지 않다가 병세가 악화되어 죽음에 이르겠지만 (오분류 비용: 죽음), 정상인을 암환자로 오분류하게 되면 이 사람은 추가로 검진을 받게 될 것이다 (오분류 비용: 추가 검진에 드는 비용). 그런데 대부분의 비용 함수는 이러한 차이를 고려하지 않는다. 따라서 앞선 사례에서 1명의 암을 정분류하기 위해서 2명 이상의 정상을 오분류하는 상황을 피하도록 분류 모델이 학습된다.

 

3. 분류 결과 평가 척도

혼동 행렬

혼동 행렬이란 분류 결과를 평가하는데 사용하는 표로, 그 구조는 아래와 같다.

위 혼동 행렬에서 True Negative란 부정을 부정으로 예측한 샘플 개수를, False Positive란 부정을 긍정으로 예측한 샘플 개수 등으로 해석할 수 있다.

(참고 1) True가 앞에 붙은 경우(True Positive, True Negative)는 정분류한 경우를 나타내며, False가 앞에 붙은 경우는 오분류한 경우를 나타낸다. 또한, 뒤에 Positive가 나오면 Positive라고 예측을 했다고 해석할 수 있다.

(참고 2) 긍정 클래스는 우리의 관심 대상 클래스를 나타내며, 보통 1로 표기한다. 부정 클래스는 (상대적으로) 관심 대상이 아닌 클래스를 나타내며, 보통 0 또는 -1로 표기한다.

 

평가 척도 계산 및 의미

혼동 행렬을 바탕으로 여러 평가 지표를 계산할 수 있다.

  • 정확도 = (TN + TP) / (TN + FP + FN + TP)
  • 정밀도 = TP / (FP + TP)
  • 재현율 = TP / (FN + TP)

위 수식을 외울 필요는 전혀없다. 다만, 지표에 대한 해석은 반드시 짚고 넘어가야한다. 정확도는 전체 샘플 (TN + FP + FN + TP) 가운데 정분류한 샘플(TN + TP)의 비율이다. 여기서 긍정 및 부정과 관련없이, 잘 맞췄는지만 보기 때문에 클래스 불균형 문제가 있는 경우에는 부적절한 지표가 되는 것이다.

정밀도와 재현율의 수식을 보면 분자가 모두 TP로 같다. 즉, 정밀도와 재현율 모두 긍정 클래스를 긍정 클래스로 잘 분류하는 경우에 높아진다. 이제 분모를 살펴보자. 정밀도의 분모는 FP와 TP의 합으로, 긍정이라고 예측한 샘플의 개수이다. 즉, 정밀도는 모델이 긍정이라고 예측했을 때, 그 결과가 얼마나 잘 맞는지를 나타내는 척도이다. 반면에 재현율의 분모는 FN과 TP의 합으로, 실제 긍정인 샘플의 개수이다. 즉, 재현율은 모델이 실제 긍정인 샘플들을 얼마나 잘 검출하는지를 나타내는 척도이다.

 

클래스 불균형 문제가 있을 때의 평가 결과와 F1 점수

일반적으로 클래스 불균형 문제가 있는 경우에는 정확도와 정밀도가 높고, 재현율이 크게 떨어지는 경향이 있다. 앞서 빨간 직선으로 분류한 그림에서 주황색을 긍정이라고 가정하면, 정밀도는 100% (즉, 주황색이라고 예측한 한 개의 샘플 가운데 한 개가 실제 주황이었음)이며, 재현율은 10% (즉, 실제 주황색 10개 가운데 한 개만 정분류되었음)이다. 따라서 클래스 불균형 문제가 있는 경우에 정확도, 정밀도, 재현율 가운데 한 개의 척도만 사용한다면 모델의 성능을 객관적으로 평가할 수 없게 된다. 그래서 정밀도와 재현율의 조화 평균인 F1 점수를 사용하는 것이 바람직하다.

Comments