티스토리 뷰

반응형

정답률(Accuracy)이 전부일까? — Precision과 Recall이 등장하게 된 이유

세상에는 많은 머신러닝 모델이 있습니다. 그 모델이 얼마나 "잘 작동하는지" 평가하는 기준이 필요하죠. 이때 가장 먼저 떠오르는 건 정확도(Accuracy)일 겁니다. 예를 들어 100명 중 95명을 맞췄다면 정확도는 95%니까 꽤 괜찮아 보이죠. 그런데, 정말 그럴까요?

오늘은 정답률만으로는 볼 수 없었던 문제들을 짚어보고, 그 문제를 해결하려 등장한 Precision(정밀도)Recall(재현율) 의 개념을 이해해보려 합니다.


왜 Accuracy만으로는 충분하지 않을까?

정확도는 가장 직관적인 지표입니다. 예측이 얼마나 맞았는지를 보는 거니까요. 다음과 같은 상황을 생각해봅시다.

✅ 예시: 암 진단 모델

  • 전체 사람: 1000명
  • 이 중 암 환자: 10명
  • 모델이 모두 ‘암이 아니다’라고 예측함
    → 990명을 정확하게 예측했죠. Accuracy = 990 / 1000 = 99%

하지만... 암 환자 10명을 모두 놓쳤습니다. 이 모델은 “환자를 하나도 못 찾은 모델”입니다. 이게 좋은 모델일까요?

이런 식으로 클래스 불균형, 즉 어떤 클래스(예: 암 환자)가 아주 드문 경우, 정확도만으로는 모델의 성능을 제대로 평가할 수 없습니다.


정보검색 시스템에서의 고민: Precision과 Recall의 등장

이러한 평가 문제는 이미 1950년대에도 고민되던 문제였습니다.

그 당시 연구자들은 문서 검색 시스템을 개발하고 있었습니다. 논문을 검색하면 관련 문서를 찾아주는 시스템이죠. 그런데 이 시스템을 어떻게 평가해야 할까요?

🔍 예시: 논문 검색 시스템

  • 관련 문서: 20개
  • 검색 결과: 30개
    • 이 중 관련 문서: 15개
    • 관련 없는 문서: 15개

자, 이 시스템은 잘 작동한 걸까요? 단순히 Accuracy로는 평가하기 어렵습니다. 그래서 두 가지 새로운 질문이 등장합니다:

  1. Precision (정밀도)
  2. “검색된 문서 중에서 진짜 관련된 건 얼마나 있지?”
  3. Recall (재현율)
  4. “전체 관련 문서 중에 얼마나 찾아냈지?”

이 두 질문은 지금도 분류 모델 성능 평가의 핵심을 구성하고 있습니다.


Precision과 Recall은 어떤 질문에 답하는가?

두 지표는 아주 다른 성격의 질문에 답합니다.

지표 질문 예시 상황

Precision 예측한 것 중 진짜인 건 얼마나? “내가 스팸이라고 한 메일 중 실제 스팸은 얼마나?”
Recall 실제인 것 중 내가 잘 찾은 건 얼마나? “전체 스팸 중 내가 스팸으로 잘 잡은 건 얼마나?”

Confusion Matrix로 구조 이해하기

분류 문제는 보통 두 클래스 간의 예측입니다. 예를 들어 "암" vs "암 아님". 이때 예측 결과는 다음처럼 분류됩니다:

                   예측 Positive     예측 Negative
실제 Positive         TP                 FN
실제 Negative         FP                 TN
  • TP (True Positive): 암인데 암이라고 예측
  • FP (False Positive): 암이 아닌데 암이라고 예측 (오진)
  • FN (False Negative): 암인데 암 아니라고 예측 (놓침)
  • TN (True Negative): 암 아니고 암 아니라고 예측

이 네 가지 값을 조합하면 다양한 지표들이 나옵니다.

📐 Precision과 Recall 공식

  • Precision = TP / (TP + FP)
    → "예측한 Positive 중 실제 Positive"
  • Recall = TP / (TP + FN)
    → "실제 Positive 중 내가 맞힌 비율"

📌 해석 예시

  • Precision이 낮으면: 예측을 많이 했지만 그 중 틀린 게 많음
  • Recall이 낮으면: 실제 정답을 많이 놓침

일상적 사례로 보는 Precision과 Recall

🎯 예시 1: 스팸 메일 필터

  • Precision이 높다: 스팸이라고 표시된 건 거의 다 진짜 스팸
  • Recall이 높다: 실제 스팸을 거의 다 걸러냄

Precision만 높으면 정답만 찍는데 많이 놓칠 수 있고,
Recall만 높으면 다 잡긴 하지만 일반 메일까지 걸러질 수 있음

🧬 예시 2: 암 진단

  • Precision이 높다: 암이라고 예측한 사람 중 진짜 암일 확률이 높음 (오진 적음)
  • Recall이 높다: 실제 암 환자를 놓치지 않음 (민감도 높음)

Recall이 낮으면 진짜 환자를 놓칠 수 있어 위험


정리: Precision과 Recall은 왜 등장했는가?

문제 상황 기존 지표의 한계 새로운 질문 해결된 지표

암 진단, 스팸 필터 Accuracy만으로는 불균형 문제 파악 불가 “진짜를 얼마나 잘 찾았는가?” Recall
논문 검색, 추천 시스템 결과가 많을수록 정확도 왜곡 “예측한 것 중 진짜는 얼마나?” Precision

 

 

 


그런데 이건 Precision일까? – 혼동하기 쉬운 식들

Precision과 Recall을 처음 배우면, 비슷하게 생긴 다른 수식들도 "혹시 이것도 Precision 아닐까?" 하는 생각이 들 수 있습니다. 실제로 다음과 같은 식들을 보면 헷갈리기 쉽습니다.

❓ TN / (TN + FN)는 Precision일까?

이 식은 예측이 Negative였던 경우 중, 실제로 Negative인 비율을 계산하는 것입니다. 구조상 TP / (TP + FP)와 닮았죠. 그래서 얼핏 보면 “이것도 Negative에 대한 Precision인가?” 싶은 생각이 듭니다.

하지만 그렇지 않습니다.

  • Precision의 정의는: 예측한 Positive 중, 진짜 Positive의 비율입니다.
  • 즉, 관심 있는 클래스(Positive class) 를 기준으로 평가해야 Precision이라고 부릅니다.

반대로, TN / (TN + FN)는 Negative로 예측한 것 중 실제 Negative인 비율입니다. 이건 표준적인 명칭도 없고, 일반적으로 중요한 지표로 취급되지 않습니다. 왜냐하면 대부분의 경우 관심 있는 건 Positive 클래스(예: 암, 스팸, 사기 등)이고, 그걸 얼마나 잘 찾아냈느냐가 핵심이기 때문입니다.

⚠️ 비슷하다고 해서 Precision은 아니다

다음 표를 보면, 실제로 자주 혼동되는 식들이 어떤 의미를 갖는지 비교할 수 있습니다.

계산식 해석 정식 명칭 Precision인가?

TP / (TP + FP) 예측 Positive 중 실제 Positive Precision ✅ 예
TP / (TP + FN) 실제 Positive 중 예측 Positive Recall ❌ 아님
TN / (TN + FP) 실제 Negative 중 예측 Negative Specificity ❌ 아님
FN / (FN + TP) 실제 Positive 중 예측 Negative False Negative Rate ❌ 아님
TN / (TN + FN) 예측 Negative 중 실제 Negative 공식 명칭 없음 ❌ 아님

이처럼 헷갈리기 쉬운 수식들도 정확하게 따져보면, 대부분은 Precision의 정의에서 벗어나 있습니다.
Precision은 반드시 예측한 Positive 중에 진짜 Positive가 얼마나 되는가에 대한 질문에만 답합니다.


Precision vs. Recall, 둘 다 중요하면 어떻게 해야 할까?

이쯤에서 또 다른 질문이 생깁니다.
“Precision은 높으면 Recall이 낮고, Recall을 높이면 Precision이 떨어지는 경우가 많은데... 둘 다 중요하면 어떻게 하지?”

이건 현실에서 자주 마주치는 딜레마입니다. 예를 들어 스팸 필터는 스팸을 다 잡고 싶지만, 중요한 메일을 걸러내면 안 되죠. 암 진단도 마찬가지입니다. 환자를 놓쳐선 안 되지만, 건강한 사람을 암이라고 오진해서도 안 됩니다.

이처럼 Precision과 Recall은 서로 trade-off 관계일 수 있습니다.
그래서 등장한 지표가 있습니다. 바로, 이 둘의 균형을 잡아주는 F1 Score입니다.


 

Precision과 Recall, 둘 다 중요할 때는? — F1 Score의 등장

이전 글에서는 정확도(Accuracy)의 한계 때문에 등장한 Precision과 Recall을 살펴봤습니다.
하지만 현실 문제는 여기서 한 걸음 더 복잡해집니다.

  • Precision을 높이자니 Recall이 떨어지고,
  • Recall을 높이자니 Precision이 낮아지고...

이 둘은 종종 서로를 희생시켜야만 올라가는 관계를 갖습니다.
이럴 땐 어떻게 해야 할까요? 바로, 이 질문에서 F1 Score가 등장하게 됩니다.


Precision과 Recall의 균형: 충돌은 필연일까?

🔁 Trade-off의 예

🎯 스팸 필터 예시

  • Precision을 높이려면 → 확실한 것만 스팸으로 표시
    → 하지만 스팸이 많이 빠져나감 → Recall↓
  • Recall을 높이려면 → 의심 가는 건 다 스팸 처리
    → 하지만 일반 메일까지 걸림 → Precision↓

🧬 암 진단 예시

  • Recall을 극대화하려면 → 웬만하면 다 암이라고 예측
    → 암 환자는 놓치지 않지만, 건강한 사람도 암으로 오진
    → Precision↓, 진료 비용↑, 공포 유발

❗ Precision과 Recall 중 하나만 보면 생기는 문제

  • Precision만 보면 모델이 너무 소심할 수 있음
  • Recall만 보면 모델이 무조건 '경고'만 할 수도 있음
  • 현실은 두 성능이 모두 중요한 경우가 많음

→ 그래서 등장한 개념: F1 Score

Precision과 Recall의 조화 평균(harmonic mean) 으로, 두 값을 하나의 지표로 통합


F1 Score는 왜 '조화 평균'을 쓰는가?

우리는 평균이라고 하면 보통 산술 평균을 떠올립니다.
예를 들어 Precision = 0.8, Recall = 0.6이면 보통 평균은 (0.8 + 0.6)/2 = 0.7이라고 생각하죠.

하지만 F1 Score는 이렇게 계산하지 않습니다.
정확한 수식은 다음과 같습니다:

F1=2⋅Precision⋅RecallPrecision+RecallF_1 = \frac{2 \cdot \text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}

이건 조화 평균(Harmonic Mean) 으로, 둘 중 작은 값을 중심으로 수렴합니다.
즉, Precision과 Recall 중 어느 하나가 낮으면 F1 Score도 낮게 나옵니다.
두 성능이 모두 일정 수준 이상일 때만 F1이 높아집니다.

✅ 조화 평균을 쓰는 이유

평균 방식 특징

산술 평균 두 값의 크기만큼 단순히 더함
조화 평균 작은 값이 크기를 지배함 (둘 다 커야 높아짐)

따라서 F1 Score는 Precision과 Recall이 동시에 높은 모델을 선호합니다.
둘 중 하나가 높고 하나가 낮은 경우, 그 모델을 “좋다”고 하지 않겠다는 철학이 반영되어 있는 것이죠.


수식으로 이해해보기 (예시)

Precision Recall F1 Score 계산 결과

1.0 0.0 2⋅1⋅01+0=0\frac{2 \cdot 1 \cdot 0}{1 + 0} = 0 완전 실패
0.8 0.8 2⋅0.8⋅0.80.8+0.8=0.8\frac{2 \cdot 0.8 \cdot 0.8}{0.8 + 0.8} = 0.8 잘 작동
0.8 0.2 2⋅0.8⋅0.20.8+0.2=0.32\frac{2 \cdot 0.8 \cdot 0.2}{0.8 + 0.2} = 0.32 좋지 않음
0.5 0.5 2⋅0.5⋅0.50.5+0.5=0.5\frac{2 \cdot 0.5 \cdot 0.5}{0.5 + 0.5} = 0.5 평균 수준

왜 조화평균을 쓰는가? (예시)

2025.04.07 - [머신러닝/머신러닝] - F1 스코어에서 조화평균을 쓰는 이유

 

F1 스코어에서 조화평균을 쓰는 이유

F1 스코어는 왜 조화평균을 쓸까?— 두 지표가 모두 ‘기여 단위가 역수 구조일 때’ 최적의 결합 방식이기 때문입니다.1️⃣ 우선 구조부터 짚고 갑시다: Precision vs RecallPrecision (정밀도):내가 ‘

eunjin123123.tistory.com

 

 

F1 Score는 언제 쓰면 좋을까?

✅ F1 Score가 특히 중요한 상황

  • 클래스 불균형이 존재할 때
    → 예: 사기 거래 탐지, 고장 예측, 질병 진단 등
  • Precision과 Recall 모두 중요할 때 → 한쪽만 높아도 안심할 수 없는 경우
  • 정확도(Accuracy)가 과대평가되는 상황을 방지하고 싶을 때

❌ F1 Score가 덜 유용한 상황

  • 모델의 확률 예측 품질이 중요할 때 → Log Loss, Brier Score
  • 민감도와 특이도의 균형을 보고 싶을 때 → ROC Curve, AUC

일상적인 예로 다시 정리해보자

사례 Precision 중요 Recall 중요 F1 Score 필요

스팸 필터 O (중요 메일 오탐 방지) O (스팸 놓치면 불편) ✔️
암 진단 O (건강인 오진 방지) O (환자 놓치면 치명적) ✔️
테러 탐지 덜 중요 매우 중요 (놓치면 큰일) ❌ Recall 중심
문서 추천 Precision 중심 Recall 상대적 중요↓ ❌ Precision 중심

F1 Score의 확장형: Fβ Score

참고로, F1 Score는 Precision과 Recall을 동등하게 중요하게 여기는 경우에 사용하는 버전입니다.
하지만 경우에 따라 한쪽이 더 중요할 수 있죠. 이럴 땐 Fβ Score를 사용합니다:

Fβ=(1+β2)⋅Precision⋅Recallβ2⋅Precision+RecallF_\beta = \frac{(1 + \beta^2) \cdot \text{Precision} \cdot \text{Recall}}{\beta^2 \cdot \text{Precision} + \text{Recall}}

  • β > 1: Recall을 더 중요하게 반영
  • β < 1: Precision을 더 중요하게 반영
  • β = 1: F1 Score

실무에서는 F2 (Recall 우선), F0.5 (Precision 우선) 도 자주 사용됩니다.


 

 

 

  • Accuracy: 전체 중 얼마나 맞췄는지 보기 쉽지만, 클래스 불균형일 땐 성능을 왜곡해서 주의가 필요하다.
  • Precision: Positive라고 예측한 것 중 얼마나 맞았는지를 알려줘서, 오탐(위양성)을 줄이는 데 핵심이다.
  • Recall: 실제 Positive 중 얼마나 놓치지 않았는지를 보여줘서, 누락(위음성)이 위험한 상황에서 중요하다.
  • F1 Score: Precision과 Recall 사이에 균형이 필요할 때, 둘 다 일정 수준 이상이어야 좋은 모델임을 평가할 수 있다.

 

반응형

'머신러닝 > 머신러닝' 카테고리의 다른 글

F1 스코어에서 조화평균을 쓰는 이유  (0) 2025.04.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형