【推荐算法的评估与调试】离线评估+在线A/B Test

文章目录

  • 1、离线评估
    • 1.1、评估排序算法
      • 1.1.1、AUC和GAUC
      • 1.1.2、NDCG
    • 1.2、评估召回算法
      • 1.2.1、Precision&Recall
      • 1.2.2、MAP
      • 1.2.3、Hit Rate
      • 1.2.4、持续评估
  • 2、在线评估
    • 2.1、线上:流量划分
      • 2.1.1、根据User ID划分流量
      • 2.1.2、分层重叠划分流量
      • 2.1.3、A/A实验的重要性
    • 2.2、线下:统计分析
  • 2.3、其他事项

  • 模型上线前需要进行离线评估;模型上线后需要进行在线评估。
  • 推荐系统的评估流程:

1)离线评估:在相同的训练集上,不同算法训练出新旧两版模型,在同一个测试集上进行评估。若新模型的指标优于旧模型,则通过离线测试,可进入下一阶段。注意:离线评估的训练集一般采用连续3天或7天的历史数据;在第4天或第8天的数据上测试

2)上线前回溯:新模型在上线评估之前必须先进行回溯,比如自两周前的历史数据开始训练,直到追平并接入线上的实时样本流。之后,新旧模型就能够同步接收线上的实时反馈并自我更新,才能进行后续A/B实验的在线评估

3)在线评估:A/B 实验,随机划分为两份流量:控制组(流入老模型);实验组(流入新模型,可以有多个)。实验一段时间后,统计关键业务指标(例如CTR、平均观看时长等),若实验组显著优于控制组,就认为新模型优于旧模型,可考虑推广至全部流量

1、离线评估

  • 主要针对排序(粗排和精排)和召回算法,存在不同的评估指标

1.1、评估排序算法

1.1.1、AUC和GAUC

  • 评估排序模型最重要的指标是AUC(ROC曲线下面积,以TPR和FPR分别为纵坐标和横坐标 )
  • AUC更为直观的解释:模型给一堆样本(正负类别标签已知)预测打分,然后将他们从大到小排序,正样本能够正确排在负样本前面的概率就是AUC

A U C = 正确排序的样本对 所有样本对 AUC = \frac{正确排序的样本对}{所有样本对} AUC=所有样本对正确排序的样本对
一个正样本和负样本可组成一个样本对
正确排序是指按概率,将正样本排在负样本之前
下图显示的AUC为7/9
在这里插入图片描述

  • 从上述定义来看,AUC天然适合衡量模型的排序性能,然而AUC体现的是全局的性能,会将所有用户的排序结果都考虑进来,可能会存在失真,因此可以引入GAUC(Groupwise AUC),将样本划分为group,每个group计算一个AUC,最后再加权平均
  • 一般以用户为单位划分group计算GAUC:
    G A U C = ∑ u w u A U C u ∑ u n u GAUC = \frac{ {\textstyle \sum_{u}w_uAUC_u} }{\sum_{u}n_u} GAUC=unuuwuAUCu

A U C u AUC_u AUCu是在用户u的样本上计算的AUC, n u n_u nu是给用户u曝光过的物料数目

  • 由于AUC/GAUC只能针对的是二分类,对于CTR、CVR指标是可以的,针对实数型目标(比如观看时长、销售金额),可以转换为二分类目标,例如是否会有效播放(观看超过15秒)、是否会长播放

1.1.2、NDCG

  • 需要注意的一点是,物料在展示列表的位置可以反映物料的价值(越靠前,价值越高)
  • 而AUC无法反应排序位置这个因素的影响
  • 因此,引入DCG(Discounted Cumulative Gain)指标:
    D C G @ K = ∑ k = 1 K 2 c k − 1 l o g 2 k + 1 DCG@K = \sum_{k=1}^{K}\frac{2^{c_k}-1}{log_2{k+1}} DCG@K=k=1Klog2k+12ck1
  • K是排序结果的长度
  • c k c_k ck是第k个位置的物料贡献,未点击为0,点击为观看时长、点赞等的函数
  • 从上述公式可看出,越靠后的位置,其DCG越大
  • 为了做归一化,定义理想情况下的DCG为IDCG,即按照物料的真实贡献从高到低排序计算出的DCG,然后得到NDCG(Normalized DCG):
    N D C G @ K = D C G @ K I D C G @ K NDCG@K = \frac{DCG@K}{IDCG@K} NDCG@K=IDCG@KDCG@K
  • 由于排序长度不同,直接计算DCG不易比较,而归一化后的NDCG可以进行比较

1.2、评估召回算法

  • 评估召回模型时,一般不用AUC这样强调排序性能的指标

如果用AUC进行评估,正样本为点击过的样本,而负样本若为曝光未点击的样本,与召回的真实样本情况(包含大量和用户毫不相关的样本)不符;若负样本为除点击之外的其他物料,也不能保证这些物料一定不喜欢
*因此,要避免直接统计负样本,而是从预测的正样本与真实的正样本之间的命中率、覆盖度角度进行评估

1.2.1、Precision&Recall

  • 以双塔召回模型为例,可进行如下P和R值的计算:

u i u_i ui表示第i次推荐请求的用户
T i e x p o s e T_i^{expose} Tiexpose表示第i次请求中向用户曝光的物料集合
T i c l i c k T_i^{click} Ticlick表示用户点击的物料集合

  • 计算得到的** P r e c i s i o n @ K Precision@K Precision@K:平均下来,每次召回的物料中真正被用户喜欢的占比; R e c a l l @ K Recall@K Recall@K:平均下来,一个用户真正喜欢的物料中有多大占比能被模型召回。**
    在这里插入图片描述
    在这里插入图片描述

1.2.2、MAP

  • Precision和Recall是一对此消彼长的指标,即召回的越多,Recall越高,Precision会随之下降
  • 因此采用AP值来衡量召回能力比P和R值更全面,计算过程为:设置不同i值,即取前i个物料作为召回结果计算PR曲线,以及曲线下面积即为AP。AP值的计算方法如下:
    A P @ K = ∑ i = 1 K P r e c i s i o n @ i × I s P o s i t i v e @ i T o t a l P o s i t i v e s AP@K = \frac{ {\textstyle \sum_{i=1}^{K}}Precision@i\times IsPositive@i }{TotalPositives} AP@K=TotalPositivesi=1KPrecision@i×IsPositive@i
  • K表示最大的召回数量
  • TotalPositives表示本次召回中用户喜欢物料的数目
  • Precision@i表示前i个召回结果的Precision
  • IsPositive@i表示第i个召回结果是否为用户所喜欢,喜欢为1,不喜欢为0
  • 将多次召回结果的AP取平均,几位MAP,可以用来衡量模型的整体召回性能
  • 例子和具体计算流程如下:
    在这里插入图片描述
    在这里插入图片描述

1.2.3、Hit Rate

  • Hit Rate表示在N条点击记录中,有多少物料可以被召回模型所覆盖
    在这里插入图片描述

1.2.4、持续评估

  • 模型需要实时地持续更新,同时也需要持续评估
  • 为了实现无偏的估计,常采用Progressive Validation的方法

1)模型拿到最新一批的用户反馈后,先进行前向传播得到预测结果
2)一边反向传播更新模型,一边拿预测结果与用户反馈真值计算各种评估指标

  • 这种方式可以共用前向传播环节,避免重复计算;同时由于模型未更新,基于当前预测结果的指标是无偏的,更可信

2、在线评估

  • A/B实验是推荐系统中的最常用的线上评估方式,思路如下:

1)将用户流量随机划分为控制组和实验组
2)控制组流量流入老模型,实验组流量流入新模型,其中只有模型不同,其余的用户分布、物料分布等必须完全相同
3)上线实验一段时间,积累足够多的用户反馈
4)根据收集到的用户反馈,统计关键业务指标
5)若实验组的指标优于控制组,可以考虑新模型替换旧模型

  • A/B实验更加客观、公平可靠,但是其整个实验系统功能复杂、实现难度高,并且要求进行足够长的时间,至少覆盖一个完整的周期,例如一周(周中和周末不一样)
  • 下面介绍线上实验和线下分析的关键知识点

2.1、线上:流量划分

  • 线上的流量划分需要遵循以下两个原则,以保证两组流量的同分布原则:

1)随机性:一个用户被划分到控制组和实验组是完全随机的
2)确定性:当一个用户被划分到哪个组,今后的访问也必须在相同的组

2.1.1、根据User ID划分流量

  • 最简单的方式是根据User ID随机划分到控制组和实验组
  • 但是这种方式最大问题在于,一个用户一次只能进行一个实验,例如召回和精排很容易就将全部流量占满了,而通常有很多实验需要上线验证,就会导致排队阻塞的问题。
  • 因此一般利用分层重叠的方式
    在这里插入图片描述

2.1.2、分层重叠划分流量

  • 分层划分的思想如下:

1)如果进行N个实验,就将流量划分为N层,每个实验独占一层流量
2)同一层实验的各个实验组的流量是互斥的,即一个用户只会被划分到一个组里
3)不同层的实验,流量是重叠的,一个用户可以被分配到不同层的多个组里

  • 这种方式中,上下层的实验的流量完全正交,用户流量在前几层实验的不同划分,并不会在后续实验引入偏差。
    在这里插入图片描述
  • 需要注意的是,Layer层并没有层次的关系,就只是指的不同的实验,并且流量在进入一个新的实验前会被重新打散

2.1.3、A/A实验的重要性

  • A/A实验就是在控制组和实验组采用完全相同的配置
  • 在进行正式的A/B实验前最好先进行一段时间的A/A实验,检验实验的两组流量是否存在偏差

2.2、线下:统计分析

  • 可以通过显著性检验的方式验证新模型的性能,是否显著优于旧模型
  • 常会遇到I类错误和II类错误
    在这里插入图片描述

2.3、其他事项

  • 在做出新模型推广至全部流量的决定时,还要综合来考虑业务收益的性价比,如果只有微小提升,对业务的影响微乎其微,就不值得推广
  • 不止要考虑在全体流量上的结果,也要考察在细分流量上的差异(例如新老客户、不同国家、不同频道等)

参考书籍:
《互联网大厂推荐算法实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没那么简单!浅析伦敦金与美元的关系

伦敦金价与美元的关系可以被比喻为跷跷板的两端,它们的价格走势往往呈现出此消彼长的关系:当美元表现强势的时候,伦敦金的价格可能承受到压力;相反,当美元疲软时,黄金往往会成为避险资产,令伦敦…

安装操作系统1-Win10版本介绍及硬件要求

注意:安装系统,首先弄清有哪些版本及所需硬件环境。 1.Win10有哪些版本 微软将 Win10为以下7个版本: Windows 10 家庭版(Home) 面向所有普通用户,提供Win 10的基本功能。此版本适合个人家庭用户使用&am…

STM32F103ZET6_HAL_CAN

1定义时钟 2定义按键 按键上拉电阻 3开启串口 4打开CAN(具体什么意思上一篇讲了) 5生成代码 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief …

基于51单片机的智能恒温箱设计--数码管显示

一.硬件方案 根据恒温箱控制器的功能要求,并结合对51系列单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。所以采用AT89C52作为电路系统的控制核心。按键将设置好的温度值传给单片机,通过温度显示模块显示出来。初始温度设置好…

php redis分布式锁

一,概念 在PHP中实现分布式锁通常可以使用数据库、缓存系统(如Redis)或者其他中央存储系统来保证在分布式系统中的数据一致性与同步。秒杀下单、抢红包等等业务场景,都需要用到分布式锁。 常规方案大概有七中 方案一:…

C# WinForm —— 34 ToolStrip 工具栏 介绍

1. 简介 工具栏 ToolStrip,一般紧贴在菜单栏下面 2. 属性 属性解释(Name)控件ID,在代码里引用的时候会用到Enabled控件是否启用Dock定义要绑定到容器的控件边框,默认是topAnchor定义某个控件绑定到的容器的边缘。当控件锚定到某个边缘时&a…

基于JSP技术的大学生校园兼职系统

开头语 你好呀,我是计算机学长猫哥!如果有相关需求,可以通过文末的联系方式找到我。 开发语言 JSP 数据库 MySQL 技术 JSP JavaBeans 工具 MyEclipse、Tomcat、Navicat 系统展示 首页 学生登录界面 招聘信息界面 论坛中心界面 摘…

人工智能发展历程和工具搭建学习

目录 人工智能的三次浪潮 开发环境介绍 Anaconda Anaconda的下载和安装 下载说明 安装指导 模块介绍 使用Anaconda Navigator Home界面介绍 Environment界面介绍 使用Jupter Notebook 打开Jupter Notebook 配置默认目录 新建文件 两种输入模式 Conda 虚拟环境 添…

路虽远,行则将至 - 附暑期实习、秋招历程经验分享

前言 大家好 许久没有时间静下心来打开编辑器写文章了 忙碌暂过,难得一闲时 求学三年,终到离别时 回忆过往,枯燥且多彩 有一点经验,以文字形式分享,希望帮助到大家 可能是这段时间事多且杂,加上很长一…

电脑桌面上用来记事的便签软件

便签软件已成为我们日常生活中不可或缺的记录工具。想象一下,在繁忙的工作中,你突然需要记下一个重要事项或临时想法,这时,一个便捷、高效的便签软件就显得尤为重要。它能帮助我们迅速捕捉信息,轻松管理琐碎事务&#…

通信设备的网卡

一、网卡的作用 将计算机或者路由器连接到传输介质上的接口,传输介质可以是有线也可以是无线的。 (1)计算机的网卡 现在的计算机大多有两个网卡,一个是有线网卡一个无线网卡,比如以我们的台式电脑为例 台式电脑千兆网…

【氵】Archlinux+KDE Plasma 6+Wayland 安装nvidia驱动 / 开启HDR

参考: NVIDIA - Arch Linux 中文维基 (其实就是把 wiki 简化了一下 注:本教程适用 GeForce 930 起、10 系至 20 系、 Quadro / Tesla / Tegra K-系列以及更新的显卡(NV110 以及更新的显卡家族),此处以 RTX3060 为例 …

Pytorch--Convolution Layers

文章目录 1.nn.Conv1d2.torch.nn.Conv2d()3.torch.nn.ConvTranspose1d()3.torch.nn.ConvTranspose2d() 1.nn.Conv1d torch.nn.Conv1d() 是 PyTorch 中用于定义一维卷积层的类。一维卷积层常用于处理时间序列数据或具有一维结构的数据。 构造函数 torch.nn.Conv1d() 的语法如…

vector迭代器失效

1.迭代器失效的根本原因 迭代器就是指针,迭代器失效就是指针失效。 指针失效的有两种情况: 1)野指针 2)访问越界 2.举例阐述 这段代码已经报错了,我给大家调试一下。可以发现:vector的容量变大了&…

C语言之main函数的返回值(在linux中执行shell脚本并且获取返回值)

一:函数为什么要返回值 (1)函数 在设计的时候是设计了参数和返回值,参数是函数的输入,返回值是函数的输出 (2)因为函数需要对外输出数据(实际上是函数运行的一些结果值)…

springbot 界面美观的超市收银管理系统。

springbot 界面美观的超市收银管理系统。 功能:登录,用户管理,权限菜单管理,首页订单,收入,用户统计, 收银台,销售账单,库存管理,商品分类,供应…

30 岁的程序员,要有 “归零“ 心态

大家好,我是码农先森。 古话说的 “三十而立”,正是担重之时,却大部分人在职场中都处于不上不下的尴尬境地。已经没有刚毕业时那股子冲劲,被生活和工作磨平了棱角。 在技术思想方面,似乎已经触及到了天花板&#xff…

嵌入式系统中判断大小端的方法与实现

第一:大小端基本分析 程序判断计算机是大端的还是小端的,判断的思路是确定一个多字节的值(下面使用的是4字节的整数),将其写入内存(即赋值给一个变量),然后用指针取其首地址所对应的字节(即低地址的一个字节),判断该字…

shell循环以及实验

循环是一种重复执行的代码结构,只要满足循环的条件,会一直执行这个代码 循环条件:在一定范围之内,按照指定次数来执行循环。 循环体:在指定的次数内,执行的命令序列,只要条件满足,…

C#知识|模块化分层学习笔记

哈喽,你好,我是雷工! 01 基本分层 典型的两层结构:由UI层 数据访问层 实体类构成。 其中实体类不算一层,本质是一个数据载体。 02 模块化分层 模块概念:在.NET平台中,模块主要是指类库项目。…