本文主要是介绍推荐系统TOP-K指标AUC和CTR指标AUC的异同,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
AUC指标
推荐系统的两个阶段:
推荐系统可以分为两个阶段
- 召回阶段,即TOP-K任务(粗排)
- 精排阶段,即CTR任务
召回阶段是为每一个用户在成千上万的待选item中推荐排名前K个的候选item
精排阶段是对在召回阶段的K个的候选item的基础上,预测特定的user点击特定的item的概率,此结果对广告商精准投放广告产生直接影响,直接关系着广告的盈利。
分成两阶段的原因: 如果直接对待选item进行精排,由于待选item规模大,用户群体规模大,则服务端时间开销过大,无法正常提供服务,召回阶段将待排序的item范围缩小到排名前K个的候选item,然后再进行排序输出,是服务器负载和推荐精度之间的一个平衡。
我读了一些召回TOP-K的论文和精排CTR论文,发现TOP-K的AUC指标和CTR的AUC指标稍有不同:
- TOP-K问题的AUC区分用户,为每一个用户计算AUC然后再取平均, A U C = 1 ∣ U ∣ ∑ a u c u AUC=\frac{1}{|U|}\sum auc_u AUC=∣U∣1∑aucu
- CTR问题的AUC则是没有区分用户,而是专注于整体样本,直接计算一个整体AUC。
- TOP-K AUC详解:
A U C = 1 ∣ U ∣ ∑ u ∈ U 1 ∣ E ( u ) ∣ ∑ i , j ∈ E ( u ) δ ( x u i > x u j ) AUC=\frac{1}{|U|}\sum_{u\in U} \frac{1}{|E(u)|} \sum_{i,j\in E(u)}\delta(x_{ui} > x_{uj}) AUC=∣U∣1u∈U∑∣E(u)∣1i,j∈E(u)∑δ(xui>xuj)
E ( u ) = { i , j ∣ i ∈ 命 中 的 i t e m , j ∈ 未 命 中 的 i t e m } E(u)=\{i,j|i\in命中的item,j\in未命中的item\} E(u)={i,j∣i∈命中的item,j∈未命中的item}
自己实现版本
def get_auc(item_score, user_pos_test):''':param item_score: dict:item2score 待选item的预测评分:param user_pos_test: user在测试集中真实交互的item:return: auc'''item_score = sorted(item_score.items(), key=lambda kv: kv[1])item_score.reverse()ranked_items = [x[0] for x in item_score]pre = [x[1] for x in item_score]r = []for i in ranked_items:if i in user_pos_test:r.append(1)else:r.append(0)num_rele_items = sum(r)num_eval_items = len(item_score)num_eval_pairs = (num_eval_items - num_rele_items) * num_rele_itemsif num_eval_pairs == 0:return 0.5num_correct_pairs = 0hits = 0# for item_id in ranked_items:# if item_id not in user_pos_test:# num_correct_pairs += hits# else:# hits+=1for i in range(len(r)):if r[i]==0: num_correct_pairs += hitselse : hits+=1auc = (num_correct_pairs + 0.0) / num_eval_pairsreturn auc
调用sklearn版
from sklearn.metrics import roc_auc_score
def get_auc(item_score, user_pos_test):''':param item_score: dict:item2score 待选item的预测评分:param user_pos_test: user在测试集中真实交互的item:return: auc'''items = item_score.keys()pre = item_score.values()r = []for i in items:if i in user_pos_test:r.append(1)else:r.append(0)auc = roc_auc_score(ground_truth=r, prediction=pre)return auc
- CTR AUC详解:
CTR问题可以视为二分类问题,标签0代表用户没有点击item,标签1代表用户点击了item,我们的任务是输出用户点击item的概率。
CTR样本的格式如下:
userid | itemid | label |
---|---|---|
A | 1 | 1 |
A | 3 | 0 |
A | 2 | 1 |
B | 1 | 0 |
C | 3 | 1 |
C | 2 | 1 |
def get_auc(y_ture, y_pre):''':param y_ture: 正确的0、1标签:param y_pre: 预测的点击概率:return: '''auc = roc_auc_score(y_true=y_ture, y_score=y_pre)return auc
对TOP-K的AUC指标,CTR的AUC指标,还没有找到很合适的资料,文章也写得很乱,还需要继续完善。
这篇关于推荐系统TOP-K指标AUC和CTR指标AUC的异同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!