
直播广告出价这几年一直是投放策略里最难啃的一块。直播间和货架电商不一样流量实时波动大成交有延迟广告主还要卡ROI整套逻辑和传统搜索广告、信息流广告完全是两套玩法。最近在某个数据挖掘顶会上看到一篇直播推广出价算法的工业论文核心卖点就四个字轻量、好用。没有堆大模型没有搞复杂强化学习而是把问题重新建模成了一个在线控制问题用很轻的方案拿回了可观的投放效果提升。这篇文章我来拆一拆它到底解决了什么问题、方案是怎么设计的、落地上有哪些值得注意的细节最后结合我自己做投放优化踩过的坑聊聊这类算法在真实业务里怎么落地。适合看这篇的人搞广告算法、做投放策略的产品或运营以及想了解直播电商竞价机制的技术同学。就算你不是专门做算法的看完也能明白为什么直播间出价这么难调、轻量方案为什么能打。1. 直播广告出价到底难在哪1.1 直播推广和传统广告的逻辑差异传统的电商搜索广告用户搜“洗衣机”看完标题、价格、评价就能决定要不要买从展现到成交通常就在几分钟内。广告系统只需要预估点击率、转化率然后按预估价值排序出价就是“我觉得这个流量值多少钱”。直播推广完全不是这个逻辑。用户在直播间看到的不是静态商品页而是一个实时在讲品、发券、表演的主播。用户可能先在短视频里看到直播间切片点进直播间看了两分钟没买退出去过了两小时又通过另一个广告入口回来买了。这个链路下的转化窗口期比普通商品广告长很多而且转化信号极其稀疏。你很难用“预估点击率乘转化率”那一套直接拿来做实时出价因为“这一秒的曝光”和“下一秒的成交”之间的关系非常弱。另外直播间的流量供给波动很大。开播前半小时流量可能很猛主播讲到爆品时瞬间进来几千人尾段流量回落。广告系统得跟着直播间的实时状态去调整出价不然要么预算花不出去要么钱花在低效流量上。1.2 传统出价方案为什么在直播间里失效先说说行业里常用的几种出价方式以及它们在直播场景下各自的毛病。第一种是固定出价广告主给定一个CPM或CPC的出价系统就按这个价格去竞价。问题在于直播间的流量价值是动态的同一个直播间爆款讲解时一个流量值10块钱闲聊阶段一个流量可能只值1块钱。固定出价等于用平均值去对付一个方差极大的实时分布必然带来成本浪费或者流量拿不到。第二种是调ROI出价系统按目标ROI来控制成本。这比固定出价进了一步但它非常依赖准确的转化价值预估。直播间的成交本来就有延迟你上午投放带来的用户可能晚上才付款当天ROI看着很差实际是好流量。如果不做延迟归因修正系统会把好流量判定成垃圾流量越调越差。第三种是强化学习类出价。学术界和工业界都试过用强化学习来做预算分配和出价效果理论上很好但落地极其痛苦。状态空间、动作空间设计复杂训练不稳定线上环境一变化模型就要重新训这在流量波动剧烈的直播场景里简直是一场灾难。很多团队试完这个方向之后都回去改规则了。所以直播推广出价真正需要的不是更聪明的模型而是一个能在高波动、强延迟、低信号环境下依然稳定工作的机制并且这个机制要足够简单让业务方能理解、能解释、能手动干预。这恰恰就是那篇论文里说的“轻量好用”的含义。1.3 “轻量”和“好用”分别指什么轻量是指模型和计算链路都要轻。不需要在线跑一个大模型去预估每个流量的长期价值不需要维护复杂的强化学习环境特征工程也不需要每天做几十上百个特征。整个系统可以拆成“一个简单打分模型”加“一个反馈控制模块”线上单次出价的CPU开销要控制在很小。好用是指业务方看得懂、调得动。广告主说今天想冲GMV系统知道怎么把出价往上抬明天想稳住ROI系统知道怎么把出价往下压。这个“知道”不靠暗箱模型而是靠明确的控制逻辑广告主侧的投放策略同学可以随时根据直播间的实时状态去干预。好用的另一个维度是稳定性不能今天效果爆炸明天预算花不出去这种不确定性在真实业务里比效果差更致命。我见过太多项目模型越堆越复杂线上效果还不如一套简单的PID调参。原因不是模型不行而是广告投放是一个闭环系统模型只是其中一环反馈是否及时、特征是否完整、链路是否稳定往往比模型本身更能决定结果。这篇工作真正的价值就是把这个行业里“大家都懂但没人系统做”的事情规范化了。2. 轻量出价算法的整体设计思路2.1 把竞价问题看作一个带约束的在线控制问题核心思路说穿了很简单不要把出价当成一个静态预估问题而是当成一个动态控制问题。系统里有一个期望花销、有一个目标ROI约束还有一个实时反馈信号。每次广告请求进来系统先算这个流量值多少钱用轻量模型再根据当前已经花的钱、已经成交的金额、距离直播结束还有多久来动态调整最终出价。这个思路和PID控制器很像。你想让水温稳定在50度不能等温度掉了再去猛加热也不能看到温度到了就完全停止而是要根据温差、变化趋势、累计偏差去调节加热功率。直播出价也一样花快了就降价花慢了就提价ROI偏低了就收紧ROI偏高了就适当放开。这就是一个典型的闭环反馈控制。论文里大概率用的就是这个框架只不过在工程细节上做了很多适配直播场景的处理。比如反馈信号怎么平滑、控制周期多长、控制步长怎么约束这些细节才决定方案能不能在真实场景里稳定跑起来。2.2 兜底逻辑用少量特征做候选评估控制归控制但每次竞价总得有个基础出价。论文里的做法不是直接预估“转化率×客单价”那样在直播间这种低信号场景里太容易出偏差了。更好的做法是做一个轻量级价值预估特征控制在十几个以内主要包含这四类信息第一是直播间本身的属性比如直播间的历史GPM、场均观看时长、粉丝团活跃度这代表了这个直播间对平台流量的承接能力。第二是当前流量的画像比如用户是不是这个直播间的粉丝、有没有在这个类目下买过东西、近7天在直播间的活跃程度。第三是实时状态比如当前直播间在线人数、当前讲解的商品有没有优惠、主播是否处于高转化时段。第四是竞争环境比如同类直播间的出价水位、当前流量供给的紧张程度。把这些特征喂给一个简单的GBDT或者浅层神经网络输出一个基础价值分。注意这里不需要做非常精确的绝对值预估只需要排序基本正确就行因为后面还有控制模块去兜底修正。2.3 出价调节核心反馈闭环反馈闭环是整个算法的灵魂。没有这部分前面那个价值预估模型就是一个普通CTR模型没什么新鲜的。有了这部分整个系统才具备自适应能力。具体来说系统会维护一个短周期的统计窗口比如每5分钟统计一次实际花费、预估GMV、真实GMV延迟归因修正后、平均点击成本、ROI实时值然后拿这些值和目标值做差产生一个误差信号再通过控制模块输出一个出价系数。这个系数乘以基础出价才是真正参与竞价的最终价格。关键点在于控制模块的设计。直接用原始误差去调整系数会带来抖动比如某一分钟进来一个超级大主播的流量成本突然飙高如果系统反应太激进后面几分钟就会大幅压价反而错失好流量。所以需要对误差信号做平滑处理同时控制步长要做限幅保证每一轮调节的幅度不会太大。这就是工程经验发挥作用的地方我下面讲到实操时再细说。2.4 为什么不用复杂模型成本与收益的权衡看到这里有人会问既然有这么多实时反馈信号为什么不用强化学习自动学一个最优出价策略论文给出的答案其实也是行业里很多团队用脚投票的结果复杂模型在直播场景下的边际收益撑不起它的边际成本。强化学习需要大量探索而探索在竞价场景里就是真金白银。需要维护一套模拟环境直播流量波动大模拟环境和真实环境的分布偏移会很快。模型一更新就要重新评估、重新上线流程成本很高。一旦训练不稳定线上效果出现断崖式下跌业务方的信任就很难修复。轻量方案的好处是可控、可解释、可干预。出价系数高了还是低了、为什么低了、是ROI差了还是成本高了每一步都有明确的业务含义。出了问题直接查控制模块的参数就能定位不像神经网络那样需要去翻几百个特征的梯度。对于直播推广这种业务节奏很快的领域这种“可干预性”本身就是最大的优势。所以这篇工作不是“做不了复杂模型才用简单方法”而是认真评估过收益之后选择了性价比更高的路径。这个决策逻辑在工业界非常重要可惜很多做技术的人容易沉迷于模型复杂度忘了自己真正要解决的是业务问题。3. 核心实现和关键参数拆解3.1 特征选哪些怎么处理直接给一份我按照论文思路复现项目时用到的特征列表实际效果还不错。总共16个特征分为四组特征组具体特征用途直播间承接力历史GPM、场均观看时长、粉丝团人数、近7日直播时长判断直播间整体转化能力流量侧画像用户粉丝等级、类目购买频次、直播观看深度、是否新客判断当前流量和直播间匹配度实时状态当前在线人数、正在讲解商品的价格带、优惠券剩余量判断当前时段的转化时机竞争环境同类直播间平均出价、当前时段流量供给指数判断竞价激烈程度特征是少但处理上有三个坑要注意。第一个坑是历史GPM这类统计特征会随着直播间的生命周期剧烈变化。一个新直播间可能只播过两场GPM方差极大。解决方法是做一个置信度加权直播场次少于5场的直播间把它往类目平均拉别让它直接参与排序。我一开始没做这个处理冷启直播间的基础出价忽高忽低非常影响实验效果。第二个坑是实时状态特征存在严重的延迟。当前在线人数是秒级的但“当前讲解商品”这个信息不一定能同步到广告系统。如果广告系统的数据链路延迟超过30秒主播都已经讲完这个品了模型还在用这个特征打分那还不如不用。实测下来凡是延迟超过30秒的状态特征直接去掉比保留效果更好。第三个坑是离散特征的泛化性。比如“用户粉丝等级”这种特征等级6级以上的用户样本极少模型很容易过拟合到个别大粉的行为上。处理方式是把等级做非线性分桶高等级合并成一桶再加上shrinkage正则防止极端样本主导特征权重。3.2 出价公式和参数计算示例整个出价决策可以用下面这个公式表示final_bid clamp( base_value * ctr_factor * roi_factor * budget_factor, min_bid, max_bid )其中base_value是轻量模型预估的流量价值ctr_factor和roi_factor来自反馈控制模块budget_factor根据预算消耗进度动态计算。clamp是为了保证出价不会超出广告主设定的范围也防止意外情况下出价过高花爆预算。拿一个具体案例来算一下。假设一个直播间目标ROI是3也就是每花1块钱期望带来3块钱GMV。系统预估某次流量如果点击进直播间该用户产生成交的概率是1%成交客单价是200元。那么期望GMV就是2元基础出价 2 / 3 0.67元。如果当前ROI实际只有2.5roi_factor会下调到0.8那出价就变成0.67 × 0.8 0.536元。另一个流量是直播间的铁粉成交概率5%客单价300元期望GMV是15元基础出价 15 / 3 5元即使ROI系数下调到0.8依然是4元照样比普通流量出价高。这里有个细节基础价值的倒数关系。目标ROI越高相同的期望GMV对应的出价越低这是符合直觉的——你要求更高的投产比自然要压低成本。但是很多业务方会搞反以为目标ROI设高了系统就愿意花更多钱实际上恰恰相反。投放策略同学如果不懂这个关系很容易调出一个反直觉的结果。另外注意客单价不能直接取商品原价直播间里通常有优惠券、满减、运费险实际到手价可能比原价低20%到30%。我用过一个简单的修正预估客单价 原价 × (1 - 平均优惠系数)平均优惠系数统计直播间近7天所有成交订单的折扣比例。这个修正虽然朴素但比直接拿原价硬算要靠谱不少。3.3 样本构造与离线训练轻量模型虽然结构简单但样本构造不能随便来。直播间场景的成交是延迟的而且延迟分布很不均匀。有的用户看完立刻下单有的用户播完一场3小时才下单还有人7天后通过其他渠道的广告回来下单。如果按曝光时间点打标签那“这单成交到底是哪次曝光带来的”就说不清。我的做法是按点击时间戳记录行为设置一个48小时的归因窗口。48小时之内发生成交就把这次成交归属到最近一次点击上。超过48小时不计入归因因为从广告投放角度讲隔了两天还把这单算给某次曝光意义已经不大了。样本权重也要做特殊处理。直播间里非粉丝用户的转化率极低可能千分之一都不到如果所有负样本权重一样模型会学成一个“永远预测低转化”的躺平模型。处理方法是对正样本做过采样或者对高粉丝等级的用户负样本降权。我用的是后者效果更稳因为过采样容易导致模型对低频特征产生虚假的强响应。离线训练时的评估指标也值得说两句。不要只看AUC直播场景里更重要的是校准误差。基础价值分是直接参与出价的如果模型预测的期望GMV和真实值系统性偏离出价就会系统性偏高低。我一般会同时看两个指标一个是分桶后的校准曲线另一个是q值分位数覆盖度确保不同量级的流量都能被合理估价。3.4 线上实时更新的节奏控制轻量模型不需要像大模型那样频繁更新但也不能一个月都不动。我的经验是模型本身每天离线更新一次用小批量增量训练的方式重训保证特征分布变化能被及时跟进。反馈控制模块则走完全不同的节奏。这部分是毫秒级决策的不可能每次请求都重新计算全局统计量。但控制周期也不需要太短太短容易被流量抖动误导。我实测下来5分钟控制周期在直播场景里效果最好。低于3分钟系统会频繁跟着瞬时流量波动跳舞高于10分钟反应太迟钝主播讲完一个爆品才开始调价黄花菜都凉了。控制系数本身还需要做限幅和阻尼处理。我用的是一阶低通滤波接限幅器先用EMA平滑误差信号再把单次调节步长限制在10%以内最后把整个调节系数限制在0.6到1.5之间。这样既保证了系统有足够的调节能力又不会因为单次异常信号导致出价剧烈跳变。4. 工程落地与上线实操4.1 整体链路从曝光请求到出价决策实际线上链路大致是这个顺序广告请求进来先做流量反作弊和基础过滤这部分直接决定出价模块能看到什么质量的流量。然后系统并行拉取直播间实时特征和用户画像特征这两路特征源经常是不同团队维护的延迟不一致需要做一个时序对齐。对齐完成之后轻量模型计算基础价值分反馈控制模块计算调节系数两者相乘得到最终出价再送给竞价模块比价。整个链路的性能瓶颈通常不在模型计算而在特征获取。轻量模型本身零延迟GBDT跑一次就是几十微秒。真正耗时的是实时状态特征的拉取如果直播间在线人数这个特征需要跨团队远程调用一次请求可能就要消耗10到20毫秒。做这个项目的时候我们把实时在线人数做成了本地缓存的定时快照每5秒更新一次这样既保证特征新鲜度又不至于每次都走远程调用。还有一个小细节出价决策和竞价模块之间会有一个时间差。从系统算完出价到真正参与竞价可能要经过几百毫秒的排队。如果直播间的实时人流特别大几百毫秒内流量水位已经变了按老出价可能就竞不到或买贵了。稳妥的做法是在竞价前做一个最终校准用当前队列长度乘以一个衰减系数微调出价不需要复杂单调函数就行。4.2 离线评估指标上线之前必须把离线评估做扎实。直播出价这个方向我建议重点看四个指标第一是基础价值分的排序能力和校准程度。这个决定系统能不能区分好流量和差流量是出价算法的地基。第二是成本达成率。给广告主设了一个目标CPA或者目标ROI系统实际跑下来能不能达成偏差控制在多少。第三是预算消耗平滑度。理想状态是预算在直播全程均匀花掉而不是开场半小时花完或者到最后还剩一半。第四是效果增益和基线方案对比ROI提升了多少、GMV增长了多少。说句实话前三个指标任何一个不过关都别急着上第四步。我见过太多团队离线模型AUC涨了一个点就兴奋得不行结果上线之后成本控制一塌糊涂。出价系统是一个控制问题排序准确性只是其中一个环节不是全部。4.3 A/B实验和灰度策略直播场景的A/B实验比普通广告难做因为直播间天然有马太效应——越多人进越热闹越热闹转化越好。如果你把流量分成两组实验组因为出价策略更好拿到了更多流量然后因为流量更多导致转化更好这到底是策略的功劳还是马太效应的功劳就分不清了。我的经验是实验分层要做两次第一次是直播间维度分层保证实验组和对照组的直播间质量基线一致第二次是流量维度分流同一场直播里把流量随机分成两组一组用新出价一组用老出价。这样能同时控制直播间差异和流量差异结果可信度会高很多。灰度策略上出一版新参数不要全量直接上先挑10%的直播间跑一天观察成本达成率和预算消耗曲线。如果成本达成率稳定在目标值的正负5%以内再扩大到30%没问题再全量。整个过程我一般是3到5天完成太快容易漏掉直播场次节奏变化带来的影响。4.4 调参清单与常见配置给出一份我根据论文方案落地时实际用过的初始配置可以直接抄作业然后根据自己的业务调整参数初始值调整方向特征数量16效果饱和后不再增加模型类型浅层GBDT深度6深度超过8收益变小且易过拟合归因窗口48小时视客单价提高可延长控制周期5分钟流量波动大可缩短到3分钟EMA平滑系数0.7信号噪声大时降到0.5单次步长限幅10%成本波动大时降到5%调节系数范围0.6 ~ 1.5预算充足可放宽到1.8模型更新频率每天一次大促期间改为每6小时一次这套配置在常规直播间里跑起来基本是稳的。大促期间需要额外注意流量会呈脉冲式上涨控制周期要缩短限幅要收紧不然系统很容易在一个流量高峰里把预算花完后面几个小时全在干瞪眼。5. 常见问题与排查技巧实录5.1 预算花不出去怎么查预算花不出去是反馈控制类出价系统最常见的毛病而且往往不是出价模块自己的问题是上游的问题。首先检查特征链路。如果实时在线人数、用户画像特征的拉取延迟突然变高模型会拿到一堆过期特征价值分偏低自然出价上不去。我踩过一个大坑某个状态特征的上游服务只保证99%的可用性但一旦不可用返回的是0而不是缺失值。0被当成一个正常值进入模型直播间在线人数变成0所有流量的价值分直接砍到膝盖预算整个花不出去。排查了很久才发现是上游脏数据的问题。处理方式很简单上游返回0时做一次均值填充或者直接把特征置为缺失让模型走默认分支。第二检查控制模块是否限幅卡死。调节系数如果长时间贴着下限0.6说明系统认为当前成本偏高或者ROI偏低在拼命压价。这时候要看是反馈信号出了问题还是真实效果出了问题。如果ROI统计模块里没有做延迟归因修正你今天看到的ROI是昨天的成交慢慢回传的结果实际上真实ROI可能是达标的系统却在错误地压价。这个问题在直播场景尤其常见我经常在周一早上被业务方拉群问为什么周末预算花不出去一看归因窗口全是延迟付款导致的误判。第三检查预算曲线。直播间流量存在明显的波峰波谷如果预算消耗要求是匀速但流量集中在晚上8点到10点系统可能在晚上才刚开始放量白天压得太狠到了黄金时间段反而因为前期错失流量导致整体预算消耗进度落后然后恶性循环。解决方案是分时段设定预算消耗节奏别用全天匀速去套一个天然有波峰的业务。5.2 成本抖动厉害怎么办成本抖动通常表现为某一分钟ROI极好下一分钟成本突然翻倍然后又恢复正常。首先要区分是竞价环境变化还是系统自身调节出了问题。竞价环境变化很好理解某个大主播开播把周围流量价格整体推高了你的出价不变但成交概率下降成本自然飙升。这种抖动不需要系统去压价因为流量供给高峰过去之后成本会自动回落。如果系统反应太敏感反而会在好流量来的时候退缩。系统自身的问题则要看调节步长是否太大。我调试时发现调节系数从1.0直接跳到0.8似乎只是20%的变化但在大流量场景下这个变化会改变大量候选的最终出价排序导致拿量曲线瞬间断崖。把单次调节步长从10%改到5%抖动幅度能降低一半以上。这里我的心得是宁可调节慢一点也不要让系统出现“急刹车”式的行为直播间的流量连续性比瞬时最优更重要。还有一类原因是统计窗口内的样本量太小。5分钟窗口在流量小的直播间可能只有几十次点击几十个样本的均值方差极大拿这个反馈去调出价就是不稳定的源头。解决方式是做一个自适应窗口当统计样本量低于某个阈值时不触发调节保持上一次的出价系数不变直到样本量攒够。5.3 冷启动直播间怎么处理新直播间没有历史GPM没有粉丝团数据模型只能看到类目平均值出价要么过低拿不到量要么过高花冤枉钱。我的做法是双轨制。冷启动直播间先不给它上完整版控制逻辑而是用类目同类直播间的经验参数做初始化并且把调节系数的取值范围缩窄一点比如0.8到1.2防止它因为缺乏历史数据而走极端。等它积累了20场以上的直播数据、模型对它的价值预估置信度上来之后再逐步放开调节范围。另外冷启动期间的归因窗口建议缩短到12小时。新直播间本身流量小如果归因窗口太长好的转化信号迟迟不回传系统很难在有限时间里做出有效调节。缩短归因窗口可以让反馈循环转得更快虽然单笔归因会粗一点但整体调节效率更高。这个思路也可以延伸到直播间生命周期的其他阶段成熟期用长窗口做精确归因冷启动期用短窗口做快速探索这是两个不同的策略目标不需要用同一套参数硬套。5.4 延迟转化下的校准偏差延迟转化是整个直播间出价里最隐蔽的坑。我用一个案例来说明某天系统预估某个流量能带来2元GMV并按ROI3计算出价0.67元。这个流量进入直播间后没有立刻下单但在5小时后买了500元的东西。如果系统在看点击后30分钟的效果这个流量被标记为“无效流量”价值分被压低如果看48小时窗口它其实是超高价值流量。校准偏差的直接影响是系统会低估“点击后流失但最终成交”的用户价值导致这类流量拿不到足够的出价逐步流失。这个问题在数据层面表现为实时ROI看起来很差但延迟修正后的ROI其实很好。业务方如果不懂延迟归因看到实时ROI差就催着调价越调越差。我的解决方案是做一个延迟转化修正模型用历史数据拟合延迟转化曲线然后对实时成交信号做加权。简单做法是按商品类目和价格带统计“点击后第几小时成交的概率分布”然后用这个分布去把已观察到部分成交的流量价值外推到完整归因窗口。这个修正不需要精确到每一个订单只要在统计层面把“实时看到的ROI”和“最终ROI”之间的差距拉平就行。5.5 问题排查速查表直接把我在真实项目里遇到过的问题整理成速查表方便大家遇到类似情况时快速定位现象可能原因排查方向预算花不出去且出价系数贴着下限反馈统计未做延迟归因修正检查ROI统计是否用了点击后48小时窗口预算花不出去且模型打分普遍偏低上游特征返回0或脏值检查特征数据源可用性和填充策略成本突然飙升后长时间不回稳调节步长过大导致系统过度反应降低单次步长限幅并加长EMA平滑冷启动直播间拿量不稳历史特征置信度低导致估值波动冷启缩窄调节系数范围并缩短归因窗口大促期间效果剧烈波动流量脉冲导致控制周期跟不上缩短控制周期并提高限幅约束系统离线AUC不错线上效果差校准偏差而非排序问题分桶看校准曲线检查期望GMV是否系统性偏离广告主反馈ROI达标但GMV不涨出价过低导致只拿到低竞争流量检查预算消耗平滑度适当放开最高出价限制这些坑没有一个是大模型才能解决的全是链路细节和统计口径的问题。但这正是工业级出价系统和实验室出价系统的分水岭。论文里讲的是算法框架真实落地时80%的精力都花在这些“看起来不起眼但影响巨大”的地方。最后再分享一个个人经验。做直播出价算法不要一开始就追求模型复杂性先把反馈闭环跑通哪怕用的是最简单的PID控制都能比固定出价带来显著提升。等闭环稳定了再逐步引入更精细的价值预估模型。这个顺序走下来业务方的信任建立了迭代速度反而更快。我自己在这个方向上最大的教训就是上线前没有做充分的异常数据检查结果一个上游脏数据让整个系统的调节逻辑整整错了一天。出价系统这种东西宁可慢一点上线也要把数据链路的稳定性做到极致。