티스토리 뷰

 분류 정확성은 단수(single number)로 표현할 수 있는 평가 척도 중 하나이다. 당신이 만든 분류기에 개발 데이터(혹은 테스트 데이터)를 넣고, 해당 데이터가 정확하게 분류를 했는지에 대한 비율을 단수로 평가해주는 것이다. 이 평가 척도에 따르면, 만약 A 분류기가 97%의 정확성을 가지고, B 분류기가 90%의 정확성을 가진다면, 보통 우리는 A 분류기의 성능이 더 좋다고 판별할 수 있다.

 이와 대조적으로, 정밀도(Precision)재현율(Recall)은 단수로 표현할 수 있는 평가 척도가 아니다. (참고로 정밀도는 분류기가 참이라고 분류한 결과물 중 실제로도 참일 확률을 말하고, 재현율은 분류기가 정상적으로 분류한 것들 중에서 실제로도 참일 확률을 말한다. 수식으로 표현하면 다음과 같다. - 추가로 보통 높은 정밀도를 가지는 것과 높은 재현율을 가지는 것 사이에는 tradeoff가 존재한다.)

$$precision = \frac{true\ positives}{true\ positives + false\ positives} $$

$$recall = \frac{true\ positive}{true\ positive + false\ negative} $$

보통 정밀도와 재현율은 분류기를 평가하는데 있어 두 개의 값으로 보여주는데, 이와 같이 복수의 값으로 구성된 평가 척도는 알고리즘의 성능을 비교하는데 사용하기 어렵다. 예를 들어 아래와 같은 알고리즘 비교 결과가 있다고 가정하자

 Classifier

Precision 

Recall 

 A

 95% 

90% 

 B

98%

85% 

위의 결과만 놓고 보면 어떤 분류기가 성능이 좋은지를 판별하기 어렵고, 더불어 어떤 분류기를 선택할지 명확하게 결정짓지 못한다.

 Classifier

Precision 

Recall 

F1 Score 

95% 

90% 

92.4% 

 실무에서 개발하는 동안 알고리즘 구조나, 모델의 parameter, 어떤 feature를 선택하느냐 같은 고민을 할 것이다. 정확성과 같이 단수로 표현되는 평가척도가 있다면, 여러 알고리즘을 이 척도에 맞춰서 정렬하고, 어떤 것이 나쁘게 동작하는지를 빠르게 확인할 수 있다.

 정말로 정밀도와 재현율을 평가 척도로 활용하고 싶다면, 나는 이 값들을 하나의 단수로 결합시켜주는 일반화된 방법 중 하나를 써볼 것을 추천한다. 예를 들어 정밀도와 재현율의 평균을 내서 하나의 단수로 만드는 방법이 있을 수 있다. 또하나의 방법으로 "F1 score"라는 것을 계산할 수 있는데, 이 값은 정밀도와 재현율을 평균내는 방법을 일부 수정한 것으로 그냥 단순하게 평균을 낸 것보다는 잘 동작한다. (참고로 F1 score를 구하는 방법은 아래의 수식과 같다.)

$$F1\ score = \frac{2}{\frac{1}{Precision} + \frac{1}{Recall}} $$

 Classifier

Precision 

Recall 

F1 Score 

95% 

90% 

92.4% 

98% 

85% 

91.0% 

 이렇게 단수를 가지는 평가척도를 통하면, 수많은 분류기 중에서 가장 성능이 좋은 분류기를 선택하는 것을 조금더 빠르게 할 수 있다. 결국 많은 것들 중에 순위를 나눌 수 있게 되고, 이를 통해 명확한 결정을 내릴 수 있게 되는 것이다.


< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 8. Establish a single-number evaluation metric for your team to optimize 을 번역한 내용입니다.>

댓글