- 머신러닝이나 딥러닝 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