머신러닝에서 분류 모델을 평가할 때 "정확도(Accuracy)"라는 지표를 가장 먼저 떠올리기 쉽다.
하지만 전체 데이터 중 99%가 Negative이고, Positive는 고작 1%에 불과한 상황이라면 어떨까? 현실의 문제 중에는 양성(Positive) 클래스가 매우 적은 불균형한 데이터가 상당히 많다.
이런 불균형 데이터의 경우에 정확도는 모델의 진짜 성능을 왜곡해서 보여줄 수 있다. 이때 중요한 지표가 정밀도(Precision)와 재현율(Recall)이다.
이 글에서는 불균형 데이터 상황에서 왜 Precision과 Recall이 중요한지, 그리고 이들의 관계를 어떻게 이해하고 적용할 수 있는지에 대해 정리해 보았다.
먼저 분류 문제 성능을 평가할 때 자주 사용하는 지표들을 간단하게 살펴보고 넘어가자.
TP: True Positive
FP: False Positive
FN: False Negative
TN: True Negative
| 지표 | 의미 | 수식 |
|---|---|---|
| 정확도 | 전체 중에서 맞춘 비율 | |
| 정밀도 | Positive로 예측한 것 중에서 실제로 맞춘 비율 | |
| 재현율 | 실제 Positive 중에서 모델이 맞춘 비율 | |
| F1-score | Precision과 Recall의 조화 평균 |
Accuracy는 클래스 비율이 균형 잡혀 있을 때는 괜찮지만 한 쪽 클래스가 거의 없는 불균형 상황에서는 신뢰할 수 없다.
이런 맥락에서 Precision과 Recall이 중요해진다는 것으로 이어진다.
데이터가 불균형한 상황에서는 Precision과 Recall이 갖는 의미가 훨씬 중요해진다.
예를 들어
암 진단 데이터에서 전체 환자 1000명 중 실제 양성(Positive)은 단 30명이고, 나머지 970명이 음성(Negative)이라고 하자.
이때 모델이 1명만 Positive로 예측하고 나머지를 전부 Negative라고 하면
Accuracy는 999/1000 = 99.9% 로 매우 높다.
그러나 그 1명의 Positive만 맞고 나머지 29명의 암 환자를 놓쳤다면 Recall은 1/30 = 3.3% 에 불과하다.
모델이 암 환자를 놓친 것은 매우 심각한 문제로 이어질 수 있기 때문에 단순한 정확도 대신 Precision과 Recall을 따로 보는 것이 필요하다.
Precision (정밀도)
→ 모델이 Positive라고 예측한 것들 중에서 실제로 Positive였던 비율
→ 정확히 예측한 Positive의 비율
Recall (재현율)
→ 실제 Positive 중에서 모델이 Positive로 잘 예측한 비율
→ 놓치지 않고 잡아낸 비율
두 지표는 보통 trade-off 관계에 있다.
예측 기준을 조정할수록 두 지표에 영향을 미치는 방식이 다르기 때문에 한쪽을 극단적으로 올리면 다른 쪽은 희생될 수밖에 없다.
기본값은 보통 0.5이지만 이 threshold를 조정하면 Precision과 Recall의 균형이 달라진다.
예를 들어
스팸 메일을 분류할 때 확신이 드는 메일만 스팸으로 예측하면 Precision은 높겠지만, 많은 스팸을 놓치게 되어 Recall이 낮아진다.
반대로 거의 모든 메일을 스팸으로 예측하면 Recall은 높아지지만 정상 메일까지 스팸 처리해 Precision은 떨어진다. 이 경우에도 마찬가지로 심각한 문제로 이어질 수 있으므로 Precision과 Recall을 따로 보는 것이 필요하다.
Positive로 예측하는 범위를 넓히느냐 좁히느냐에 따라 Precision과 Recall이 서로 반대 방향으로 움직이게 되는 것이다.
아래의 두 극단적인 예를 살펴보면 이해하기 쉽다.
정밀도 100% 만들기
- 단 1명만 확신할 수 있는 경우에만 Positive로 예측하고, 나머지는 모두 Negative로 예측한다.
- 이때 FP는 없고 TP만 있기 때문에, Precision = 1/(1+0) = 100%
- 많은 실제 Positive를 놓칠 수 있어서 Recall은 매우 낮다.
재현율 100% 만들기
- 모든 데이터를 무조건 Positive로 예측한다.
- 이러면 실제 Positive는 모두 맞히기 때문에 Recall = 100%
- 실제 Negative까지 Positive로 예측하므로 FP가 매우 많아지고, Precision은 떨어진다.
불균형 데이터에서는 적절한 threshold가 모델 성능을 좌우하기 때문에 목적에 맞게 Threshold를 조절하는 것이 중요하다.
정밀도와 재현율을 적절히 균형 있게 고려하고자 할 때 사용하는 지표가 F1-score다.
이처럼 F1은 Precision과 Recall 간 균형을 평가할 수 있는 지표다.
단일 지표로 모델의 성능을 비교할 수 있지만 해석 없이 맹신해서는 안 된다는 점을 주의해야 한다.
Accuracy만으로는 모델을 평가하지 말자.
목적에 따라 어떤 지표를 중요시할지 결정해야 한다.
Threshold 조절을 통해 trade-off를 이해하고, 목적에 맞는 최적 지점을 찾는 것이 중요하다.
precision_recall_curve, roc_curve 등을 활용하면 시각화 가능F1-score는 하나의 수치로 전체 성능을 요약할 수 있어 유용하지만, 해석 없이 맹신해서는 안 된다.
실제 문제에 따라 성능 목표가 달라질 수 있다는 점을 이해한다.
지금까지 분류 문제의 평가 지표와 적용 사례를 통해 불균형 데이터에서 Precision과 Recall이 지니는 의미를 이해해 보았다.
불균형 데이터는 모델 평가를 훨씬 더 까다롭고 복잡하게 만든다. 높은 정확도보다 모델이 무엇을 잘하고 무엇을 놓치고 있는지, 그 trade-off를 어떻게 조정할 것인지가 훨씬 중요하다는 것을 알 수 있었다.
Precision과 Recall, 그리고 F1-score 지표가 이런 판단을 도와줄 수 있는 이유도 함께 살펴보았다.
해결해야 하는 문제의 성격을 이해하고 어떤 지표를 우선시해야 할지 끊임없이 질문하는 연습이 필요하겠다.