Saturday, October 25, 2025

모델 성능의 진짜 얼굴: 정확도를 넘어선 평가 지표

머신러닝 프로젝트를 진행할 때, 우리는 정성을 다해 데이터를 수집하고 전처리하며, 최적의 알고리즘을 선택해 모델을 훈련시킵니다. 그리고 마침내 모델이 완성되면 가장 먼저 던지는 질문은 "이 모델, 얼마나 잘 작동하는가?"일 것입니다. 이 질문에 답하기 위해 우리는 다양한 '평가 지표(Evaluation Metrics)'를 사용합니다. 수많은 지표 중 가장 직관적이고 널리 알려진 것은 단연 '정확도(Accuracy)'입니다. 하지만 이 단순함 뒤에는 모델의 진짜 성능을 가리는 치명적인 함정이 숨어있을 수 있습니다. 특히 현실 세계의 복잡한 문제들을 다룰 때, 99%라는 정확도 수치는 때로는 아무 의미 없는 허상에 불과할 수 있습니다.

이 글에서는 왜 우리가 정확도라는 편안한 지표를 넘어서야만 하는지, 그리고 모델의 다각적인 성능을 올바르게 측정하기 위해 어떤 지표들을 어떻게 활용해야 하는지에 대해 깊이 있게 탐구합니다. 단순히 각 지표의 공식을 나열하는 것을 넘어, 각각의 지표가 어떤 비즈니스 상황에서 중요한 의미를 갖는지, 그리고 서로 어떤 관계를 맺고 있는지를 구체적인 예시와 함께 풀어낼 것입니다. 혼동 행렬(Confusion Matrix)이라는 기본 개념부터 시작해 정밀도(Precision), 재현율(Recall), F1 스코어(F1 Score), 그리고 ROC 곡선과 AUC까지, 데이터 과학자라면 반드시 이해해야 할 핵심 평가 지표의 세계로 안내합니다.

모든 평가의 시작점: 혼동 행렬 (Confusion Matrix)

분류 모델의 성능을 제대로 이해하기 위한 첫걸음은 바로 '혼동 행렬'을 이해하는 것입니다. 혼동 행렬은 모델의 예측이 실제 값과 비교하여 얼마나 헷갈리고(confused) 있는지를 표 형태로 명확하게 보여주는 도구입니다. 이 행렬을 구성하는 네 가지 기본 요소를 이해하면, 앞으로 다룰 모든 평가 지표가 사실상 이 요소들의 조합에 불과하다는 것을 깨닫게 될 것입니다.

혼동 행렬은 실제 클래스와 모델이 예측한 클래스를 기준으로 다음과 같이 네 가지 경우로 나뉩니다.

  • TP (True Positive, 진양성): 실제 값이 'Positive'이고, 모델도 'Positive'로 올바르게 예측한 경우. 예를 들어, 암 환자를 실제로 암이라고 정확히 진단한 경우입니다.
  • TN (True Negative, 진음성): 실제 값이 'Negative'이고, 모델도 'Negative'로 올바르게 예측한 경우. 건강한 사람을 건강하다고 정확히 진단한 경우입니다.
  • FP (False Positive, 위양성): 실제 값은 'Negative'인데, 모델이 'Positive'로 잘못 예측한 경우. (Type I Error) 건강한 사람을 암 환자라고 잘못 진단한 경우입니다.
  • FN (False Negative, 위음성): 실제 값은 'Positive'인데, 모델이 'Negative'로 잘못 예측한 경우. (Type II Error) 암 환자를 건강하다고 잘못 진단한 경우입니다.

이 네 가지 요소를 시각적으로 표현하면 다음과 같습니다.

                      +----------------------+
                      |      예측 (Predicted)     |
                      +----------------------+
                      |   Positive  |  Negative  |
+-----------+---------+-------------+------------+
|           | Positive|     TP      |     FN     |
|   실제    +---------+-------------+------------+
|  (Actual) | Negative|     FP      |     TN     |
+-----------+---------+-------------+------------+

혼동 행렬을 직접 살펴보는 것만으로도 모델의 경향성을 파악할 수 있습니다. 예를 들어, FP 값이 유독 크다면 모델이 실제로는 Negative인 데이터를 Positive로 예측하는 경향이 강하다는 의미이며, FN 값이 크다면 실제 Positive인 데이터를 놓치는 경우가 많다는 것을 의미합니다. 이처럼 모든 평가는 이 혼동 행렬의 네 가지 값에서부터 출발합니다.

달콤한 유혹, 정확도의 함정 (The Pitfall of Accuracy)

정확도는 가장 이해하기 쉬운 지표입니다. 전체 데이터 중에서 모델이 올바르게 예측한 비율을 나타냅니다.

정확도 (Accuracy) = (TP + TN) / (TP + TN + FP + FN) = (올바르게 예측한 샘플 수) / (전체 샘플 수)

만약 100명의 환자 중 95명을 정확하게 진단했다면 정확도는 95%가 됩니다. 매우 훌륭한 성능처럼 보입니다. 하지만 데이터의 분포가 불균형할 때, 정확도는 모델의 성능을 심각하게 왜곡할 수 있습니다.

예를 들어, 1,000명의 환자 중 단 10명만이 희귀병을 앓고 있고, 990명은 건강하다고 가정해 봅시다. 여기서 어떤 모델이 환자의 상태와 관계없이 무조건 '건강함(Negative)'이라고만 예측한다고 상상해 보세요. 이 모델의 성능을 평가해 볼까요?

  • TP (실제 병, 예측 병): 0
  • FN (실제 병, 예측 건강): 10
  • FP (실제 건강, 예측 병): 0
  • TN (실제 건강, 예측 건강): 990

이 모델의 정확도를 계산하면 (0 + 990) / (0 + 10 + 0 + 990) = 990 / 1000 = 99%가 됩니다. 수치상으로는 거의 완벽에 가까운 모델이지만, 정작 가장 중요한 목적인 '희귀병 환자를 찾아내는' 능력은 전혀 없습니다. 단 한 명의 환자도 발견하지 못하는, 사실상 아무 쓸모 없는 모델인 것입니다.

이처럼 데이터 클래스 간의 비율이 크게 차이 나는 '불균형 데이터(Imbalanced Data)' 환경에서는 정확도가 모델의 성능을 대표하지 못합니다. 금융 사기 탐지, 의료 진단, 제조업 불량품 검출 등 현실의 많은 중요 문제들은 대부분 소수의 클래스를 탐지하는 것이 목표인 불균형 데이터입니다. 따라서 우리는 정확도 너머의 다른 지표들을 반드시 살펴보아야 합니다.

정밀도(Precision)와 재현율(Recall): 두 개의 상반된 관점

정확도가 가지는 한계를 극복하기 위해 등장한 대표적인 지표가 바로 정밀도(Precision)와 재현율(Recall)입니다. 이 두 지표는 모델의 예측을 서로 다른 관점에서 바라보며, 특히 Positive 클래스를 얼마나 잘 예측하는지에 초점을 맞춥니다.

정밀도 (Precision): 모델의 예측이 얼마나 정밀한가?

정밀도는 모델이 'Positive'라고 예측한 것들 중에서 실제로 'Positive'인 것의 비율을 나타냅니다. '모델의 예측'을 기준으로 삼는 지표라고 할 수 있습니다.

정밀도 (Precision) = TP / (TP + FP)

정밀도를 쉽게 이해하려면 "모델이 참이라고 한 예측을 얼마나 믿을 수 있는가?"라는 질문을 던져보면 됩니다. 정밀도가 높다는 것은 모델이 'Positive'라고 예측했을 때, 그 예측이 틀릴 확률(FP)이 낮다는 것을 의미합니다.

  • 중요한 상황: FP(False Positive)의 비용이 비쌀 때. 즉, 멀쩡한 것을 불량으로 판단하거나(Negative -> Positive), 중요한 이메일을 스팸으로 분류하는(Negative -> Positive) 경우 심각한 문제가 발생할 때 정밀도가 중요합니다.
  • 예시 1 (스팸 메일 필터): 어떤 이메일을 스팸(Positive)으로 분류했는데, 사실은 중요한 계약서 메일(Negative)이었다면 큰 손실이 발생합니다. 따라서 스팸 필터는 정밀도가 매우 중요합니다. 어설프게 스팸으로 예측하기보다는, 확실한 경우에만 스팸으로 분류하는 것이 낫습니다. 즉, FP를 최소화하는 것이 목표입니다.
  • 예시 2 (유튜브 추천 시스템): 사용자에게 특정 영상을 추천(Positive)했는데, 사용자가 전혀 흥미를 느끼지 못하는 영상(Negative)이라면 사용자의 경험을 해치게 됩니다. 따라서 추천 시스템은 사용자가 만족할 만한 영상을 신중하게 추천해야 하므로 정밀도가 중요합니다.

재현율 (Recall): 실제 Positive를 얼마나 잘 찾아내는가?

재현율은 실제 'Positive'인 것들 중에서 모델이 'Positive'로 예측한 것의 비율을 나타냅니다. '실제 값'을 기준으로 삼는 지표입니다. 재현율은 다른 이름으로 '민감도(Sensitivity)' 또는 'TPR(True Positive Rate)'이라고도 불립니다.

재현율 (Recall) = TP / (TP + FN)

재현율을 이해하려면 "실제로 참인 것들을 모델이 얼마나 놓치지 않고 잡아내는가?"라는 질문을 해보면 됩니다. 재현율이 높다는 것은 모델이 실제 Positive 샘플을 Negative로 잘못 판단하는 경우(FN)가 적다는 것을 의미합니다.

  • 중요한 상황: FN(False Negative)의 비용이 비쌀 때. 즉, 암 환자를 건강하다고 진단하거나(Positive -> Negative), 금융 사기를 정상 거래로 판단하는(Positive -> Negative) 경우 치명적인 결과를 초래할 때 재현율이 중요합니다.
  • 예시 1 (암 진단 모델): 실제 암 환자(Positive)를 한 명이라도 놓쳐서 건강하다(Negative)고 진단하면 환자의 생명이 위험해질 수 있습니다. 약간의 오진(FP)이 있더라도, 실제 암 환자는 절대로 놓치지 않는 것이 중요합니다. 따라서 이 경우에는 재현율을 극대화하는 것이 목표입니다.
  • 예시 2 (금융 사기 탐지 시스템): 사기 거래(Positive)를 정상 거래(Negative)로 잘못 판단하면 회사에 막대한 금전적 손실을 입힐 수 있습니다. 일부 정상 거래를 사기 의심 거래로 분류(FP)하여 사용자가 추가 인증을 하는 불편함이 있더라도, 실제 사기 거래는 최대한 모두 잡아내는 것이 중요합니다.

정밀도와 재현율의 상충 관계 (Precision-Recall Trade-off)

안타깝게도 정밀도와 재현율은 한쪽이 올라가면 다른 한쪽이 내려가는 상충 관계, 즉 트레이드오프(Trade-off) 관계에 있는 경우가 많습니다. 이는 모델이 예측을 결정하는 '임계값(Threshold)' 조정과 관련이 깊습니다.

대부분의 분류 모델은 예측을 0 또는 1의 이진 값으로 바로 출력하는 것이 아니라, 특정 클래스에 속할 확률(0과 1 사이의 값)을 출력합니다. 예를 들어, 어떤 환자가 암에 걸릴 확률을 0.7로 예측했다고 가정해 봅시다. 우리는 이 확률 값을 보고 최종적으로 '암(Positive)' 또는 '정상(Negative)'을 결정해야 하는데, 이때 기준이 되는 것이 임계값입니다.

  • 임계값을 높이면 (e.g., 0.8 이상일 때만 Positive로 예측): 모델은 매우 확실한 경우에만 Positive로 예측하게 됩니다. 따라서 FP가 줄어들어 정밀도는 올라갑니다. 하지만 약간 애매한 Positive 샘플(e.g., 확률 0.75)을 Negative로 판단하게 되므로 FN이 늘어나 재현율은 떨어집니다.
  • 임계값을 낮추면 (e.g., 0.3 이상일 때 Positive로 예측): 모델은 조금이라도 가능성이 있으면 Positive로 예측하게 됩니다. 따라서 실제 Positive를 놓치지 않으므로(FN 감소) 재현율은 올라갑니다. 하지만 정상 샘플을 Positive로 잘못 예측하는 경우(FP 증가)가 많아져 정밀도는 떨어집니다.

이처럼 정밀도와 재현율은 동전의 양면과 같아서, 어떤 지표를 더 중요하게 생각할지는 해결하려는 문제의 특성과 비즈니스 요구사항에 따라 달라집니다. 따라서 데이터 과학자는 두 지표를 모두 확인하고, 비즈니스 담당자와 협의하여 적절한 임계값을 설정하는 과정을 거쳐야 합니다.


# Scikit-learn을 이용한 정밀도 및 재현율 계산 예시
from sklearn.metrics import precision_score, recall_score, confusion_matrix

# 실제 레이블과 모델 예측 레이블이 있다고 가정
y_true = [0, 1, 1, 0, 1, 0, 0, 1]
y_pred = [0, 1, 0, 0, 1, 1, 0, 1]

# 혼동 행렬 출력
# TN=3, FP=1, FN=1, TP=3
print(confusion_matrix(y_true, y_pred))

# 정밀도 계산: TP / (TP + FP) = 3 / (3 + 1) = 0.75
print(f"정밀도: {precision_score(y_true, y_pred):.2f}")

# 재현율 계산: TP / (TP + FN) = 3 / (3 + 1) = 0.75
print(f"재현율: {recall_score(y_true, y_pred):.2f}")

두 마리 토끼를 잡는 지표: F1 스코어 (F1 Score)

정밀도와 재현율이 상충 관계에 있다 보니, 두 지표를 종합적으로 고려하여 모델의 성능을 평가할 수 있는 단일 지표의 필요성이 대두되었습니다. F1 스코어는 정밀도와 재현율의 '조화 평균(Harmonic Mean)'을 이용하여 두 지표를 하나의 숫자로 나타낸 것입니다.

F1 스코어 = 2 * (정밀도 * 재현율) / (정밀도 + 재현율)

왜 산술 평균이 아닌 조화 평균을 사용할까요? 조화 평균은 두 값의 차이가 클수록 낮은 값에 가깝게 페널티를 부여하는 특징이 있습니다. 예를 들어, 정밀도가 1.0이고 재현율이 0.1이라면, 산술 평균은 (1.0 + 0.1) / 2 = 0.55로 비교적 괜찮은 수치가 나옵니다. 하지만 F1 스코어는 2 * (1.0 * 0.1) / (1.0 + 0.1) ≈ 0.18로 매우 낮은 점수를 줍니다. 이는 모델이 한쪽 지표에만 치우쳐 있을 경우 성능이 좋지 않다고 판단하는 것입니다. 따라서 F1 스코어가 높다는 것은 정밀도와 재현율이 모두 균형 있게 높다는 것을 의미합니다.

  • 중요한 상황: 정밀도와 재현율 모두 비슷한 수준으로 중요할 때 사용됩니다. 특히 불균형 데이터셋에서 Positive 클래스에 대한 모델의 전반적인 예측 성능을 평가하는 데 매우 유용합니다.
  • 예시: 새로운 마케팅 캠페인에 반응할 고객을 예측하는 모델을 만들었다고 가정해 봅시다. 너무 많은 고객에게 쿠폰을 남발하면(FP 증가, 낮은 정밀도) 비용이 낭비되고, 반응할 고객을 너무 많이 놓치면(FN 증가, 낮은 재현율) 잠재적 매출을 잃게 됩니다. 이처럼 FP와 FN의 중요도가 비슷할 때 F1 스코어는 모델을 비교하는 좋은 기준이 될 수 있습니다.

모델의 종합 건강 검진: ROC 곡선과 AUC

지금까지 살펴본 지표들은 모두 특정 '임계값'을 기준으로 계산되었습니다. 하지만 최적의 임계값은 문제마다 다르며, 때로는 임계값 자체를 결정하기 어려운 경우도 있습니다. ROC(Receiver Operating Characteristic) 곡선과 AUC(Area Under the Curve)는 임계값의 변화에 따라 모델의 성능이 어떻게 변하는지를 종합적으로 보여주는 강력한 평가 도구입니다.

ROC 곡선 (ROC Curve)

ROC 곡선은 분류 모델의 모든 임계값 설정에 대해 모델의 성능을 시각적으로 나타낸 그래프입니다. 이 그래프의 각 축은 다음과 같은 의미를 가집니다.

  • X축: FPR (False Positive Rate, 위양성률)
    • FPR = FP / (FP + TN)
    • 실제 Negative인 데이터 중에서 모델이 Positive로 잘못 예측한 비율입니다. '얼마나 많은 무고한 Negative를 Positive로 잘못 판단하는가'를 나타내며, 1-특이도(Specificity)와 같습니다. 이 값은 0에 가까울수록 좋습니다.
  • Y축: TPR (True Positive Rate, 진양성률)
    • TPR = TP / (TP + FN)
    • 이는 우리가 앞에서 배운 재현율(Recall)과 완전히 동일합니다. 실제 Positive인 데이터 중에서 모델이 Positive로 올바르게 예측한 비율입니다. 이 값은 1에 가까울수록 좋습니다.

ROC 곡선은 임계값을 1부터 0까지 점차 낮추면서 각 임계값에서의 TPR과 FPR을 계산하여 좌표 평면에 점을 찍고, 그 점들을 이어 만듭니다.

  1.0 +--------------------------------------------------+
      |*                                                 | TPR (Recall)
      | ***                                              | ↑
      |   ****                                           | 좋은 모델 (Good Model)
  T P |      ******                                      |
  R a |           ********                               |
    t |                  ***********                     |
    e |                           ****************       |
  0.5 +--------------------------#***********************+
      |                          #                       | 랜덤 모델 (Random Model)
      |                          #                       |
      |                          #                       |
      |                          #                       |
      |                          #                       |
      |                          #                       |
  0.0 +--------------------------------------------------+
      0.0                      0.5                       1.0
                          FPR (False Positive Rate) →
  • 그래프 해석:
    • (0,0) 지점: 임계값이 1일 때. 모든 것을 Negative로 예측하므로 TP도 FP도 0입니다.
    • (1,1) 지점: 임계값이 0일 때. 모든 것을 Positive로 예측하므로 모든 Positive와 Negative를 Positive로 예측하게 되어 TPR과 FPR 모두 1이 됩니다.
    • 왼쪽 위 모서리(0,1)에 가까울수록: FPR은 낮게 유지하면서 TPR은 높게 만드는, 이상적인 성능을 가진 모델입니다. 즉, 곡선이 좌상단에 최대한 가깝게 그려질수록 성능이 뛰어납니다.
    • 대각선 (y=x 직선): 이는 동전 던지기와 같은 랜덤 분류 모델의 성능을 나타냅니다. 모델의 ROC 곡선이 이 대각선 아래에 있다면, 그 모델은 랜덤 추측보다도 성능이 나쁘다는 의미입니다.

AUC (Area Under the Curve)

AUC는 말 그대로 ROC 곡선 아래의 면적을 의미합니다. ROC 곡선이 모델의 성능을 시각적으로 보여준다면, AUC는 그 성능을 0과 1 사이의 단일 수치로 요약해 줍니다.

  • AUC 값의 의미:
    • 1에 가까울수록: 완벽한 분류기. Positive 샘플과 Negative 샘플을 완벽하게 구분할 수 있습니다.
    • 0.5에 가까울수록: 랜덤 분류기와 비슷한 성능. 모델이 클래스를 구별하는 능력이 거의 없습니다.
    • 0.5보다 작다면: 랜덤 분류기보다 못한 성능. 예측 결과를 반대로 하면 성능이 더 좋아질 수 있습니다.

AUC는 임계값에 관계없이 모델의 전반적인 판별 능력을 나타내기 때문에, 특정 임계값에 의존하는 정밀도, 재현율, F1 스코어보다 더 일반적인 모델 성능 평가 지표로 사용될 수 있습니다. 여러 모델의 성능을 비교할 때, 어떤 임계값을 선택해야 할지 모르는 상황이라면 AUC를 기준으로 가장 높은 값을 가진 모델을 선택하는 것이 합리적일 수 있습니다.

결론: 문제에 맞는 올바른 자를 선택하라

지금까지 우리는 머신러닝 모델의 성능을 평가하는 다양한 지표들을 살펴보았습니다. 정확도라는 단순한 지표에서 시작하여, 혼동 행렬을 기반으로 하는 정밀도, 재현율, F1 스코어, 그리고 임계값에 구애받지 않는 종합 성능 지표인 ROC AUC까지. 그렇다면 어떤 지표가 가장 좋은 지표일까요?

정답은 "문제에 따라 다르다"입니다.

각 평가 지표는 모델의 특정 측면을 조명하는 렌즈와 같습니다. 어떤 렌즈를 선택할지는 우리가 무엇을 보고 싶은지, 즉 비즈니스 목표가 무엇인지에 따라 결정되어야 합니다.

평가 지표 핵심 질문 언제 사용하는가? 주요 고려사항
정확도 (Accuracy) 전체 중 얼마나 맞았는가? 데이터 클래스가 균등하게 분포되어 있을 때. 불균형 데이터에서는 성능을 심각하게 왜곡할 수 있음.
정밀도 (Precision) Positive 예측을 얼마나 믿을 수 있는가? FP(위양성)의 비용이 클 때 (e.g., 스팸 필터) 재현율과 트레이드오프 관계.
재현율 (Recall) 실제 Positive를 얼마나 놓치지 않았는가? FN(위음성)의 비용이 클 때 (e.g., 암 진단) 정밀도와 트레이드오프 관계.
F1 스코어 (F1 Score) 정밀도와 재현율이 얼마나 균형 잡혔는가? 정밀도와 재현율 모두 중요할 때, 불균형 데이터에서. 두 지표의 조화 평균으로 한쪽에 치우치면 낮은 점수.
AUC 임계값과 무관하게 모델이 얼마나 잘 구별하는가? 모델의 일반적인 판별 성능을 비교하거나, 적절한 임계값을 모를 때. ROC 곡선의 시각화와 함께 해석하는 것이 좋음.

훌륭한 데이터 과학자는 단 하나의 지표에만 매몰되지 않습니다. 다양한 평가 지표를 종합적으로 검토하고, 각 지표가 의미하는 바를 비즈니스 용어로 해석하여 의사결정자와 소통할 수 있어야 합니다. 모델의 성능을 숫자로만 보는 것을 넘어, 그 숫자가 현실 세계에서 어떤 영향을 미치는지 이해하는 것이야말로 진정한 모델 평가의 핵심이라 할 수 있을 것입니다.


0 개의 댓글:

Post a Comment