저번 포스팅까지 분류기법에 적용할 수 있는 로지스틱회귀, LDA, QDA에 대해 알아보았는데요. 이번시간에는 분류 모델의 성능을 측정하는 방법에 대해 알아보겠습니다.
1. 혼동행렬(Confustion Matrix)
로지스틱회귀와 같이 범주 2개인 반응변수를 분류하는 이진 분류기는 두 가지의 오류를 범할 수 있습니다. 실제로는 Positive(양성, 성공)인데 분류기는 이를 Negative(음성, 실패)라고 분류하거나, 실제로는 Negative인데 분류기는 Positive라고 분류할 수 있겠죠.
일반적으로는 두가지 유형의 오류가 발생하는지에 관심이 있으며 이러한 정보를 나타내기 위해 혼동행렬(Confusion Matrix)를 사용합니다. 아래 이미지와 같이 실제 상태와 모델이 분류한 상태를 카운트하며 R에서는 yardstick::conf_mat 함수를 통해 혼동행렬을 생성할 수 있습니다.

2. 성과지표(Performace Metric)
위와 같이 혼동행렬을 만들고 나면 모델의 성과를 측정하는 정확도, 민감도, 특이도와 같은 여러가지 성과지표를 구할 수 있습니다.
성과지표를 구하는 여러 패키지가 있지만 Tidy Modeling과의 연결성을 생각해서 Yardstick 패키지를 사용한 함수를 소개합니다.
- 정확도(Accuracy) : 분류기가 제대로 분류했는지를 나타내는 지표
- Accuracy = $\frac{TN+TP}{TN+TP+FN+FP}$
- 오분류율(Error Rate) : $1-Accuracy$
- yardstick::accuracy(data, truth, estimate)
- 민감도(Sensitivity) : 실제 Positive인데 분류기가 Positive로 예측 할 확률
- Sensitivity = $\frac{TP}{TP+FN}$
- 재현율(Recall)과 민감도(Sensitivity)는 동일합니다.
- yardstick::sens(data, truth, estimate) / yardstick::recall(data, truth, estimate) / sensitivity
- 특이도(Specificity) : 실제 Negative인데 분류기가 Negative로 예측 할 확률
- Specificity = $\frac{TN}{TN+FP}$
- yardstick::spec(data, truth, estimate) / specificity
- 정밀도(Precision) : 분류기가 Positive로 예측했을 때, 실제로 Positive일 확률
- Precision = $\frac{TP}{TP+FP}$
- yardstick::precision(data, truth, estimate)
- F1 Score : 정밀도와 민감도의 조화평균로 $\beta = 1$인 F-value
- F1 Sore = $\frac{2*Precision*Recall}{Precision+Recall}$
- yardstick::f_meas(data, truth, estimate, beta=1) (정확하게는 F-value를 구하는 함수입니다. )
- Balance Accuracy : 민감도와 특이도의 평균으로 yardstick::bal_accuracy 함수 사용
- Brier Score : $\frac{1}{n}\sum_{i=1}^{n}(y_i - f(y))^2$의 값으로 실제값과 추정된 확률의 차이 제곱의 평균
- 0에 가까울수록 모델이 정확함을 의미하고 1에 가까울수록 모델이 부정확함을 의미함
- yardstick::brier_class(data, truth, estimate)
- 참고 : https://library.virginia.edu/data/articles/a-brief-on-brier-scores
3. ROC-Curve (ROC곡선)
이진 분류기의 경우 일반적으로 $\theta=0.5$로 주어졌을 때, $P(Y=k|X=x)>\theta$를 만족하면 X=x인 관측치의 반응변수를 k로 할당하게 되는데 사후확률에 대한 임계치(Threshold)를 0.5에서 다른 값으로 변경하면 민감도 및 특이도의 수치가 변화하게 됩니다.
임계치가 변함에 따라 달라지는 특이도와 민감도를 활용한 ROC-Curve를 그릴 수 있는데 x축을 1-Specificity, y축을 Sensitivity로 설정하면 곡선을 그리는 그래프를 얻을 수 있습니다. 이때, 모든 임계치에 대한 요약된 분류기의 전체적 성능은 ROC 곡선 아래의 면적인 AUC(Area Under ROC)에 의해 주어지며 1에 가까울수록 모델의 성능이 좋다고 말할 수 있습니다.
- yardstick::roc_curve(data, truth, ...)를 사용해 임계치에 따른 민감도와 특이도를 포함하는 데이터프레임 반환
- yardstick::roc_auc(data, truth, ...)를 사용해 AUC 값을 구할 수 있음
참고로 ROC-Curve와 유사하게 PR-Curve를 그릴 수 있는데, (Precision, Recall)를 축으로한 곡선을 얻을 수 있습니다.
- yardstick::pr_curve(data, truth, ...)를 통해 임계치에 따른 Precision과 Recall을 포함한 데이터프레임을 반환
- Average Precision : PR-Curve의 아래 면적을 나타내며 yardstick::average_precision를 통해 구할 수 있음
4. Summary

'AI > Machine Learning' 카테고리의 다른 글
| [ISLR] 5. 교차검증(Cross-Validation) (0) | 2023.04.04 |
|---|---|
| [ISLR] 4. 분류(Classifiction) With R Using Tidymodels (0) | 2023.03.31 |
| [ISLR] 4. 분류(Classification) - 이차선형판별분석(QDA) (0) | 2023.03.31 |
| [ISLR] 4.분류(Classification) - 선형판별분석(LDA) (0) | 2023.03.30 |
| [ISLR] 4. 분류(Classification) - 로지스틱 회귀분석(Logistic Regression) (0) | 2023.03.28 |
