위험 문장 50개와 안전 문장 150개를 교차한다
LLM 출력 200개를 사람이 위험 50개, 안전 150개로 판정하고 자동 분류기가 위험 또는 안전으로 예측했다고 하자. 혼동행렬은 실제 범주를 행, 예측 범주를 열에 놓고 같은 조합의 건수를 센다. 교육용 예시에서 위험을 맞힌 TP는 42, 놓친 FN은 8, 안전을 위험이라 한 FP는 15, 안전을 맞힌 TN은 135다.
scikit-learn 공식 문서는 C[i,j]를 실제 집단 i에 속하면서 예측 집단 j로 분류된 관측 수로 정의한다. 도구마다 행과 열의 방향이 바뀔 수 있으므로 제목만 보고 TP 위치를 외우지 않는다. 축 라벨, 범주 순서, 양성 정의를 먼저 읽고 네 셀의 합 42+8+15+135=200이 평가 행 수와 같은지 확인한다.
양성은 좋은 결과가 아니라 찾으려는 대상이다
양성은 가치 판단이 아니라 “탐지하려는 범주”다. 위험 탐지에서는 위험이 양성이지만, 정상 문서 승인에서는 승인을 양성으로 둘 수 있다. 같은 자료도 양성 범주를 바꾸면 TP·FN·FP·TN 이름이 바뀐다. 공개 글에는 양성 정의를 문장으로 쓰고 범주 순서를 코드와 그림에 고정한다.
TP는 실제 양성을 양성으로, FN은 실제 양성을 음성으로 예측한 건수다. FP는 실제 음성을 양성으로, TN은 실제 음성을 음성으로 예측한 건수다. “false positive”를 단순히 틀린 긍정 문장으로 번역하면 대상이 불분명하다. 이 예에서는 FN이 놓친 위험 출력이고 FP가 불필요하게 차단한 안전 출력이다.
| 셀 | 조건 | 위험 탐지에서의 뜻 |
|---|---|---|
| TP | 실제 위험·예측 위험 | 위험을 차단 |
| FN | 실제 위험·예측 안전 | 위험을 놓침 |
| FP | 실제 안전·예측 위험 | 안전을 오경보 |
| TN | 실제 안전·예측 안전 | 안전을 통과 |
정확도는 네 셀을 합치지만 오류의 방향을 숨긴다
정확도는 (TP+TN)/전체이므로 (42+135)/200=88.5%다. 숫자는 높아 보이지만 위험 8건을 놓쳤다는 사실을 직접 말하지 않는다. 실제 안전이 99%인 자료에서 모두 안전이라고 예측해도 정확도는 99%가 된다. 기준 분포와 비교하고 양성 비율을 공개해야 한다.
재현율은 TP/(TP+FN)=42/50=84.0%로 실제 위험 가운데 잡은 비율이다. 특이도는 TN/(TN+FP)=135/150=90.0%로 실제 안전 가운데 통과시킨 비율이다. 정밀도는 TP/(TP+FP)=42/57≈73.7%로 위험 경보 가운데 실제 위험인 비율이다. 각 지표의 분모가 다르므로 이름과 식을 함께 쓴다.
| 지표 | 계산 | 교육용 결과 | 주요 질문 |
|---|---|---|---|
| 정확도 | (TP+TN)/N | 88.5% | 전체에서 맞힌 비율? |
| 재현율 | TP/(TP+FN) | 84.0% | 위험을 얼마나 잡았나? |
| 특이도 | TN/(TN+FP) | 90.0% | 안전을 얼마나 통과했나? |
| 정밀도 | TP/(TP+FP) | 73.7% | 경보가 얼마나 맞았나? |
행 정규화와 열 정규화는 서로 다른 질문에 답한다
원시 건수는 업무량과 오류 수를 보여 준다. 실제 행마다 100%가 되도록 정규화하면 각 실제 범주 안에서 어디로 예측됐는지 보이므로 재현율과 특이도를 읽기 쉽다. 반대로 예측 열마다 100%가 되도록 정규화하면 경보 가운데 실제 범주 비율, 즉 정밀도와 음성 예측값을 읽기 쉽다.
정규화 비율만 게시하면 84%가 42/50인지 8400/10000인지 알 수 없다. 건수 행렬과 정규화 행렬을 함께 두고 n을 표시한다. 행·열 정규화를 한 그림에서 섞지 않고 캡션에 분모를 쓴다. 색 범위는 0–100%로 고정하며 실제 범주 비율이 다른 데이터셋 사이에서는 원시 건수도 따로 비교한다.
임계값을 낮추면 놓침과 오경보가 서로 바뀐다
위험 확률이 0.5 이상일 때 차단한다면 예측 확률을 범주로 바꾸는 임계값이 0.5다. 이를 0.3으로 낮추면 더 많은 출력을 위험으로 보아 TP가 47로 늘고 FN이 3으로 줄지만 FP는 36으로 늘어난다. 0.7로 높이면 FP는 6으로 줄지만 TP도 34로 감소하고 FN은 16으로 늘어난다.
어느 임계값이 옳은지는 모델 점수만으로 정해지지 않는다. 놓친 위험의 피해, 잘못 차단한 안전의 검토 비용, 사람 검토 용량, 법적 요구를 함께 본다. 임계값을 시험 세트 결과에 맞춰 반복 선택하면 낙관 편향이 생긴다. 검증 세트에서 운영점을 고정하고 별도 시험 세트로 최종 성능을 보고한다.
| 임계값 | TP | FN | FP | TN | TPR/재현율 | FPR | 정밀도 |
|---|---|---|---|---|---|---|---|
| 0.3 | 47 | 3 | 36 | 114 | 94% | 24% | 56.6% |
| 0.5 | 42 | 8 | 15 | 135 | 84% | 10% | 73.7% |
| 0.7 | 34 | 16 | 6 | 144 | 68% | 4% | 85.0% |
클래스 불균형과 하위집단은 전체 행렬을 흔든다
실제 위험 비율이 25%에서 1%로 바뀌면 재현율과 특이도가 같아도 정밀도는 크게 달라질 수 있다. 배포 환경의 유병률 또는 기저율을 평가 세트와 함께 공개한다. 전체 정확도가 같아도 언어·주제·길이별 FN이 한 집단에 몰릴 수 있으므로 중요한 하위집단별 혼동행렬을 확인한다.
다중분류에서는 K×K 행렬의 각 대각 셀이 맞힌 범주이고 비대각 셀이 어떤 범주끼리 헷갈렸는지 보여 준다. 범주 수가 많으면 희소 행렬을 정렬하되 업무 계층을 보존한다. macro 평균은 범주를 같은 가중치로, weighted 평균은 표본 수로 가중하므로 작은 중요 범주가 사라지지 않는지 본다.
LLM에는 원시 레이블 쌍과 양성 정의를 준다
관측ID, 실제 레이블, 예측 레이블, 예측 점수, 임계값을 제공하고 양성 범주를 명시한다. 먼저 실제×예측 조합을 그룹별로 세어 네 셀 표를 만들고 합이 전체 행 수와 같은지 검산하게 한다. 다음으로 정확도·재현율·특이도·정밀도 식에 숫자를 대입하게 하며 분모가 0인 경우 처리도 적게 한다.
“성능을 분석해 줘”만 요청하면 LLM이 축 방향이나 수치를 추측할 수 있다. 행·열 순서, 정규화 방식, 표본 기간, 제외 규칙을 출력 사양에 넣는다. 결과 문장은 셀 건수와 계산식으로 되돌릴 수 있게 하고, 비용·공정성 판단은 사용자가 제공한 기준 안에서만 제안하게 한다. 실제 자료가 없으면 숫자를 만들지 않는다.
잘못된 행렬은 축과 분모를 숨겨 오류를 바꿔 보인다
수정 전 그림은 “위험/안전” 라벨만 있고 실제와 예측 축이 없었다. 행 정규화와 원시 건수를 같은 표에 섞고, 빈도가 큰 TN에 맞춘 색 범위 때문에 작은 FN·FP가 거의 흰색으로 사라졌다. 정확도 88.5%만 제목에 쓰고 위험 8건을 놓쳤다는 설명과 평가 기간을 생략했다.
수정 후 축에 실제·예측을 쓰고 양성=위험을 명시했다. 원시 건수와 행 비율을 분리하고 셀 안에 값과 업무 뜻을 적었다. FN·FP는 별도 강조선을 사용하되 색 범례를 고정했다. 네 셀 합, 지표 식, 기저율, 표본 기간과 임계값을 캡션에 남겼다.
실습은 임계값마다 네 셀과 지표를 다시 계산한다
아래 실습은 같은 200개 교육용 예측에 세 임계값을 적용한 준비된 결과다. 임계값을 바꾸어 TP+FN=50, FP+TN=150, 네 셀 합=200이 유지되는지 확인한다. 재현율·정밀도·특이도 가운데 어떤 지표가 좋아지고 나빠지는지 읽고 업무 비용을 한 문장으로 적는다.
실제 서비스 수치가 아니므로 이 결과로 제품의 안전성을 주장할 수 없다. 공개 전에는 원 레이블 표에서 독립 집계를 반복하고 360·390·430px에서 셀 숫자, 축 이름, 선택 결과가 잘리지 않는지 확인한다. 키보드로 선택·실행할 수 있고 결과 영역의 변경이 보조기술에 전달되어야 한다.
| 임계값 | TP | FN | FP | TN | TPR/재현율 | FPR | 정밀도 |
|---|---|---|---|---|---|---|---|
| 0.3 | 47 | 3 | 36 | 114 | 94% | 24% | 56.6% |
| 0.5 | 42 | 8 | 15 | 135 | 84% | 10% | 73.7% |
| 0.7 | 34 | 16 | 6 | 144 | 68% | 4% | 85.0% |
복사해서 쓸 수 있는 LLM 요청문
아래 요청문은 교육용 예시다. 원문을 함께 제공하고, 모델이 빈칸을 추측하지 않도록 금지 조건을 넣었다. 결과를 받으면 원문 문장과 노드·선의 대응을 사람이 다시 확인한다.
다음 분류 결과로 혼동행렬과 지표를 검산해 줘. 1. 양성 범주와 실제 행·예측 열의 순서를 문장으로 선언한다. 2. 관측ID별 실제 레이블·예측 레이블·점수·임계값을 확인한다. 3. TP·FN·FP·TN을 세고 합이 전체 행 수와 같은지 계산한다. 4. 정확도·재현율·특이도·정밀도에 분자와 분모를 대입한다. 5. 원시 건수와 행 또는 열 정규화 표를 분리한다. 6. 세 임계값의 놓침·오경보 교환을 비교한다. 7. 기저율과 하위집단, 오류 비용을 기록한다. 8. 실제 레이블이 없으면 수치를 만들지 말고 빈 사양만 준다. [관측별 레이블 표] …
직접 실습하고 결과를 읽기
이 실습은 브라우저 안에 준비한 교육용 자료만 사용한다. 외부 LLM을 호출하거나 실제 기관 자료를 조회하지 않는다. 입력을 바꾸어 결과가 어떻게 달라지는지 보고, 설명과 맞지 않는 결과가 나오면 어떤 정보가 빠졌는지 적어 본다.
자료와 출처
아래 자료는 이번 글의 정의와 표기법을 확인하는 데 사용했다. 생각그림과 사례 문장은 원자료를 복제하지 않고 이 글의 교육 목적에 맞게 새로 구성했다.