Bid2X:用基础模型建模竞价环境,让出价策略告别翻车

发布时间:2026/10/23 5:17:34
Bid2X:用基础模型建模竞价环境,让出价策略告别翻车 做竞价广告的人最怕的其实不是输不起而是模型拍脑袋。离线调好的出价策略一上真实流量就翻车这种事我经历过不止一次。后来我发现问题通常不在“出价”这个动作而在我们对“环境”的理解太简陋。最近在 KDD 2025 上看到的 Bid2X恰好就是在补这块短板它把广告竞价环境当成一个需要被基础模型理解、刻画和预测的对象而不是简单地把点击率、转化率乘一下再乘个系数。这篇文章我想顺着 Bid2X 的思路把它背后的动机、建模细节和落地风险拆开聊一聊顺便给想试的同学一点可操作的建议。1. 竞价广告里的“环境”到底是什么一个被大多数模型忽略的变量1.1 你以为你建的是出价模型其实你建的是环境快照很多广告系统里的出价模块表面上是“出价模型”本质上却是一个“环境快照”。什么意思以最常见的 CPC 竞价为例传统做法是先预测点击率 pCTR再预测转化率 pCVR然后用 pCTR × pCVR 算出预估价值再结合一个目标 ROI 或成本约束得到最终出价。这套链路我做过很多次它非常成熟也非常有效。但它有一个隐含假设竞价环境是稳定的或者至少环境变化可以被一个后验校正模块吸收。现实显然不是这样。一次广告请求进入拍卖系统时系统面对的是当前用户、当前媒体位、当前流量类型、同一轮竞价里其他广告主是谁、他们的预算还剩多少、他们今天的 pacing 策略是什么、平台有没有设置最低出价、流量本身是否处于高峰低谷等。这些东西不是一个固定值而是时刻在变的“环境状态”。你把 pCTR 和 pCVR 乘出一个预期价值这只是竞价输入中的一部分。最终能不能赢得这次拍卖、付出什么价格、转化是否能发生很大程度上取决于竞争环境。传统模型不是不知道这一点而是处理方式比较粗糙要么加一个 market price 特征要么在最后出价上加一个扰动项。说白了大家更愿意把环境当作噪音而不是当作核心建模对象。1.2 环境漂移、竞争反馈和流量结构变化如果环境真的只是白噪音那“把环境当噪音”也够用。问题在于竞价环境不仅会漂移还会因为你的行为而改变。流量结构会随着用户作息变化广告主会在一天内调整预算新的广告计划可能突然大量投放某个素材爆了以后同一类广告主还会跟进加价。更麻烦的是这中间存在反馈回路如果你的出价在整个拍卖里持续偏高平台内部的竞价分布会随之变化竞争对手的胜率也在变化。反过来你又会根据最近几条成交记录更新自己的价值预估于是模型开始自我强化。这种“模型与环境的共同演化”是离线评估最难模拟的部分。你在历史日志里看到的竞价分布是当时所有参与者的集体行为结果。等你把新模型部署上去出价分布变了新一轮的 auction state 也跟着变。很多团队说“离线效果不错、线上没效果”根子就在这里离线模型根本没有真正建模环境只是把环境当成了静态特征。Bid2X 的出发点恰恰就是否认这种静态化处理。1.3 为什么偏要用“基础模型视角”既然环境重要为什么偏偏要拉一个基础模型进来不是因为它名字响亮而是因为竞价环境有几个特点戳中了基础模型的优势区。第一是序列性。竞价系统本质上是一个不断发生的事件序列每次请求、每次竞价、每次成交/未成交都按时间排列。基础模型对序列建模非常自然无论是 transformer 结构还是上下文注意力它天生就能吃不定长的历史事件流。第二是上下文依赖。同一批流量在不同预算消耗阶段、不同竞争烈度下最优出价可能完全不同。基础模型的一个核心能力就是 in-context learning它不需要每次都对全部权重做大规模更新只需要把最近一段“环境上下文”拼进输入就能在推理时快速适应新状态。第三是长尾泛化。广告系统里最不缺的就是长尾新广告主、新素材、新行业、新流量位。传统 DNN 面对没有历史统计的新 ID 时几乎无能为力。基础模型由于在大量通用文本/数据上做过预训练对“行业是什么”“素材大概什么人群看”“什么价格大概处于什么水平”这类常识有一定的迁移能力这刚好可以缓解冷启动问题。当然用基础模型不是没有代价。它推理成本高、在线延迟敏感、部署复杂。所以 Bid2X 这类工作真正想回答的不是“基础模型能不能用于广告”而是“在广告系统中基础模型放在哪一层性价比最高”。论文给出的答案不是直接让大模型去叫价而是让它专注做环境建模。2. Bid2X 的核心命题不预测“该出多少钱”而是预测“下一个环境长什么样”2.1 X 不是一个价格而是环境状态Bid2X 这个名字很有意思。Bid 是出价2 是 toX 是未知数。按我自己的理解它想表达的命题是出价动作只是手段真正的挑战在于未知的竞价结果。而竞价结果由环境决定所以与其直接猜 X 等于多少不如先建模那个生成 X 的环境。传统价值模型回答的问题是这条流量对我值多少钱Bid2X 更多回答的问题是这条流量在接下来的市场上会遇到什么样的竞争会不会有一群广告主同时在抢最终成交价大概落在哪个区间我的预算节奏还能不能支持我继续抢这种流量这些问题都属于环境建模范畴。所以 X 不是一个单纯价格它至少包含三层信息一是拍卖层面的 outcome比如赢还是输、成交价多少二是供给层面的背景比如当前流量位、时段、用户状态三是策略层面的状态比如本方预算消耗、连续失败次数、目标成本控制压力。Bid2X 想用一个统一的基础模型结构把这三层信息编码成可以被下游决策使用的环境表征。2.2 与传统 pCTR × pCVR × 系数出价的关系有人可能会问如果 Bid2X 不输出出价那它和现有链路怎么衔接我的理解是它不替代 pCTR/pCVR 预估而是替代掉“拍脑袋决定竞价格局”的那一层。传统出价的基本形式是出价 预估价值 × 目标系数这里的预估价值通常来自 CTR/CVR 模型目标系数则用于控制 ROI、成本或预算。这套公式最脆弱的地方在于目标系数是一个全局常量它没有考虑当前竞争环境。比如某个事件在凌晨预估价值为 0.5在晚高峰预估价值也是 0.5但晚高峰的成交价可能是凌晨的三倍。固定系数会让你在高竞争时段大量丢失流量在低竞争时段又过度出价。Bid2X 的做法倾向于把上式改写成出价 预估价值 × 环境因子其中环境因子不是常量而是由环境模型根据当前竞拍上下文动态生成。它可能是期望成交价的倒数可能是市场价格的某个分位数也可能是一个策略网络在给定环境表征后输出的动作。这样一来出价模型就从“静态价值 静态系数”变成了“静态价值 动态环境感知”。这也是我认为 Bid2X 对产业界最直接的启发不需要推翻整套预估体系只需要在出价链路里插入一个环境建模模块。2.3 基础模型如何提供“环境上下文”基础模型在 Bid2X 中扮演的角色不是决策者而是编码器。它会接收一段与当前拍卖相关的历史环境信息比如最近 N 次竞价的特征序列、成交价、失败价、竞争激烈程度、预算消耗状态然后输出一个向量化表示或者直接输出对未来竞价结果的分布预测。这里有一个关键设计理念把竞价环境建模成一个“可被语言化/符号化描述的上下文”而不是塞进一个统一长度的稠密特征向量。例如可以把历史竞价事件写成“时间 流量类型 竞争级别 成交价区间 本方状态”的离散序列再交给基础模型做自回归或编码处理。这样做的最大好处是基础模型在预训练阶段学到的自然语言/符号序列能力可以被迁移到竞价场景中。当然广告系统里不可能每毫秒都让一个超大模型跑一遍。Bid2X 的工程取舍大概率是把基础模型拆成两个阶段一个离线/异步阶段负责建立环境表征和长期记忆一个在线阶段只做轻量推理。这种设计在真实系统里非常必要因为线上竞价对延迟极其敏感你不可能在 RTB 请求链路里塞一个动辄几十亿参数的前向过程。3. 从数据到训练Bid2X 环境建模的设计细节3.1 历史竞价记录如何序列化想要把一个广告竞价环境“喂”给基础模型第一步就是序列化。日志里的每一条竞价记录核心字段无非是请求 ID、时间戳、广告位、用户特征、素材特征、出价、最终结果是否展示、是否点击、是否转化、成交价或失败价。传统模型会把这些字段加工成特征表而基础模型希望看到的是更结构化的 token 序列。我做一个不算严谨但很贴切的类比传统模型像把一场球赛的录像压缩成几个统计数字比如控球率、射门次数基础模型更像保留一小段比赛剪辑它知道第几分钟发生了什么、当时比分是多少、球员站位是什么。在广告场景里历史事件的顺序很重要。比如“连续输了二十次”和“二十次里有输有赢”对未来竞价环境的含义完全不同。实操上我会建议把连续特征做分桶离散化例如成交价按区间分成 64 或 128 个桶时段时间粒度按小时划分竞争指数按高/中/低划分。然后把这些离散值映射成 ID token组成不定长序列。基础模型在自注意力层直接学习这些 token 之间的依赖关系。需要注意分桶边界在训练和线上必须完全一致否则模型很容易学到虚假的时间跳跃特征。3.2 标签、损失函数与样本权重环境建模不是一个单一任务而是多任务学习。至少有几个标签可以用一是胜负标签。每条参与竞价的请求最终是否赢得展示这是一个非常明确的二分类目标。它能帮助模型理解“当前环境下的竞争力”。二是成交价标签。如果赢了我们可以观察到实际的第二价格或最终清价格如果输了通常只知道“成交价高于我的出价”这是一个删失信息。这类标签很典型不能用普通回归直接处理应该用删失回归或分位数损失。很多团队在建 market price 模型时都忽略了“输掉的样本同样藏着价格信息”这一点 Bid2X 这类环境建模一定会重点处理。三是转化标签。虽然转化不完全由环境决定但它能为环境模型提供“流量质量”这一维度的上下文。同一个竞价结果如果后续转化好说明当前环境可能存在流量质量与竞争程度错配的机会。损失函数层面比较自然的做法是胜负用二分类交叉熵成交价用有序回归或分桶分类损失再加上一个校准损失来约束输出分位数。样本权重也需要单独设计因为广告竞价日志天然不平衡低价流量数量巨大高价竞争流量虽然少但价值高。如果按数量均匀抽样模型会被大量边缘流量带偏。建议按竞价金额或预估价值对样本加权让模型把容量花在真正影响预算的流量上。3.3 与 RL 组合环境模型当模拟器还是当裁判Bid2X 把环境建模做好之后上游决策模块自然可以接强化学习。这里有两种用法我觉得都有价值。第一种是拿环境模型当模拟器。既然模型能预测未来的市场状态和竞价结果我们就可以让策略模型在一个模拟环境里做离线试错如果我提高出价下一轮竞价格局会怎么样预算会更快耗尽吗这比直接在线探索要安全得多。很多做自动出价的团队不是不想用 RL而是怕在线探索伤预算、伤 ROI。环境模型能提供一条安全得多的路径。第二种是拿环境模型当裁判。RL 的策略模型输出动作后环境模型可以给出预估的成交概率和价格分布帮助评估动作合理性。这有点像一个 value baseline如果策略模型的 Q 值与环境模型的预估差异很大说明策略可能在过度依赖某个过时记忆。我以前对“环境建模 RL”的组合一直持保留态度因为环境模型本身有误差误差喂给 RL 以后容易被放大。Bid2X 给出的思路比较稳健环境模型不要输出单一确定值而是输出分布或分位数这样决策模块还能保留对不确定性的感知。4. 真正难的不是训练是让环境模型上线后不“变形”4.1 离线评估你的验证集和线上环境根本不是一回事离线训练环境模型最容易被测试集骗。因为测试集来自历史日志而你未来的线上环境是同一批策略实盘之后产生的新数据。Bid2X 这类模型尤其危险它自己输出的价格分布会影响出价从而改变未来日志再用未来日志评估它自己这就产生了闭环偏差。我在自己的模拟实验里踩过这个坑。第一次做环境模型回测时我用随机策略的日志训练再用随机策略的日志验证指标很好。一旦用新策略上线模型预测的成交价格分布立刻偏了因为新策略的出价水平显著提高导致我看到的竞争样本结构完全不同。这个现象非常经典本质上是 logging policy 与 target policy 不一致。缓解办法通常有三个第一在线下回测时引入重要性采样或反事实评估给每条日志赋予一个“如果由新策略生成它出现的概率”做权重第二做影子模式让新策略在线上跟老策略并行一段时间只记录不干预攒下真正来自新策略分布的数据第三在环境模型的输入里显式加入“策略标识”让模型知道当前出价是哪个策略产生的从而有条件地学习。对了还有一种看似取巧但很实用的评估方式把环境模型的预测结果交给业务方做盲评。比如同时展示模型预估的成交价区间和历史真实成交价让投放运营判断哪个更符合直觉。虽然听起来不科学但能很快暴露出模型在哪些流量上完全失真。4.2 校准与出价映射从分布到真实报价基础模型输出的分位数分布不能直接当作最终出价。比如模型预测当前流量的清价格 80% 分位数是 1.5 元那你出 1.5 元就能赢下 80%不见得。这里至少有两层误差第一层是模型本身校准不好80% 分位数可能实际只对应 70%第二层是市场存在策略噪声即使统计上成立单次拍卖里也未必稳定。所以从 Bid2X 输出到真实 bid amount 之间必须加一层校准与映射。常规做法是温度缩放或等温回归用最近一周的真实成交数据把预测分位数映射到经验分位数。这个映射需要在线更新最好每分钟或每小时做一次避免进入一个新的流量时段后校准失效。还有一点容易被忽略出价本身要符合平台规则。有些平台对最低出价、出价整数比、频控、预算消耗速度都有约束。你在基础模型输出上乘一个系数很容易但要保证最终报价是合规的、可解释的、稳定上下线的就需要额外工程。我建议把环境模型设计成输出“相对市场位置的指示量”而不是绝对报价然后由一个规则层负责最终的合法出价生成。4.3 冷启动和长尾基础模型如何避免“一本正经胡说八道”基础模型在广告竞价里有一个天然风险它会记住预训练阶段的一些先验在新场景里强行推断输出看起来合理但实际上没有数据支持的预测。比如一个新广告主第一次投放它的行业是“游戏”模型可能基于常识认为游戏流量竞争激烈、成交价偏高于是给出一个很高的价格分位数。如果这个判断错了就会让广告主花冤枉钱。应对办法有两个方向。一是给基础模型增加显式的不确定性输出对低支持度输入输出更宽的分位数区间而不是假装很确定。二是在部署上设硬约束冷启动阶段用保守策略出低价积累到足够样本后逐步切换到模型主导。毕竟广告系统里环境建模模型不是拿来赌一把的而是在风险可控条件下提升决策效率的。这也引出一个工程经验基础模型在广告系统里最忌讳“全知全能”。一定要给它设计一个“我不知道”的通道。我在搭建环境模型时会在输入里加一个 coverage 特征表示当前请求类型的样本覆盖度。覆盖度低的时候系统自动降低环境模型输出的权重回退到传统规则出价。这个简单的 gate 比任何花哨的正则化都管用。5. 什么样的系统值得引入 Bid2X我的选型判断5.1 值得做的三类场景不是所有广告系统都需要立刻上基础模型环境建模。我建议优先关注三类场景。第一类是竞价环境高度非平稳的场景。典型是信息流广告、激励视频、开屏广告价格随流量高峰、素材爆量、节假日剧烈波动。环境建模在这里收益最大因为固定系数出价根本跟不上这种波动。第二类是冷启动和长尾广告主占比较高的场景。如果你平台上大量广告计划生命周期只有几天历史数据稀疏传统模型很难单独为它们建模。Bid2X 的外推能力和上下文泛化能力能填补一部分空白。第三类是涉及复杂拍卖机制或预算约束的场景。比如多目标成本控制、预算平滑、多广告位联合出价。这里的优化空间在于跨请求分配预算而不是单条请求出价。环境模型对未来一段时间内竞争烈度的判断恰好为这种跨请求决策提供了必要信息。5.2 可以先不动的场景如果你的场景搜索广告为主竞价环境相对稳定关键词、广告位、竞对结构变化不剧烈那么传统模型加上一套不错的校准模块已经能拿到大部分收益。引入基础模型的高昂成本和延迟风险可能比收益更突出。同理如果广告系统的流量规模很小、每天几千次请求基础模型谈不上海量上下文积累优势很难发挥。小规模系统更适合先用一个轻量的 LSTM 或 transformer encoder 尝试环境建模没必要直接上“基础模型”级别的架构。我在很多场合都建议团队先解决环境建模的有无问题再考虑是不是基础模型。5.3 从 0 到 1 的最小验证路径如果真的想复制 Bid2X 的思路我建议走一条小步快跑的路径不要一上来就做一个完整的大系统。第一步先定义环境建模任务。挑一个最痛的目标比如“预测未来 N 次请求中成交价超过当前出价的比例”。这一步不追求复杂先把问题量化。第二步做一个轻量环境模型。可以先用一个简单的 transformer encoder输入最近 20 条竞价序列输出下一轮的成交价分布。很多情况下这个轻量模型已经能带来显著收益不必一开始就上几十亿参数。第三步做影子评估。让新模型和老策略并行跑两周只记录“如果按环境模型建议的出价结果会怎样”观察胜率、成本、ROI 变化。第四步再考虑把模型输出接入线上出价链路先小流量再逐步扩量。扩量过程中盯紧预算消耗速度和校准曲线这两个指标通常比 CTR 或 CVR 更能反映环境模型是否失效。我和团队在一次模拟项目里就是按这个路径来做的踩过不少坑之后才意识到环境建模的价值不能只看单次拍卖的准确率更要看它是否让整个预算分配结构变得更合理。Bid2X 对我来说最大的启发不是某个网络结构有多惊艳而是它把“环境”从配角提到了主角的位置。最后再分享一个小技巧如果你暂时上不了基础模型可以先做一个很简单的环境因子——当前小时的历史成交价中位数。把它乘进传统出价公式往往就能追回不少因为环境波动造成的损失。这个小动作我试过很多次在流量波动明显的场景里效果经常出乎意料。等这套机制跑顺了再逐步引入 Bid2X 式的序列环境模型路径会稳很多。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询