본문 바로가기

머신러닝/[기타]

매크로 평균(Macro-average) vs 마이크로 평균(Micro-average)

 Macro, Micro-average는 이름처럼 평균을 구하는 방법들입니다. 저희는 Macro-f1, Micro-precision, Micro-accuracy 등으로 활용하게 될 예정입니다. 아래에서는 Precision을 기준으로 설명하겠습니다.

 간단하게, 어떤 모델이 Class A, Class B, Class C, Class D를 구분하는 짓을 하고 있고, 각 클래스별로 2, 100, 2, 2개의 데이터를 가지고 있다고 생각해봅시다. 그렇게 학습한 모델이 아래와 같은 결과를 뿜어냈습니다.

Class A: 1 TP & 1 FP                                                                                                                                                                                             Class B: 10 TP & 90 FP                                                                                                                                                                          Class C: 1 TP & 1 FP                                                                                                                                                                             Class D: 1 TP & 1 FP

 이제 이런 클래스별 결과를 통합시켜봅시다. 간단히 평균을 사용해서요. 가장 쉽게 생각할 수 있는건, Precision of Class A = Precision of Class B = Precision of Class C = 0.5, Precision of Class D = 0.1 이고, 클래스 개수가 4개니까, 평균내면 (0.5+0.1+0.5+0.5)/4 = 0.4 라는 생각이고, 이게 Macro-precision 입니다. 평균의 평균을 내는 방법입니다.

 또다른 방법은, 평균의 평균을 내는게 아니라 그냥 평균을 내는건데, 바로 수식으로 보면, (1+10+1+1)/(2+100+2+2) = 0.123 입니다. 그냥 개수 그자체로 평균을 낸건데, 이게 Micro-precision 입니다.

 Macro 값과, Micro 값이 분명하게 차이가 많이 나는데, 실용적인 부분만 말하자면, 클래스 불균형(Imbalance) 문제가 있는 데이터셋에서는 Micro-average가 조금 더 효과적인 평가지표가 된다- 입니다. 그럼 이게 왜 그런지, 조금 더 생각해보겠습니다. Macro 값은 0.4로 정밀도의 평균에 더 가깝고, Micro 값은 0.123으로, 많이 관측된 클래스의 정밀도에 가깝습니다. Micro 는 샘플의 수에 흔들흔들 거린다는 말이겠지요. 이렇게 샘플 수를 고려하는 Micro 가 왜 효과적일까. 저희가 새로운 샘플을 하나 받아서, 모델에 넣어보려한다- 했을 때, 이 샘플이 Class A 또는 C 또는 D라면, 정밀도는 0.5가 나올텐데, Class B라면 정밀도 0.1일 거에요. 그런데 애초에, 이 샘플이 Class A, C, D에 속할지 Class B에 속할지 확률을 생각해보면, 대부분의 훈련용 샘플은 Class B였으니, 이 새로운 샘플도 Class B일 확률이 높을 것 같단 말이에요. 그리고 실제로 Class B라면, 정밀도는 0.1이 뜰테고. 그죠. 그러니 평가 정밀도는 0.5에 가까운게 아니라 0.1에 가까운게 좀 더 그럴듯 하네요. 그러니까 클래스별 샘플 수를 고려한 Micro가 불균형 데이터셋에 있어 조금 더,,. 네 그렇습니다.

끗.

출처