排序问题评价指标

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
import pandas as pd

'''
y_true: 0 or 1
predict_score: float, rank
'''
def roc_draw(y_true, predict_score, predict_label):
fpr,tpr,threshold = roc_curve(y_true, predict_score)
plt.figure()
plt.plot(fpr, tpr)
plt.plot([0, 1], [0, 1])
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('AUC: {0}'.format(roc_auc_score(y_true, predict_label)))
#plt.show()
plt.savefig('../output/picture/lr_auc.png')

def cal_topn_accuracy(test_df, preds=None, pos_type_min=3, inplace=False):
n_list = [1, 5, 10, 15, 20, 25, 30, 40, 50, 70, 100]

test_df_new = test_df
if(preds is not None):
if not inplace:
test_df_new = test_df[['session', 'rank', 'deal_type']].copy()

test_df_new = pd.concat([test_df_new, pd.DataFrame(preds, columns=['pred_score'])], axis=1)
test_df_new['rank'] = test_df_new['pred_score'].groupby(test_df_new['session']).rank(ascending=0, method='first')

accuracy = {}
for n in n_list:
df_topn = test_df_new[test_df_new['rank'] <= n]
pos_cnt = df_topn[df_topn['deal_type'] >= pos_type_min]['deal_type'].count()
total_cnt = df_topn['deal_type'].count()
accuracy['top_' + str(n)] = round((1.0 * pos_cnt) / total_cnt, 4)
print accuracy

转载于:https://www.cnblogs.com/kayy/p/10565605.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值