머신러닝 성능평가지표 (Metrics): 오차행렬, 정확도, 정밀도, 재현율, F1, ROC-AUC

jihyelee·2023년 12월 20일
0

오차행렬 (Confusion Matrix)

  • 이진 분류에서 예측한 정답과 실제 정답을 비교하여 어떠한 유형의 오류가 발생하고 있는지를 확인할 수 있는 지표
  • 이를 기반으로 정확도, 정밀도, 재현율 등을 계산
예측 = Negative (0)예측 = Positive(1)
실제 = Negative (0)True Negative (TN)False Positive (FP)
실제 = Positive (1)False Negative (FN)True Positive (TP)
  • TN: 진짜 0. 실제 클래스가 0이었는데 예측도 0으로 잘 맞춤
  • FP: 가짜 1. 실제 클래스는 0이었는데 예측을 1로 잘못 맞춤
  • FN: 가짜 0. 실제 클래스는 1이었는데 예측을 0으로 잘못 맞춤
  • TP: 진짜 1. 실제 클래스가 1이었는데 예측도 1로 잘 맞춤
  • FP, FN을 예측 관점에서 파악하는 것이 이해에 도움이 됨
  • scikit learn에서 confusion_matrix를 부르면 위의 표와 같은 순서로 TN, FP, FN, TP 출력

정확도 (Accuracy)

TN+TPTN+TP+FN+FP\frac{TN + TP}{TN + TP + FN + FP} \\
  • 실제 클래스를 정확히 예측한 경우 / 전체 경우
  • 정확도는 레이블 사이에 불균형이 있다면 성능을 제대로 예측할 수가 없다는 단점
    • 예를 들어서 불량률이 0.001%인 공장에서 예측의 정확도를 높이기 위해 모든 제품을 양품이라고 판단한다면, 정확도는 99.999%가 되겠지만 불량품을 제대로 판별할 수 없다는 점에서 해당 예측모델은 무용지물

정밀도 (Precision)

TPTP+FP\frac{TP}{TP + FP} \\
  • 참이라고 예측한 값들 중 실제 참인 경우
  • 예측이 얼마나 "정밀"한지를 판단
  • 실제 Negative인 데이터를 Positive로 잘못 예측할 시 손해가 더 크다면 정밀도가 재현율보다 더 중요한 지표
    • 예시) 스팸메일, 웹서치 (중요한 메일을 스팸메일로 분류한다던가, 좋은 정보를 담은 웹페이지를 누락시킨다던가)

재현율 (Recall)

TPTP+FN\frac{TP}{TP + FN} \\
  • 실제 참인 값들 중에서 참으로 예측한 경우
  • 실제의 값을 얼마나 잘 "재현"했는가를 판단
  • 실제 Positive인 데이터를 Negative로 잘못 예측할 시 손해가 크다면 재현율이 중요한 지표
    • 예를 들어 암 진단, 금융사기 판별, 불량품 검수 (암이 있는데 없다고 하거나, 금융사기가 존재하는데 아니라고 판단하거나, 불량품인데 양품이라고 판단하는 등)

F1 Score

2(precisionrecall)(precision+recall)\frac{2 * (precision * recall)}{(precision + recall)} \\
  • 정밀도와 재현율은 트레이드 오프 관계
  • 이 둘을 적절히 고려한 성능지표가 F1 score
  • Precision과 Recall의 조화평균
  • 정밀도와 재현율 중 어느 한쪽으로 치우치지 않을 경우 상대적으로 높은 값

민감도 (Sensitivity), 특이도 (Specificity)

  • 민감도는 재현율(Recall)과 동일
    • 참을 참으로 잘 판단하는지 여부
  • 특이도
    TNTN+FP\frac{TN}{TN + FP} \\
    • 거짓을 거짓으로 잘 판단하는지 여부

ROC-AUC

  • ROC(Receiver Operating Characteristics) 곡선
  • x축으로 1 - 특이도(=false positive rate), y축으로 민감도(= true positive rate)를 사용
  • AUC는 커브 아래의 면적을 의미하는데, 최근 분류 문제에서 성능을 평가할 때 AUC를 주로 이용
  • 좋은 알고리즘일수록 커브가 왼쪽과 상단 벽에 붙는 방식으로 그려지며, 나쁜 알고리즘의 경우 y=x 직선에 가까워짐
  • 즉 AUC의 최소값은 0.5, 최대값은 1로, 1에 가까울수록 좋은 수치다.


참고: 인프런 <파이썬 머신러닝 완벽 가이드 (권철민)>

profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher at LG CNS AI Lab

0개의 댓글