def gen_decile_table(model_top_precision, valid_df):
""" Creates the decile table """
valid_top_precision_df = valid_df[valid_df.model_id == model_top_precision]
valid_dec_sort_df = valid_top_precision_df.sort_values('y_pred_proba', ascending = False)
total_breaks = valid_dec_sort_df.y_true.sum()
total_blocks = len(valid_dec_sort_df)
dec_breaks = total_breaks / 10
dec_blocks = total_blocks / 10
decile_df = pd.DataFrame(columns=('model_id','Decile', 'No_of_blocks','risk_mul', 'Actual_breaks', 'Precision_in_decile', 'Recall_overall', 'Lift_above_random'))
for i in range(10):
break_sum = valid_dec_sort_df.y_true[i*dec_blocks:(i+1)*dec_blocks].sum()
risk_mul = valid_dec_sort_df.y_pred_proba[i*dec_blocks:(i+1)*dec_blocks].sum()
lift = break_sum / dec_breaks
conversion = break_sum *100 / dec_blocks
recall = break_sum *100 / total_breaks
decile_df.loc[len(decile_df)] = [model_top_precision,i+1,dec_blocks,risk_mul ,break_sum, conversion, recall, lift]
decile_df.loc[len(decile_df)] = ['-', 'Total',total_blocks, '_' ,total_breaks, total_breaks/total_blocks, '-', '-']
writer = pd.ExcelWriter('decile_table.xlsx', engine='xlsxwriter')
decile_df.to_excel(writer, sheet_name='Sheet1')
评论列表
文章目录