confusion_matrix_cal function

olxtar·2022년 11월 27일
0

Comment :

이진분류(Binary Classification) 모델의 성능을 측정하기 위해서...

  • Confusion Matrix 값들; TP, TN, FP, FN
  • Sensitivity(=Recall)
  • Precision
  • F1-Score
  • Accuracy
  • ROC AUC

들을 깔끔하게 출력해주는 Function을 만듦

sklearn.metrics를 통해서 구할 수 있는 값들이지만, Cut-off Value를 지정해줄 수 있고 보기 좋게 출력해줄 수 있게끔 만든 Function!



[!] Confusion Matrix의 값들이 0이어서 zero division error나오는거 손봐야함!

def confusion_matrix_cal(prob,
						 label,
                         cutoff_value):
	"""
    param prob: 모델의 예측값; NumPy Array
    param label: 정답값; Pandas Series
    param cutoff_value: Cut-off value
    return: Confusion Matrix값, Precision, Sensitivity, F1-Score, Accuracy, ROC AUC로 이루어진 Dictionary
    """
    
    TP = TN = FP = FN = 0
    
    # 예측값 개수와 정답값 개수 일치여부 파악 및 전체 건수 totalcount에 할당
    if len(prob) == len(label):
    	totalcount = len(prob)
        
    # Cut-off value 미입력 시 0.5로 할당
    if cutoff_value is None:
    	cutoff_value = 0.5
    
    for idx in range(totalcount):
    	if label.iloc[idx] == 1:
        	if prob[idx] >= cutoff_value:
            	TP += 1
            else:
            	FN += 1
                
                
        elif label.iloc[idx] == 0:
        	if prob[idx] >= cutoff_value:
            	FP += 1
            else:
            	TN += 1
                
                
	sens = TP / (TP + FN)
    try:
    	prec = TP / (TP + FP)
    except:
    	prec = 1.0
    F1 = 2*((sens*prec)/(sens+prec))
    acc = (TP+TN) / (TP+FP+FN+TN)
    ROC_AUC = metrics.roc_auc_score(label.fillna(0), prob). # sklearn.metics 사용
    
    dic = {"TP" : TP,
    	   "TN" : TN,
           "FP" : FP,
           "FN" : FN,
           "Sensitivity" : sens,
           "Precision" : prec,
           "F1-Score" : F1,
           "Accuracy" : acc,
           "ROC AUC" : ROC_ACU}
           
    return dic
profile
예술과 기술

0개의 댓글