Python Code

Cut-off 별 Sensitivity(민감도), Specificity(특이도) 성능 측정 코드

Kimhj 2023. 10. 10. 14:37
  • 머신러닝이나 딥러닝 inference를 통해 예측 결과를 보면 cut-off 별로 민감도와 특이도를 확인하고 싶을 때가 있다.
  • 매번 매뉴얼하게 probability로 예측결과값을 바꾸고 결과를 보기에는 번거로워서, 0.0 ~ 1.0 범위까지 0.01 단위로 sensitivity 와 specificity 성능을 측정하는 함수를 만들었다.
  • 입력 dataframe 에는 y_true 값과 y_probability 결과가 있는 column 이 필요하다. (컬럼명은 바꿔서 사용해도 됨.)
import numpy as np

def check_threshold(df):
    '''
        Function:
            0.0 ~ 1.0 range 내에서 0.01 단위 cut-off 별 Sensitivity, Specificity 성능 결과를 계산하는 함수
        Parameters:
            df (Pandas, DataFrame): 예측결과 원본 데이터프레임
        Returns: 
            final_df (Pandas, DataFrame): cut-off 별 Sensitivity, Specificity 성능 결과 데이터프레임

    
    '''
    result_dict = dict()
    result_dict['cut_off'] = []
    result_dict['sensitivity'] = []
    result_dict['specificity'] = []
    y_true = df['label']        # ground truth

    cut_list = np.arange(0, 1, 0.01)
    for c in cut_list:

        df['pred'] = np.where(df['probability']>=c, 1, 0)

        y_pred = df['pred']
        # sensitivity, specificity
        tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
        sensitivity = round(tp / (tp + fn), 3)
        specificity = round(tn / (tn + fp), 3)

        result_dict['cut_off'].append(c)
        result_dict['sensitivity'].append(sensitivity)
        result_dict['specificity'].append(specificity)

    final_df = pd.DataFrame(result_dict)
    
    return final_df

'Python Code' 카테고리의 다른 글

멀티프로세싱 (Multi-Processing)  (0) 2023.10.11
Config 파일 관리 (argparse)  (0) 2023.10.10
pytorch 딥러닝 학습/평가 코드  (0) 2023.09.27
Docker 자주 쓰는 명령어 정리  (0) 2023.09.23
PDF 파일 Concat  (0) 2023.09.20