ADsP NOTE검색

분석 모델과 평가 / 5분 읽기

정확도·정밀도·재현율, 혼동행렬의 분모부터 읽기

스팸 분류 예제로 TP, FP, FN, TN을 구분하고 정확도, 정밀도, 재현율, F1을 직접 계산합니다. 99% 정확도도 충분하지 않을 수 있는 이유, 특이도와 거짓양성률, 분모가 0인 경우를 살펴보고 임계값에 따라 평가가 달라짐을 확인합니다.

먼저 잡을 핵심

  • 정확도는 전체, 정밀도는 예측 양성, 재현율은 실제 양성을 분모로 삼습니다.
  • 불균형 자료에서는 정확도가 높아도 관심 대상을 놓칠 수 있습니다.
  • F1과 AUC는 각각 다른 정보를 요약하므로 실제 사용할 임계값의 오류 수도 확인합니다.
메일 100통의 혼동행렬. 실제 스팸 중 스팸 예측 15통, 일반 예측 5통이며 실제 일반 메일 중 스팸 예측 10통, 일반 예측 70통이다. 정밀도는 15/25=60%, 재현율은 15/20=75%다.
작은 화면에서는 그림을 좌우로 밀어볼 수 있습니다.스팸을 양성으로 둔 가상 예제입니다. 정밀도는 스팸으로 예측한 25통 중 실제 스팸 15통, 재현율은 실제 스팸 20통 중 찾아낸 15통의 비율입니다. 그림 크게 보기 ↗

정확도 99%가 놓치는 경우

이메일 1,000통 중 스팸이 10통, 일반 메일이 990통인 가상 자료를 생각해 봅니다. 모든 메일을 일반 메일이라고 예측하는 규칙은 990통을 맞히므로 정확도가 99%입니다. 하지만 정작 찾아야 할 스팸 10통은 하나도 잡지 못합니다. 한 종류가 압도적으로 많으면 정확도만으로 모델의 목적 달성 여부를 읽기 어렵습니다.

분류 평가를 시작할 때는 무엇을 양성으로 부르는지 정해야 합니다. 여기서는 스팸을 양성, 일반 메일을 음성으로 둡니다. 양성은 좋다는 뜻이 아니라 평가에서 관심을 두는 쪽의 이름입니다. 같은 표도 양성의 정의를 바꾸면 정밀도와 재현율의 의미가 달라집니다.

혼동행렬은 실제 정답과 모델의 예측을 교차한 표입니다. 자료마다 행과 열의 배치가 다를 수 있으므로 위치만 외우지 말고 행 이름과 열 이름을 읽습니다. 예측이 양성인지와 그 예측이 맞았는지를 나눠 보면 약어가 덜 헷갈립니다.

네 칸을 구분한 뒤 계산합니다

이번에는 별도의 학습 예제로 메일 100통을 분류한 결과를 사용합니다. 실제 스팸 20통 가운데 15통을 스팸으로 찾아냈고 5통은 일반 메일로 놓쳤습니다. 일반 메일 80통 중 10통을 스팸으로 잘못 판단했고 70통은 일반 메일로 맞혔습니다.

실제 정답스팸으로 예측일반 메일로 예측합계
스팸TP = 15FN = 520
일반 메일FP = 10TN = 7080
합계2575100

TP는 실제 양성을 양성으로 맞힌 수이고 TN은 실제 음성을 음성으로 맞힌 수입니다. FP는 실제 음성을 양성으로 잘못 예측한 수이며 FN은 실제 양성을 음성으로 놓친 수입니다. P와 N은 예측한 분류, T와 F는 정답 여부를 가리킨다고 읽으면 이 네 칸을 확인하기 쉽습니다.

정확도는 전체 100통 중 맞힌 85통의 비율, (15 + 70) ÷ 100 = 85%입니다. 정밀도는 스팸이라고 예측한 25통 중 진짜 스팸 15통의 비율, 15 ÷ 25 = 60%입니다. 재현율은 실제 스팸 20통 중 찾아낸 15통의 비율, 15 ÷ 20 = 75%입니다. 같은 TP가 분자에 있어도 분모가 달라 서로 다른 질문에 답합니다.

분모를 말로 읽으면 목적이 드러납니다

정밀도는 모델이 양성이라고 판단한 결과를 얼마나 믿을 수 있는지와 연결됩니다. 중요한 일반 메일이 스팸함으로 잘못 이동하는 일을 줄이려면 FP를 주의해서 봅니다. 재현율은 실제 양성 가운데 얼마나 찾아냈는지와 연결됩니다. 스팸이 받은편지함에 많이 남는다면 FN을 확인합니다. 어느 지표가 항상 더 중요하다는 정답은 없습니다.

특이도는 실제 음성 중 음성으로 맞힌 비율 TN/(TN + FP)입니다. 예제에서는 70 ÷ 80 = 87.5%입니다. 거짓양성률은 실제 음성 중 양성으로 오인한 비율 FP/(FP + TN)이며 12.5%입니다. 같은 분모를 쓰므로 거짓양성률은 1−특이도입니다. 거짓양성률을 1−정밀도와 혼동하지 않도록 실제 음성과 예측 양성의 집합을 구분하세요.

비율을 비교할 때는 평가 자료에 스팸이 얼마나 포함돼 있는지도 기록합니다. 양성 비율이 달라지면 같은 성격의 분류기라도 정밀도가 달라질 수 있습니다. 모델 이름과 정확도 한 줄만 있는 보고서는 이 차이를 읽기 어렵습니다. 평가 시점, 표본 구성, 양성 정의를 지표와 함께 남기면 비교의 조건이 분명해집니다.

F1은 두 비율의 산술평균이 아닙니다

F1은 정밀도와 재현율의 조화평균입니다. 식은 2 × 정밀도 × 재현율 ÷ (정밀도 + 재현율)입니다. 앞의 예제에 0.6과 0.75를 넣으면 0.9 ÷ 1.35로 약 0.667이 됩니다. 두 값을 그냥 더해 2로 나눈 0.675와는 다릅니다. 혼동행렬에서 바로 계산하면 2TP/(2TP + FP + FN) = 30/45로 같은 결과를 얻습니다.

F1은 어느 한쪽 비율만 높고 다른 쪽이 낮은 상황을 함께 드러내는 데 유용합니다. 그러나 TN을 직접 사용하지 않고 오류별 비용 차이를 자동으로 반영하지도 않습니다. 정밀도와 재현율을 합쳐서 한 숫자로 볼 필요가 있을 때 사용하되, F1이 높으면 어떤 서비스에도 최선이라는 식으로 결론 내리지 않습니다.

양성이라고 예측한 건이 0이면 정밀도 식의 분모도 0이 됩니다. 실제 양성이 하나도 없는 평가 자료에서는 재현율의 분모가 0입니다. 이런 상황은 수학적으로 정의되지 않으므로 프로그램이 0, 경고, 결측값 중 무엇으로 처리하는지 확인합니다. 계산 결과가 0으로 출력됐다는 이유만으로 원래 비율이 정의됐다고 생각하면 안 됩니다.

임계값을 바꾸면 평가 결과도 바뀝니다

모델이 스팸 점수를 출력한다고 가정합니다. 점수가 0.5 이상일 때 스팸으로 분류하는 기준을 0.3으로 내리면 스팸으로 잡히는 메일이 늘어납니다. 같은 자료와 점수에서 양성 예측 집합이 커지면 TP와 FP가 줄어들지는 않습니다. 재현율은 유지되거나 높아지지만 정밀도의 변화 방향은 자료에 따라 달라질 수 있습니다.

ROC 곡선은 여러 임계값에서 거짓양성률을 가로축, 참양성률인 재현율을 세로축으로 그립니다. AUC는 그 곡선을 요약한 값이므로 특정 임계값에서의 정확도와 같지 않습니다. 스팸이 드문 자료라면 정밀도와 재현율의 관계를 나타내는 PR 곡선도 함께 읽는 편이 목적에 맞습니다. 어떤 요약 지표를 쓰든 실제로 사용할 임계값에서의 오류 수를 확인해야 합니다.

임계값과 모델을 고르는 자료와 최종 평가 자료를 구분합니다. 시험에서는 혼동행렬을 정확히 읽는 일이 우선이고, 실습에서는 평가 자료를 반복해서 보며 조건을 조정하는 과정까지 점검해야 합니다. 아래 문제는 정밀도와 재현율의 분모를 확인하려고 직접 만든 학습 문제입니다.

숫자를 바꿔보는 연습

같은 예측, 다른 평가 지표

각 칸을 바꾸면 정확도·정밀도·재현율이 함께 달라집니다.

정확도 94.0% · 정밀도 80.0% · 재현율 66.7%

분모가 0인 지표는 ‘정의할 수 없음’으로 표시합니다.

놓치기 쉬운 지점

  • 혼동행렬의 행과 열 이름을 확인하지 않고 칸 위치만 외우는 실수
  • 임계값을 낮추면 정밀도가 반드시 낮아진다고 단정하는 실수

스스로 확인하기

  • 무엇을 양성으로 볼지 먼저 적는다.
  • 정밀도와 재현율의 분모를 한국어로 읽어 본다.
  • 전체 정확도와 함께 FP·FN 및 양성 비율을 확인한다.

아래 질문은 개념 확인을 위해 작성한 학습용 문항입니다. 공식 기출문제가 아닙니다.

Q1. TP=24, FP=6, FN=16, TN=54이면 정밀도와 재현율은 얼마인가요?

생각한 뒤 해설 보기

정밀도는 24/(24+6)=80%, 재현율은 24/(24+16)=60%입니다. 정확도는 (24+54)/100=78%입니다.

Q2. 스팸이 5통인 100통을 모두 일반 메일로 분류했습니다. 정확도와 스팸 재현율은 얼마인가요?

생각한 뒤 해설 보기

정확도는 95/100=95%, 스팸 재현율은 0/5=0%입니다. 양성 예측이 없어 정밀도는 분모 0으로 정의되지 않습니다.

Q3. F1을 2TP/(2TP+FP+FN)으로 구할 때 TN이 직접 들어가나요?

생각한 뒤 해설 보기

아니요. TN은 식에 직접 포함되지 않습니다. 그래서 F1만으로 음성 분류 성능 전체를 판단하지 않습니다.

객관식 문제로 다른 개념도 확인하기 →

더 궁금한 점

다중 분류에서는 F1을 어떻게 하나의 숫자로 표시하나요?

클래스별 F1을 계산한 뒤 평균하는 방법 등이 있습니다. macro는 각 클래스를 같은 비중으로, weighted는 실제 클래스 표본 수를 가중치로 평균합니다. micro는 전체 TP·FP·FN을 모아 계산하므로 보고된 평균 방식을 확인해야 합니다.

참고한 자료와 확인 범위

예제 수치와 질문은 학습 목적으로 구성했습니다. 시험 운영 정보는 공식 공지를 우선합니다.

이 글은 입문자 기준으로 정리했습니다. 계산이나 설명의 오류를 발견하면 이 글의 오류 제보를 보내주세요. 내용을 보완할 때 수정일도 함께 갱신합니다.

함께 다듬는 노트

이해되지 않는 설명이 있었나요?

틀린 계산, 어려운 표현, 다음에 읽고 싶은 주제를 알려주세요.

의견 보내기