혼동 행렬 :: 통계 - mindscale
Skip to content

혼동 행렬

혼동 행렬(confusion matrix)는 예측값과 실제값을 비교해놓은 표입니다. 이탈 고객을 예측할 때, 고객의 상태는 이탈과 유지 2가지입니다. 우리가 할 수 있는 예측도 2가지죠. 그럼 $2 \times 2 = 4$가지 조합이 나옵니다. 혼동 행렬은 이것을 표로 만든 것입니다.

from sklearn.metrics import *
confusion_matrix(y_test, y_pred)
table(y_test, pred)

이렇게 두 가지로 예측이 되는 경우에 한 쪽을 양성(positive), 다른 쪽을 음성(negative)라고 하는데요 이것은 좋다, 나쁘다는 뜻이 아니고 우리가 찾으려고 하는 것이냐, 아니냐로 보통 부릅니다. 즉, 양성은 우리가 찾으려고 하는 것, 음성은 그렇지 않은 것을 말합니다. 예를 들어 암 검진의 경우에는 암이 양성이고, 건강한 상태가 음성입니다. 고객에 대해서도 이탈 고객을 찾으려는 상황이라면 이탈이 양성, 유지가 음성이 됩니다.

그러면 4가지 조합을 다음과 같이 부릅니다.

  • 진양성(True Positive, TP): 양성이라고 예측을 했는데 실제로 양성인 경우
  • 진음성(True Negative, TN): 음성이라고 예측을 했는데 실제로 음성인 경우
  • 위양성(False Positive, FP): 양성이라고 예측했는데 실제로는 음성인 경우
  • 위음성(False Negative, FN): 음성이라고 예측했는데 실제로는 양성인 경우

정확도

정확도(accuracy)는 전체 중에서 예측이 맞은 비율을 말합니다.

$$ \frac{TP + TN}{TP + FP + TN + FN} $$

accuracy_score(y_test, y_pred)

R에서는 손으로 계산해야 합니다.

정밀도

정밀도(precision)는 양성 예측 중에 진양성인 비율을 말합니다.

$$ \frac{TP}{TP + FP} $$

문턱을 높이면, 정밀도가 올라갑니다.

precision_score(y_test, y_pred)

R에서는 손으로 계산해야 합니다.

재현도

재현도(recall)는 실제 양성 중에 진양성인 비율을 말합니다.

$$ \frac{TP}{TP + FN} $$

민감도(sensitivity)라고도 합니다.

문턱을 낮추면, 재현도가 올라갑니다.

recall_score(y_test, y_pred)

R에서는 손으로 계산해야 합니다.

Question

다음 중 추천 시스템에 더 적합한 지표는?

  • 정확도
  • 정밀도
  • 재현도

Question

다음 중 전염병 탐지에 더 적합한 지표는?

  • 정확도
  • 정밀도
  • 재현도

특이도

특이도(specificity)는 실제 음성 중에 진음성인 비율을 말합니다.

$$ \frac{TN}{TN + FP} $$

특이도는 재현도와 반대로 문턱을 낮추면 내려갑니다.

특이도는 재현도와 구하는 방법이 같습니다. 양성(1) 대신 음성(0)에 대해 구하면 됩니다.

recall_score(y_test, y_pred, pos_label=0)

R에서는 손으로 계산해야 합니다.

Question

다음 중 문턱값을 높이면 높아지는 지표는?

  • 정확도
  • 정밀도
  • 재현도

Question

다음 중 문턱값을 낮추면 높아지는 지표는?

  • 정확도
  • 정밀도
  • 재현도

ROC 곡선

재현도와 특이도는 문턱값에 따라 서로 반대로 움직이는 특성을 가지고 있습니다. 따라서 문턱값을 바꿔가면서 재현도와 특이도가 어떻게 달라지는지 그린 것을 수신자 조작 특성 곡선(Reciever Operating Characteristic curve), 줄여서 ROC 곡선이라고 합니다.

가로축은 1-특이도, 세로축은 재현도를 나타냅니다.

ROC 곡선이 위로 볼록할 수록 같은 특이도에서 재현도가 더 높다는 것을 뜻합니다.

from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
fpr, tpr, threshold = roc_curve(y_test, prob)
plt.plot(fpr, tpr)

AUC

ROC 곡선의 아래 면적을 곡선하 면적(Area Under Curve)이라고 합니다. AUC는 0~1 범위의 값이지만 무작위로 선택을 하면 0.5가 되므로 실제로는 0.5~1 범위의 값이라고 할 수 있습니다. AUC는 높을 수록 좋습니다.

roc_auc_score(y_test, prob)

Question

다음 중 ROC 곡선에 대한 설명으로 잘못된 것은?

  • 문턱값에 따라 변화하는 두 지표의 관계를 나타낸 곡선이다
  • ROC 곡선을 통해 한 지표를 높이기 위해 다른 지표를 얼마나 낮춰야 하는지 알 수 있다
  • 왼쪽 위로 휘어있을 수록 상대적으로 한 지표를 덜 낮추고도 다른 지표를 높일 수 있다
  • 문턱값에 따라 ROC 곡선 아래의 면적이 달라진다

Question

다음은 한 공장에서 품질 검사 상 불량 및 정상 판정된 제품 중 실제 불량, 정상의 결과입니다.

불량을 찾는 것에 관심이 있을 때(불량=양성), 아래 지표들을 계산해보세요.

정상 판정 불량 판정
실제 정상 240 60
실제 불량 20 180

(01) 위의 표에서 정확도(accuracy)를 구해보세요.

(02) 위의 표에서 정밀도(precision)를 구해보세요.

(03) 위의 표에서 재현도(recall)를 구해보세요.

Question

암 데이터에서 diagnosis를 예측하는 로지스틱 회귀분석을 해보세요. (B = 0, M = 1) 독립변수로는 area_worst, smoothness_worst, symmetry_worst, fractal_dimension_worst 4가지를 사용하세요.

(01) area_worst의 기울기는 얼마입니까?

(02) 위 모형의 정확도는 얼마입니까? (M을 양성으로 간주, 소수점 셋째 자리에서 반올림)

(03) 위 모형의 정밀도는 얼마입니까? (M을 양성으로 간주, 소수점 셋째 자리에서 반올림)

(04) 위 모형의 재현도는 얼마입니까? (M을 양성으로 간주, 소수점 셋째 자리에서 반올림)

(05) 모형1과 모형2를 비교할 때, 어떤 모형이 더 나은 모형이라고 할 수 있습니까?

  • 모형1
  • 모형2
  • 알 수 없다