# 背景介绍
CTR(Click-through rate) 是用来表示用户点击一个特定链接的概率,
通常被用来衡量一个在线广告系统的有效性。
当有多个广告位时,CTR 预估一般会作为排序的基准。
比如在百度的搜索广告系统,当用户输入一个带商业价值的搜索词(query)时,系统大体上会执行下列步骤:
1. 召回满足 query 的广告集合
2. 业务规则和相关性过滤
3. 根据拍卖机制和 CTR 排序
4. 展出
可以看到,CTR 在最终排序中起到了很重要的作用。
在业内,CTR 模型经历了如下的发展阶段:
- Logistic Regression(LR) + 特征工程
- LR + DNN 特征
- DNN + 特征工程
在发展早期是 LR 一统天下,但最近 DNN 模型由于其强大的学习能力和逐渐成熟的性能优化,
逐渐地接过 CTR 预估任务的大旗。
## LR vs DNN
下图展示了 LR 和一个 \(3x2\) 的 NN 模型的结构:
![img](背景介绍/LR vs DNN_2017-05-22_10-09-02.jpg)
LR 部分和蓝色箭头部分可以直接类比到 NN 中的结构,可以看到 LR 和 NN 有一些共通之处(比如权重累加),
但前者的模型复杂度在相同输入维度下比后者可能第很多(从某方面讲,模型越复杂,越有潜力学习到更复杂的信息)。
如果 LR 要达到匹敌 NN 的学习能力,必须增加输入的维度,也就是增加特征的数量(作为输入),
这也就是为何 LR 和大规模的特征工程必须绑定在一起的原因。
而 NN 模型具有自己学习新特征的能力,一定程度上能够提升特征使用的效率,
这使得 NN 模型在同样规模特征的情况下,更有可能达到更好的学习效果。
本文会演示,如何使用 NN 模型来完成 CTR 预估的任务。
# 数据和任务抽象
我们可以将 \`click\` 作为学习目标,具体任务可以有以下几种方案:
1. 直接学习 click,0,1 作二元分类,或 pairwise rank(标签 1>0)
2. 统计每个广告的点击率,将同一个 query 下的广告两两组合,点击率高的>点击率低的
这里,我们直接使用第一种方法做分类任务。
我们使用 Kaggle 上 \`Click-through rate prediction\` 任务的数据集来演示模型。
各个字段内容如下:
- id: ad identifier
- click: 0/1 for non-click/click
- hour: format is YYMMDDHH, so 14091123 means 23:00 on Sept. 11, 2014 UTC.
- C1 – anonymized categorical variable
- bannerpos
- siteid
- sitedomain
- sitecategory
- appid
- appdomain
- appcategory
- deviceid
- deviceip
- devicemodel
- devicetype
- deviceconntype
- C14-C21 – anonymized categorical variables
# 特征提取
下面我们会简单演示几种特征的提取方式。
原始数据中的特征可以分为以下几类:
1. ID 类特征(稀疏,数量多)
- id
- siteid
- appid
- deviceid
2. 类别类特征(稀疏,但数量有限)
- C1
- sitecategory
- devicetype
- C14-C21
3. 数值型特征
- hour (可以转化成数值,也可以按小时为单位转化为类别)
## ID 类特征
ID 类特征的特点是稀疏数据,但量比较大,直接使用 One-hot 表示时维度过大。
一般会作如下处理:
# 模型实现
## DNN 简单模型
## long wide 复杂模型
# 写在最后