모델을 학습했다면 "이 모델이 충분히 좋은가"를 숫자로 답해야 하는데, 그 숫자는 정확도 하나가 아니다. 이진 분류의 모든 지표는 네 칸짜리 표 하나에서 파생된다.
예측: Positive 예측: Negative
실제: Positive TP (참양성) FN (거짓음성)
실제: Negative FP (거짓양성) TN (참음성)
칸 뜻 다른 이름 현실의 이름 TP 양성을 양성으로 맞춤 — 사기를 사기로 적발 TN 음성을 음성으로 맞춤 — 정상 거래를 통과 FP 음성을 양성으로 잘못 예측 Type I error 허위 경보(false alarm) FN 양성을 음성으로 놓침 Type II error 누락(miss)
"Positive"는 보통 우리가 탐지하려는 드문/중요한 클래스 (사기, 질병, 이탈)로 잡는다. 어느 칸이 비싼가가 지표 선택을 결정한다.
도메인 FP가 일어나면 FN이 일어나면 더 비싼 쪽 암 선별 검사 불필요한 정밀검사·불안 환자를 놓쳐 생명 위험 FN 신용카드 사기 탐지 정상 결제 차단, 고객 불만 사기 손실 발생 FN (보통)스팸 필터 중요한 메일이 스팸함으로 유실 스팸 몇 통이 받은편지함에 FP 제품 추천 엉뚱한 추천으로 신뢰 하락 좋은 상품을 안 보여줌 FP 설비 예지정비 멀쩡한 장비 점검 비용 고장 방치 → 라인 정지 FN
시험에서 지표 선택 문제는 대개 "FP와 FN 중 어느 쪽 비용이 큰가"로 환원된다. 질병을 놓치는 FN이 치명적이면 재현율을, 정상 메일을 스팸으로 분류하는 FP가 치명적이면 정밀도를 우선한다. 비즈니스 맥락을 혼동행렬의 한 칸으로 번역하는 훈련이 핵심이다.
Accuracy = (TP + TN) / (TP + TN + FP + FN)
전체 예측 중 맞춘 비율이다. 클래스가 균형 잡혀 있을 때는 훌륭하지만, 불균형 데이터에서는 무력하다.
예: 사기 거래 1%, 정상 99%
모든 거래를 "정상"으로 찍는 더미 모델
→ Accuracy = 99% (그러나 사기는 단 한 건도 못 잡음)
이 99%는 모델이 유용하다는 증거가 전혀 아니다. 왜 이런 일이 생기는지는 혼동행렬로 보면 즉시 드러난다.
[사기 1%, 표본 10,000건 / "전부 정상" 더미 모델]
예측: 사기 예측: 정상
실제: 사기 TP = 0 FN = 100
실제: 정상 FP = 0 TN = 9,900
Accuracy = (0 + 9,900) / 10,000 = 99.0% ← 훌륭해 보인다
Recall = 0 / (0 + 100) = 0.0% ← 실상
Precision = 0 / (0 + 0) = 정의 불가
정확도가 높은 이유는 분자에 거대한 TN이 들어 있기 때문 이다. 소수 클래스 성능은 분자에 거의 기여하지 못한다.
불균형 데이터의 정확도 기준선은 0이 아니라 다수 클래스 비율 (여기선 99%)이다. 그 기준선을 넘지 못하면 모델은 무의미하다.
⚠️ 함정 : "정확도 99.5%인데 왜 문제인가"라는 지문이 나오면 답은 거의 항상 "다수 클래스만 찍어도 그 값이 나오는 극단적 불균형"이다. 정확도 수치 자체가 아니라 클래스 비율과 비교 해야 한다.
Precision = TP / (TP + FP) ← 예측한 양성 중 진짜 비율
Recall = TP / (TP + FN) ← 실제 양성 중 잡아낸 비율
지표 분모 읽는 방향 무엇을 줄이나 대표 상황 정밀도(Precision) 예측 양성 (TP+FP) 혼동행렬의 열 FP 스팸 필터, 제품 추천 재현율(Recall) 실제 양성 (TP+FN) 혼동행렬의 행 FN 암 진단, 사기 탐지 특이도(Specificity) 실제 음성 (TN+FP) 음성 쪽 행 FP 정상을 정상으로 지키기
재현율은 민감도(Sensitivity) , TPR(True Positive Rate) 과 같은 말이다. 시험에서 이름만 바꿔 나온다.
특이도 = TN / (TN + FP)이며, 1 − 특이도가 곧 FPR이다.
정밀도와 재현율은 보통 한쪽을 올리면 다른 쪽이 내려간다. 임계값을 낮춰 더 많이 Positive로 분류하면 재현율은 오르지만 정밀도는 떨어진다.
임계값 낮춤 ──────────────────────────────→ 임계값 높임
Positive 예측 많아짐 Positive 예측 적어짐
Recall ↑ Precision ↓ Precision ↑ Recall ↓
FN 감소, FP 증가 FP 감소, FN 증가
극단: 전부 Positive 극단: 전부 Negative
Recall = 1.0, Precision = 양성비율 Recall = 0, Precision = 정의 불가
정밀도와 재현율의 분모를 기억하면 헷갈리지 않는다. 정밀도의 분모는 "예측한 양성(TP+FP)" — 예측을 기준으로 한 열(column) 정확도다. 재현율의 분모는 "실제 양성(TP+FN)" — 실제를 기준으로 한 행(row) 적중률이다. 즉 정밀도는 예측의 신뢰도, 재현율은 탐지의 완전성을 잰다.
F1 = 2 × (Precision × Recall) / (Precision + Recall)
정밀도와 재현율을 하나의 숫자로 합치되, 산술평균이 아니라 조화평균 을 쓴다. 조화평균은 두 값 중 작은 쪽에 더 민감해서, 한쪽만 높고 한쪽이 낮으면 점수가 크게 깎인다.
Precision=0.9, Recall=0.1
산술평균 = 0.5 (그럴듯해 보임)
F1 = 2 × (0.9 × 0.1) / (1.0) = 0.18 (실상을 드러냄)
F1은 FP와 FN을 비슷하게 중요시하면서 불균형 데이터를 평가할 때 기본 지표 로 쓴다.
한쪽에 가중치를 주려면 일반화된 F-beta 를 쓴다: F_β = (1+β²) × P × R / (β²×P + R).
지표 β 강조하는 쪽 언제 F1 1 균형 FP·FN 비용이 비슷 F2 2 재현율 놓치면 안 되는 탐지(질병·사기) F0.5 0.5 정밀도 오탐이 비싼 경우(스팸·추천)
[사기 탐지 / 표본 10,000건, 실제 사기 100건]
예측: 사기 예측: 정상
실제: 사기 TP = 60 FN = 40
실제: 정상 FP = 240 TN = 9,660
Accuracy = (60 + 9,660) / 10,000 = 97.2%
Precision = 60 / (60 + 240) = 20.0%
Recall = 60 / (60 + 40) = 60.0%
Specificity = 9,660 / (9,660 + 240) = 97.6%
F1 = 2 × (0.20 × 0.60) / 0.80 = 30.0%
정확도 97.2%는 "전부 정상" 더미의 99%보다 오히려 낮다 . 정확도만 보면 이 모델을 버리게 된다.
그러나 재현율 60%는 사기 100건 중 60건을 실제로 잡아냈다는 뜻이다. 불균형에서 봐야 할 숫자는 이쪽이다.
정밀도 20%는 경보 5건 중 1건만 진짜라는 뜻 — 조사 인력 비용을 감당할 수 있는지가 임계값 결정의 재료가 된다.
상황 클래스 균형 우선 지표 정확도를 못 믿는 이유 사기 탐지 (양성 0.5%) 극단 불균형 재현율 → F1/F2 전부 정상으로 찍어도 99.5% 의료 진단 선별 검사 불균형 재현율(민감도) 유병률이 낮아 정확도가 부풀려짐 스팸 필터 중간 정밀도 → F0.5 정상 메일 유실이 정확도에 거의 안 잡힘 추천 시스템 불균형 정밀도(상위 K) 안 본 항목이 대부분이라 TN이 지배 이탈(churn) 예측 불균형 재현율 + 정밀도 균형(F1) 이탈률이 낮아 정확도가 무의미 이미지 다중 분류(균형) 균형 정확도, Macro-F1 (균형이면 정확도도 유효) 품질 검사(불량 탐지) 극단 불균형 재현율 불량률이 1% 미만이면 정확도 무력
지표를 볼 때는 "아무것도 안 하는 모델이 받는 점수"와 비교해야 한다. 양성 비율을 p로 둔다.
더미 전략 정확도 정밀도 재현율 F1 전부 Negative로 예측 1 − p (p=0.01이면 99% ) 정의 불가 0 0 전부 Positive로 예측 p p 1.0 2p/(1+p) 무작위 예측(확률 p) 대략 1 − 2p(1−p) p p p
⚠️ 함정 : 정확도의 기준선은 0.5가 아니라 다수 클래스 비율 이다. p=0.01인 문제에서 정확도 98%는 더미보다 나쁜 모델이다. 반면 정밀도·재현율·F1의 기준선은 p 수준으로 낮아, 불균형에서도 개선 폭이 그대로 보인다.
분류 모델을 평가해야 한다
├─ 클래스가 대체로 균형인가? (소수 클래스 ≳ 20%)
│ ├─ 예 → 정확도 사용 가능 (+ 보조로 F1)
│ └─ 아니오 ↓
├─ FN(놓침)의 비용이 압도적인가? (질병·사기·불량)
│ ├─ 예 → 재현율 우선, 정밀도 하한을 제약으로 (F2도 고려)
│ └─ 아니오 ↓
├─ FP(오탐)의 비용이 압도적인가? (스팸·추천·자동 차단)
│ ├─ 예 → 정밀도 우선 (F0.5도 고려)
│ └─ 아니오 ↓
└─ 둘 다 비슷하게 중요 → F1 (다중 클래스면 Macro-F1)
클래스가 셋 이상이면 클래스별 정밀도/재현율을 어떻게 묶을지 정해야 한다.
방식 계산 특징 Macro 클래스별 지표를 단순 평균 소수 클래스도 동등 취급 → 불균형 시 소수 클래스 중요할 때 Micro 전체 TP/FP/FN을 합산 후 계산 큰 클래스가 지배 → 전체 인스턴스 기준 성능 Weighted 클래스 표본 수로 가중 평균 클래스 비율 반영
[클래스 A: 9,000건 / 클래스 B: 500건 / 클래스 C: 50건]
Macro : (F1_A + F1_B + F1_C) / 3 ← C가 A와 같은 무게
Weighted : F1을 9000:500:50 으로 가중 ← A가 사실상 결과를 결정
Micro : TP·FP·FN을 전부 합쳐 한 번 계산 ← 역시 A가 지배
"소수 클래스 성능까지 동등하게 보고 싶다"는 지문에 Weighted를 고르면 오답이다. Weighted는 표본 수로 가중하므로 다수 클래스가 여전히 결과를 지배한다. 동등 취급은 Macro 뿐이다.
빌트인 알고리즘과 Automatic Model Tuning은 이 지표들을 CloudWatch와 학습 로그로 내보낸다. XGBoost 이진 분류에서 튜닝 목적 지표를 F1으로 잡는 예:
from sagemaker.tuner import HyperparameterTuner
tuner = HyperparameterTuner(
estimator = xgb_estimator,
objective_metric_name = "validation:f1" , # 불균형 데이터 → f1 최적화
objective_type = "Maximize" ,
hyperparameter_ranges = ranges,
max_jobs = 20 ,
max_parallel_jobs = 3 ,
)
validation:accuracy 대신 validation:f1을 목적 지표로 두면 튜너가 불균형을 무시한 채 정확도만 올리는 모델을 고르는 사고를 막을 수 있다.
평가지표는 학습이 끝난 뒤의 채점표일 뿐 아니라, 하이퍼파라미터 튜닝의 나침반 이다. objective_metric_name을 잘못 잡으면 튜너는 정확히 잘못된 방향으로 최적화한다. 따라서 "이 비즈니스 문제의 올바른 목적 지표는 무엇인가"는 학습 전에 결정해야 하는 모델링 의사결정이다.
지문 단서 고를 답 이유 "양성이 0.5%인데 정확도 99.5%" 정확도는 신뢰 불가 → 정밀도/재현율/F1 다수 클래스만 찍어도 나오는 값 "환자를 놓치면 생명이 위험" 재현율(Recall) 분모에 FN이 들어감 "정상 메일이 스팸함으로 가면 큰 피해" 정밀도(Precision) 분모에 FP가 들어감 "FP와 FN을 모두 신경 써야 한다" F1 점수 조화평균으로 양쪽 균형 "재현율을 더 강조하고 싶다" F2 (F-beta, β>1) β가 클수록 재현율 가중 "5개 클래스, 소수 클래스도 동등 반영" Macro 평균 클래스별 지표 단순 평균 "전체 인스턴스 기준 성능이 궁금" Micro 평균 TP/FP/FN 합산 후 계산 "튜닝 목적 지표를 무엇으로" (불균형 이진) validation:f1, Maximize정확도 목적은 불균형을 무시 "정밀도 0.95, 재현율 0.10" F1 ≈ 0.18, 양성 대부분 놓침 조화평균은 낮은 쪽에 민감
내일은 임계값을 조정하며 정밀도-재현율 트레이드오프를 시각화하는 ROC 곡선과 PR 곡선, 그리고 AUC를 다룬다.
혼동행렬(confusion matrix) : 실제 라벨과 예측 라벨을 교차시킨 표. 모든 분류 지표가 여기서 나온다.
TP / TN : 양성을 양성으로, 음성을 음성으로 제대로 맞춘 건수.
FP (거짓양성, Type I error) : 아닌 것을 맞다고 잘못 외친 것. 허위 경보.
FN (거짓음성, Type II error) : 맞는 것을 아니라고 놓친 것. 누락.
정밀도(Precision) : 모델이 "양성"이라고 한 것 중 실제로 맞은 비율. 예측의 신뢰도.
재현율(Recall) / 민감도 / TPR : 실제 양성 전부 중 모델이 찾아낸 비율. 탐지의 완전성.
특이도(Specificity) : 실제 음성 중 음성으로 제대로 분류한 비율. TN/(TN+FP).
F1 점수 : 정밀도와 재현율의 조화평균. 둘 중 낮은 쪽에 민감해 한쪽만 좋은 모델을 걸러낸다.
F-beta : F1을 일반화한 지표. β>1이면 재현율을, β<1이면 정밀도를 더 중시한다.
Macro / Micro / Weighted 평균 : 다중 클래스에서 클래스별 지표를 묶는 세 방식. 각각 동등 가중 / 전체 합산 / 표본 수 가중.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
신용카드 사기 탐지 모델에서 사기 거래는 전체의 0.5%다. 한 모델이 정확도 99.5%를 기록했다. 이 정확도를 신뢰할 수 없는 가장 큰 이유는?
A 정확도는 회귀에서만 쓰는 지표이기 때문 B 정확도는 항상 재현율보다 낮게 계산되기 때문 C 정확도는 다중 클래스에서만 의미가 있기 때문 D 모든 거래를 "정상"으로 찍어도 99.5% 정확도가 나오는 극단적 불균형이기 때문 암 선별 검사 모델을 평가한다. 환자(양성)를 정상으로 놓치는 일(FN)이 가장 위험하다. 우선해야 할 지표는?
A 재현율(Recall) B 정밀도(Precision) C 특이도(Specificity) D 정확도(Accuracy) 어떤 모델의 정밀도가 0.95, 재현율이 0.10이다. 이 둘을 균형 있게 반영하는 F1 점수는 대략 얼마이며 무엇을 시사하는가?
A 약 0.53 — 두 지표의 산술평균으로 양호하다 B 약 0.18 — 재현율이 매우 낮아 실제 양성을 대부분 놓치고 있다 C 약 0.95 — 정밀도가 높으므로 우수하다 D 약 0.10 — F1은 항상 재현율과 같다 스팸 필터에서 정상 메일을 스팸함으로 보내는 일(FP)이 사용자에게 가장 큰 피해를 준다. 모델 평가 시 우선해야 할 지표는?
A 재현율(Recall) B F2 점수(재현율 가중) C 정밀도(Precision) D FN의 절대 개수 클래스가 5개이고 일부 클래스의 표본이 매우 적은 다중 분류 문제에서, 소수 클래스의 성능까지 동등하게 반영해 평가하고 싶다. 적절한 평균화 방식은?
A Micro 평균 B 단순 정확도 C Weighted 평균 D Macro 평균