앞서 로지스틱 회귀로 분류 모델을 만들었다면, 이제 그 모델이 얼마나 잘 맞히는지 평가할 차례다. 회귀 모델을 R²이나 RMSE로 쟀듯이, 분류 모델에는 전용 잣대가 따로 있다. 그 출발점이 혼동행렬(confusion matrix)이다.
이 글은 분류 성능지표를 혼동행렬에서부터 풀어간다. 네 칸이 무엇을 뜻하는지, 왜 정확도만 보면 속는지, 재현율과 정밀도가 어떻게 다른지, 그리고 F1·G-mean 같은 종합지표와 임계값 조정까지 이어서 짚는다.
혼동행렬 — 맞힘과 틀림의 네 칸
F1 경기에서 어떤 차의 리타이어 여부를 예측했다고 하자. 관심 있는 사건, 즉 우리가 잡아내고 싶은 쪽(리타이어)을 양성(Positive), 반대쪽(완주)을 음성(Negative)으로 둔다. 실제 결과와 예측을 교차하면 네 칸이 나온다.
| 예측: 완주 | 예측: 리타이어 | |
|---|---|---|
| 실제: 완주 | TN (정답) | FP (헛짚음, 1종 오류) |
| 실제: 리타이어 | FN (놓침, 2종 오류) | TP (정답) |
대각선의 TN·TP는 제대로 맞힌 경우다. 문제는 나머지 두 칸이다. FP는 멀쩡한 완주를 리타이어라 헛짚은 것으로, 가설검정에서 배운 1종 오류(α)와 정확히 같다. FN은 진짜 리타이어를 완주라 놓친 것으로 2종 오류(β)에 해당한다. 혼동행렬은 결국 그 1종·2종 오류를 개수로 펼쳐 놓은 표다.
정확도만 보면 속는다 — 클래스 불균형의 함정
가장 먼저 떠오르는 지표는 정확도(Accuracy)다. 전체 중 제대로 맞힌 비율, 즉 (TP + TN) / 전체다. 직관적이지만 함정이 있다.
아래 수치는 개념 설명을 위한 임의의 수치입니다.
완주 990건, 리타이어 10건인 데이터를 생각해 보자. 여기서 “무조건 완주”라고만 답하는 게으른 모델을 만들면, 990건을 맞혀 정확도는 99%가 나온다. 숫자만 보면 훌륭하다. 그런데 이 모델은 정작 잡아야 할 리타이어를 단 하나도 못 잡았다.
이 시나리오는 개념 설명을 위한 가상의 상황입니다. 실제 F1 팀의 전략과 다를 수 있습니다.
이렇게 한쪽 클래스가 압도적으로 많은 상황을 클래스 불균형이라 한다. 소수의 중요한 사건(리타이어·불량·이상)을 찾는 게 목적일 때, 정확도는 다수 클래스에 묻혀 모델의 무능을 가려버린다. 📍 그래서 불균형 데이터에서는 정확도를 성능지표로 쓰면 안 된다. 대신 소수 클래스를 겨냥한 지표가 필요하다.
재현율과 정밀도 — 놓치지 않기 vs 헛짚지 않기
소수 클래스(리타이어)를 겨냥한 두 지표가 재현율과 정밀도다. 둘은 분자가 같고(제대로 잡은 TP) 분모만 다르다.
재현율(Recall)은 실제 리타이어 중 몇 개를 잡았나다. TP / (TP + FN)로, “놓치지 않기”의 지표다. 실제 리타이어를 놓치면(FN) 값이 떨어진다. 앞의 게으른 모델은 리타이어를 하나도 못 잡았으니 재현율이 0이다.
정밀도(Precision)는 리타이어라고 예측한 것 중 몇 개가 진짜였나다. TP / (TP + FP)로, “헛짚지 않기”, 즉 예측의 신뢰도다. 멀쩡한 완주를 리타이어라 헛짚으면(FP) 값이 떨어진다.
| 지표 | 계산 | 한 줄 뜻 |
|---|---|---|
| 재현율(Recall) | TP / (TP + FN) | 실제 리타이어를 놓치지 않았나 |
| 정밀도(Precision) | TP / (TP + FP) | 리타이어라 한 게 진짜였나 |
두 지표는 한쪽만 높이기 쉬워 함께 봐야 한다. “무조건 리타이어”라고 답하면 실제 리타이어는 다 잡으니 재현율은 1이 되지만, 완주까지 전부 리타이어라 헛짚어 정밀도는 바닥이 된다. 반대로 아주 확실할 때만 리타이어라 하면 정밀도는 높지만 놓치는 게 많아 재현율이 낮아진다.
특이도와 종합지표 — F1과 G-mean
정상 쪽(완주)의 정확도를 보는 지표가 특이도(Specificity)다. 실제 완주 중 완주라 맞힌 비율 TN / (TN + FP)로, 1종 오류와 짝을 이룬다. 재현율이 소수 클래스의 정확도라면, 특이도는 다수 클래스의 정확도인 셈이다.
지표가 여럿이면 하나로 요약하고 싶어진다. 그래서 두 종합지표가 쓰인다. F1 스코어는 정밀도와 재현율의 조화평균으로, 소수 클래스(리타이어)를 얼마나 정확하고 신뢰성 있게 잡았는지를 하나로 압축한다. G-mean은 특이도와 재현율의 기하평균으로, 완주와 리타이어 양쪽 정확도가 모두 중요할 때 쓴다.
두 종합지표가 산술평균이 아니라 조화·기하평균을 쓰는 데는 이유가 있다. 이 평균들은 둘 중 한 값이 작아지면 전체를 더 크게 끌어내린다. 한쪽만 잘하고 다른 쪽을 방치하는 모델에 페널티를 줘, 양쪽 균형을 강하게 요구하는 엄격한 잣대가 된다.
임계값은 고정이 아니다
마지막으로 실무 팁 하나. 로지스틱 회귀가 내놓은 확률을 리타이어와 완주로 가르는 기준, 즉 임계값은 꼭 0.5일 필요가 없다. 놓침을 더 줄이고 싶으면 임계값을 0.4로 낮춰 리타이어로 더 자주 판정하고, 헛짚음을 줄이고 싶으면 0.6으로 높이면 된다.
임계값은 사용자가 목적에 맞게 조절하는 값이다. 보통 0.3에서 0.7 사이를 오가며 재현율과 정밀도의 균형점을 찾고, F1이나 G-mean이 가장 좋아지는 지점을 고른다. 이 지표들의 표준 정의는 scikit-learn 모델 평가 문서에서 확인할 수 있다.
분류 성능지표 핵심 요약
- 혼동행렬은 실제와 예측을 교차한 네 칸(TP·TN·FP·FN)으로, FP는 1종 오류·FN은 2종 오류에 대응한다.
- 정확도는 클래스 불균형에서 다수 클래스에 묻혀 무능한 모델도 높게 나오므로, 불균형 데이터에서는 쓰지 않는다.
- 재현율은 실제 양성을 놓치지 않았나(TP/(TP+FN)), 정밀도는 양성이라 한 게 진짜였나(TP/(TP+FP))를 본다.
- 특이도는 음성 클래스의 정확도이고, F1(정밀도·재현율 조화평균)·G-mean(특이도·재현율 기하평균)은 균형을 강제하는 종합지표다.
- 확률을 가르는 임계값은 0.5 고정이 아니라, 목적에 맞게 조절하는 사용자 파라미터다.







