CTR 预估深度解析:从逻辑回归到深度兴趣网络

本文系统梳理CTR预估从逻辑回归(LR)到深度兴趣网络(DIN)的技术演进路径,聚焦‘记忆与泛化’这一核心矛盾。涵盖问题定义(稀疏性、不均衡性、分布漂移)、浅层模型(FM隐向量与平方和技巧)、深度模型(Wide&Deep、DeepFM、DCN、DIN注意力机制)及工程关键点(特征穿越、GAUC评估、概率校准)。强调工业级落地中样本构建、特征编码、模型结构与线上一致性之间的深度协同。

0 · 导读:四个模块的逻辑链

CTR(Click-Through Rate,点击率)预估是推荐系统和广告系统的精排引擎:给定「用户 × 物品 × 上下文」,预测用户点击的概率。它是工业界落地最深、竞争最充分的机器学习问题之一——谷歌 2013 年的 LR+FTRL、Facebook 的 GBDT+LR、Google 的 Wide&Deep、阿里的 DIN/DIEN,每一代都对应着对问题本质的一次重新理解。按下面的链条读:

  1. 问题定义:CTR 预估在召回 → 粗排 → 精排 → 重排的四级流水线里处于哪一环;为什么它是概率估计问题而非排序问题;与教科书二分类的六个本质差异(稀疏、高维、不均衡、记忆/泛化、校准、偏置);AUC 为什么是主力指标、GAUC 和 logloss 各自补什么盲区。
  2. 特征与浅层模型:亿维 one-hot 怎么存(哈希技巧)、embedding 查表;LR 为什么「记得住却推不出」;FM 如何用 O(nk)O(nk)O(nk) 参数学全部二阶交叉,以及那个把 O(n2)O(n^2)O(n2) 化简到 O(nk)O(nk)O(nk) 的平方和技巧;FFM 的 field 思想;GBDT 自动造交叉特征。
  3. 深度 CTR:深度模型不是把浅层模型「换掉」,而是补上「泛化」这一半:embedding 共享(DeepFM)、显式高阶交叉(DCN)、候选物品感知的用户行为序列注意力(DIN)、兴趣演化(DIEN)。每代模型都对着上一代的具体病灶开刀。
  4. 工程实战:曝光日志怎么变成样本、延迟反馈怎么办、特征穿越(feature leakage)这个工业界第一大坑怎么检测、GAUC 怎么算、概率怎么校准、position bias 和 ESMM 的去偏思路;最后用 numpy 从零实现 LR 和 FM,在合成稀疏数据上对照。

一条贯穿全文的主线:CTR 预估的历史,就是「记忆」与「泛化」这对矛盾被不断重新平衡的历史。LR 强记忆弱泛化,FM 用隐向量让泛化第一次成为可能,DNN 把泛化推到极致,DIN 意识到「用户兴趣是序列、且与候选物品相关」,ESMM 意识到「样本空间本身有偏」。


1 · 问题定义:CTR 预估到底是什么

1.1 任务定义与系统位置

给定一条曝光日志里的四类信息——用户 uuu(画像、历史行为)、物品 aaa(广告/商品/内容属性)、上下文 ccc(时间、地点、设备、场景),CTR 预估输出

p=P^(y=1∣x=(u,a,c)),y=1[用户点击]p = \hat{P}(y = 1 \mid x = (u, a, c)), \qquad y = \mathbb{1}[\text{用户点击}]p=P^(y=1∣x=(u,a,c)),y=1[用户点击]

即「点击概率」。注意它是概率估计而不是「排序」——排序只需要序,而 CTR 的概率值有三个直接的下游消费者:

消费者 怎么用概率 对概率质量的要求
精排排序 按 ppp 降序展示 只要排序对(AUC 高)
广告出价 oCPM = 出价 ×\times× pCTR,平台按期望收入竞价 必须校准,虚高 2 倍 = 乱扣钱/乱分配流量
预算与流量控制 按预估消耗分配 quota、平滑投放 需要全局一致的概率尺度

CTR 预估在推荐/广告流水线中的位置:

全库物品 (百万~亿级)
   │  召回 recall:多路协同/向量检索/热门,快而粗,目标「别漏」
   ▼
候选集 (千级)
   │  粗排 pre-rank:轻量模型(双塔/LR)快速打分
   ▼
候选集 (百级)
   │  精排 rank:CTR 预估主战场,复杂模型,目标「排得准」
   ▼   ── 每个候选输出 pCTR ──┐
候选集 (几十个)              │
   │  重排 re-rank:多样性、新鲜度、疲劳打压、流量调控(业务规则层,不用 CTR)
   ▼
最终展示 (几个~十几个)

精排阶段每个候选都要过一遍完整模型,延迟预算毫秒级、候选数量几十到几百——这解释了为什么 CTR 模型都在「效果」与「算力」之间走钢丝(粗排用轻量版、精排才上 DIN 级模型)。

1.2 CTR 数据的三个物理事实

  1. 极度稀疏:用户 ID、物品 ID one-hot 之后是亿维向量,单个样本只激活几十维。谷歌 2013 年论文里十亿级特征、每样本激活约 30 维。稠密矩阵方法全部失效,一切都得为稀疏设计。
  2. 极端不均衡:信息流 CTR 约 1%–5%,广告展示 CTR 可低到 0.1%。「永远猜不点」的准确率 95%–99.9%——accuracy 彻底失效,主力指标是 AUC 与 logloss。
  3. 分布随时漂移:用户兴趣漂移、广告主预算周期、季节性活动。模型必须支持小时级/天级增量更新,在线学习(FTRL)曾是标配。

1.3 与教科书二分类的六个本质差异

维度 普通二分类 CTR 预估 后果
特征形态 几十~几千维稠密 亿维稀疏 one-hot + embedding 优化器、存储、 serving 全部特化
损失 交叉熵 交叉熵 + 校准约束 AUC 高但概率虚高会毁掉出价系统
核心矛盾 拟合 vs 过拟合 记忆 vs 泛化 诞生了 Wide&Deep 这一整条模型线
交互建模 视任务而定 必须自动化:手工交叉特征不可维护 FM → DCN 的全部动机
用户历史 常忽略 用户行为序列是最强特征 DIN/DIEN 序列建模
样本偏差 假设 i.i.d. position bias、选择偏置、延迟反馈 需要 PBM/ESMM/拒绝采样等去偏

1.4 评估体系:三个指标各补一个盲区

  • AUC:随机抽一个点击样本和一个未点击样本,模型给点击样本打分更高的概率。对阈值和单调变换免疫,衡量纯排序能力——CTR 的第一指标。
  • GAUC(Group AUC):先按用户分组算 AUC 再按曝光数加权平均。去掉「用户间点击倾向差异」这一与模型无关的方差:有的用户什么都点,AUC 被他抬高。GAUC 低而 AUC 高 = 模型在靠用户身份作弊。
  • logloss:−1n∑[yln⁡p+(1−y)ln⁡(1−p)]-\frac{1}{n}\sum[y\ln p + (1-y)\ln(1-p)]−n1​∑[ylnp+(1−y)ln(1−p)],同时惩罚排序错误和概率不准。AUC 0.9 但 logloss 0.6 的模型,排序好、概率虚。
  • 校准(calibration):把预测概率分箱,看箱内真实点击率是否等于平均预测值。出价系统上线前必检, Isotonic / 温度缩放是常用后处理(见 4.5)。

2 · 特征与浅层模型:从 LR 到 FM

2.1 特征体系与三种编码

特征类 例子 常见编码
用户侧 user_id、年龄、性别、城市、消费能力 one-hot(ID 类)/ 值域(统计类)
物品侧 ad_id、类目、店铺、创意 ID、落地页 one-hot + 多值 multi-hot(标签列表)
上下文侧 时段、星期、设备、网络、广告位 one-hot
交叉侧 user 类目偏好 × ad 类目、时段 × 类目 手工组合 / 模型自动(FM/DCN)
序列侧 最近点击的 100 个 item_id multi-hot + 序列权重

三种编码技术:

  1. one-hot:类别特征的标准编码。基数 10810^8108 的 ID 特征就是 10810^8108 维、每样本激活 1 维的向量——绝不用稠密矩阵存,用索引存激活位置。
  2. 哈希技巧(hashing trick):把原始 ID 用哈希函数 h:ID→{ 1,…,B}h: \text{ID} \to \{1,\dots,B\}h:ID→{ 1,…,B} 映射到固定 BBB 个桶,桶数开小就会碰撞(不同 ID 共享参数)。好处:无需维护词表、内存有上界、在线新增 ID 无感知。代价:碰撞引入噪声,BBB 是精度/内存的权衡。交互版 W1 拖动桶数,直方图实时显示空桶率与最大桶占用。
  3. embedding 查表:one-hot 的第 jjj 维不接一个权重 wjw_jwj​,而是查一张 V×kV \times kV×k 的表拿 kkk 维向量。V=108,k=8V=10^8, k=8V=108,k=8 时参数 8×1088\times10^88×108 但每样本只查一行——参数量与样本激活量解耦,这是深度 CTR 一切结构的基础。

2.2 LR:记忆的王者,泛化的瘸子

逻辑回归(本系列已有专篇)在 CTR 上的形式:

p=σ ⁣(w0+∑j=1Vwjxj)p = \sigma\!\left(w_0 + \sum_{j=1}^{V} w_j x_j\right)p=σ(w0​+j=1∑V​wj​xj​)

每个激活特征贡献一个独立权重。它的两个极端性质:

  • 记忆拉满:ad_id=12345 与 CTR 的关联被 w12345w_{12345}w12345​ 单独记住,训练充分的 ID 类特征效果极好;
  • 泛化为零:从没见过的新 ad(新 ID)或新组合,权重全零或先验值,模型无话可说。二阶交叉 user_cat×ad_cat\text{user\_cat} \times \text{ad\_cat}user_cat×ad_cat 靠手工拼特征,10410^4104 用户类目 × 10310^3103 广告类目 = 10710^7107 组合,大部分样本稀疏到学不动——手工交叉是不可维护的。

这就是 CTR 领域「记忆 vs 泛化」矛盾的最早形态。谷歌的答案是在线学习 FTRL-Proximal(稀疏特征也能高效更新),但没解决泛化。Facebook 2014 年用 GBDT 自动造交叉特征:GBDT 每个叶节点是一条组合规则,把样本落到叶节点的 one-hot 作为新特征喂给 LR——用树做自动特征工程,一时成为工业界标配,但树与 LR 两阶段割裂、树无法端到端学 embedding。

2.3 FM:用隐向量参数共享,O(n2)O(n^2)O(n2) 交叉只要 O(nk)O(nk)O(nk)

FM(Factorization Machines,Rendle 2010)在 LR 上加全部二阶交叉:

y^(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vi,vj⟩ xixj\hat{y}(x) = w_0 + \sum_{i=1}^{n} w_i x_i + \sum_{i=1}^{n}\sum_{j=i+1}^{n} \langle v_i, v_j \rangle\, x_i x_jy^​(x)=w0​+i=1∑n​wi​xi​+i=1∑n​j=i+1∑n​⟨vi​,vj​⟩xi​x

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reset2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值