confusion matrix and F1
학습기의 일반화 성능을 어떻게 평가해야 하는가? 그것을 알아보자.
본 문서는 분류 모델의 평가를 위한 오차율, 정확도, 혼동행렬, F1 Score의 범위를 다룬다.
본 문서는 다음의 두 책에 기반을 두어 작성되었다.
어떤 데이터 샘플을 D = {(x1, y1), (x2, y2), ... , (xm, ym)} 라고 하자.
xi는 입력이고, yi는 정답이다.
이때 학습기 f의 성능을 측정하려면, f의 예측 결과인 f(xi)와 정답 yi를 비교해야 한다.
모델의 좋고 나쁨은 주어진 과제에 따라 평가 기준을 달리 해야겠지만, 가장 기본적인 기준으로 오차율과 정확도를 꼽을 수는 있다.
그러나 이런 기준에는 큰 문제가 있다. 내게 2% 확률로 스팸 메일이 온다고 하자. 스팸 메일 분류기를 만들었을 때, 분류기가 모든 메일을 정상 메일로 판단했다면 어떤가? 정확도는 98%이다. 그러나 이 모델에 가치가 있는가?
이런 사유로 분류 모델의 평가에 일반적으로 정확도를 사용하지 않는다.
스팸 메일 분류를 이어서 생각하자. 분류기가 내놓은 예측 값은 네 가지 형태를 가질 수 있다.
| 실제 값 | 양성 예측 | 음성 예측 |
|---|---|---|
| 양성 | True Positive: TP | False Negative: FN |
| 음성 | False Positive: FP | True Negative: TN |
이때 "TP + FP + FN + TN = 총 샘플 수"이며, 이러한 분류를 두고 혼동행렬(confusion matrix)이라 부른다.
이때 우리가 알고 싶은 "골라낸 메일 중 진짜 스팸메일의 비율"과 "모든 스팸메일 중 골라낸 스팸메일의 비율"을 각각 정밀도(precision)와 재현율(recall)이라 부른다. 조금 풀어서 기술하면 다음과 같다.
현실적으로 정밀도와 재현율을 동시에 높이는 것은 어렵다. 정밀도가 올라가면 재현율이 내려가는 경우가 많고, 그 반대도 성립한다. 문제는 복합적이다. 분류기의 성능이 고정되어 있더라도, 데이터 풀에 존재하는 탐지해야 할 대상(지금은 스팸)의 비율이 달라지면, 정밀도와 재현율이 달라진다. 그러나 분류기의 성능은 또한 변수이다.
이때 정밀도를 Y축에, 재현율을 X축에 두어 정밀도-재현율 그래프(P-R 곡선)라 부르는 것을 그릴 수 있는데 Claude에게 부탁하여 실험 코드를 작성한 것을 보자.
스팸 분류기 P-R 곡선 실험
정상·스팸 점수를 두 정규분포로 모델링하고, 임계값을 옮겨가며 정밀도–재현율을 관찰한다.
① 점수 분포와 임계값
② P-R 곡선
정밀도
37.0%
재현율
84.1%
F1
51.4%
AP
0.62
ROC AUC
0.92
| 스팸으로 분류 | 정상으로 분류 | |
|---|---|---|
| 실제 스팸 | 841 | 159 |
| 실제 정상 | 1,431 | 7,569 |
메일 10,000통 기준 · 정상 점수~N(0,1), 스팸 점수~N(d′,1)
점수 분포란 우리의 분류기가 각 메일에 매긴 점수이며, 녹색 곡선은 실제로 정상인 메일의 점수 분포, 보라 곡선은 실제로 스팸인 메일의 점수 분포이다.
분류기의 성능이 좋다는 것은, 스팸 메일에 더 큰 점수를 부여하는 것으로 가정했다.
임계값은 분류기가 스팸으로 판단하는 임계값(threshold)이다.
스팸 비율과 분류기 성능을 고정하고 임계값을 조정하면, 고정된 P-R 곡선상에서 붉은 점이 이동하는 것을 볼 수 있다. 임계값이 매우 높게 설정되어, 아주 고득점의 메일만 스팸으로 분류하는 게으른 모델이라고 치자. 이 경우 붉은 점은 좌측으로 이동하며 높은 정밀도와 낮은 재현율을 보이게 된다. 반대로 많은 수의 정상 메일 또한 스팸으로 분류하는 공격적인 모델의 경우, 낮은 정밀도와 높은 재현율을 보이게 된다.
이러한 트레이드오프 관계 속에서 가장 적절한 임계값을 설정할 방법은 무엇일까? 학습 성능이 뛰어난 분류기가 무엇인지를 어떻게 골라낼 것인가? 직관에 따르면 다수 모델(지금부터 모델이라고 칭하겠다)이 그리는 각각의 P-R 그래프 중, 그것의 밑면적이 가장 넓은 모델이 높은 성능을 지녔다고 판단할 수 있다. 그러나 이 방법은 계산이 어렵고, 더 쉽게 계산 가능한 성능 측도로 손익분기점(break-even point, BEP)을 제안했다.
아이디어는 간단하다. 정밀도=재현율인 지점의 값이 BEP이다. 복수의 P-R 곡선에 대하여 BEP를 찍어보면 다음과 같다.
이시헌, 2026. P-R Curve & BEP
위 그림의 a < b < c 를 보라. BEP가 합당해 보이기는 하나, 지나치게 단순화 한 면이 있어서, 실제 분석에서는 잘 사용하지 않는다.
BEP 대신 자주 쓰이는 것이, F1 Score 이다.
F1 은 재현율과 정밀도의 조화평균이다. 즉, F1 = (2 P R) / (P + R) 로 간소화 할 수 있는데, 정밀도에만 의존하지도, 재현율에만 의존하지도 않게 모델을 평가할 수 있다.
예를 들어, P=0.90 R=0.10 일 때, 산술평균은 0.5, 기하평균은 0.3, 조화평균은 0.18이다. 즉, 치우침에 민감하다!
한편, 실제 모델이 사용될 환경에 따라, 정밀도와 재현율 중요도는 다를 수 밖에 없다. Zhou Zhihua의 글을 그대로 옮겨 예를 들면, "상품 추천 시스템의 경우에는 사용자들이 싫어할 만한 내용을 최대한 배제하면서 흥미를 느낄 만한 콘텐츠를 추천해야 합니다. 따라서 정밀도가 더 중요하다고 볼 수 있습니다. 반면, 범죄기록 검색의 경우에는 최대한 놓치는 내용을 적게 만드는 것이 중요하므로 재현율이 중요합니다."
이때 F1 스코어를 Fβ와 같이 기술하여, '정밀도/재현율'의 비율을 기입한다.
β = 1 이면 일반적인 F1 Score이고, β > 1 이면 재현율의 영향이 더 크고, β < 1 이면 정밀도의 영향이 더 크다.
한편, 다수의 이진 분류 혼동행렬을 얻은 경우, (P1, R1), (P2, R2), ... ,(Pn, Rn) 의 각 P와 R 값의 평균값을 macro-P, macro-R 이라 부르며, 이들로 만든 F1 Score를 macro-F1이라 부른다.
앞서 P-R 곡선 실험에, 분류기 성능을 AUC로 표현하였다. 그것을 추가로 알아보자.
결론부터 제시하면, ROC(Receiver Operating Characteristic; 레이더 신호 분석하던 군사기술에서 유래)는 참 양성률(True Positive Rate, TPR)과 거짓 양성률(False Positive Rate, FPR)의 쌍이다. 이때 참 양성률을 Y축에, 거짓 양성률을 X축에 놓고 곡선을 그리면, ROC 곡선이다.
구체적으로는 아래와 같다.
TPR = 재현율(recall) = TP / (TP + FN) = TP / (실제 양성 합계) FPR = FP / (FP + TN) = FP / (실제 음성 합계)
그렇다면 왜 이게 중요할까? 모델이 출력한 실숫값(혹은 확률값)이 임계치를 넘는지에 따라 양성/음성을 분류하는데, 이 분류 결과들을 묶어서 하나의 배열로 보아도 무방하다. 이때 이 "배열의 품질"은, "모델이 제대로 점수를 매기는가?"의 문제로 환원된다. 스팸메일을 다시 생각해보면, 적절한 차단점(cut point)을 설정하는 것으로 모델이 더 스팸메일일 가능성이 높다고 예측한 부분과 낮다고 예측한 부분을 잘 구분하여 잘라낼 수 있어야, 성능이 높다는 것이다. 즉, 점수 출력은 순서(정렬)의 문제로 환원되며, 이 순서의 품질을 ROC가 측정한다는 것이다.
P-R 그래프때와 마찬가지로, ROC에 기반을 두어 모델의 성능 차이를 평가하기 위해 ROC 곡선의 밑면적을 구해 볼 수 있고, 이것이 AUC(Area Under ROC Curve)이다.
그러나 현실에서 테스트 데이터의 개수는 유한하고, 제한된 데이터를 사용해 ROC 곡선을 그리면 매끄럽지 않다. 그러므로 {(x1, y1), (x2, y2), ..., (xm, ym)}의 FPR과 TPR 값으로 그린 그래프의 밑면적은, 다음과 같이 간결하게 구할 수 있다.
수식을 통해 보면, 결국 중요한 것은 정말로 "예측값들로 만든 배열의 순서 품질"이다.
이시헌, 2026. AUC
위 그림의 A와 B 모델이 동일한 메일을 분류했다고 치자.
A: 0.97 0.93 0.88 0.82 0.76 0.55 0.61 0.48 0.39 0.30 0.21 0.12
B: 0.91 0.84 0.72 0.59 0.47 0.26 0.78 0.66 0.53 0.40 0.33 0.15
앞 6개는 스팸, 뒤 6개는 정상으로 놓은 결과가 위의 순서이다. B의 경우 0.78, 0.66, 0.53과 같은 값이 스팸보다 앞에 섞여 있다. 둘을 정렬하면 다음과 같이 표현할 수 있다.
A:
점수: 0.97 0.93 0.88 0.82 0.76 0.61 0.55 0.48 0.39 0.30 0.21 0.12
라벨: S S S S S S H H H H H H
B:
점수: 0.91 0.84 0.78 0.72 0.66 0.59 0.53 0.47 0.40 0.33 0.26 0.15
라벨: S S H S H S H S H H S H
(ham: 정상메일)