算法的离线评估

来源:互联网 发布:无忧商务推广软件 编辑:程序博客网 时间:2024/05/13 15:25

背景

  • 在平时做项目的过程中,算法迭代是至关重要的,如果能准确找到算法的优化点和优化空间,那么可以使得最终的效果有很大的提升。
  • 在实际的项目中,一个算法模块的上线可能会涉及算法,引擎,前段,测试等等一堆模块的修改,如果再加上链路的过长,跨部门跨团队的协同开发和联调不可避免,且非常耗时间,一旦上线发现效果不符合预期,会浪费大量的人力时间去排查和解决问题。
    • 这种情况需要我们算法端的同学保证算法的有效性,能够保证如果效果不符合预期,排查范围可以锁定在工程链路上,而不是算法逻辑上;
    • 尽量减少有个新算法新想法先扔到线上看看效果,视效果再继续迭代的想法,离线做好算法的评估,对最终算法效果又更强的把控,离线评估确保有正向价值的算法再退到线上;
    • 算法模块尽量抽象出现,使得算法迭代的过程减小其他模型涉及的改动,最好是其他模块零改动。

如果做好有效的离线评估呢?

离线评估重要的是选择一个靠谱的离线评估指标,选对并且用对了评估指标,可以让算法的迭代有明确的优化方向,离线的提升能够预期带来实际线上效果的提升。

GAUC

AUC指标相信对机器学习算法熟悉的人都比较了解,是非常常用的模型评价指标,在很多二分类的问题中是最重要的算法模型评估依据。以广告场景的ctr预估问题为例,ctr预估本质上是对一个流量是否会发生点击行为的一个预测,点击or不点击就是模型想给出的答案,也是一个二分类问题,一般地,算法会给一个流量打上一份score分,如果score分超过某个threshold,则判断为点击,否则不会点击,AUC指标本质上不会关心score分数的绝对值大小,只会关心score的相对大小和排序情况。AUC的计算需要记得如下公式:

AUC=Mi=1rankiM(M+1)2M×N
其中M表示正样本个数,N表示负样本个数,ranki表示第i个正样本的排名,按score值从低到高排。

那么GAUC(Group AUC)就是考虑评估数据集中样本差异的因素,算出的综合AUC值,比整体的AUC值更能反映模型算法在某些问题上的效果。还是以广告场景的ctr预估为例,现如今的互联网广告都是强调千人千面的,不同的用户兴趣不同,看到的广告也千差万别,评估算法是,以用户为group,计算这个用户所样本的auc值,然后根据所有用户的pv量做加权平均,就得到了用户粒度的GAUC值。这样GAUC的值比起整体的AUC更能够反映模型在个性化流量上的能力。

GAUC应用的注意点:

  • Group粒度的选择
    • group粒度的选择,会直接导致GAUC指标的意义,如果选择不当,对算法迭代其实是没有实际意义的。比如考虑这样的场景:在一个电商网站上,一个用户访问到一个店铺,店铺需要对这个用户个性化地展示店内的部分商品,如果我们有一个随机展示策略,已经积累了足够置信的数据,包括用户访问店铺对每个展示的商品的pv,click日志。那么离线评估GAUC如果选择group来评估一个算法好坏呢?这个场景如果说值取用户作为group的划分依据是不合理的,因为用户可能会在多个店铺都有pv,click日志,算法的目的是用户进到某个店铺之后,如果个性化的展示店铺里用户感兴趣的宝贝,吸引点击促成后续的成交转化。以用户为粒度,流量中就包含了其他店铺的宝贝,店铺之间的点击率本身就存在差异,这个差异会反应在GAUC的结果中,但是这个是算法不应该关心的问题。所以应该选择的是用户、店铺这个粒度作为流量划分的group。
  • 不同算法策略在统一集合上评估才有意义
    • 这一点也非常重要,而且有时会忽略这个问题,比如我们线上实验了多个算法策略,得到了每个算法策略的效果对比,我们想离线计算一下GAUC指标是否和线上策略的效果是一致的,这时一个容易犯的错误就是对各个算法策略的流量分别计算GAUC值,然后比较。正确的做法是选择其中某个算法策略的流量,离线用另外几个算法对这个流量进行打分,在同样的流量下得到的GAUC值才是可比的。

扩展阅读

AUC计算方法
对比ROC曲线和PR曲线的博客
对比ROC曲线和PR曲线的论文
PR曲线分析算法优劣
AUC上升一定带来CTR上升?