6-4 Error Metrics for Skewed Classes 본문
Skewed classes를 가지고 있는 data의 error metric에 대해 알아본다.
암을 진단하는 로지스틱 회귀 모델을 열심히 트레이닝해서 test set에 대해 평가를 해보니 error가 1%밖에 되지 않았다. 정확도가 99%가 나왔기 때문에 굉장히 좋은 모델인 것 같다.
그런데 test set을 확인해보니 전체 환자 중 진짜 암에 걸린 환자는 0.5%밖에 되지 않았다. 만약 모델이 모든 환자에 대해서 그냥 y=0이라고 결과를 낸다면 정확도는 99.5%가 된다. 왜냐하면 암에 걸리지 않은 환자가 99.5%나 있기 대문이다. 따라서 우리가 열심히 트레이닝한 모델보다 정확도가 더 높은 모델이 나온다.
정확도가 99.5%가 나오긴 했지만 모든 환자에 대해 y=0이라고 진단하는 모델은 좋은 모델이라고 할 수 없다. 따라서 skewed classes(특정 클래스에만 너무 편향되어 있음) 데이터에 대해서 제대로 평가를 내리기 위해서는 accuracy가 아니라 error를 제대로 평가할 수 있는 다른 지표가 필요하다.
Precision과 Recall에 대해 알아보자
우선, 학습 알고리즘이 예측한 결과를 predicted class, 실제 class를 actual class라고 할 때, 2x2 매트릭스를 그릴 수 있다. 그리고 알고리즘이 예측한 결과와 실제 결과에 따라 4가지로 나눌 수 있다.
True positive란 모델이 positive라고 예측했을 때(이 환자는 암에 걸림 y=1) 그 환자가 실제로 암에 걸렸을 경우를 말한다. 이 경우 모델이 정확한 예측을 했기 때문에 True positive라 한다.
이와 반대로 모델이 positive라고 예측했을 때 실제로 그 환자가 암에 걸리지 않은 경우 모델이 잘못된 예측을 한 것이기 때문에 이 경우엔 False positive라고 한다.
False negative = 모델이 환자가 암에 걸리지 않았다고(y=0) 예측했는데 실제론 환자가 암에 걸린 경우
True negative = 모델이 환자가 암에 걸리지 않았다고 예측했는데 실제로 환자가 암에 걸리지 않은 경우
이와 같은 4가지 케이스에 따라 Precision과 Recall을 정의하게 된다.
Precision은 모델이 positive라고 예측한 것들 중에서(True positive + False positive) 실제로 true positive의 수를 의미한다.
=> 모델이 양성이라고 판단한 것 중에서 실제로 양성은 얼마나 있는가?
Recall은 모델이 진단한 것들 중에서(True positive + False negative) True positive의 수를 의미한다.
=> 실제 양성인 것 중에서 모델이 양성이라고 제대로 판단한 것은 얼마나 있는가?
앞에서 봤던 것처럼 y=1인 환자가 0.5%밖에 되지 않았을 때 모든 환자를 y=0으로 진단한다 해도 정확도는 99.5%가 나왔다.
하지만 이렇게 모든 환자를 y=0으로 진단하면 True positive가 0이므로 recall은 0이 된다.
Precision과 Recall 사이의 trade off를 하는 방법과 precision과 recall를 통해 효과적으로 학습 알고리즘을 평가하는 방법에 대해 알아본다.
암을 분류하는 문제에서 로지스틱 회귀 모델을 사용할 때 암의 진단 여부가 가설 h(x) 값의 threshhold에 따라 결정된다고 하자. 임계값을 0.5로 했을 때 이에 따른 precision과 recall 값을 구할 수 있을 것이다.
암이 있다고 말해주는 것은 환자에게 굉장히 큰 충격일 것이다. 암이 아닌 환자에게 암이 있다고 하는 것도 큰 문제다. 그래서 환자들에게서 정말로 암이 있을 것으로 확신이 드는 환자에게만 암이 있다고 진단해주고 싶다면 임계값을 더 높이면 된다. 따라서 암에 걸릴 확률이 70%이상인 환자만 암이라고 진단하는 것이다. 이렇게 임계값을 더 높이게 되면 정말 암이 있을 것으로 확신이 있는 환자에게만 암이라고 말해줄 수 있을 것이다. False negative가 더 커지기 때문에 우리는 더 높은 precision 값을 얻게 될 것이고 이와 반대로 recall은 그만큼 작아질 것이다.
=> (암이 없는 환자에게 암이 있다고 진단하는 실수를 줄이기 위해 임계값을 높여 precision을 크게 함)
이와 반대로 환자가 실제로 암에 걸렸는데 우리가 잘못 진단해서 암에 걸리지 않았다고 말하는 것도 큰 문제가 된다. 암이 있는지 없는지 애매한 경우 일단 암이 있다고 진단하여 치료라도 받게 하는게 좋아보인다. 이렇게 하고 싶다면 임계값을 낮은 값으로 설정하면 된다. 이렇게 하면 암이라고 진단하는 환자가 더 늘어나게 된다. False positive가 늘어나기 때문에 precision이 작아지고 recall이 커지게 된다.
=> (암이 없는 환자에게도 혹시 모르니까 일단 암이 있다고 진단해서 임계값을 낮춰 recall을 크게 함)
이렇게 precision과 recall 사이에는 상충관계가 있어 우리가 설정하는 임계값에 따라 다양한 precision recall 그래프를 그려볼 수 있다. 임계값을 0.99처럼 크게 주면 그만큼 high precision - low recall이 된다. 반면 임계값을 0.01처럼 낮게 주면 low precision - high recall이 된다. 그렇다면 precision과 recall에 따라 모델의 성능을 어떻게 비교해야 할까?
다음과 같이 특정 모델을 가지고 임계값만 바꿔가며 평가한 3가지 결과가 있다면 어떤 기준으로 좋은 모델을 선택해야 할까? Single real number로 평가하기 위해 단순히 precision과 recall을 평균내는 방법을 떠올릴 수 있겠지만 모든 경우에서 y=1로 예측해버리면 3번째 알고리즘처럼 high recall값을 가지게 되므로 평균을 사용하는 건 좋은 방법이 아니다.
이러한 문제를 해결하고 precision(정밀도)와 recall(재현율)을 결합하는 다른 방법은 F_1 score라는 공식을 사용하는 것이다. (그냥 F score라고도 함)
이와 같은 공식을 사용할 때 precision이나 recall 중 하나가 0이면 F score 값은 0이된다. 반대로 precision과 recall 모두 1일 때 F score 값은 1이 된다.
Precision과 recall을 결합하여 사용하기 때문에 쉽게 생각해서 F
score 값의 크기에 따라 알고리즘의 성능을 평가하는 지표로 사용할 수 있다.
'ML & DL > Coursera-ML' 카테고리의 다른 글
7-1 Large Margin Classification (0) | 2019.01.31 |
---|---|
6-5 Data for machine learning (0) | 2019.01.29 |
6-3 Building a Spam Classifier (0) | 2019.01.29 |
6-2 Bias vs Variance (0) | 2019.01.28 |
6-1 Evaluating a Learning Algorithm (0) | 2019.01.21 |