广告 CTR 预估:从特征工程到深度模型

FreeGuideOnline 最新 2026-06-24

什么是广告点击率预估

广告点击率预估(Click-Through Rate Prediction)是计算广告系统中一项核心技术。它的任务是:给定一条广告、一位用户和当前上下文场景,预测这位用户会点击这条广告的概率。

毫不夸张地说,CTR 预估的精度直接影响着数十亿级别的广告收入。哪怕只提升 0.1% 的预估准确率,放到海量流量中都会带来巨大的收益变化。因此工业界和学术界在这个问题上投入了大量精力,模型从传统逻辑回归一路演进到复杂的深度神经网络。

本文将从特征工程的基础思路出发,逐步深入到经典的深度模型设计,带你建立一套完整的广告 CTR 预估认知体系。

特征工程:CTR 预估的基石

在任何机器学习任务中,特征工程都占据着关键位置,CTR 预估更是如此。原始数据无法直接输入模型,必须转换为数值化的特征表示。这一过程决定了模型能捕获到的信息上限。

原始数据长什么样

一个典型的广告点击日志通常包含三类信息:

  • 用户特征:用户 ID、性别、年龄、兴趣标签、历史行为序列等。
  • 广告特征:广告 ID、广告主 ID、创意素材 ID、广告类目、落地页类型等。
  • 上下文特征:设备类型、操作系统、网络环境、请求时间、广告位 ID、页面主题等。

这些字段大多是类别型(categorical)变量,且取值空间极为庞大。例如用户 ID 可能有数亿级别,直接使用是行不通的。

特征编码的经典方法

独热编码与稀疏特征

最早的 CTR 模型大多基于逻辑回归(Logistic Regression),输入特征需要用独热编码(One-Hot Encoding)进行二值化。

假设有一个特征“用户所在城市”,可能取值包括北京、上海、广州等。独热编码会为每个城市生成一个独立的二值特征。若有 500 个城市,就会变成一个 500 维的向量,且只有用户所在城市对应的维度为 1,其余全为 0。

这种表示极其稀疏,但当时通过与高度优化的线性模型(如 FTRL)结合,能够处理万亿级别的特征规模。缺点也很明显:完全无法捕捉特征之间的关联。

特征交叉:让特征产生化学反应

捕捉特征间的交互效应是 CTR 预估的核心挑战之一。比如“用户年龄=20”与“广告类目=游戏”同时出现,点击率可能远高于单独出现时的概率。这种效应无法用独立特征简单相加来建模。

早期工程师通过手工构造交叉特征来部分解决这个问题,比如生成“年龄-性别”组合特征。但人工组合不仅费时费力,且很难枚举所有可能的有效交叉。后来模型开始自动学习特征交叉,这正是深度学习介入的重要动机。

嵌入表示:从高维稀疏到低维稠密

深度学习模型不能直接消化巨大维度的稀疏特征,嵌入(Embedding)技术应运而生。它的思想是:为每个类别值学习一个低维稠密向量(比如 8 到 256 维)。

例如用户 ID=123456 会被映射成一个向量 [0.12, -0.45, 0.78, ...]。这个向量通过模型训练不断调整,使得相似行为模式的用户,其向量距离更近。嵌入不仅是降维手段,更在语义层面上编码了实体间的潜在关系。

深度模型演进:从浅层交叉到复杂交互

有了嵌入技术,神经网络可以直接接收稠密向量作为输入,并自动学习高阶特征交互。下面按照发展路径,介绍几个里程碑式的模型。

Wide & Deep:记忆与泛化的平衡

Google 在 2016 年提出的 Wide & Deep 模型,将浅层记忆和深层泛化结合在了一起。

  • Wide 部分:一个广义线性模型,直接使用原始稀疏特征和人工构造的交叉特征。擅长“记忆”历史中出现过的强关联模式,比如某个特定组合总是被点击。
  • Deep 部分:一个前馈神经网络,输入是嵌入向量,经过多层全连接隐层。擅长“泛化”到历史数据中未出现或少出现的组合。

最终预测值由两者加权求和后通过 sigmoid 函数得到。Wide & Deep 简单直观,至今仍在许多业务中作为基线模型。

DeepFM:让因子分解机融入神经网络

DeepFM 延续了 Wide & Deep 的并联结构,但将 Wide 部分替换为因子分解机(FM,Factorization Machine)。

FM 能够自动对所有特征进行二阶交叉建模,且通过巧妙的数学化简,在常数时间复杂度内完成计算。特征 i 和特征 j 的交叉权重被分解为它们嵌入向量的内积。

DeepFM 的架构中,FM 组件和 Deep 组件共享底层的嵌入向量输入,端到端联合训练。这样做既保留了 FM 强大的低阶交叉能力,又引入了 DNN 的高阶非线性建模能力,不再依赖人工设计交叉特征。

DCN 系列:显式的高阶特征交叉

无论是 Wide & Deep 还是 DeepFM,其 DNN 部分捕获高阶交叉的方式都是隐式的(逐层非线性变换),但到底交叉到了几阶、交叉得是否充分,都是黑盒。

Deep & Cross Network (DCN) 引入了 Cross Network 结构,专门用于显式地学习有限阶的特征交叉。Cross Network 的每一层计算公式为:

x_{l+1} = x_0 * (x_l^T * w_l) + b_l + x_l

其中 x_0 是初始输入(所有嵌入向量的拼接),x_l 是第 l 层的输出。这种形式保证了第 l 层包含了从 1 阶到 l+1 阶的所有交叉项,并且参数量只随层数线性增长。

后续 DCN-V2 进一步将交叉权重从向量升级为矩阵,提升了表达能力。

DIN:从兴趣表征到注意力机制

前面几个模型都假设用户兴趣是静态的,但真实场景中,用户的兴趣会随着当前看到的广告而动态变化。比如一个用户平时喜欢体育和游戏,当出现一件近期浏览过的运动鞋广告时,其运动相关的兴趣应当被激活,其他兴趣被抑制。

阿里巴巴提出的 Deep Interest Network (DIN) 引入了注意力机制来建模这种动态兴趣。它为每个候选广告计算与用户历史行为序列中每个项目的相关度权重,然后加权求和得到用户的当前兴趣向量。

具体做法是:用户历史行为序列是一系列商品 ID 的嵌入向量。对于候选广告,使用一个注意力单元(小型 MLP),输入候选广告嵌入与每个历史行为嵌入,输出注意力分数。最终用户表征是所有历史行为的加权和。这个动态的用户向量再与候选广告向量等拼接,输入后端 MLP 做最终预估。

DIN 的设计让模型拥有了“千物千面”的用户理解能力。

DIEN:兴趣演化建模

DIEN (Deep Interest Evolution Network) 在 DIN 的基础上更进一步,不仅考虑兴趣的注意力加权,还考虑兴趣随时间演化的过程。

DIEN 使用两层 GRU 结构:

  1. 兴趣提取层:用 GRU 根据行为序列学习每一步兴趣状态的隐表示,并用一个辅助损失函数监督兴趣提取的质量(即从隐状态能否反推出下一个行为)。
  2. 兴趣演化层:使用带注意力修正的 GRU(AUGRU),让候选广告的影响参与到兴趣序列的演化过程中,使得与候选广告更相关的兴趣演化步骤被增强,无关的被减弱。

这样整个用户兴趣序列不是简单的加权平均,而是一个有逻辑的演化轨迹,极大地提升了模型对长期复杂行为模式的理解。

训练技巧与工程实践

好的模型需要配好的训练方法和工程支撑,下面对常见的配套技术略作说明。

数据并行与模型并行

工业级 CTR 模型参数量通常在百亿级别,必须进行分布式训练。数据并行将样本分割到多张 GPU 上,每张卡存有完整模型副本;模型并行则将模型参数切分到不同设备。通常采用参数服务器架构高效完成嵌入层的分布式存储和更新。

在线学习与实时更新

CTR 预估对数据时效性要求极高,因为用户兴趣分布和广告库存都在持续变化。常用方案是流式训练:日志经实时流(如 Kafka)送入模型,进行增量更新,分钟级推送到线上推理服务。

负采样与样本纠偏

面对极端的正负样本不平衡(点击率通常 1%~10%),简单随机丢弃负样本会改变数据分布,导致预估有偏。实践中采用流式负采样配合纠偏函数,或直接通过加权损失函数处理。

特征频率控制与正则化

对于 Log 级别的稀疏特征,低频特征容易过拟合,高频特征参数可能欠更新。采用自适应学习率算法(如 Adam、Adagrad),并对不同频次的特征施加差异化的正则化系数是常见策略。

评估指标

CTR 模型的离线评估常同时看以下几类指标:

  • AUC(Area Under ROC Curve):衡量模型对正负样本的排序能力。工业界最核心的离线指标。
  • LogLoss(对数损失):更关注预测概率的准确度,受校准度影响。
  • GAUC(Group AUC):按用户或广告位分组计算 AUC 再平均,更贴合广告展示场景的评价方式,因为广告排序经常在同一用户请求内相对比较。

线上则直接看 A/B 测试下点击量、收入(eCPM)等业务指标的变化。

总结与学习路径建议

广告 CTR 预估是一个同时考验特征工程、模型理解和系统工程的综合领域。对于初学者,建议学习路径如下:

  1. 先彻底理解 LR + 稀疏特征的工作方式,跑通一个小规模数据集(如 Criteo 公开数据集)
  2. 尝试实现一个简单的 FM 和 DeepFM,感受 embedding 和自动特征交叉
  3. 复现 DIN,理解注意力机制如何作用于用户行为序列
  4. 阅读 DCN 系列论文,了解显式交叉的设计
  5. 有资源时可以尝试工业级解决方案,关注分布式训练与在线更新

只有经过从浅层记忆到深层泛化、从静态表征到动态兴趣的完整认知过程,才能真正掌握广告 CTR 预估这个现代推荐系统的关键环节。