在展示推广场景里,转化信号不会乖乖地当场到位,用户点了广告之后,可能几分钟、几小时,甚至几天后才完成注册或下单。这种时间错位给CVR预估模型挖了一个大坑:训练样本的标签在当时是缺失的。传统延迟反馈建模(DFM)大多假设延迟来自单一来源,用一个统一分布去拟合“点击到转化”的等待时间。但真实系统里,曝光延迟、点击延迟、数据链路延迟混在一起,单一假设越用越失真。
这篇WWW‘26论文提出的级联延迟反馈建模新框架,正是冲着这个“多重延迟”的痛点来的。它把用户行为链路拆成曝光到点击、点击到转化等多个阶段,分别建模各自的延迟,再做级联组合,在展示推广场景里拿到了比传统DFM更稳的线上收益。对做广告算法、推荐系统、用户增长的同学来说,这篇工作的价值不只是多了一个模型结构,而是给“延迟到底该归因到哪个环节”提供了一套可落地的框架思路。
1. 背景:延迟反馈建模为什么是广告系统的硬骨头
1.1 从一个真实的线上现象说起
先讲一个我在实际系统里反复撞见的场景。某头部电商平台的展示推广侧每天有上亿次广告曝光,漏斗是曝光到点击、点击到成交。训练CVR模型的时候,样本通常以点击为粒度,标签是“这个点击最终有没有带来成交”。问题在于,一个点击发生的时候,成交可能还没发生。你用当前时刻的特征去预测这个点击的未来回报,但未来回报要等很久才落袋。
线上的CVR模型只能在训练时把“当下未转化”的样本当成负样本。这样做短期没问题,因为绝大多数点击确实不会转化。但一旦遇到高转化意向的流量,比如大促预热期的品牌广告位,用户在广告页研究很久,延迟转化比例大增。模型把这些“暂未转化”的样本强行学成负样本,学习信号就被污染了。大促结束时,延迟转化集中回流,模型又突然见到一堆“正例集中轰炸”,训练分布剧烈震荡。
1.2 传统DFM方法的本质与三条默认假设
延迟反馈建模的思路就是跟这个时间错位对抗。经典的做法是用一个生存模型来刻画“点击之后转化事件何时到达”,并假设延迟时间服从某个参数分布,比如指数分布或对数正态分布。训练时,一个未转化样本既不是铁板钉钉的负样本,也不是正样本,而是“到当前时刻还没转化”的右截断样本。
这套思路被验证过很多年,但它默认了三件事:第一,延迟发生在点击之后,曝光到点击的过程是瞬时的;第二,延迟分布是同一个分布,所有流量共享一套参数;第三,延迟和转化概率相互独立。对单一场景、单一流量来源的小系统,这几个假设还说得过去。但在展示推广这种流量来源繁杂、跨端行为普遍的系统里,三条假设全部被打穿。
1.3 多重延迟:三处延迟叠加的现实挑战
展开讲讲“多重延迟”到底堵在哪里。
第一重是曝光到点击的延迟。广告被曝光后,用户未必马上点击。很多用户先看完信息流里的前几条内容,划走,又划回来,隔了很久才点进广告。曝光和点击之间这个时间差,会影响你对曝光质量归因的判断。展示推广的计费是曝光或点击计费,但对模型来说,曝光侧的延迟同样会造成训练信号的不完整。
第二重是点击到转化的延迟。这是传统DFM唯一在处理的那一重。它又受转化目标类型影响极大:下载类产品看激活,SaaS产品看注册,电商看下单支付。激活可能几分钟就发生,下单支付可能要几天,延迟分布天差地别。
第三重是数据链路的延迟。广告系统内部并不是实时流水线,点击日志和转化日志之间还隔着回溯归因、ETL调度、抽样拼接。即使业务侧转化瞬间发生,训练样本也要等一轮数据管道才能更新。这一重延迟在文献里经常被忽略,但它会实打实地影响到样本时效性。
单点建模处理单一延迟很多时候已经够用,但三重延迟叠加之后,你再怎么用一个函数去拟合,也很难同时刻画三段不同来源的时间差。这就是论文标题里“克服多重延迟”背后的动机。
2. 现有方法的“对症不治本”:四个典型思路的局限
2.1 基础做法:曝光样本打负标签,省事但吃亏
最粗暴的办法是把曝光拿出来当负样本,点击当正样本,把CVR建模当成CTR建模的近亲。这个方案最大的优点是简单,特征怎么处理、样本怎么拼,工程师闭着眼睛都能写出来。
但它的缺陷是结构性的。曝光样本里没点击的绝大多数不是因为用户不想买,而是因为压根没注意广告。让模型从这个“注意力缺失”的噪声里区分转化意向,等于在信号淹没的池子里捞鱼。训练出来的模型,对高意向用户的识别有时还不如直接用CTR模型当CVR用,因为CTR至少学的是注意力信号,而CVR直接学被噪声污染后的行为信号。
2.2 假负样本与分布拆解路线
假负样本是延迟反馈建模的核心概念:把“未转化样本”看成两类,一类是真正负样本,一类是暂未转化的假负样本。解决假负样本的一个主流路线是拆分延迟分布和转化概率分布。
FNW(Feedback Neural Network with Delay)这种思路,就是把“用户何时转化”和“用户到底转不转化”拆成两个头来学。一个头学延迟时间分布,一个头学最终转化概率。我见过不少团队在这个框架上做扩展,比如用混合密度网络来拟合延迟,或者引入行业先验的延迟曲线。
问题在于,这类方法仍然只在点击到转化这一重延迟上做文章。曝光延迟和数据管道延迟没有逃生通道,全都混进同一个延迟分布里被平均。训练时暴露出的拟合残差,要么被当成噪声,要么被当成模型容量不足。而且两个头相互依赖,训练稍有不慎就会互相干扰,收敛稳定性很难控制。
2.3 时间窗口硬截断的代价
工程上更常见的做法是设定一个归因窗口,比如7天或者30天。窗口内的转化都算归因,窗口外一律不算。这样做的好处是样本更新节奏可控,坏处是窗口边界处存在系统性的截断偏差。用户在窗口关闭的最后一小时转化,和窗口关闭后一小时转化,本质上是同一行为,但在样本里一个变成正样本,一个变成负样本。
这种硬截断在大促场景下最要命。促销活动期间,用户从点击到支付的决策周期会被拉长,尤其是高客单价品类。如果你的归因窗口当初是按日常节奏调的,大促期间的延迟分布右移,拦截掉的正样本越来越多。模型的学习信号在关键流量高峰反而最不准。
2.4 单一延迟假设在规模化系统中的失效现场
把前三种问题叠在一起,就是我之前在日志平台上看到的那一幕:模型在下午三点报警,CTR正常,CVR却出现断崖式下跌。排查了很久,最后发现是那两天接了一大波来自某个信息流位的新流量,用户点击的习惯偏慢,点击后的转化也偏慢,但老模型整套参数还是按快节奏流量调的。延迟分布和样本分布双偏移,链路里的归因延迟直接把模型拖崩了。
这种现场不是偶发,而是规模化系统的常态。流量结构一变,延迟分布就变;延迟分布一变,用静态单一延迟假设训出来的模型就开始失真。这不是哪个环节实现得不够精良,而是建模框架本身没把延迟当成一个多阶段、动态的东西来对待。
3. 新框架的核心设计:级联延迟反馈建模到底做了什么
3.1 总体架构:从“单点修正”到“级联拆解”
级联延迟反馈建模的核心思路,是把“从曝光到转化”这条因果链拆成多个级联阶段,每个阶段都保留自己的延迟信息,再统一拼接成最终的学习目标。
它的结构走的是“链式传导”的路线:先建模第一阶段(曝光到点击),把该阶段未结束的事件当作右截断样本,同时输出一个中间表征;再把中间表征输入第二阶段(点击到转化),第二阶段继续沿用延迟建模的逻辑。每一级都在做“当前阶段是否发生、何时发生”的预测,上级的输出作为下级的上下文。
这样设计的直接收益是:延迟不再是一个全局平均量,而是一个按阶段解耦的量。你可以在不同级配置不同的延迟分布,甚至让每一级的延迟参数做特征化输入。某条流量点击习惯慢,但转化快;另一条流量点击快,但转化慢。这些细节在多级建模下都能被天然吸收。
3.2 阶段一:曝光到点击的延迟处理
第一阶段解决的是曝光样本的“点击归属”问题。曝光日志量级巨大,但真正点击的比例很小。如果直接拿曝光当负样本,噪声问题在前面已经说过。级联框架的作法,是把曝光不是纯粹分类,而是同时建模点击概率和点击延迟。点击概率决定这条曝光样本进不进入下一级,点击延迟决定它在哪一刻进入下一级。
举例来说,一个用户在12:00看到广告,12:01点击,和他在12:00看到广告,12:40才点击,这两个点击本质都是有效的,但在传统快照式样本里,前者在12:01就进入训练数据,后者可能一直被当成“该曝光未点击”的负样本。阶段一模型要让这两个点击在“最终转化概率”层面被同等对待,同时把40分钟的延迟信息编码进特征。
这样做有个隐藏的工程好处:阶段一模型不依赖转化标签,只依赖曝光后的点击行为。而点击行为本身当天就能见到大部分结果,所以阶段一的样本新鲜度远高于阶段二。
3.3 阶段二:点击到转化的延迟处理
第二阶段是传统DFM的主战场,在级联框架里,它不再需要从零开始学用户的兴趣信号。它拿到的输入是阶段一所有的点击倾向性表征,再加上点击后的行为上下文。此时模型关心的是:这个用户点了之后,多久会转化,或者到底转不转化。
关键区别在于,第二阶段的延迟分布可以做到“级内私享”。如果阶段一判断这是一个高点击意图但慢决策的用户,阶段二可以自适应地把延迟分布拉长。如果阶段一判断这是一个冲动型点击,阶段二则会把延迟窗口收紧。这种级间参数联动,是单一延迟建模用多少容量都难学出来的。
第二阶段的输出并不是直接拿去做最终预估,而是和阶段一联合生成一个综合的转化概率。这样线上推理时,模型给出的预估值同时包含了“会不会点”和“点了之后多久转”的综合信息,对出价和排序来说都更有指导意义。
3.4 级联结构的连接与训练方式
级联结构的具体连接方式,论文中给出的设计是将阶段一的预测概率和隐含表征作为阶段二的额外特征输入。训练过程中,阶段一的延迟分布参数和阶段二的转化概率参数是交替更新的,而不是端到端一把梭。先固定阶段二,用曝光样本优化阶段一的点击延迟模块;再固定阶段一,用点击样本优化阶段二的转化延迟模块;交替收敛。
我个人的理解是,这种交替训练的设计是为了缓解两个模块之间的梯度耦合。如果端到端联合训练,阶段一的延迟误差会通过中间表征传到阶段二,导致优化目标互相拉扯。交替训练虽然朴实,但在工程上更容易控制稳定性和收敛节奏。
推理阶段相对简单,输入的样本一路流过两个阶段,每个阶段计算一个当前时刻的条件概率,最后按贝叶斯公式或简单的乘积方式合成综合得分。不同业务可以根据响应速度的需求,选择合成的复杂程度。
3.5 为什么叫“级联”而不叫“多任务”
多任务学习通常是指一个主干网络共享底部,上面挂多个任务头,比如同时预测点击率和转化率。任务头之间是平行的。级联则不同,它的结构是有序的,后一级必须依赖前一级的输出,信息流是单向传导的。
举个例子,多任务模型像两张并列的网,同时捞鱼;级联模型像一条传送带,第一道筛子筛完,剩下的才进第二道筛子。这个差异决定了多任务模型很难刻画“前置行为是否发生”对后续延迟的因果影响,而级联结构天然带着这个假设。
在这种任务结构下,每个阶段对应一个真实存在的行为事件,所以每一阶段都可以独立寻找自己的正样本定义。你不需要像多任务那样强行给两个任务拼一个统一的标签体系。对广告系统这种标签口径经常调整的业务来说,这个特性非常实用。
4. 实验设计与关键结论
4.1 离线实验:三个构造场景的回答
论文的离线实验构建了三类场景来验证框架能力。第一类是模拟合成数据,通过人为设置不同的延迟分布,验证模型能否恢复真实的延迟参数。第二类是半合成数据,真实曝光日志配上模拟转化时间,考察模型在较大规模数据上的拟合能力。第三类是纯真实数据,用带归因标签的完整样本做评测。
合成数据上的意义在于做对照实验。你可以精确控制每重延迟的强度,比如让曝光到点击的延迟拉长、点击到转化的延迟不变。传统单一延迟模型在这种场景下会明显低估总延迟,而级联框架因为分阶段估计,对每一重延迟的精度都有更清晰的刻画。
半合成数据上的结果更能说明问题。对照实验显示,当延迟结构比较简单时,级联框架与传统DFM的差距不大;但一旦把三路延迟都调成不同分布,传统模型的AUC和校准度(Calibration)都会显著下滑,而级联框架的下滑幅度要小得多。这说明它的优势不是模型结构有多么精巧,而是在复合延迟场景下更不容易失真。
4.2 线上实验:展示推广的真实增益
论文的线上实验放在某大型电商平台的展示推广场景,选取大规模流量做分层实验。核心指标是CVR的预估精度,以及校准误差(ECE)和业务侧的GMV提升。线上观测结果中,级联框架相比传统的单一DFM,在预估校准度上提升明显,尤其是对新流量和回流流量,校准误差下降幅度最大。
这里有一个很关键的业务结论:新流量的行为数据稀疏,延迟模式和老流量完全不同。老模型对新流量学习不充分,往往会把它当成“延迟分布均值”来套。级联框架因为分阶段拿特征,能更快速地在少量样本上拼凑出可靠的延迟模式,所以对新流量的适应能力和冷启动性能都有正收益。
线上优化的另一个侧面是稳定性。级联框架上线期间,模型指标没有出现明显的训练震荡,收敛速度和基线持平,甚至在一些流量分桶上更快收敛。这与交替训练的设计直接相关,分步优化天然比联合优化好控一点,工程团队接手时心理压力也小不少。
4.3 一组值得关注的消融结果
消融实验的设计也很有参考价值。第一组是去掉阶段一,只保留点击到转化模块,相当于退化为传统DFM;第二组是去掉阶段二的延迟建模,只保留曝光点击级的延迟,让转化级退化成即时转化假设;第三组是打乱级联顺序,先用点击到转化建模,再套曝光到点击。
结果大致是:去掉第一级对曝光增量流量的校准损害最大,而去掉第二级对转化率稳定的老流量损害最大。这个结果验证了级联设计的合理性:不同级的延迟建模各管一段,缺了谁都补不齐整体信号。打乱顺序的版本则表现最差,说明级联结构对顺序是敏感的,前置事件要先被处理,后续延迟建模才能发挥正确作用。
另一个值得关注的细节是延迟分布参数化方式。论文对比了固定分布参数和特征化分布参数,特征化分布的参数版本在所有离线指标上占优。这意味着延迟分布不是一个全局常量,而是应该随用户、流量、商品等上下文动态变化。这也印证了前面说的“延迟是动态的”这一判断。
5. 工程落地的三点心得与避坑指南
5.1 特征与样本组织
要复现这个框架,第一件事是整理样本,而不是写模型。你需要把曝光、点击、转化三类日志按同一个会话ID拼接起来,并记录每一段之间的时间差。一个常见的坑是日志链路中时间戳口径不一致,点击日志用客户端时间,转化日志用服务端时间,直接做差会出现负延迟,模型直接学崩。
建议在样本表里至少要维护四个时间字段:曝光时间、点击时间、转化时间、样本生成时间。前三个用于延迟计算,第四个用于训练样本的时效性控制。没有样本生成时间,你很难判断某条未转化样本到底是不是假负样本,也很难复现线上模型的实时状态。
特征组织方面,尽量把阶段间信息做成显式特征。阶段一的输出概率可以成为阶段二的输入特征,但要小心训练标签和特征之间的泄漏。阶段一输出必须是用T-1时刻数据计算的,不能拿当天已知的点击状态去填充特征。
5.2 延迟分布估计的工程注意点
第二阶段的延迟分布通常用参数化分布来拟合,比如对数正态分布。日志里的延迟数据量大,但存在极端长尾,少数用户隔了几十天才转化。直接拿全部延迟样本去拟合分布,均值会被长尾拉得很偏。我在实践里习惯先把延迟做截断,比如超过30天的样本先归到一个档,不参与分布参数的精确拟合。
初始化延迟分布参数时,可以先跑一个统计脚本,按流量来源分桶统计转化延迟的均值和中位数。拿这个经验分布作为初始化,能让模型训练更快收敛。随机初始化不仅拖慢收敛,还会在早期造成预估值的剧烈波动,线上对比实验时会很难看。
另外要注意延迟分布和业务节奏的耦合。大促期间延迟分布整体右移,如果模型不能根据样本自动调整延迟参数,在大促前夕就应该考虑重训或者在线校准。级联框架的优势在于每级有自己的延迟模块,你可以只更新阶段二的延迟参数而不动阶段一,这样对大促这种“点击习惯不变、转化决策变慢”的场景非常友好。
5.3 线上部署与监控
级联框架的线上部署比想象中简单,因为两个阶段的输入输出都比较规整。推理时先算阶段一的点击倾向,再带着该分数过阶段二,整体耗时比单个模型多不了多少。真正需要注意的是两阶段的一致性:线上和离线训练时的两阶段特征拼接方式必须完全一致,任何一端的细微偏差都会被级联结构放大。
监控指标上,除了常规的AUC和校准曲线,建议增加“延迟分布漂移”监控。方法很直接,每隔一段时间统计近7天转化样本的点击到转化时间中位数,画时序曲线。一旦发现中位数明显抬升,说明流量结构或者用户行为发生了改变,要去检查是否需要更新延迟初始化参数。
还有一个容易忽略的点:阶段二模型的负样本定义会直接影响延迟分布学习。因为每过一天,一部分“假负样本”会转正,模型需要增量更新。如果训练管道不支持高频增量更新,离线模型会越来越滞后于实时延迟分布。建议阶段二模型至少做到小时级增量更新,实在做不到,也要保证每日多次全量训练。
6. 常见问题速查与个人实操体会
6.1 问题速查表
| 现象 | 可能原因 | 排查思路 |
|---|---|---|
| 阶段一校准偏高 | 曝光样本负样本比例过高 | 检查是否误把点击前未转化样本放进负样本池 |
| 阶段二收敛慢 | 延迟分布长尾严重 | 先做延迟截断,再用经验分布初始化 |
| 线上CVR突降 | 归因窗口与延迟分布不匹配 | 观察延迟中位数漂移曲线,检查新流量占比 |
| 出现负延迟样本 | 日志时间口径不一致 | 统一客户端与服务端时间源,剔除异常值 |
| 级联效果不如单一模型 | 阶段间特征泄漏 | 检查阶段一特征是否包含T时刻后的点击状态 |
| 大促期间模型震荡 | 延迟分布右移 | 单独更新阶段二延迟参数,或提前重训 |
6.2 我的一点实操体会
级联延迟反馈建模这套框架,最打动我的地方不在于它把延迟拆得多细,而在于它尊重了业务里的真实因果顺序。广告系统的信号从来不是从曝光直接跳到转化,中间一定经过点击这个层面。你把这一层结构显式建模,比在统计上硬凑一个复杂分布更贴合实际。
我在接触类似项目时有个习惯,拿到新框架先不急着改模型,而是先按新框架的价值链重新梳理自己的数据管道。这个框架对数据细节要求很高,尤其是各阶段时间戳的完整性和一致性。如果数据基础不牢,再精巧的模型也发挥不出来。很多团队复现这套方法效果不及预期,回头排查时发现,问题多半出在样本拼接阶段,而不是模型结构本身。
如果你也是做展示推广、信息流广告或者用户增长相关模型的,我建议从离线的校准度指标开始对比。先别急着看AUC,CVR模型的校准度比排序能力更能反映延迟处理的成效。一个校准良好的模型,哪怕AUC只持平,在真实出价系统里的业务收益也会更稳。
从长期迭代的角度看,这套框架后续还可以在两个方向上延伸。一是把更多行为节点纳入级联,比如把“加购”“收藏”这类中间行为也变成单独一级,进一步细分用户意图;二是针对不同流量来源自动选择级联深度,让部分简单流量走短链路,复杂流量走完整链路,兼顾精度和实时性。前者偏业务理解,后者偏系统效率,两条路都值得持续挖。