1. Confusion Matrix
Confusion Matrix(혼동 행렬, 오차 행렬)란 ?
Confusion Matrix은 분류 문제에서 모델의 예측값($\hat{y}$)과 실제 데이터의 값($y$)을 비교하여 어떤 오류가 발생하고 있는지를 알아보고자 하는 지표이다.
다들 아시다시피, Confusion Matrix(혼동 행렬, 오차 행렬)은 그 누구보다 이름값을 잘하고 있으니 주의해서 기억하자!
Actual은 실제값($y$), Predicted는 예측값($\hat{y}$)을 의미한다.
💡 True/False: 실제와 예측이 일치하는가?
Positive/Negative: 무엇으로 예측했는가?
- TN(True Negative, Negative Negative): 실제는 Negative인데, Negative로 예측함.
- Negative가 맞아! ⇒ 아닌 것을 올바르게 틀리다고 예측함
- FP(False Positive, Negative Positive): 실제는 Negative인데, Positive로 예측함.
- Positive가 아니야! ⇒ 아닌 것을 올바르지 않게 맞다고 예측함
- FN(False Negative, Positive Negative): 실제는 Positive인데, Negative로 예측함.
- Negative가 아니야! ⇒ 맞는 것을 올바르지 않게 틀리다고 예측함
- TP(True Positive, Positive Positive): 실제는 Positive인데, Positive로 예측함.
- Positive가 맞아! ⇒ 맞는 것을 올바르게 맞다고 예측함
예시
아래의 출처를 알아보기 힘들 정도로 유명한 밈으로 다시 한번 살펴보자!
- TN(True Negative, Negative Negative)
- 실제는 임신이 아니고(0), 임신이 아닌 것(0)으로 잘 예측함.
- 질병이 없는 사람(0)의 검사 결과가 맞아! ⇒ 음성으로 예측(0)
- FP(False Positive, Negative Positive) ⇒ **
1종 오류
- 실제는 임신이 아닌데(0), 임신(1)로 예측함.
- 질병이 없는 사람(0)의 검사 결과가 틀려!⇒ 양성으로 예측(1)
- FN(False Negative, Positive Negative) ⇒
2종 오류
- 실제는 임신인데(1), 임신이 아닌 것(0)으로 예측함.
- 질병이 있는 사람(1)의 검사 결과가 틀려! ⇒ 음성으로 예측(0)
- TP(True Positive, Positive Positive)
- 실제는 임신인데(1), 임신(1)으로 잘 예측함.
- 질병이 있는 사람(1)의 검사 결과가 맞아! ⇒ 양성으로 예측(1)
아래의 두 병원의 암 진단 결과를 비교해보자.
🔎 예시
🏥 A 병원
실제값↓ / 예측값→ | 일반환자 | 암환자 |
---|---|---|
일반환자 | 60 | 30 |
암환자 | 1 | 9 |
🏥 B 병원
실제값↓ / 예측값→ | 일반환자 | 암환자 |
---|---|---|
일반환자 | 70 | 20 |
암환자 | 9 | 1 |
- TN(True Negative, Negative Negative)
- A병원: 일반환자 예측이 맞아! ⇒ 60
- B병원: 일반환자 예측이 맞아! ⇒ 70
- FP(False Positive, Negative Positive)
- A병원: 암환자 예측이 아니야! ⇒ 30
- B병원: 암환자 예측이 아니야! ⇒ 20
- FN(False Negative, Positive Negative)
- A병원: 일반환자 예측이 아니야! ⇒ 1
- B병원: 일반환자 예측이 아니야! ⇒ 9
- TP(True Positive, Positive Positive)
- A병원: 암환자 예측이 맞아! ⇒ 9
- B병원: 암환자 예측이 맞아! ⇒ 1
다중분류 예시
아래의 표를 통해 이진분류가 아닌 다중분류에도 적용해보자.
TN(True Negative, Negative Negative)
- 아닌 것을 올바르게(True) 틀리다(Negative)
A 클래스의 TN: A가 아닌 것(B,C,D)을 올바르게 틀리다 예측(B,C,D)
B | C | D |
---|---|---|
15, 3, 1 | 0, 24, 1 | 4, 1, 15 |
B 클래스의 TN: B가 아닌 것(A,C,D)을 올바르게 틀리다 예측(A,C,D)
A | C | D |
---|---|---|
9, 0, 0 | 5, 24, 1 | 0, 1, 15 |
FP(False Positive, Negative Positive)
- 아닌 것을 올바르지 않게(False) 맞다(Positive)
A 클래스의 FP: A가 아닌 것(B,C,D)을 A라고 올바르지 않게 예측
B | C | D |
---|---|---|
1 | 5 | 0 |
B 클래스의 FP: B가 아닌 것(A,C,D)을 B라고 올바르지 않게 예측
A | C | D |
---|---|---|
1 | 0 | 4 |
- FN(False Negative, Positive Negative)
- 맞는 것을 올바르지 않게(False) 틀리다(True)
A 클래스의 FN: A를 A가 아니라고(B, C, D)라고 올바르지 않게 예측
B | C | D |
---|---|---|
1 | 0 | 0 |
TP(True Positive, Positive Positive)
- 맞는 것이 올바르게(True) 맞다(Positive) ⇒ 9 + 15 + 24 + 15
Confusion Matrix의 지표
정확도 (accuracy)
- ((TP + TN) / (TP + FN + FP + TN)) 전체 개수 중에서 양성과 음성을 맞춘 수
- 전체 개수 중에서 기계가 실제 참을 참이라고 하고 실제 거짓을 거짓이라고 한 비율
재현율 (Recall)
- (TP / (TP + FN)) 전체 양성 수에서 검출 양성 수
- 전체의 실제 참들 중에서 얼마나 기계가 참이라고 골라낸 비율
정밀도 (Precision)
- (TP / (TP + FP)) 양성이라고 판정 한 것 중에 실제 양성 수
- 기계가 참이라고 했는데 실제 참인 것의 비율
특이도 (Specificity)
- (TN / (FP + TN)) 음성 중 맞춘 음성의 수
- 기계가 음성. 즉, Negative인 것을 양성이 아니라고 했는지
민감도 (Sensitivity)
- (TP / (TP + FN)) 양성 중 맞춘 양성의 수
- 기계가 양성. 즉, positive를 얼마나 잘 꺼내서 맞췄는지
Accuracy(정확도)란?
Acuuracy는 간단히 말하면 전체 문제 중에서 정답을 맞춘 비율이다. 즉 예측을 긍정으로 했든 부정으로 했든 실제로 참이었는지에 포커싱을 둔 지표로, 가장 직관적이고 상식적인 지표라고 볼 수 있다.
- 정확도는 0 ~ 1 사이의 값을 가진다.
$Accuracy = \cfrac{올바르게\ 예측한\ 샘플\ 개수}{전체\ 샘플\ 개수} = \cfrac{TP + TN}{TP + TN + FP + FN}$
Accuracy는 클래스의 분포가 같을 때 의미 있는 성능 비교가 가능하다.
- 자신의 알고리즘이 무조건 암에 걸리지 않았다고 진단하는 잘못된 알고리즘이라고 가정하자
- 만약 암이 걸린 사람이 2명, 걸리지 않은 사람이 3,000,000명이라 가정하면 정확도는 99%에 육박한다.
- $ Accuracy = \cfrac{3,000,000}{3,000,002} $
➡️ 무조건 틀렸다고 예측해도 샘플이 불균형하면 성능이 뛰어난 것처럼 보인다!!!
Accuracy는 결과만 맞는다면 과정에 큰 관심을 갖지 않는 지표이나 이러한 부분 때문에 데이터가 불균형 할 경우 accuracy만으로 제대로 분류했는지 알기가 어려운 약점을 갖는다.
학업성취도가 높은 학생과 낮은 학생들이 시험을 보았는데, 문제가 너무 쉽다면 누가 우수한 학생인지 가려내기 어렵듯이, 정확도(Accuracy)라는 지표 역시 변별력이 없는 시험처럼, 우수한 모델과 그렇지 못한 모델을 구별하기 어려운 지표이며, 따라서 이를 보완할 지표로 Precision과 Recall을 사용한다.
'AI > ML' 카테고리의 다른 글
PyCaret을 이용한 AutoML Tutorial (0) | 2022.11.17 |
---|---|
최적화와 경사하강법(Gradient Descent) (1) | 2022.11.17 |
정규분포와 Feature Scaling (1) | 2022.11.10 |
[유튜브 강의록] 04-1: Ensemble Learning - Overview (0) | 2022.11.06 |
[HML2] Decision Tree와 화이트박스 (0) | 2022.11.03 |
댓글