1. 오차행렬(confusion matrix)
실제 값이 행이 되고 예측값이 열이 되며, 해당 좌표에 실제 값과 예측값의 조합의 수를 넣어서 만든 행렬을 오차행렬이라 한다. 예를 들어 다음과 같은 3 x 3 오차행렬을 보자.
predict | ||||
1 | 2 | 3 | ||
actual | 1 | 5 | 3 | 4 |
2 | 21 | 10 | 9 | |
3 | 16 | 17 | 15 |
좌표 (1, 1)에 해당하는 값 5는 정답이 1인 것을 1로 정확히 맞춘 것이 5개 있다는 뜻이다. 좌표 (1, 2)에 해당하는 값 3은 정답이 1인 것을 2라고 잘못 맞춘 것이 3개 있다는 뜻이다. 즉 이 테이블에서 정답은 (1, 1), (2, 2), (3, 3) 좌표에 해당하는 값이 된다. 전체가 100개이고 이 중 대각선 요소를 합하면 5 + 10 + 15 = 30이니 정답률은 30%가 될 것이다.
2. 이진 분류(binary classification)
위에 있는 분류 문제가 데이터셋을 세 가지 클래스로 분류하는 다중 분류(multiple classification)였다면 데이터셋을 두 가지 클래스로 분류하는 문제를 이진 분류(binary classification)이라 한다. 위에 있는 문제로 이진 분류로 변환할 수 있다. 예를 들어, 데이터셋을 1, 2, 3 세 가지로 분류할 게 아니라, 1인 것과 그 나머지(2, 3)로 분류한다고 해보자. 그럼 오차행렬을 다음과 같이 2 x 2 행렬로 변환할 수 있다.
1 | Not 1 | |
1 | 5 | 7 |
Not 1 | 37 | 51 |
머신러닝에서는 이진 분류에서 '1'과 'Not 1'을 'Positive', 'Negative'로 부른다. 내 생각에는 어차피 이진 분류니 P와 N을 뒤바꿔 불러도 상관없을 것 같은데 통상 'Not'에 해당하는 것을 'Negative'라 한다. 이진 분류의 오차행렬은 다음과 같이 쓸 수 있다.
(predict) Positive | (predict) Negative | |
(actual) Positive | TP (True Positive) 5 | FN (False Negative) 7 |
(actual) Negative | FP( False Positive) 37 | TN (True Negative) 51 |
3. 정확도 측정 지표
정확도 측정 지표는 네 종류가 있다.
3-1. 정확도(accuracy)
3-2. 정밀도(precision)
3-3. 재현율(recall) 또는 민감도(sensitivity) = 진짜양성비율(True Positive Rate, TPR)
3-4. 특이도(specificity) = 진짜음성비율(True Negative Rate, TNR)
3-5. 거짓양성비율(False Positive Rate, FPR)
3-6. F1 스코어
정확도 하나만 있으면 될 거 같은데 왜 이렇게 많은 지표가 있는 걸까. 그 이유는 데이터의 실제 값이 어느 한 값이 압도적으로 많은 불균형 데이터인 경우에 성능이 나빠도 정확도는 높게 나올 수가 있기 때문이다. 위의 예를 보면 실제 값이 Positive인 비율은 12%이다. 즉, 무조건 Negative라고 예측해도 정확도가 88%는 나오는데 이걸 성능이 좋다고 말할 수는 없다. 일반적으로 정밀도와 재현율을 같이 보며, 둘은 트레이드오프 관계가 있다. 어느 한쪽이 너무 낮으면 좋은 분류기라고 볼 수 없다.
4. 분류기 성능을 볼 수 있는 두 개의 곡선
4-1. PR 곡선(정밀도/재현율 곡선)
그림에서 보는 것처럼 재현율을 높이다 보면 어느 지점에서 정밀도가 급격하게 떨어지기 시작한다. 아마도 정밀도가 급격하게 떨어지기 직전의 임계값을 갖도록 하는 것이 가장 이상적일 것이다.
4-2. ROC 곡선
FPR에 대한 TPR의 곡선을 ROC 곡선이라고 한다. 아래와 같이 생겼다.
곡선 아래의 면적(Area Under Curve, AUC)이 분류기의 성능이 된다. 즉, AUC=1이면 완전한 분류기이고, 완전히 랜덤한 분류기인 경우 45도 대각선(그림의 점선)이 되기 때문에 AUC=0.5가 된다.
1) 양성이 적거나, 거짓 음성보다 거짓 양성이 더 중요하면 → PR 곡선을 사용한다.
2) 그렇지 않으면 → ROC 곡선을 사용한다.
참고) 핸즈온 머신러닝 2판(오렐리앙 제롱 저, 박해선 역), 한빛미디어 pp.133-143
'Tech' 카테고리의 다른 글
[QGIS] 기초 + 폴리곤 내에 있는 포인트 선택하기 (0) | 2023.08.15 |
---|---|
[Jupyter] 설치하기 (0) | 2021.11.27 |
[LaTeX] 수식 괄호 정리 (1) | 2021.09.23 |
[python] 파일 입출력 (txt, csv) (0) | 2020.12.22 |
[Git] 작업 단계, 상태 확인 등 (0) | 2018.08.17 |