으아 오늘은 왜 이렇게 공부가 안 되냐? 조금 쉬어야 되는 때가 온 것인가? 잠깐 어딘가 떠나있어야 되나? 아 몰라 적어도 오늘 뭔가는 해야지. 오늘은 아주 쉬운 포스팅이 될 것이니 음악이나 하나 틀어두고 쉬엄쉬엄 읽어보시길 바란다.


data mining에서 하나의 model을 측정하는 방법은 여러가지가 있다. 대표적인 measurement가 accuracy인데, 이 accuracy는 biased data에서는 별로 효과적이지 못 하다고 이전 포스팅에서 이야기했었다. 그것을 해결하기 위해 F1 measurement, Recall, Precision을 계산해야 된다고 이야기한 것이 딱 이전 포스팅에 작성한 내용이다.


http://operatingsystems.tistory.com/entry/Data-Mining-Measuring-a-classification-model


위에 링크 남겨둔다.


이번 포스팅에서 할 이야기는 위의 내용과 비슷하나 조금 advanced된 이야기이다. Macro average와 micro average이다. 간단하게 아래와 같은 3-class confusion matrix가 있다고 해보자.

지금 BAC CON EXP 세 개의 class가 있으니까 하나하나 분리해보자.


마지막에 pooled matrix는 위의 세 개를 합친 것이다.

우선 macro average는 이렇게 구한다. 각각의 BAC CON EXP에 대한 recall, precision, f1을 구해서 평균을 내는 것이다.


# Recall

BAC = 9/(9+3) = 0.75

CON = 5/(5+4) = 0.55

EXP = 4/(4+2) = 0.66


# Precision

BAC = 9/(9+4) = 0.69

CON = 5/(5+4) = 0.55

EXP = 4/(4+1) = 0.80


# F1-measure

BAC = (2 * 0.75 * 0.69) / (0.75 + 0.69) = 0.72

CON = (2 * 0.55 * 0.55) / (0.55 + 0.55) = 0.55

EXP = (2 * 0.66 * 0.80) / (0.66 + 0.80) = 0.72


별로 어렵지 않게 이해할 수 있는 부분이므로 더 이상의 설명은 생략하도록 하자. 그러면 Micro average를 구해보자. 이건 더 쉽다. pooled matrix를 이용하여 한꺼번에 한번만 구한다.

Recall = 18/(18+9) = 0.66

Precision = 18/(18+9) = 0.66

F1-measure = (2*0.66*0.66)/(0.66+0.66) = 0.66


micro-average에서는 Recall과 Precision이 같은 값을 갖게 된다. 따라서 F1역시 Recall, Precision과 같게 된다. Recall, Precision = a로 놓으면

F1-measure = 2*a*a/2a = a


자 끝이다-_-. 정말 간단한 포스팅 되겠다. 그런데 한 가지 이야기를 더 하고 끝내야 된다. macro-average와 micro-average의 특징을 이야기 해야된다.


Macro-average는 내 classifier가 모든 class에 대해 얼마나 (평균적으로) 잘 동작하는지 알고 싶을 때 사용한다. 위의 예제의 경우, BAC CON EXP각 class에 대하여 얼마나 평균적으로 고르게 잘 동작하고 있는지를 알고 싶을 때 사용한다. 그래서 평균을 구하는 것인가 싶다.


Micro-average는 이럴 때 사용한다. 위의 경우에는 우리가 하나의 confusion matrix를 가지고 각 class별로 3개로 나눴다. 따라서 각 3개의 confusion matrix에서 TF, FN, FP, TN의 합은 같을 수 밖에 없다. 그런데 만일 아래와 같이 각각의 class의 size가 다르면 어떻게 할까?


위의 경우는 BAC CON EXP가 각각 독립적으로 측정된 confusion matrix라서 각각의 size가 다를 수 있다. 이런 경우에는 각각의 confusion matrix를 pooled로 합치면, recall, precision, f1이 다를 수 있게 된다. 위의 경우의 micro-average를 precision, recall, f1에 대하여 구하면 아래와 같다.


Recall : 114/(114+10) = 0.92

Precision : 114/(114+22) = 0.84

F1 : (2*0.92*0.84)/(0.92+0.84) = 0.88


아주 쉬운 포스팅이다. 다음 포스팅은 뭐가 될지 솔직히 잘 모르겠지만 뭔가 올라오겠지?

Posted by 빛나유
,