保序回归平滑校准算法(SIR)通过分桶合并+线性插值解决广告预估偏差问题,核心是保持原始排序下纠偏。具体步骤:1)按预估分升序分桶,统计每个分桶的后验CTR;2)合并逆序桶重新计算均值,确保Pctr-Actr散点单调递增;3)用分段线性函数拟合校准曲线,保证平滑性。(Actr表示离线统计的Actual CTR)

SIR的优势在于利用保序思想缓解数据稀疏,兼具轻量化和可解释性,实测提升RPM/CTR/ROI。评估采用PCOC(越接近1越准)和Cal-N指标,但需注意PCOC可能掩盖局部高估/低估问题。该算法适用于混合竞价、多物料等复杂场景,是广告校准的主流方案。

1. 校准背景

校准技术是可信机器学习领域的一个研究分支,它能够改善机器学习模型在预估准确度和置信度方面的不确定性。在计算广告中,模型预估值大小准确性的优化(预估校准)在出价准确性、稳定性(包括算法出价oCPX/Auto-Bidding等)、竟价公平性,计划冷启动等方面发挥重要作用。

1.1 为什么推荐系统需要进行校准?

在推荐/广告的排序阶段,由于种种原因,模型打分的分布相比于真实分布会有偏差,或者称为高估、低估。一句话介绍为什么ctr预估需要校准:真实的CTR值和预估的pCTR值由于负采样和模型等问题,存在一定的偏差。CTR差异一般有以下两个原因:模型训练中正负样本有偏采样导致的,模型构建本身就不可能完美。

CTR预估值与真实值有偏差,并不会影响AUC指标和排序,但是实际使用中往往需要CTR的预估值不仅仅是做到有序,即正样本排在负样本前面,而且需要保证有一定的区分度。

在模型预估值大小发生偏差的情况下会明显导致广告主或平台的收益受损。除此之外,随着广告业务形态的发展,更多的场景对模型预估值大小准确性提出了挑战,包括:1)多种Bid类型混竞:CPC、CPM、算法智能出价(Auto-Bid)、智能调价(OCPX)等Bidding方式繁荣发展,混合竞价,预估大小准确性和稳定性直接影响出价;2)多物料混合:图文、直播、短视频等各类内容形态广告混合,不同物料上的预估水平参差不齐;3)广告与推荐流量混排:广告和推荐(自然)内容有各自独立的打分逻辑,预估大小的量纲和分布统一是能够保证混排公平性和高效性的基础。所以,预估值大小的准确性在广告领域至关重要。

通常我们可以借助校准(Calibration)技术,根据线上的真实点击率/转化率,对模型的打分结果进行调整,使其更加贴近线上的真实分布。校准的本质,是指根据场景特点划分候选,并将其得分分布与真实分布拉齐,从而改善多目标排序、多实体排序和广告竞价等场景的排序效果。

2. 校准目标

校准技术的目标是:使用户行为的预估值尽可能逼近真实概率值,即模型预测的CTR尽可能接近真实的CTR。

矫正的结果不能改变测试数据的ctr序, 即Calibration要保持单调性,Calibration前后的AUC保持不变
矫正的目的是在
CTR序的分桶上使得COPC接近1。Calibration只矫正CTR序上的有偏,特征级别的有偏需要在特征级别进行矫正。

3. 保序回归

保序回归法(Isotonic Regression)是目前是业界最常用的校准方法,常见的算法是保序回归平滑校准算法(保序回归平滑校准算法:Smoothed Isotonic Regression,简称SIR算法)。其核心思想是利用模型本身的排序能力缓解校准样本数据稀疏的问题,具备轻量级和可解释性等特点。

  • 保序:只影响CTR的绝对值,但不影响多条数据CTR之间的相对大小,即不影响商品最终的排序结果。
  • 分桶:将所有数据按模型输出的预估值(pCTR)进行分桶,对桶内数据的label(0/1值)求平均,作为近似的真实CTR。
  • 回归:通过分段线性回归将pCTR映射到CTR上。

保序回归算法流程:

1、将pCTR大小区间进行分桶,并计算每个桶内的平均CTR和pCTR。

2、如果CTR_{i}>CTR_{i+1},则违反桶间的大小顺序,需要进行桶合并。

3、若pCTR在某个桶区间内,则取该桶的统计CTR作为校准pCTR。

3.1 为什么保序回归可以进行CTR校准?

保序回归(Isotonic Regression)用于CTR校准的核心原因在于其能保持预测值的单调性,同时通过调整映射关系减少偏差。以下是具体原因:

  • 保持排序稳定性:保序回归要求预测值(pCTR)与真实点击率(CTR)的映射关系保持单调递增,即确保预测值的相对大小与真实点击率一致。这避免了因模型偏差导致预测分与实际用户行为出现“左手倒右手”现象(例如高点击商品被低估、低点击商品被高估),从而维持推荐排序的准确性。 ‌
  • 缓解数据稀疏问题:通过分桶处理并计算每个桶内的平均点击率,可有效缓解数据稀疏问题。例如,当样本按pCTR分桶后,每个桶内的数据量增加,使得后续回归分析更稳定。 ‌
  • 优化多目标融合场景:在多目标(如点击率、转化率)融合场景中,保序回归能确保各目标预估值的相对顺序与实际用户行为一致。例如,即使两个模型的pCTR分布不同,只要保持排序能力不变,最终融合分数(如CTR×转化率)的排序仍可靠。
  • 提升校准精度:保序回归通过调整预测值与真实值的映射关系,使预测分更贴近真实用户行为。例如,当预测分方差较大时,通过回归调整可减少偏差,从而提高RPM和广告主ROI。 

4. 保序回归平滑校准算法

在实际的推荐系统中,我们通常使用保序回归平滑校准算法(Smoothed Isotonic Regression,简称SIR)来解决CTR校准的问题。

SIR算法具体思想为:模型原始打分相近的PV具有近似的真实点击率,PCTR大小区间可作为一个合理的校准维度(分桶);分桶数据量稀疏时,进一步利用模型本身的排序能力,对各分桶后验点击率与模型预估点击率做保序处理(保序回归);最后使用单调平滑函数拟合模型原始打分和后验点击率的映射关系(线性Scaling)就得到了校准函数。

具体做法如下:首先从pCxr维度对样本进行拆分,按照样本预估值大小排序后等频分桶整体样本;然后遍历全部分桶,对桶与桶之间存在逆序现象的分桶进行桶合并操作,并计算合并后分桶真实统计的转化率;最后利用简单线性插值方法,拟合模型原始预估分和后验真实转化率之间的映射关系,生成模型校准参数

SIR在保序回归的基础上,进行桶间插值产生分段校准函数:

其中,x的约束是落在第i个桶内。保序回归系列的校准算法的优势是可以在不改变序的前提下,提升pCTR的准确度;且它不需要知道模型训练时样本选择的细节,更适合在Auction阶段使用。

SIR算法的优势在于充分利用了保序和平滑思想缓解了数据稀疏的问题,而且具备轻量级和可解释性特点。对比各类校准算法效果如下(AB是两个数据集),在实际应用中RPM、CTR以及广告主ROI均有显著提升(详细可见论文: Calibrating user response predictions in online advertising)。

4.1 SIR原始论文算法流程

4.2 SIR算法流程解读

Step1 区间分桶:升序-分桶-计算桶后验ctr

首先将Pctr值从小到大进行排序,然后按照区间分为K个桶。假设我们分为100个桶:(0,0.01], (0.01,0.02], (0.02,0.03],…, (0.99,1]。这里我们认为精排模型给出的pCTR值是具有参考意义的,同一个区间里的PV请求具有近似的真实点击率,每一个区间可作为一个合理的校准维度(分簇维度)。然后实际应用时,我们再统计每一个桶里的后验CTR值。比如今天线上一共有1000次预估的Pctr落在了桶 (0.02,0.03]之间,然后我们统计这1000个预估的后验CTR,假设后验CTR为0.23%。关于每个桶里Pctr和Actr平均值的计算公式如下:

Step2 桶间合并:桶合并-重新计算Actr和Pctr均值

如果说后验CTR的值超出了对应分桶的pCTR取值区间怎么办?假如原本分桶在(0.02,0.03]之间结果的后验CTR为0.35%,这时已经进入到了下一个桶里了(0.03,0.04]。如果我们将原本pCTR在(0.02,0.03]桶里面的值往下一个桶里的区间值进行校准,这就破坏了原有桶之间的顺序,保序回归的基本逻辑是不能破坏原有pCTR的顺序。此时我们需要把(0.02,0.03]和(0.03,0.04]桶进行合并得到新的桶(0.02,0.04],再重新对落入两个桶里的数据进行后验CTR统计,得到新桶里面的Actr和Pctr平均值。我们以Pctr为x轴,Actr为y轴,最终得到一个如下图所示单调递增的散点图:

Step3 桶间插值分段校准

我们需要基于上述散点图去构造一个校准函数,输入x值以后就可以输出校准后的y值。如果直接拟合一个y = kx + b函数,最终预估的结果不够平滑。目前业界的标准做法都是构造分段校准函数。

如上图所示,我们将两个桶之间坐标点连接起来,然后去构造一个分段的y = kx + b校准函数,假设pCTR一共分为了100个桶,那么最终就构造100个分段校准函数,这样既保证单调性,又保证平滑地校准。分段的校准函数如何得出,这里就是基础的初中数学知识,已知两点坐标计算对应的y = kx + b。

保序回归法的整体思想就是:不改变原有数据的Pctr排序,仅在原有Pctr的排序上进行纠偏。最终纠偏出来的CTR数据分布的单调性不变,AUC指标不变。

本身因为特征选择和样本采样导致的CTR偏差,需要基于先验知识的特征调整和基于负样本采样率的方法来对CTR进行纠偏。如果精排模型输出的Pctr和Actr差异很大,这种是无法依靠校准模块来进行纠偏的。

4.3 SIR为何能保序?

每个分段桶内部,f(x)=kx+b是单调递增函数,必然保序。

桶合并操作使得前一个桶的最大值就是后面一个桶的最小值,因此桶间也是保序的。

5. 校准评价标准

5.1 PCOC&COPC

当我们使用上述的方法对CTR进行纠偏以后,我们使用什么指标来评估纠偏效果的好坏了?一般我们使用PCOC和Calibration-N两大指标。

  • PCOC(Predict Click Over Click)
  • PCOC = Pctr / Actr,模型预估均值/后验均值,越接近1表明模型准度越高。
  • COPC = (总支付数/总曝光数) /  score均值

PCOC指标是校准之后的点击率与后验点击率(近似真实概率)的比值,越接近于1,意味着在绝对值上越准确。PCOC指标越接近于1,意味着CTR预估的越准确。PCOC > 1,则代表CTR被高估;PCOC < 1,则代表CTR被低估。但是PCOC存在一定局限性,因为PCOC指标是统计所有PV的Pctr和Actr效果,这里面可能会存在一定的统计偏差。假设样本里有50%PV的CTR被高估了,50%PV的CTR被低估了,最终二者汇总在一起时PCOC可能还是趋近于1。

举个例子:2万个样本,其中1万个样本的预估概率是0.2,后验概率是0.4,计算出PCOC是0.2/0.4=0.5,是显著低估的,另1万个样本PCOC是0.8/0.6= 1.3,明显是高估的。所以校准效果并不好,但是样本放一起看,校准后概率是(0.2+0.8)/2=0.5,后验概率是(0.4+0.6)/2=0.5,整体PCOC是1.0,表现完全正常。所以单一PCOC指标不能表征样本各维度下的校准水平。

5.2 Calibration-N

cal-N将样本集合按照自定义规则划分出多个簇分别计算PCOC,并计算与1的偏差作为标准误差。举个例子,将pctr根据值大小划分为多个桶,每个桶为一个簇,计算每个簇的PCOC及其与1的偏差 数学公式:

6. 落地细节

这里收集推荐系统、广告系统使用保序回归进行校准的一些落地细节。

  • 校准模型更新频率:从理论上讲,校准模型的响应速度越快越好,实时流的效果应该是最接近真实水平的。
  • SIR算法的分桶数量如何确定:这个并没有绝对的参考数值,更多的是依据数据量和经验来确定。分桶数越多,校准结果能够做的越精细;但是桶内的样本量也会越少,可能会影响校准的准确度。

7. 参考文献

【知乎】阿里妈妈展示广告预估校准技术演进之路

【知乎】保序回归 Isotonic Regression-Python

【CSDN】精排模型校准Calibration_模型calibration-CSDN博客

【知乎】模型校准calibration

【知乎】[广告策略算法系列七]:预估校准机制 程序员老刘

【知乎】策略产品经理必读系列—第十四讲搜广推业务中如何对预估CTR进行校准

【知乎】机器学习中为什么保序回归算法可以校准CTR?

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

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

相关文章

项目开发日记

框架整理学习UIMgr&#xff1a;一、数据结构与算法 1.1 关键数据结构成员变量类型说明m_CtrlsList<PageInfo>当前正在显示的所有 UI 页面m_CachesList<PageInfo>已打开过、但现在不显示的页面&#xff08;缓存池&#xff09; 1.2 算法逻辑查找缓存页面&#xff1a;…

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…

Python性能优化

Python 以其简洁和易用性著称,但在某些计算密集型或大数据处理场景下,性能可能成为瓶颈。幸运的是,通过一些巧妙的编程技巧,我们可以显著提升Python代码的执行效率。本文将介绍8个实用的性能优化技巧,帮助你编写更快、更高效的Python代码。   一、优化前的黄金法则:先测…

easyui碰到想要去除顶部栏按钮边框

只需要加上 plain"true"<a href"javascript:void(0)" class"easyui-linkbutton" iconCls"icon-add" plain"true"onclick"newCheck()">新增</a>

C++字符串详解:原理、操作及力扣算法实战

一、C字符串简介在C中&#xff0c;字符串的处理方式主要有两种&#xff1a;字符数组&#xff08;C风格字符串&#xff09;和std::string类。虽然字符数组是C语言遗留的底层实现方式&#xff0c;但现代C更推荐使用std::string类&#xff0c;其封装了复杂的操作逻辑&#xff0c;提…

CMU15445-2024fall-project1踩坑经历

p1目录&#xff1a;lRU\_K替换策略LRULRU\_K大体思路SetEvictableRecordAccessSizeEvictRemoveDisk SchedulerBufferPoolNewPageDeletePageFlashPage/FlashAllPageCheckReadPage/CheckWritePagePageGuard并发设计主逻辑感谢CMU的教授们给我们分享了如此精彩的一门课程&#xff…

【C语言进阶】带你由浅入深了解指针【第四期】:数组指针的应用、介绍函数指针

前言上一期讲了数组指针的原理&#xff0c;这一期接着上一期讲述数组指针的应用以及数组参数、函数参数。首先看下面的代码进行上一期内容的复习&#xff0c;pc应该是什么类型&#xff1f;char* arr[5] {0}; xxx pc &arr;分析&#xff1a;①首先判断arr是一个数组&#x…

在HTML中CSS三种使用方式

一、行内样式在标签<>中输入style "属性&#xff1a;属性值;"。(中等使用频率)不利于CSS样式的复用&#xff1b;违背了CSS内容和样式分离的设计理念&#xff0c;后期难以维护。<p style"color: red">这是div中的p元素</p>二、内部样式在…

汽车功能安全-软件单元验证 (Software Unit Verification)【用例导出方法、输出物】8

文章目录1 软件单元验证用例导出方法2 测试用例完整性度量标准3 验证环境要求4 软件单元验证的工作产品1 软件单元验证用例导出方法 为确保软件单元测试的测试案例规范符合9.4.2要求&#xff0c;应通过表8所列方法开发测试用例。 表8 软件单元测试用例的得出方法&#xff1a; …

MySQL内置函数(8)

文章目录前言一、日期函数二、字符串函数三、数学函数四、其它函数总结前言 其实在之前的几篇中我们也用到了内置函数&#xff0c;现在我们再来系统学习一下它&#xff01; 一、日期函数 函数名称描述current_date()获取当前日期current_time()获取当前时间current_timestamp(…

苍穹外卖项目日记(day04)

苍穹外卖|项目日记(day04) 前言: 今天主要是接口开发, 涉及的新东西不多, 需要注意的只有多表联查和修改的逻辑,今日难点: 1.菜品的停起售状态设置 2.套餐的停起售状态设置 3.动态sql中的 useGeneratedKeys 与 keyProperty 两个参数 一. 菜品的停起售状态设置 ​ 在菜品的停售中…

React之旅-05 List Key

每个React的初学者&#xff0c;在调试程序时&#xff0c;都会遇到这样的警告&#xff1a;Warning: Each child in a list should have a unique "key" prop. 如下面的代码&#xff1a; const list [Learn React, Learn GraphQL];const ListWithoutKey () > (&l…

[特殊字符] 人工智能技术全景:从基础理论到前沿应用的深度解析

&#x1f680; 人工智能技术全景&#xff1a;从基础理论到前沿应用的深度解析 在这个AI驱动的时代&#xff0c;理解人工智能的核心技术和应用场景已成为技术人员的必备技能。本文将带你深入探索AI的发展脉络、核心技术差异以及在各行业的创新应用。 文章目录&#x1f680; 人工…

Go语言教程-环境搭建

前言 Go&#xff08;又称 Golang&#xff09;是由 Google 开发的一种 开源、静态类型、编译型 编程语言&#xff0c;于 2009 年正式发布。它旨在解决现代软件开发中的高并发、高性能和可维护性问题&#xff0c;尤其适合 云计算、微服务、分布式系统 等领域。 Go 语言国际官网…

windows指定某node及npm版本下载

下载并安装 nvm-windowshttps://github.com/coreybutler/nvm-windows/releases&#xff08;选择 nvm-setup.zip&#xff09;。打开命令提示符&#xff08;管理员权限&#xff09;&#xff0c;安装 Node.js v16.15.0&#xff1a; nvm install 16.15.0 nvm use 16.15.0 验证node版…

每天一个前端小知识 Day 28 - Web Workers / 多线程模型在前端中的应用实践

Web Workers / 多线程模型在前端中的应用实践&#x1f9e0; 一、为什么前端需要多线程&#xff1f; 单线程 JS 的瓶颈&#xff1a;浏览器主线程不仅负责执行 JS&#xff0c;还要负责&#xff1a; UI 渲染&#xff08;DOM/CSS&#xff09;用户事件处理&#xff08;点击、输入&am…

python:ImportError: cannot import name ‘ParameterSource‘ from ‘click.core‘

浏览器访问网站抛错&#xff1a;ImportError: cannot import name ParameterSource from click.core (E:\environment\python\Lib\site-packages\click\core.py)问题分析&#xff1a;1. click 版本问题ParameterSource 可能是在某个特定版本的 click 库中引入的&#xff0c;而你…

flink 去重

LOCALTIMESTAMP as time_stamp ts as case when time is null then CURRENT_TIMESTAMP else TO_TIMESTAMP_LTZ(time, 0) end , watermark for ts as ts - interval ‘60’ second PARTITION BY 的都有回撤流 group by 的没有回撤流 因为算的是指标 开窗又慢 SELECT * FROM (…

【音视频】TS协议解析

参考博客&#xff1a;https://blog.csdn.net/rell336/article/details/38109621?utm_mediumdistribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_sourcedistribute.pc_relevant_t0.none-task-blog-BlogCommendFromMac…

uniapp 日期组件可选择年月

month-picker 月份选择器组件 组件介绍 month-picker 是一个用于选择年月的自定义组件&#xff0c;基于 uni-app 开发&#xff0c;提供了简洁的月份选择功能。 解决弹框底部出现底部页面区域 safe-area属性设为true时&#xff0c;即可解决这个问题效果如图功能特点 支持选择年份…