「评估」AUC离线好,上线差?试试GAUC

发布于 2021-09-07 11:22 ,所属分类:2021面试经验技巧分享

在上一篇《秋招」大厂校招常问的50道面试题》)中梳理了大厂在秋招机器学习岗位面试时常问的面试题。本文将回到推荐主线,介绍做推荐经常碰到的离线效果评估很好,但上线后效果不升反降的问题。并详细介绍AUC和GAUC评估指标。

预告:

下一期将介绍在构造CTR类特征时的平滑技术,感兴趣的同学下哦!


在优化推荐模型时,经常会碰到一个问题:经过一顿猛操作(如加特征、改模型、优化样本等),模型的离线AUC提升明显,但上线后指标并没有提升,甚至有所下降。也就是说:离线AUC提升并未带来线上效果的提升

在排除一些低级Bug之后,通常造成这个问题可能有如下原因:

  • 样本的变化

    离线评估基于历史出现样本,而线上预测存在全新样本。因此,离线AUC提升可能只是在历史出现样本上有提升,但对于新样本并没有效果。

    用户线上所产生的行为依赖于老模型,即历史数据是由老模型产生,数据本身也存在偏差。

    部分特征是在离线计算,然后更新至线上的,这可能导致线上和线下特征不一致。例如与时间相关特征(如最近N天行为),可能存在特征穿越;部分特征上线时可能存在缺失等。

  • 评估不一致

    离线采用AUC对模型评估时,考虑的是全局排序,既会考虑单用户的不同item,也会考虑不同用户的不同item;但线上推荐系统每次只针对单用户的不同item进行打分排序。

    线上效果只跟同单用户的打分排序有关,与用户之间的排序无关。而离线是将不同用户的样本混合训练,一起排序评估。因此,线上和离线评估目标存在不一致。这也就造成了离线AUC提升,但线上效果并没提升的现象。

本文主要针对线上和离线评估不一致的问题,介绍AUC做离线平的问题以及如何选择更好的离线评估指标。下面我们先一起来回顾下AUC的基本概念。

一、AUC

1、什么是AUC

Wikipedia上是这样说的:

The Area Under the roc Curve (AUC) is equal to the probability that a classifier will rank a randomly chosen positive instance higher than a randomly chosen negative one.

可以理解为:AUC表示模型预测的正样本score高于负样本score的概率:

2、为什么用AUC

AUC是推荐领域用于离线评估模型最常用的指标,主要可以归为如下原因:

  • 能评估模型的排序能力:AUC不关心具体的Score的绝对值,只关心样本排序的相对顺序,比如AUC是0.82,表示随机选一个正样本和一个负样本,模型打分正样本高于负样本的概率是82%

  • 对样本采样不敏感:在样本分布不变的情况下,正样本占比5%50%计算的AUC结果差异不大。也就是说,随机取一个正样本,模型打分为s,因为是随机采样,小于s的负样本和大于s的负样本的比例不会有太大变化;

  • 能反应模型预估样本的排序关系:正负样本的Gap越大,则AUC越大。如果正负样本完全分开,在特征合适的情况下,理论上AUC是能达到1.0的。

3、怎么计算AUC

AUC表示的是the Area Under the roc Curve,怎么就跟模型预测的正样本score高于负样本score的概率等价了呢?在介绍如何计算AUC之前,我们先来看下什么是ROC曲线 (ROC Curve)。如下图所示为一个ROC曲线图:

  • 横轴:假正率(False Positive Rate),表示负样本被预测为正样本的比例

  • 纵轴:真正率(True Positive Rate),表示正样本被预测为正样本的比例

如何得到ROC曲线呢?其实,ROC曲线的绘制是一个遍历过程,可以通过如下步骤得到:

  • 将所有样本按照模型打分的score进行降序排列
  • 遍历所有阈值,并计算该阈值下的TP和FP,从而得到原始ROC曲线上的一个点
  • 最后坐标轴归一化至[0,1]

下面我们具体来看下ROC曲线的绘制过程。假设有10个样本,它们分布和模型的打分如下图所示:

将所有样本按照模型打分进行降序排列:

遍历所有阈值,并计算TP和FP,并在坐标轴中绘制相应的点,得到原始ROC曲线图:

对原始ROC曲线进行坐标轴进行归一化,得到ROC曲线,以及AUC:

AUC值即为归一化后ROC曲线下的面积:

至此,我们能通过样本的打分来通过绘制ROC曲线来计算AUC了。在计算过程中,不难发现AUC的:

  • 分母=正样本数*负样本数
  • 分子=每个负样本中,排在其前面的正样本个数

也就是:

其中,u1u2表示两个用户,+和-分别表示正、负样本。按照上一小节的公式计算两个模型AUC如下:

  • 模型1:0.50
  • 模型2:0.67

从AUC来看,模型2要优于模型1。但当针对单个用户来看时,发现模型2和模型1的排序结果是一样的。因此,模型的全局AUC提升,并不能带来单个用户的Item排序的提升。

在个性化推荐场景中,如何针对不同用户之间的item排序进行评估呢?2017年,阿里妈妈精准定向检索及基础算法团队在Deep Interest Network(DIN)中提出了Group AUC(GAUC),用于评估模型对不同用户之间的item排序的效果。

二、GAUC

GAUC的思想可以简单理解为:将样本进行分组(Group),然后在采用AUC来评估各组内的排序,最后对各组的AUC进行加权,得到GAUC:

其中,表示第i个样本组,表示第i个样本组的权重,为第i个样本组的AUC。各用户组的权重可以是曝光、点击、观看时长等,需根据实际业务做调整。

样本分组的方式有很多,下面简单介绍三种常用的:

  • 当用户访问session中足够长时,可以根据用户session来对样本进行分组
  • 当用户单个session较短(如用户高频进入和退出的场景),可以根据用户来对样本进行分组
  • 当用户访问频率低,操作较稀疏时,可以采用用户特征进行分群

大家可以根据自己推荐场景进行合理选择。在DIN中,作者是以用户为粒度的样本分组的,并根据用户的曝光来进行加权:

三、小Tips

在推荐场景下,用户AUC应为所有曝光Item的AUC而非首位的。

大多数推荐场景中,曝光条数并不固定,建议分组的权重使用点击次数。

当采用用户进行样本分组时,由于需要计算单用户AUC,所有曝光皆为正样本或负样本的用户应不能被计算在内。但也不能直接舍弃,需要单独这些样本进行评估,可以采用1-RMSE:对于正样本,模型预测概率越高,评估指标越高;而负样本,预测概率越低,评估指标越高。

在计算GAUC时可以采用现成的工具:

  • elliot.evaluation.metrics.accuracy.AUC.gauc.GAUC

参考文献

推荐系统评价指标:AUC和GAUC:https://blog.csdn.net/weixin_39548654/article/details/104065925

吴海波, AUC和线上点击率指标不一致问题分析:https://zhuanlan.zhihu.com/p/42521586

Zhou, Guorui, et al. "Deep interest network for click-through rate prediction." Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018.

Receiver operating characteristic:https://en.wikipedia.org/wiki/Receiver_operating_characteristic

Elliot:https://github.com/sisinflab/elliot.git


相关资源