Python

[머신러닝] 분류모델 평가지표

jsys 2024. 2. 20. 09:49

<Confusion Matrix(혼동 행렬, 오차 행렬)>

  예측
양성 음성
실제 양성 TP FN
음성 FP TN

 

* TP : True Positive(예측 Positive, 실제 값도 Positive)

* TN : True Negative(예측 Negative, 실제 값도 Negative)

* FP : False Positive(예측 Positive, 실제 값은 Negative)

* FN : False Negative(예측 Negative, 실제 값은 Positive)

 

 

 

<분류의 성능 평가지표>

 

* 정확도(Accuracy)

- 예측 결과와 실제 값이 동일한 건수/전체 데이터 수

- 분류 모델을 평가하기에 가장 단순한 지표이나, 불균형한 클래스를 가진 데이터셋을 평가하기 어렵다는 단점 있음

- 0 ~ 1 사이의 값을 가짐. 1에 가까울수록 좋다.

- 정확도 = (TN + TP) / (TN + TP + FN + FP)

 

 

* 정밀도(Precision)

- 예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터 비율

- Positive로 검출된 결과가 얼마나 정확한지 나타냄

- 정밀도를 높이려면 FP를 낮추어야 함.

- 0 ~ 1 사이의 값을 가짐. 1에 가까울수록 좋다.

- 정밀도 = TP / (TP + FP)

 

 

* 재현율(Recall) (=민감도, Sensitivity)(=TPR, True Positive Rate)

- 실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터 비율

- 분류 모델이 실제 Positive 클래스를 얼마나 빠지지 않고 잡아내는지 나타냄

- 재현율을 높이려면 FN을 낮추어야 함.

- 0 ~ 1 사이의 값을 가짐. 1에 가까울수록 좋다.

- 재현율 = TP / (TP + FN)

 

 

* 특이도(Specificity)(= TNR, True Negative Rate)

- 실제 값이 Negative인 대상 중에 예측과 실제 값이 Negative로 일치한 데이터 비율

- 특이도 = TN / (TN + FP)

 

 

* F1 Score

- 정밀도와 재현율을 결합한 지표.

- 정밀도와 재현율의 맹점을 보완하기 위해 만들어짐

  + Positive 예측의 임계값을 변경함에 따라 정밀도와 재현율의 수치가 변경되는데, 이러한 변경은 업무 환경에 맞게 두 개의 수치를 상호 보완할 수 있는 수준에서 적용돼야 함. 즉 둘 중 하나만 강조하면 안된다는 뜻

- 클래스가 불균형된 데이터에서 주요 평가지표로 사용함

- 정밀도와 재현율이 한쪽으로 치우치지 않을 때 상대적으로 큰 값을 가짐

- F1 = 2 × 정밀도 × 재현율 / 정밀도 + 재현율

 

 

* ROC 곡선(Receiver Operation Characteristic Curve)

- 수신자 판단 곡선

- 머신러닝 이진 분류 모델의 예측 성능을 판단하는 중요한 평가 지표

- FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate)이 어떻게 변하는지를 나타내는 곡선

  + FPR을 x축으로, TPR을 Y축으로 잡는다 -> FPR 변화에 따른 TPR 변화가 곡선 형태로 나타남.

- 대각선을 기준으로 좌상단으로 붙어있는 ROC 곡선일수록 성능이 뛰어난 것

 

 

* AUC(Area Under Curve)

- ROC 곡선 밑의 면적을 구한 것

- 분류의 성능 지표로 사용되는 것은 ROC 곡선 면적에 기반한 AUC 값

- 1에 가까울수록 좋은 수치

- AUC 수치가 커지려면 FPR이 작은 상태에서 얼마나 큰 TPR을 얻을 수 있느냐가 관건

- 대각선 직선이 랜덤 수준의 이진 분류 AUC값 0.5이기 때문에 보통의 분류는 0.5 이상의 AUC 값을 가짐.