콘텐츠로 이동

분류 지표와 곡선

기존 운영 모델의 예측 비율 증가에 대응하려면 Candidate A와 Candidate B 가운데 어느 모델이 배포 기준을 만족하는지 비교해야 합니다. 두 후보를 비교하려면 정밀도, 재현율, 놓침과 미리 정한 보호 기준을 어떤 순서로 읽을지부터 정합니다.

APPROVE와 HOLD는 가장 높아 보이는 숫자를 고른 결과가 아닙니다. 미리 정한 배포 기준을 모두 만족했는지 확인한 결과입니다. 후보별 예상과 생각을 바꿀 조건을 먼저 기록하고, 오후에 공식 결과가 그 기준을 어떻게 충족하는지 확인합니다.

이 문서에서 답할 세 가지 질문

  • 어떤 자료에서 나온 수치만 후보 모델 비교에 사용할 수 있는가?
  • 점수와 임계값은 어떻게 최종 예측을 만들며, 왜 임계값 하나만으로 판단할 수 없는가?
  • 높은 정밀도 하나만으로 후보를 승인할 수 없는 이유는 무엇인가?

평가 결과의 비교 조건

모델 평가 숫자는 같은 대상 집합, 같은 특성, 같은 정답, 같은 데이터 분할에서 나왔을 때만 비교할 수 있습니다. 이 교재에서는 레코드(record) 단위 특성 4,000건을 train 2,900건, valid 600건, 최종 평가용 test 400건, 정답이 없는 operational 100건으로 나누어 각 자료의 역할을 정했습니다.

train과 valid는 모델을 준비하고 확인하는 데 쓰는 자료입니다. test는 모델과 임계값을 정한 뒤 최종 평가에 한 번만 사용합니다. operational 자료는 API와 운영 기록을 확인하기 위한 입력이므로 정답이 없습니다. 따라서 이 자료로 새 정밀도나 재현율을 계산하지 않습니다.

평가 기준은 테스트 결과를 보기 전에 정합니다. 임계값과 배포 기준을 미리 정해 두면, 결과가 나온 뒤 숫자가 좋아 보이도록 기준을 바꾸는 일을 막을 수 있습니다. 공식 평가 결과는 이 조건으로 최종 평가 데이터를 한 번 평가해 남긴 기록입니다.

자료별 역할

  • train과 valid는 모델과 설정을 준비하는 자료입니다.
  • test는 고정한 조건을 마지막으로 확인하는 자료입니다.
  • operational은 API와 운영 기록을 보는 입력이므로 정답 기반 지표를 다시 계산하는 자료가 아닙니다.

train·valid, test, operational, 공식 평가 결과는 목적이 서로 다릅니다. 역할을 섞으면 숫자가 같아 보여도 비교 조건이 달라집니다.

자료 들어 있는 것 자료의 역할
train / valid 정답이 있는 개발용 자료 특성과 모델 설정을 준비한 과정을 이해합니다
test 정답이 있는 최종 평가 데이터 미리 정한 배포 기준을 만족했는지 확인합니다
operational 정답이 없는 API 요청 자료 API와 운영 기록을 확인합니다
공식 평가 결과 최종 평가 데이터와 평가 기준을 함께 기록한 파일 Candidate A/B의 모델 평가 결론을 설명합니다

운영 요청의 점수 분포가 달라졌다면 원인을 조사할 수 있습니다. 하지만 같은 정답으로 비교한 결과가 아니므로, 공식 평가 결과를 새로 만든 것은 아닙니다.

평가 수치의 적용 범위

정밀도(Precision), 재현율(Recall), 미탐(false negative, FN), 정밀도-재현율 곡선 아래 면적(Precision-Recall Area Under the Curve, PR-AUC)은 교육용 high_risk 분류를 평가하는 수치이며 실제 의료 판단을 대신하지 않습니다.

최종 평가 결과를 본 뒤 임계값이나 기준을 다시 맞추면 승인 근거를 신뢰할 수 없습니다. 이 교재에서는 최종 평가 데이터를 다시 사용하지 않고, 한 번 계산해 남긴 공식 평가 결과를 해석합니다.

점수와 예측의 관계

점수는 모델이 한 입력을 high_risk 쪽으로 보는 정도를 0과 1 사이의 값으로 나타낸 것입니다. 임계값은 그 점수를 최종 예측으로 바꾸는 기준입니다. 이 교재의 API는 score >= threshold일 때 high_risk를 반환합니다. 0과 1 사이의 점수라고 해서 그 수치가 실제 발생 비율과 일치하는 보정된 확률이라고 단정하지 않습니다.

예시 점수는 공식 평가 결과나 특정 API 응답이 아니므로 배포 판단 기록에 쓸 수 없습니다. 점수·임계값·예측은 다음 순서로 읽습니다.

  1. 모델이 입력마다 score를 만듭니다.
  2. 고정한 threshold와 점수를 비교합니다.
  3. 비교 결과를 high_risk 또는 low_risk 예측으로 기록합니다.

같은 점수도 임계값이 달라지면 예측이 바뀝니다. 아래 값은 계산 원리를 익히기 위한 예시이며 후보별 실제 임계값이나 배포 판단 근거가 아닙니다.

점수 임계값 비교 예측 기록할 내용
0.42 0.40 0.42 >= 0.40 high_risk 이 기준에서는 high_risk 알림으로 처리됩니다
0.32 0.40 0.32 < 0.40 low_risk 점수는 있지만 high_risk 알림으로 바뀌지 않습니다
0.42 0.50 0.42 < 0.50 low_risk 임계값이 바뀌면 같은 점수의 예측도 달라집니다

같은 점수와 표본에서 임계값을 낮추면 high_risk 예측은 줄어들지 않으며 놓침은 줄 수 있습니다. 대신 알림을 더 많이 처리해야 할 수 있습니다. 그래서 이 교재에서는 임계값 하나만 보고 좋고 나쁨을 판단하지 않고, 정밀도, 재현율, 미탐, PR-AUC를 함께 봅니다.

혼동 행렬과 품질 지표

혼동 행렬(confusion matrix)은 같은 평가 대상에서 실제 정답과 예측을 교차해 네 칸으로 세는 표입니다. 이 데이터의 target=1은 원자료의 In-hospital_death에 대응하는 양성 정답이며, 모델의 high_risk는 임계값을 적용한 양성 예측입니다. 원자료의 실제 결과와 모델이 내린 알림을 구분해야 분모가 분명해집니다. 아래 표는 슬라이드와 같은 공식 test 400건의 기준 모델 요약입니다.

실제 정답 예측 high_risk 예측 low_risk 실제 정답별 합
양성 target=1 TP = 13 FN = 42 55
음성 target=0 FP = 10 TN = 335 345
예측별 합 23 377 400

정밀도는 알림을 받은 집합의 정확성을 묻습니다. 모델이 high_risk로 알린 23건 가운데 양성 정답이 13건이므로 13 / (13 + 10) = 0.5652입니다. 분모는 실제 양성 55건이 아니라 모델이 알린 23건입니다. 알림을 받은 사례만 확인해서는 알림 밖에서 놓친 FN 42건을 알 수 없습니다.

재현율은 실제 양성 집합을 얼마나 찾아냈는지 묻습니다. 양성 정답 55건 가운데 13건을 알렸으므로 13 / (13 + 42) = 0.2364입니다. 정밀도와 같은 TP를 쓰지만 비교하는 집합이 다릅니다. 실제 양성인데 알리지 않은 42건은 재현율의 분모에 들어가며, 불필요한 알림 10건은 정밀도의 분모에 들어갑니다.

정답이 없는 운영 자료에는 네 칸을 채울 정보가 없습니다. high_risk 예측이 6건이라는 사실은 예측별 합만 알려 주므로, 그중 TP와 FP가 각각 몇 건인지 알 수 없습니다. 1교시의 예측 분포 변화로 정밀도, 재현율, FN을 계산할 수 없었던 이유를 이 표에서 확인할 수 있습니다. 지표 정의는 Scikit-learn의 분류 평가 지침을 따르고, 숫자는 준비된 canonical-benchmark.json의 기준 모델 행을 사용합니다.

정확도와 F1을 단독 기준으로 쓰지 않는 이유

정확도(Accuracy)는 전체 정답 비율이므로 많은 클래스의 성공이 적은 클래스의 실패를 가릴 수 있습니다. 기준 모델은 13 + 335 = 348건을 맞혀 정확도 348 / 400 = 0.8700입니다. 그런데 실제 양성 55건 중 42건을 놓쳤습니다. 같은 400건을 전부 low_risk로 예측하는 단순 비교도 345 / 400 = 0.8625가 되므로, 87%라는 값만으로 중요한 사례를 충분히 찾았다고 말하기 어렵습니다. 전부 음성으로 예측한 값은 계산 설명용 비교이며 실제 후보 모델의 실행 결과가 아닙니다.

후보별 정확도 순위와 포착 순위는 다른 오류를 세기 때문에 갈립니다. A는 17 + 340 = 357건을 맞혀 0.8925, B는 44 + 273 = 317건을 맞혀 0.7925입니다. 반면 양성 포착은 A가 17건, B가 44건입니다. B에서 늘어난 FP는 정확도를 낮추지만, 줄어든 FN은 이 과정의 포착 목적에 기여합니다. 슬라이드의 89.3%와 79.3%는 백분율 한 자리로 반올림한 표시입니다.

F1은 정밀도와 재현율의 조화 평균으로 두 비율의 균형을 요약합니다. 식은 2 × precision × recall / (precision + recall)이며 혼동 행렬로는 2TP / (2TP + FP + FN)입니다. 기준 모델에 적용하면 26 / (26 + 10 + 42) = 0.3333입니다. 같은 값이어도 FP와 FN 구성이 다를 수 있고 TN은 식에 직접 들어가지 않으므로, F1이 오류의 실제 비용까지 정해 주지는 않습니다.

지표를 고를 때는 무엇을 보호할지 함께 정합니다. 정확도와 F1은 보조 요약으로 읽고, 실제 알림 부담과 놓침 위험을 설명할 때는 정밀도, 재현율, FP와 FN을 함께 씁니다.

확인할 값 분모 또는 구성 QA와 운영에서 묻는 질문
정확도 전체 평가 사례 전체에서 맞힌 비율은 얼마인가
정밀도 TP + FP, 알린 사례 알림 가운데 실제 양성은 얼마인가
재현율 TP + FN, 실제 양성 사례 놓치지 않고 찾은 비율은 얼마인가
F1 정밀도와 재현율의 조화 평균 두 비율 중 하나만 높은 상태인가
FP, FN 잘못 알림과 놓침의 건수 어떤 업무 부담과 위험이 늘고 줄었는가

높은 숫자를 고르는 것만으로 모델의 목적을 정할 수 없습니다. 오류의 우선순위는 평가 결과를 보기 전에 정책으로 합의하고, 6교시에서 그 정책의 모든 조건을 확인합니다.

AUROC와 PR-AUC의 해석 범위

곡선은 같은 점수에 여러 임계값을 적용했을 때 오류 구성이 어떻게 바뀌는지 보여 줍니다. 모델과 평가 행의 점수를 고정한 채 임계값을 낮추면 기존 양성 예측은 유지되고 추가 사례가 양성 예측에 들어올 수 있습니다. 따라서 TP와 FP는 줄어들지 않지만, 새 구간에 어떤 정답이 있는지에 따라 둘 중 하나만 늘거나 둘 다 그대로일 수도 있습니다. 재현율은 감소하지 않지만 정밀도는 증가하거나 감소할 수 있습니다.

ROC 곡선은 실제 양성과 실제 음성을 각각 분모로 사용합니다. 세로축은 참양성률 TP / (TP + FN), 즉 재현율이고, 가로축은 거짓양성률 FP / (FP + TN)입니다. 기준 모델의 현재 운영점은 세로 13 / 55 = 0.2364, 가로 10 / 345 = 0.0290입니다. 임계값 하나가 점 하나에 대응하고, 임계값을 바꾸며 얻는 점들이 곡선을 이룹니다. 이 가로축은 정밀도나 전체 알림 비율이 아닙니다.

AUROC(Area Under the ROC Curve)는 실제 양성이 실제 음성보다 높은 점수를 받는 순위 구분 능력을 요약합니다. 순위가 잘 구분돼도 선택한 임계값에서 알림을 적게 내면 재현율은 낮을 수 있습니다. 기준 모델의 AUROC 0.8792와 재현율 0.2364는 서로 모순되지 않습니다. Scikit-learn의 ROC-AUC 설명에 따라 곡선 전체의 순위 요약과 한 운영점의 혼동 행렬을 나누어 읽습니다.

PR 곡선은 알림 품질을 직접 보기 위해 가로축에 재현율, 세로축에 정밀도를 둡니다. 평가 자료의 양성 비율은 55 / 400 = 0.1375로 약 13.8%입니다. 순위 정보 없이 모두 알리면 재현율은 1이고 정밀도는 이 양성 비율이 됩니다. 양성이 적으면 FP가 실제 음성 집합에서는 작은 비율이어도 알림 집합에서는 큰 비중일 수 있으므로, ROC와 함께 PR을 봅니다. 양성 비율이 다른 평가 자료끼리 PR 수치의 높고 낮음을 그대로 비교하지 않습니다.

이 과정의 pr_auc 필드는 실제로 평균 정밀도(Average Precision, AP)를 저장합니다. 구현은 average_precision_score이며, 재현율이 늘어난 구간을 가중치로 정밀도를 요약합니다. 공식 AP 문서는 이 값과 PR 곡선을 직선으로 연결해 사다리꼴 면적을 구한 값이 다를 수 있음을 설명합니다. 화면의 PR-AUC라는 이름을 읽되 비교할 때는 같은 계산 정의인지 확인합니다.

승인에는 순위 요약과 현재 운영점의 조건이 함께 필요합니다. 이 과정은 비교 기준 모델 대비 AP 변화, 현재 임계값의 정밀도와 재현율, FN 감소와 재현율 하한을 함께 사용합니다. AUROC나 AP 하나가 더 높다는 사실을 현재 알림의 적절성이나 대상 환경 배포 완료로 확대하지 않습니다. 확률 보정과 회귀 등 다른 모델의 지표는 선택 심화 범위입니다.

재현율 하한이 말하는 표본 변동

재현율은 평가 표본이 바뀌면 달라질 수 있으므로 점 추정치와 불확실성을 함께 봅니다. 한 표본에서 계산한 재현율을 실제 모든 운영 요청의 고정 성적이라고 가정하면 우연히 쉬운 사례가 많이 들어온 영향을 놓칩니다. 부트스트랩(bootstrap)은 현재 평가 행을 복원추출해 표본 구성에 따른 지표 변동을 살펴보는 방법입니다. 복원추출은 같은 행이 다시 뽑힐 수 있도록 원래 행 집합에서 반복해서 뽑는 방식입니다.

이 과정은 정답과 점수의 짝을 유지한 채 평가 행 수만큼 뽑고, 같은 모델의 점수와 고정 임계값으로 재현율을 계산합니다. 반복마다 모델을 재학습하거나 좋은 임계값을 다시 고르는 것이 아닙니다. 설정은 iterations=1000, confidence_level=0.95이며, 구현은 두 클래스가 모두 포함된 재표본 1,000회의 재현율에서 2.5백분위수를 하한으로 사용합니다. 이는 95% 양측 백분위 구간의 아래 끝에 해당하며 5백분위수나 반복 중 최솟값과 구분합니다.

낮은 쪽의 추정치를 확인해도 미래 품질이 보장되는 것은 아닙니다. 재표본은 기존 자료를 다시 사용하므로 관측하지 못한 입력 분포 변화나 잘못된 라벨을 새로 발견하지 못합니다. 따라서 하한은 현재 표본과 재표본 방식에 조건부인 불확실성 근거로 읽고, 운영 전체에서 반드시 지킬 최저 성능으로 표현하지 않습니다.

수업에서는 테스트 행을 다시 열어 이 계산을 실행하지 않습니다. tta-aiqa/configs/model/revisions/v2/evaluation.yaml과 packages/aiqa-model/src/aiqa_model/adapters/sklearn/evaluation.py에서 계산 정의를 확인하고, 이미 고정된 canonical-benchmark.json의 bootstrap_recall_lower를 읽습니다. 6교시에서는 점 추정치와 하한을 각각 정책의 다른 조건에 대조합니다.

후보 모델의 배포 기준을 읽을 준비

재현율 하한(bootstrap lower bound)은 같은 평가 자료를 여러 번 다시 뽑아 보았을 때 재현율이 너무 낮아질 가능성까지 고려한 보수적인 값입니다. 미탐 감소는 비교 기준 모델의 FN에서 후보 모델의 FN을 뺀 값입니다. 6교시에는 후보별 표를 열기 전에 아래 기준만 보고 어느 오류를 우선 통제할지 예상합니다.

후보 표를 읽는 순서

  1. 각 후보가 모든 필수 기준을 통과했는지 확인합니다.
  2. 통과하지 못한 기준이 하나라도 있으면 높은 수치 하나가 있어도 HOLD로 기록합니다.
  3. 통과한 후보의 결론은 고정한 평가 자료의 결론으로만 적고, 대상 환경 실행 결과로 확장하지 않습니다.
배포 기준 필요한 값 Candidate A Candidate B 이 기준이 필요한 이유
재현율 0.60 이상 (0.55 + 0.05) 6교시 확인 6교시 확인 놓침을 줄이기 위한 최소 조건
재현율 하한 0.45 이상 6교시 확인 6교시 확인 한 번의 수치만 보고 지나치게 확신하지 않기 위해
정밀도 0.20 이상 6교시 확인 6교시 확인 알림 부담을 완전히 무시하지 않기 위해
PR-AUC 변화 0.00 이상 6교시 확인 6교시 확인 비교 기준 모델보다 순위 품질이 나빠지지 않았는지 보기 위해
미탐 감소 15 이상 6교시 확인 6교시 확인 비교 기준 모델보다 놓침을 충분히 줄였는지 보기 위해

두 후보 가운데 어떤 후보가 HOLD이고 어떤 후보가 APPROVE인지는 이 표만으로 미리 정하지 않습니다. 6교시 공식 평가 파일에서 다섯 기준을 모두 대조한 뒤 결론을 기록합니다.

배포 판단 기록 문장 예시

배포 판단 기록에는 숫자만 나열하지 말고, 비교한 조건과 통과 여부, 다음에 확인할 운영 조건을 함께 적습니다. 이렇게 쓰면 3장의 API 확인과 4장의 운영 기록을 더해도 모델 평가 결과와 운영 환경 확인 상태를 섞지 않을 수 있습니다.

[후보]는 [통과하거나 통과하지 못한 기준] 때문에 모델 평가를 [APPROVE/HOLD]로 기록합니다. 이 판단은 [평가 자료와 개정본]에만 적용하며, 대상 환경에서 실행 중인 모델과 운영 기록은 별도로 확인합니다.

이 판단이 적용되는 범위는 실제 평가 파일과 배포 기준을 대조해야 확인할 수 있습니다. 구체적인 근거는 승인 조건과 후보 비교에서, API와 운영 기록의 역할은 실행 환경과 운영 기록에서 이어서 확인합니다.