혼동 행렬을 이용해서 모델을 평가할 수 있다.
혼동 행렬을 계산하려면 모델이 예측한 값들과 실제 값들이 필요하다. 테스트 세트에서 예측할 할 수 있긴 하지만 보통 테스트 세트는 프로젝트의 마지막 단계에서 최종 평가용으로 이용한다. 개발 과정 중에 테스트 세트를 사용하면 모델이 테스트 데이터에 과적합될 수 있기 때문이다.
테스트 세트를 사용하지 않고도 cross_val_predict() 함수를 이용하여 예측값을 얻을 수 있다. 이 함수는 교차 검증(cross-validation)을 수행하면서 각 폴드(fold)에 대해 예측을 생성한다. cross_val_score 함수처럼 cross_val_predict() 함수는 K-fold 교차 검증 기법을 이용한다.
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import confusion_matrix
# 모델 학습 및 예측
y_pred = cross_val_predict(classifier, X, y, cv=5)
# 혼동 행렬 계산
conf_matrix = confusion_matrix(y, y_pred)
print(conf_matrix)
sk-learn에서 실행해보면 행렬이 나오게 된다.
| Predicted Positive | Predicted Negative | |
|---|---|---|
| Actually Positive | True Positives | False Negatives |
| Actually Negative | False Positives | True Negatives |
각각의 숫자는 위의 표에 대입해서 생각하면 된다. 성능이 좋을수록 왼쪽 위에서 내려오는 대각선에 위치한 값들에 더 많은 숫자가 존재하게 된다.
혼동 행렬은 많은 정보를 주지만, 간결한 정보를 얻고자 할 때 precision(정밀도)를 이용하게 된다.
TP : 실제 양성인데, 양성으로 판별된 경우
FP : 실제 음성인데, 양성으로 판별된 경우
→ 양성으로 판별된 경우에 얼마나 잘 맞추는지 확인할 수 있음.
분류기가 하나의 양성 인스턴스만을 고려하고 나머지 양성 인스턴스를 모두 무시하는 상황에서는 유용할 수 없다. 이는 특히 불균형 데이터셋에서 문제가 될 수 있다. 그래서 정밀도는 재현율이라 불리는 것과 함께 사용된다.
TP : 실제 양성인데, 양성으로 판별된 경우
FN : 실제 양성인데, 음성으로 판별된 경우
→ 실제 양성인 경우에 모델이 얼마나 잘 판별하는지 볼 수 있음
편의를 위해 정밀도와 재현율을 결합한 형태가 있는데, 그게 바로 다
F1 스코어는 정밀도와 재현율의 조화 평균을 계산하는 지표로, 두 값이 균형을 이룰 때 높은 점수를 받게 된다. 상황에 따라 정밀도와 재현율 중 더 중요하게 여겨야 하는 것이 달라진다.
예를 들어, 아이들에게 안전한 비디오를 감지하는 분류기를 훈련시켰다고 가정해보자. 이 경우엔 이 높은 재현율을 가지지만 몇몇 정말 나쁜 비디오가 제품에 나타나는 분류기보다 나을 것이다. 좋은 비디오가 많이 남는 것보다(낮은 재현율) 안전한 비디오만 남길 수(높은 정밀도) 있는 것이 더 중요하기 때문이다.
반면에 감시 영상에서 절도범을 감지하는 분류기를 훈련시켰다고 생각해보자. 99%의 재현율만 유지된다면 정밀도가 30%밖에 되지 않아도 괜찮을 것이다.
정밀도 (Precision): 모델이 양성이라고 예측한 것 중에서 실제 양성의 비율,즉, false positive를 얼마나 줄이는지 측정
재현율 (Recall): 실제 양성 중에서 모델이 양성이라고 정확히 예측한 비율, 즉, false negative를 얼마나 줄이는지 측정
F1 스코어: 정밀도와 재현율의 조화 평균으로, 두 지표의 균형을 중시
정밀도와 재현율 사이에는 상쇄 관계가 있어서, 하나를 증가시키면 다른 하나는 감소하는 경향이 있다. 이를 정밀도/재현율 Tradeoff라고 부른다.
분류 문제에서 모델이 특정 클래스에 속하는지 여부를 결정하는 데 사용되는 기준값이다. 임계값은 모델의 예측 확률을 기준으로 한다.
예를 들어, 이진 분류에서 모델이 어떤 샘플에 대해 클래스 1(양성 클래스)일 확률을 예측했다고 할 때, 이 확률이 결정 임계값을 초과하면 해당 샘플을 클래스 1로, 그렇지 않으면 클래스 0(음성 클래스)으로 분류합니다.
임계값 조정
특정 상황에 따라 이 임계값을 조정하기도 한다. 높은 정밀도가 필요한 경우 임계값을 높이고, 높은 재현율이 필요한 경우 임계값을 낮추면 된다.\
결정 임계값을 높인다는 것은 곧 양성 클래스로 예측하는 기준을 엄격히 한다는 것이다. 그래서 정밀도가 높아질 수는 있지만 정밀도는 낮아지게 된다.
활용 예시
스팸 필터링: 스팸 이메일 분류에서는 정밀도가 중요하다고 볼 수 있다. 임계값을 높여 스팸으로 잘못 분류되는 정상 이메일(false positives)을 줄여야 한다.
암 진단: 암 검진 시스템에서는 재현율이 더 중요하다고 볼 수 있다. 임계값을 낮추어 암을 놓치는 경우(false negatives)를 최소화해야 한다.
PR Curve
R 곡선은 정밀도(Precision) 대 재현율(Recall)을 나타내는 그래프다. 특히 클래스 불균형 문제를 다루는 데 유용하다. PR 곡선이 오른쪽 상단 모서리에 가까울수록 모델의 성능이 더 좋다는 것을 의미한다.