Confusion Matrix (오차 행렬) : Training을 통한 Prediction 성능을 측정하기 위해 예측 값 과 실제 값 을 비교하기 위한 표
오차 행렬 예시
# Confusion Matrix 출력 예시
array([[98, 8],
[ 12, 88]])

환자다(True, Postive) / 환자가 아니다(False, Negative)
- Actual(Positive) : 실제 환자
- Actual(Negative) : 실제 환자가 아님
- Predict(Positive) : 실제 환자로 예측
- Predict(Negative) : 환자가 아닌 것으로 예측
- TP(True Positive) :
- 긍정예측을 성공 즉, 환자라고 예측해서 실제 환자임을 맞춤
- TN(True Negative) :
- 부정예측을 성공 즉, 비환자라고 예측하여 실제 비환자임을 맞춤
- FP(False Positive), Type 1 Error :
- 긍정예측을 실패 즉, 환자라고 예측했지만 비환자임
- FN(False Negative), Type 2 Error :
- 부정예측을 실패 즉, 비환자라고 예측했지만 실제 환자임
- Type1(FP)과 Type2(FN), Precision, Recall은 모델에서 항상 중요도 확인을 해야함
- 암과 관련된 문제로 유명함
- ex)
- Type1 Error :
1. 건강한 환자에게 암에 걸린 것 같다고 예측함
2. FP 예측이었음
3. 큰 문제 안됨
- Type 2 Error
1. 암 환자에게 건강한 것 같다고 예측함
2. FN 예측이었음
3. 큰 문제임
- 이 경우 Type2가 더 심각한 결과를 불러올 수 있음, 따라서 더 신경써서 모델링 해야함
- Precision
- TP / TP + FP or TN / TN + FN
- Positive라고 예측한 것중에서 실제로 Postivie인 것
- 내가 예측한 값 중 정답이 있을 경우 (1에 가까울 수록 좋다)
- Recall (Sensitivity, True Positive Rate)
- TP / TP + EN
- 실제 Postivie 중 얼마나 많은 Postivie를 올바르게 예측했는지
- 실제 1인 값 중 1이라고 예측한 것이 있을 경우 (1에 가까울 수록 좋다)
- Accuracy
- TP + TN / TP + FP + TN + FN
- 전체 예측한 것 중에 올바른 예측을 얼마나 했는지
- 전체 경우의 수 중에서 정답으로 분류한 비율 (1에 가까울수록 좋다)
- Error Rate = 1 - Accuracy
- 정확도만으로는 모델의 성능을 올바르게 평가하기 어려움
- ex)
- 95%의 데이터가 A 클래스이고 5%만 B 클래스인 경우, 모든 데이터를 A로만 예측해도 정확도는 95% 임
- 모델의 척도로 사용할 수 없음
- 이런걸 불균형 데이터(imbalanced data) 라고 함
- Accuracy를 평가 척도로 사용한다면 균형 데이터(balanced data)에 사용해야함
- F1 Score
- Precision과 Sensitivity의 조화 평균
- Precision과 Recall의 밸런스를 고려하여 정확도 측정
- 불균형한 데이터 셋에서는 Accuracy 보다 F1 Score가 모델의 성능을 더 잘 나타내는 경우가 많음 (1에 가까울 수록 좋다)
- ex) (가정 : conversion의 0의 비율이 약 85% 였음)
- Model1은 A Class에 대한 예측률은 좀 떨어지지만, B,C,D 에 대해 전반적으로 잘 맞추는 모델이고,
Model2는 오직 A Class만 잘 맞추는 모델이다. 즉, Model2는 거의 모든 예측을 A라 한다고 봐도 무방한 모델이다. 이 때, 각 모델에 대한 **정확도**를 구해보면
Model1 : (100+9+8+9)/230 = 0.547
Model2 : (198+1+1+1)/230 = 0.87
로 Model2가 Model1에 비해 훨씬 높은 값을 가지고 있다.
즉, 정확도에 의하면 A Class로만 예측하는 Model2가 Model1에 비해 더 잘 맞춘다고 판단할 수 있다.
반대로, **F1 Score**를 구하면
Model1 : (2∗0.492∗0.775)/(0.492+0.775) = 0.601
Model2 : (2∗0.369∗0.323)/(0.369+0.323) = 0.344
로 Model1의 성능이 더 높을 것을 볼 수 있다.
**즉, Data가 Imbalanced 할 때, 정확도가 아닌 F1 Score를 사용한다.**
Confusion Matrix, Accuracy Score 사용시 유의점
-
accuracy_score, confusion_matrix의 결과를 기존의 데이터 특성과 비교하며 확인 하여야 한다.
-
ex)
- 사용한 기존 데이터의 경우, conversion의 0의 비율이 약 85% 였음
- 머신러닝 모델을 생성하지 않고, 모든 인풋에 대한 아웃풋을 0으로 예측해도 정답률은 85%는 나온다는 뜻
- 실제로 confusion_matrix를 사용하여 확인해보니, 정답(1을, 1로 예측)한 경우가 393인 반면, 오답(1을, 0으로)예측한 경우가 2344로 압도적으로 많았음
- 안좋은거임
- 0을 0으로 예측한(16411)에서 accuracy_score의 정답률을 끌어올린것임
- 정답률이 크게 의미가 없다는 거임