혼동행렬(Confusion Matrix) 이란?
학습을 통한 예측 성능을 측정하기 위해 예측값과 실제값을 비교하기 위한 표
기계가 얼마나 참과 거짓을 혼동하는지 확인하는 데 사용하기 때문에 ‘혼동’행렬이라 명명
- T, F, P, N 의미
- TRUE : 모델이 맞췄을 때
- FALSE : 모델이 틀림
- Positive : 모델의 예측 값이 TRUE
- Negative : 모델의 예측 값이 FALSE
- 각 표에 속한 값의 의미
- True Positive(TP, 참긍정) : 실제 값은 Positive, 예측된 값도 Positive
- False Positive(FP, 거짓긍정) : 실제 값은 Negative, 예측된 값은 Positive
- False Negative(FN, 거짓부정) : 실제 값은 Positive, 예측된 값은 Negative
- True Negative(TN, 참부정) : 실제 값은 Negative, 예측된 값도 Negative
분류 성능 평가 지표
Accuracy (정확도)
전체 중 모델이 바르게 분류한 비율
Accuracy=TP+FN+FP+TNTP+TN
Confusion Matrix에서 대각선 부분
🧐 **`정확도`의 한계?**
현실에서 마주치는 많은 데이터들은 불균형 데이터이다. 다시 말해, “정확도”만으로 얼마나 잘 분류했는지 알 수 없는 문제들이 많다.
예를 들어 과학 출간물 중 노벨상을 예측하는 모델을 만든다고 할 때, 모두 **no**라고 하면 99.99%의 정확도로 맞출 수 있을 것이다.
다음 그림을 보면 정확도가 높은 모델은 B이지만, 비록 4개의 오답이 있더라도 상황에 적절한 모델은 A가 된다.
즉, 단순히 정확도만으로 판단해서는 안 될 문제들이 있고 이를 해결하기 위해 정밀도와 재현율이 필요하게 되는 것이다.
Precision (정밀도)
모델이 Positive라 분류한 것 중 실제 값이 Positive인 비율 (예측 결과가 긍정적일 때 현실도 실제로 긍정일 확률)
- 양성 예측의 정확도, 다른 모든 양성 샘플을 무시하게 됨
Precision=TP+FPTP
Recall (재현율) = Sensitivity (민감도)
전체의 실제 Positive 중에서 모델이 Positive라고 골라낸 비율
- 모델이 정확하게 감지한 양성 샘플의 비율 (진짜 양성 비율)
Recall=TP+FNTP
```markdown
A병원의 정확도 = (9+60)/(9+60+1+30) = 0.69
B병원의 정확도 = (1+70)/(1+70+9+20) = 0.71
=> **정확도는 B병원이 높지만 암을 기준으로 하면 B가 더 안좋다.**
A모델의 암환자 정밀도 = 9/(9+30) = 0.23
B모델의 암환자 정밀도 = 1/(1+20) = 0.04
=> **정확도는 B모델이 높지만 정밀도는 A모델이 높다.**
A모델의 암환자 재현율 = 9/(9+1) = 0.9
B모델의 암환자 재현율 = 1/(1+9) = 0.1
=> **암환자 재현율을 기준으로 더 나은 모델은 A모델이다.**
```
Specificity (특이도)
전체의 실제 Negative 중에서 모델이 Negative라고 골라낸 비율
- 모델이 정확하게 감지한 음성 샘플의 비율 (진짜 음성 비율)
Specificity=FP+TNTN
F beta Score
- 정밀도와 재현율의 조화평균
- 한 쪽에 가중치를 두고 싶을 때 사용한다.
- beta > 1이면 재현율의 비중이 커지고
- beta < 1이면 정밀도의 비중이 커진다.
Fβ=(1+β2)⋅Recallβ2+Precision11=(1+β2)⋅(β2⋅Precision)+RecallPrecision⋅Recall
F1 Score
- 정밀도와 재현율의 조화평균
- F beta Score에서 beta가 1인 경우 (정밀도와 재현율의 비중이 같다.)
F1=2⋅Recall1+Precision11=2⋅Precision+RecallPrecision⋅Recall
Precision과 Recall : Trade-off
이 둘을 모두 없을 수는 없다. 정밀도를 올리면 재현율이 줄고 그 반대도 마찬가지이다.
- 1종 오류 발생 확률(α)과 2종 오류 발생 확률(β) 은 서로 트레이드오프 관계
- 표본의 크기가 동일한 상태에서 α값을 감소시키면 상대적으로 β 값이 증가
- 1종 오류와 2종 오류 중 어느 것을 중심적으로 볼지에 따라 기준 달라짐
sklearn 코드
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import classification_report
y_true = [1, 1, 1, 1, 0, 0, 0, 1 , 0, 1]
y_predict = [1, 1, 0, 1, 0, 1, 0, 1, 1 ,1]
precision = precision_score(y_true, y_predict)
recall = recall_score(y_true, y_predict)
f1 = f1_score(y_true, y_predict)
print(f"precision_score : {precision}, \nrecall_score : {recall}, \nf1_ : {f1}\n")
print(classification_report(y_true, y_predict))
1종 오류와 2종 오류
1종 오류 FP : 귀무가설이 참임에도 불구하고 귀무가설을 기각하는 오류
(실제로 효과가 없는데 효과가 있다고 판단)
2종 오류 FN : 귀무가설이 거짓임에도 불구하고 귀무가설을 채택하는 오류
(실제로 효과가 있는데 효과가 없다고 판단)
- 1종 오류와 2종 오류는 tradeoff관계
- 한쪽 오류를 강제로 줄이면 다른 오류가 늘어나게 된다.
예시)
- TN(True Negative, Negative Negative) 실제는 임신이 아니고(0), 임신이 아닌 것(0)으로 잘 예측함.
- FP(False Positive, Negative Positive) - 1종 오류 실제는 임신이 아닌데(0), 임신(1)로 예측
- 스팸메일이 아닌데 스팸메일로 예측
- 무고한 피고인에게 유죄를 선고
- FN(False Negative, Positive Negative) - 2종 오류 실제는 임신인데(1), 임신이 아닌 것(0)으로 예측
- 암인데 암이 아닌 것으로 예측
- 화재가 났는데 화재가 아니라고 예측
- TP(True Positive, Positive Positive) 실제 임신이고(1), 임신(1)으로 잘 예측함.
참고자료
분류 모델 성능 평가 지표 - Confusion Matrix란? :: 정확도(Accuracy), 정밀도(Precision), 재현도(Recall), F1 Score
- 머신러닝 분류 - 혼동 행렬(Confusion matrix)
머신러닝 분류 - 혼동 행렬(Confusion matrix)
혼동행렬 Confusion Matrix - 토탈 데이터과학 - Total Data Science
가설검정의 1종 오류와 2종 오류
멋쟁이사자처럼 AI스쿨 박조은강사님