Ch.10

분류 평가 지표 (Evaluation): 혼동 행렬과 모델의 성적표

분류 인공지능 모델이 시험을 치른 후 받는 '상세 성적표'에 대해 알아봅니다. 단순히 "전체 문제 중 몇 점 맞았어?"(정확도)라고 묻는 것을 넘어, "어떤 문제를 어떻게 틀렸어?"를 꼼꼼히 따져보는 혼동 행렬(Confusion Matrix)의 개념을 배웁니다. 스팸 메일 필터나 암 진단 AI처럼 실생활에서 '틀리는 방식'이 치명적인 결과를 낳을 수 있는 비즈니스 상황에서, 정밀도, 재현율, F1 점수 같은 다채로운 지표들이 어떻게 모델의 진짜 실력을 증명해 주는지 직관적인 비유와 함께 설명합니다.

챕터별 머신러닝 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 머신러닝 흐름을 한눈에 보세요.

실제(행)와 예측(열)으로 2×2 혼동 행렬을 채운 뒤, 정확도·정밀도·재현율·F1을 계산합니다.

예측 양성예측 음성실제 양성실제 음성TPFNFPTN혼동 행렬 (2×2)실제 양성 · 예측 양성 → TPTP: 맞춘 양성 ✓FN: 놓침 (실제 양성→예측 음성)FP: 오탐 (실제 음성→예측 양성)TN: 맞춘 음성 ✓

혼동 행렬로 분류 모델의 성적표를 읽고, 목적에 맞는 지표를 고릅니다.

분류 평가 지표: 혼동 행렬과 모델의 성적표

혼동 행렬(Confusion Matrix)이란? 인공지능의 상세 성적표 — 학교 시험에서 '맞은 개수'만 달랑 보면 이 학생이 수학을 잘하는지 영어를 잘하는지 알 수 없습니다. 분류 모델도 마찬가지로, 모델이 예측한 결과와 실제 정답(행), 그리고 모델의 예측(열)을 나란히 비교해 2×2 표로 만든 것을 혼동 행렬이라고 합니다. 이 표의 네 칸을 들여다보면 모델이 무엇을 잘 맞히고 어떤 부분에서 '혼동'을 겪으며 헛발질을 하고 있는지 한눈에 파악할 수 있습니다.
네 칸의 비밀: TP, TN, FP, FN — 유명한 '양치기 소년과 늑대' 비유로 이해해 볼까요? 여기서 '양성(Positive)'은 늑대가 나타났다고 외치는 것이고, '음성(Negative)'은 평화로운 상태입니다.
* TP (맞춘 양성, True Positive): 실제 늑대가 왔고
(1) , 소년도 늑대라고 외침
(1) . 마을을 구한 최고의 상황입니다.
* TN (맞춘 음성, True Negative): 늑대가 안 왔고(0), 소년도 얌전히 조용함(0). 평화로운 상황입니다.
* FP (오탐, False Positive): 늑대가 안 왔는데(0), 소년이 늑대라고 거짓말함
(1) . 마을 사람들이 무기를 들고 뛰어나오는 헛고생을 합니다. (False Alarm)
* FN (놓침, False Negative): 실제 늑대가 왔는데
(1) , 소년이 자느라 조용함(0). 양들이 다 잡아먹히는 최악의 대참사입니다. (Miss)
* 전체 데이터 개수 n=TP+TN+FP+FNn = \mathrm{TP} + \mathrm{TN} + \mathrm{FP} + \mathrm{FN} 입니다.
정확도(Accuracy)의 아찔한 함정 — 전체 문제 중에서 정답을 맞힌 비율을 의미합니다. 수식으로는 정확도=TP+TNn\text{정확도} = \frac{\mathrm{TP}+\mathrm{TN}}{n} 입니다. 아주 직관적이지만 무서운 함정이 있습니다. 만약 100일 중 99일이 평화롭고 단 1일만 늑대가 온다고 가정해 봅시다. 매일 눈을 감고 "늑대 안 와!"라고만 외치는 바보 로봇도 정확도는 무려 99%가 나옵니다. 진짜 잡아야 할 늑대(양성)가 매우 적은 '불균형한 데이터' 상황에서는 정확도라는 숫자 하나만 믿으면 절대 안 됩니다.
정밀도(Precision)와 재현율(Recall): 쫓아야 할 두 마리 토끼
* 정밀도 (신중함의 척도): "내가 늑대라고 외쳤을 때, 그게 진짜 늑대일 확률이 얼마나 돼?" 모델이 양성이라고 예측한 것 중 진짜 양성의 비율입니다. 정밀도=TPTP+FP\text{정밀도} = \frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FP}}. 거짓말(FP)을 안 하고 확실할 때만 말할수록 올라갑니다.
* 재현율 (예민함의 척도): "실제 늑대가 나타난 사건들 중에서, 내가 몇 번이나 눈치채고 경고했어?" 실제 양성 중에서 모델이 맞힌 비율입니다. 재현율=TPTP+FN\text{재현율} = \frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}. 단 한 마리의 늑대도 놓치지 않을수록(FN이 적을수록) 올라갑니다.
F1 점수 (F1 Score): 정밀도와 재현율의 황금 밸런스 — 정밀도와 재현율은 시소와 같아서, 하나를 높이려고 무리하면 다른 하나가 뚝 떨어지기 마련입니다. 이 둘을 하나의 숫자로 깔끔하게 요약한 점수가 F1 점수입니다. 일반적인 평균이 아닌 조화평균을 사용합니다. F1=2TP2TP+FP+FN\text{F1} = \frac{2 \cdot \mathrm{TP}}{2\cdot\mathrm{TP}+\mathrm{FP}+\mathrm{FN}}. 조화평균의 마법 덕분에, 정밀도나 재현율 둘 중 하나라도 형편없이 낮으면 F1 점수도 바닥을 치게 됩니다. 어느 한쪽에 치우치지 않는 훌륭한 균형감을 가진 모델을 찾고 싶을 때 주로 씁니다.
AUC (Area Under the ROC Curve): 모델의 등급 판정기 — 모델이 단순히 "양성/음성"으로만 답을 내는 게 아니라, "90% 확률로 늑대다"처럼 확률 점수를 줄 때 평가하는 지표입니다. 0부터 1 사이의 값으로 나오며, 진짜 양성인 데이터에게 진짜 음성인 데이터보다 대체로 더 높은 확률 점수를 잘 부여하는지(구분력)를 봅니다. 1점 만점이면 정답을 완벽하게 줄 세운 것이고, 0.5점이면 눈 감고 동전을 던져서 찍는 것과 같습니다. 임계값을 이리저리 바꾸기 전에 모델 자체의 튼튼한 '기초 체력'을 비교할 때 아주 유용합니다.
정확도 99%의 거짓말에 속지 않기 위해 — 신용카드 사기 탐지 AI를 만들었다고 상상해 봅시다. 10만 건의 결제 중 사기 결제는 단 1건입니다. AI가 아무 일도 안 하고 무조건 "전부 정상 결제입니다"라고만 찍어도 정확도는 99.999%가 나옵니다. 하지만 이 AI는 사기꾼을 단 한 명도 잡지 못하는(재현율 0%) 쓸모없는 모델입니다. 혼동 행렬을 그려 정밀도재현율을 뜯어보아야만 모델이 진짜 제 역할을 하고 있는지, 아니면 꼼수를 부리고 있는지 낱낱이 밝혀낼 수 있습니다.
실무는 '어떤 실수를 더 용납할 수 있는가'의 치열한 싸움입니다 — 비즈니스 목적에 따라 목숨을 걸어야 하는 지표가 달라집니다.
* 재현율(놓침 방지)이 생명인 곳: 암 진단 모델. 건강한 사람을 암 환자로 오해(FP)해서 재검사를 받게 하더라도, 진짜 암 환자를 놓쳐서(FN) 치료 시기를 놓치게 만드는 대참사는 무조건 막아야 합니다.
* 정밀도(오탐 방지)가 생명인 곳: 스팸 메일 필터. 진짜 스팸 메일 한두 개를 놓쳐서(FN) 내 편지함에 들어오는 건 지우면 그만이지만, 사장님이 보낸 중요한 업무 메일을 스팸으로 오해(FP)해서 스팸함에 처박아버리면 회사 생활에 큰 위기가 찾아옵니다.
AI 서비스의 최종 합격 여부 심사 (이진 분류 평가) — 코로나19 양성/음성 판정, 유튜브의 유해 영상 차단/허용, 은행의 대출 승인/거절 등 두 가지 중 하나를 고르는 수많은 실무 AI 프로젝트들이 배포되기 직전, 혼동 행렬을 그려 정밀도와 재현율, F1 점수를 종합적으로 검토받습니다.
알람의 민감도 조절하기 (임계값 튜닝) — AI는 보통 0부터 1 사이의 확률을 내놓습니다. "확률이 몇 % 이상일 때 알람을 울릴까?" 이 기준선(임계값)을 조절하면서 비즈니스 상황에 맞게 모델을 길들입니다. 보안이 극도로 삼엄한 국가 기관이라면 기준을 팍 낮춰서 조금만 이상해도 알람이 울리게(재현율 극대화) 만들고, 반대로 알림이 너무 자주 울려 사용자가 짜증을 내는 앱이라면 기준을 깐깐하게 높여서 아주 확실할 때만 알람이 울리게(정밀도 극대화) 세팅합니다.
분류 모델의 성능을 볼 때는 맞힌 개수만 보지 않고, 혼동 행렬로 실제(행)와 예측(열)을 2×2로 나누어 TP, TN, FP, FN을 채웁니다. 정확도는 (TP+TN)을 전체 n으로 나눈 값으로, 전체 중 맞힌 비율을 나타냅니다. 정밀도는 양성이라고 예측한 것(TP+FP) 중 진짜 양성(TP)인 비율이고, 재현율은 실제 양성(TP+FN) 중 모델이 양성으로 맞힌(TP) 비율입니다. 클래스가 불균형할 때는 정확도만 보면 오해하기 쉬우므로, 업무 목적에 따라 정밀도(오탐 줄이기)나 재현율(놓침 줄이기)을 중시하고, 둘의 균형은 F1으로 봅니다. 실무에서는 스팸·진단·사기 탐지 등에서 이 지표들을 조합해 모델을 선택하고 임계값을 조정합니다.
각 지표의 정확한 의미 (서술형)
- TP(True Positive): 실제로는 양성
(1) 인데 모델도 양성
(1) 이라고 예측한 경우의 개수이다. 즉 맞춘 양성이다.
- TN(True Negative): 실제로는 음성(0)인데 모델도 음성(0)이라고 예측한 경우의 개수이다. 즉 맞춘 음성이다.
- FP(False Positive): 실제로는 음성(0)인데 모델이 양성
(1) 이라고 예측한 경우의 개수이다. 오탐이라고 부른다.
- FN(False Negative): 실제로는 양성
(1) 인데 모델이 음성(0)이라고 예측한 경우의 개수이다. 놓침이라고 부른다.
- 정확도: 전체 샘플 개수 n=TP+TN+FP+FNn = \mathrm{TP}+\mathrm{TN}+\mathrm{FP}+\mathrm{FN} 중에서 맞힌 개수(TP+TN)의 비율이다. 즉 전체 중 몇 퍼센트를 맞혔는지를 한 숫자로 나타낸다.
- 정밀도: 모델이 양성이라고 예측한 것 전체(TP+FP) 중에서 진짜 양성(TP)인 비율이다. "양성이라고 한 것 중 얼마나 맞췄는가"를 뜻한다.
- 재현율: 실제로 양성인 것 전체(TP+FN) 중에서 모델이 양성으로 맞힌(TP) 비율이다. "진짜 양성을 얼마나 잡았는가"를 뜻한다.
- F1: 정밀도와 재현율을 한 숫자로 요약한 조화평균이다. 정밀도만 높거나 재현율만 높으면 F1은 낮게 나오므로, 둘의 균형을 볼 때 쓴다.
- AUC: 모델이 부여한 점수(확률)로 진짜 양성이 진짜 음성보다 대체로 높은 점수를 받는지를 0~1 사이 하나의 숫자로 요약한 값이다. 임계값과 무관하게 구분력을 보고 싶을 때 쓴다.