taeridad19 님의 블로그

taeridad19 님의 블로그 입니다.

  • 2025. 5. 13.

    by. taeridad19

    목차

      ✅ 머신러닝 모델 평가는 왜 중요한가?

      머신러닝 모델을 개발하고 학습시킨 후, 그 성능을 어떻게 평가할 수 있을까요?
      단순히 모델의 예측 결과와 실제 값을 비교해 '정답률'을 보는 것이 가장 쉬운 방법이지만, 이것만으로는 모델의 성능을 완전히 설명할 수 없습니다.

      특히, 데이터가 불균형할 때 단순한 정확도는 모델의 품질을 왜곡할 수 있습니다. 예를 들어, 실제 환자의 비율이 전체의 1%에 불과한 의료 진단 데이터에서 모두 "정상"이라고 예측하면 99% 정확도가 나올 수 있지만, 이는 결코 좋은 모델이 아닙니다.

      따라서, 머신러닝에서의 모델 평가는 다양한 정량적 지표를 통해 다각도로 이루어져야 하며, 이 글에서는 그 중에서도 가장 핵심적인 세 가지 — 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 에 대해 자세히 설명합니다.


      📊 정확도(Accuracy)란?

      정확도는 가장 기본적이고 직관적인 평가 지표입니다.
      전체 예측 중에서 실제로 맞춘 예측의 비율을 의미합니다.

      정의:

      정확도 = (정답으로 예측한 수) / (전체 예측 수)
             = (TP + TN) / (TP + TN + FP + FN)
      
      • TP: True Positive (정답을 맞춘 긍정 예측)
      • TN: True Negative (정답을 맞춘 부정 예측)
      • FP: False Positive (틀린 긍정 예측)
      • FN: False Negative (틀린 부정 예측)

      정확도의 장점

      • 전체 예측 성능을 단순하게 측정할 수 있음
      • 이진 분류 문제에서 직관적인 해석 가능

      정확도의 단점

      • 클래스 불균형 문제에 취약
        예: 스팸 메일이 1%인 데이터에서 모두 "일반 메일"이라고 예측해도 99% 정확도가 나올 수 있음

      🎯 정밀도(Precision)란?

      정밀도는 모델이 긍정 클래스라고 예측한 것들 중에서 실제로 맞은 비율을 의미합니다.

      정의:

      정밀도 = TP / (TP + FP)
      

      즉, 내가 맞췄다고 주장한 것들 중 실제로 얼마나 맞았는가? 를 의미합니다.

      정밀도가 중요한 사례

      • 스팸 필터링: 스팸 메일로 잘못 판단하면 중요한 메일을 놓칠 수 있음
      • 금융 사기 탐지: 사기라고 예측한 것들 중 진짜 사기인지를 정확히 판단하는 것이 중요

      정밀도는 False Positive를 줄이고 싶은 경우에 중시되는 지표입니다.


      🔍 재현율(Recall)이란?

      재현율은 실제 긍정 클래스 중에서 모델이 얼마나 많이 맞췄는가를 보여주는 지표입니다.

      정의:

      재현율 = TP / (TP + FN)
      

      즉, 놓치지 않고 잘 찾아냈는가? 라는 관점의 지표입니다.

      재현율이 중요한 사례

      • 질병 진단: 병을 놓치면 생명이 위험할 수 있기 때문에 재현율이 매우 중요
      • 보안 침해 탐지: 이상행위를 최대한 많이 탐지해야 함

      재현율은 False Negative를 줄이고 싶은 경우에 중시되는 지표입니다.


      ⚖️ 정밀도 vs 재현율: 트레이드오프 관계

      정밀도와 재현율은 일반적으로 서로 반비례 관계를 가집니다.
      즉, 정밀도를 높이면 재현율이 떨어질 수 있고, 반대도 마찬가지입니다.

      예:

      • 정밀도를 높이기 위해 엄격한 기준으로만 '긍정'을 판단하면, 놓치는 경우(FN)가 많아져 재현율이 떨어질 수 있습니다.
      • 반대로 재현율을 높이기 위해 널리 '긍정'으로 예측하면, 잘못된 판단(FP)이 많아져 정밀도가 낮아질 수 있습니다.

      따라서 어떤 지표에 우선순위를 둘지는 문제의 특성과 위험도에 따라 결정되어야 합니다.


      🧠 F1 Score: 정밀도와 재현율의 조화

      정밀도와 재현율을 균형 있게 고려하기 위해 사용되는 지표가 바로 F1 Score입니다.

      정의:

      F1 Score = 2 * (정밀도 * 재현율) / (정밀도 + 재현율)
      

      F1 Score는 정밀도와 재현율이 모두 높은 경우에만 높은 값을 가지므로, 모델의 전반적인 분류 성능을 평가하는 데 매우 유용합니다.


      🧪 실습 예시 (사이킷런)

      from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
      from sklearn.datasets import load_breast_cancer
      from sklearn.model_selection import train_test_split
      from sklearn.ensemble import RandomForestClassifier
      
      # 데이터 로드
      data = load_breast_cancer()
      X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42)
      
      # 모델 학습
      model = RandomForestClassifier()
      model.fit(X_train, y_train)
      y_pred = model.predict(X_test)
      
      # 평가 지표 출력
      print(f'정확도: {accuracy_score(y_test, y_pred):.4f}')
      print(f'정밀도: {precision_score(y_test, y_pred):.4f}')
      print(f'재현율: {recall_score(y_test, y_pred):.4f}')
      print(f'F1 Score: {f1_score(y_test, y_pred):.4f}')
      

      이 코드는 유방암 진단 데이터를 활용하여 랜덤 포레스트 분류기의 평가 지표를 출력하는 예시입니다.
      정확도, 정밀도, 재현율, F1 Score를 모두 확인할 수 있어 모델 평가에 매우 유용합니다.


      ⚙️ 어떤 지표를 선택할 것인가?

      문제 유형 중시해야 할 지표
      의료 진단, 보안 탐지 재현율
      스팸 필터링, 금융 사기 탐지 정밀도
      균형 잡힌 일반 분류 F1 Score, 정확도

      모델 성능을 단순히 하나의 숫자로 평가하지 않고, 문제 도메인에 맞는 지표를 선택해야 진정한 성능을 파악할 수 있습니다.


      📌 결론: 다양한 지표의 조합이 중요하다

      머신러닝 모델의 평가는 단일 지표로 끝나지 않습니다.
      정확도는 전체적인 퍼포먼스를 보여주지만, 정밀도와 재현율은 모델의 세밀한 판단 능력을 설명합니다.

      그리고 이 둘의 균형이 필요할 때는 F1 Score를 사용해 판단할 수 있습니다.
      모델을 평가할 때는 항상 데이터의 특성과 문제의 본질을 고려하여, 적절한 지표를 선택하고, 필요시 여러 지표를 종합적으로 활용하는 것이 바람직합니다.


      ❓ FAQ

      Q1. 정밀도와 재현율을 둘 다 높이는 건 불가능한가요?

      → 이상적인 모델이라면 가능합니다. 그러나 대부분의 현실 문제에서는 하나를 높이면 다른 하나가 낮아지는 경향이 있습니다.

      Q2. 불균형 데이터셋에서는 어떤 지표가 더 적절한가요?

      → 재현율이나 F1 Score가 더 유의미합니다. 정확도는 착시를 줄 수 있으므로 주의해야 합니다.

      Q3. 다중 클래스 분류에서는 어떻게 평가하나요?

      → 각 클래스별 정밀도/재현율을 구한 후, 평균 방식(macro/micro/weighted)을 통해 전체 성능을 평가합니다.