← AI 놀이터 홈으로

🏥 정확도의 함정 — 혼동 행렬과 정밀도·재현율 (Confusion Matrix & Precision·Recall)

'전원 정상!'만 외치는 게으른 AI도 희귀병 검사에서 정확도 90%가 나와요. 정확도만 믿으면 안 되는 이유를 직접 확인해 봅시다.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. 희귀병 검사장에 오신 걸 환영해요

200명이 혈액 검사를 받았어요. 진짜 환자는 딱 20명(🔴 빨강), 나머지 180명(🔵 파랑)은 정상이에요. 가로축은 검사 수치(0~10)이고, 환자는 대체로 수치가 높게 나오지만 두 무리가 겹치는 구간이 있어요. 보라 선이 판정 임계값 t — AI는 수치가 이 선보다 크면 "환자다!"라고 판정합니다. 환자는 20명뿐이라 위쪽에 점(rug plot)으로도 한 명 한 명 찍어 뒀어요.

가로축은 검사 수치(0~10). 파란 막대는 정상인 180명, 빨간 막대는 환자 20명의 분포예요 (환자는 수가 적어 빨강은 자기 최대 높이 기준으로 따로 키워 그렸고, 위쪽 빨간 점이 환자 한 명 한 명의 실제 수치예요). 보라 세로선이 판정 임계값 t — 이 선의 오른쪽(옅은 보라 구역)에 있으면 "환자다!"라고 판정합니다. 두 색이 겹치는 구간에서는 어디에 선을 그어도 실수가 생길 수밖에 없어요.

🧩 혼동 행렬 — 실수를 4칸으로 쪼개 보기

판정: 환자 🚨판정: 정상 ✅
실제
환자 🔴
0
잡아낸 환자 (TP)
0
놓친 환자! (FN)
실제
정상 🔵
0
억울한 정상인 (FP)
0
제대로 통과 (TN)

행은 실제, 열은 AI의 판정이에요. 칸이 진할수록 사람이 많아요. 대각선(TP·TN)은 맞힌 것, 나머지 두 칸이 실수 — FN은 놓친 환자, FP는 억울한 정상인입니다. 임계값을 움직이면 실수가 한쪽 칸에서 다른 칸으로 옮겨 가는 걸 보세요.

🎛️ 판정 기준 조절하기

📊 지금 상태

정확도 (맞힌 비율)
—
정밀도 (환자 판정 중 진짜)
—
재현율 (환자 중 잡아낸 비율)
—
F1 (정밀도·재현율 균형)
—

임계값을 최대로 올려 보세요 — 정확도는 90%인데 재현율은 0%! 정밀도가 —로 나오면 환자 판정을 한 명도 안 해서 계산 자체가 불가능하다는 뜻이에요.

🧮 수식과 파이썬

정밀도 = TP / (TP + FP)   ·   재현율 = TP / (TP + FN)
정밀도: 환자라고 한 사람 중 진짜 환자 비율 / 재현율: 진짜 환자 중 놓치지 않은 비율
🐍 파이썬 코드로 보면? (펼치기)
from sklearn.metrics import confusion_matrix, classification_report

t = 5.0                                   # 판정 임계값
y_true = [1] * 20 + [0] * 180             # 실제: 환자 20명 + 정상 180명
y_pred = [int(x > t) for x in scores]     # 수치가 t보다 크면 환자(1) 판정

# 혼동 행렬 — sklearn은 [[TN, FP], [FN, TP]] 순서로 줘요
print(confusion_matrix(y_true, y_pred))

# 정밀도(precision)·재현율(recall)·F1을 표로 한 번에
print(classification_report(
    y_true, y_pred, target_names=["정상", "환자"]))