推荐系统TOP-K指标AUC和CTR指标AUC的异同

2024-01-27 01:08

本文主要是介绍推荐系统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=U1aucu
  • CTR问题的AUC则是没有区分用户,而是专注于整体样本,直接计算一个整体AUC。
  1. 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=U1uUE(u)1i,jE(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,jiitemjitem}
    自己实现版本
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
  1. CTR AUC详解:
    CTR问题可以视为二分类问题,标签0代表用户没有点击item,标签1代表用户点击了item,我们的任务是输出用户点击item的概率。
    CTR样本的格式如下:
useriditemidlabel
A11
A30
A21
B10
C31
C21
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的异同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/648618

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

Python Pillow 库详解文档(最新推荐)

《PythonPillow库详解文档(最新推荐)》Pillow是Python中最流行的图像处理库,它是PythonImagingLibrary(PIL)的现代分支和继承者,本文给大家介绍Pytho... 目录python Pillow 库详解文档简介安装核心模块架构Image 模块 - 核心图像处理基本导入

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定