2. 竞价参考价的数据来源与预处理

竞价参考价不是凭空算出来的一个数字,它来自广告系统在真实竞价过程中留下的多路数据。要得到可信的参考价,第一步不是建模,而是把“原料”找齐、认准、洗干净。本节围绕三类核心数据源展开:原始竞价数据、曝光与点击日志、出价记录,并给出可落地的清洗与字段对齐方法。

一、三类数据源各自承载什么信息

原始竞价数据是竞价请求与响应的快照,通常以请求级明细存在,一条记录对应一次广告请求。它包含请求时间、流量来源、设备与地域、广告位、参与竞价的候选广告、各自的出价、排序结果、最终胜出者与成交价等。它是计算参考价最直接的数据,因为“谁出了多少、谁赢了、按什么价成交”都在这里。

曝光与点击日志是竞价结果发生之后的用户行为记录。曝光日志说明某条广告是否真正展示、展示在什么位置、何时展示;点击日志记录用户是否点击、点击时间与归因信息。它们本身不含出价,但承担两个关键作用:一是校验竞价数据中的“胜出”是否真的转化为曝光,过滤掉胜出却未曝光的无效样本;二是为参考价提供质量维度,避免把大量无曝光、无点击的虚高竞价纳入统计。

出价记录是广告主侧或投放系统侧的出价配置与调整历史,包含广告计划、出价方式、出价金额、出价时间、调价操作人等。它回答的是“这个出价是什么时候、以什么方式设定的”,用于区分稳定出价与临时调价,避免把大促期间的短时高价误当作常态参考价。

三类数据的关系可以概括为:出价记录解释“出价从哪来”,原始竞价数据记录“出价如何参与竞争”,曝光点击日志验证“竞争结果是否真实发生”。三者缺一,参考价都会失真。
三类数据源 → 清洗 → 字段对齐 → 参考价样本 原始竞价数据 · 请求ID / 请求时间 · 候选广告与各自出价 · 排序结果 / 胜出者 · 成交价 / 计费方式 · 广告位 / 流量来源 曝光与点击日志 · 曝光ID / 曝光时间 · 展示位置 / 是否可见 · 点击ID / 点击时间 · 用户与设备标识 · 归因信息 出价记录 · 计划 / 单元 / 创意ID · 出价方式与出价金额 · 出价生效时间 · 调价操作与操作人 · 出价状态 数据清洗(四类问题) 去重 同请求重复上报 缺失处理 出价/时间字段为空 异常值 负出价/极端高价 时间对齐 时区/格式统一 字段对齐:以 request_id 为主键,关联曝光/点击/出价 统一广告标识、时间窗口、金额单位与出价口径 输出:可用于参考价计算的干净样本表

二、数据清洗:先解决“脏”,再谈“准”

真实日志几乎不可能直接可用。常见问题集中在四类,处理顺序建议先去重、再补缺、再剔异常、最后统一时间。

去重。竞价请求可能因重试、多节点上报而重复出现。判断依据是请求唯一标识(如 request_id)加时间戳。若同一 request_id 在极短窗口内出现多条记录,保留字段最完整的一条,其余标记为重复。曝光日志同理,同一曝光ID重复上报会导致曝光量虚高,进而影响样本权重。

缺失处理。出价金额为空、胜出者标识为空、曝光时间缺失是三类高频缺失。处理原则不是一律删除:出价为空但胜出标识完整的记录,可保留用于统计竞争格局,但不参与价格计算;曝光时间缺失的记录无法判断是否真实曝光,应剔除或单独标记。缺失率超过阈值的字段(例如某广告位出价缺失率超过30%)要单独排查采集链路,而不是简单填充。

异常值。负出价、明显超出业务上限的出价(例如正常出价在0.5~5元,却出现9999元)、成交价高于最高出价的记录,都属于逻辑矛盾。异常值应先标记再判断:少量孤立异常可直接剔除;成批出现往往意味着单位错误(分与元混用)或字段错位,需要回到采集端修正,而不是在计算层硬压。

时间对齐。竞价、曝光、点击、出价四路数据可能来自不同系统,时区与时间格式不一致是字段对齐失败的主要原因。统一做法是全部转换为同一时区(如东八区)的毫秒时间戳,并明确“竞价时间”与“曝光时间”的先后关系:曝光时间应不早于竞价时间,否则该样本的关联关系可疑。

三、字段对齐:让四路数据能“对上话”

字段对齐的核心是确定关联主键与关联粒度。推荐以 request_id 作为竞价与曝光的主关联键,以曝光ID关联点击,以广告标识加时间窗口关联出价记录。具体要统一四件事:

  • 广告标识统一:竞价数据里可能是创意ID,出价记录里是单元ID,需要建立映射表,把粒度统一到同一层级(通常统一到广告单元或创意)。
  • 金额单位统一:出价记录常以元存储,竞价数据可能以分存储,统一换算为元并保留两位小数,避免量级错误。
  • 出价口径统一:区分 CPC 出价、CPM 出价与 oCPC 目标出价,不同口径不能直接混算参考价,需按计费方式分组。
  • 时间窗口统一:出价记录是“生效区间”而非单点,关联时应取竞价时刻所处的那条生效出价,而不是简单取最近一条。

四、一个可执行的预处理示例

假设某广告位一天有 120 万条竞价请求,曝光日志 38 万条,点击日志 1.2 万条,出价记录 600 条。按上述流程处理后,可得到如下统计口径(示例数据,用于说明方法):

处理环节处理前处理后主要动作
竞价请求去重120.0 万112.6 万按 request_id 去重
剔除出价缺失112.6 万108.9 万出价为空不参与价格计算
剔除逻辑异常108.9 万108.2 万负出价、成交价高于最高出价
关联曝光成功108.2 万35.4 万request_id 关联曝光日志
关联出价记录35.4 万34.7 万按生效区间匹配出价

最终 34.7 万条记录构成参考价计算的基础样本。可以看到,从 120 万到 34.7 万的收缩主要发生在“关联曝光成功”这一步,这不是数据丢失,而是把“参与竞价但未真正展示”的请求排除在价格统计之外——参考价描述的是真实成交环境,而不是纸面竞价。

常见误区:为了保留样本量而放宽曝光关联条件,把未曝光请求也纳入参考价。这会让参考价被大量未成交的高出价拉高,后续出价策略会系统性偏高。宁可样本少而干净,不要多而失真。

五、预处理完成后的验收标准

一套预处理是否合格,可以用四个可检查的指标判断:主键唯一性(request_id 无重复)、关键字段完整率(出价、胜出标识、曝光时间完整率均高于设定阈值)、关联成功率(曝光关联率与出价关联率在合理区间)、口径一致性(金额单位、计费方式、时区全部统一)。四项通过后,样本表才可进入参考价计算环节;任何一项不通过,都应回到对应环节修正,而不是带着问题往下算。

把数据源认全、把脏数据洗净、把字段对齐,参考价的计算才有可靠的地基。后续的统计口径选择与虚拟匹配量计算,都建立在这张干净样本表之上。