一、数据和样本
广告点击率(click through rate,CTR)预估的问题通常被转化为一个分类问题:在给定网民 u(user)、广告 i(item)、环境 e (environment) 的情况下,广告被点击的概率 p_ctr. 即
当一个广告在某次展现中被点击,则构成一条正样本,否则为负样本。
一般而言,搜索引擎厂商都记录了海量的搜索日志,这些日志数据具有丰富的价值,可以用来分析挖掘并用于预测网民的广告点击行为。
利用历史一段时间的展现和点击记录的日志,我们可以训练一个分类器模型,该分类器模型的特征包含如下几个因素:
1.网民的信息:包括当次搜索的搜索词,网民的个体属性,如历史上网的浏览点击行为等;
2.广告的信息:包括广告的内容,广告的历史展现和点击信息;
3.环境:包括当次搜索的时间,当次搜索的地方,广告展现的位置等。
二、logistic回归算法
logistic回归算法在特征设计的过程中,有两种常见的变量衍生技巧:离散化和特征组合。
1.离散化
原始数据变量根据类型的不同,一般可以划分为两种:类目型和数值型。类目型变量的取值可枚举,例如性别或学历;数值型变量是取值在某个区间范围内的任何一个数值,例如资产变量可能是0到正无穷中的任何一个数。
类目型变量一般采用OneHot编码方式对变量做预处理吼构成多个特征进入logistic回归算法。
数值型变量有两种处理方式:一种方式是不做处理,直接将该变量作为logstic回归算法的一个特征;另外一种方式是首先对数值型变量做离散化处理,变成一个类目型变量,然后再使用onehot编码方式形成多个特征。如果将连续变量直接作为一个特征放入回归算法中,目标值关于该变量的关系是一个简单的线性关系。如果将该连续变量离散成N个不同的取值后,再通过onehot方式加入N个特征,则每个特征都能对应一个单独的参数,每个参数都有独立的权重,能够刻画更加复杂的非线性关系,从而提升模型的表达能力。
数值型变量离散成类目型变量时,一般是将该数值型连续变量的可能取值范围划分成几个区间,不同的取值范围为一个不同的类目型变量值,区间的个数即为离散后类目型变量的取值个数。如果两个不同的数值型变量落在同一个区间,在离散之后,这两个变量的取值就会相同。
常见的区间划分方法有以下两种思路:
1. 等距离离散化:特别的,对于长尾分布的数据,还可以先通过logstic变换将长尾部分的数据的距离变得更近后,再等距离离散化。
2. 等样本离散化: 切分后保证落入每个切分区域的样本个数一样多。该方法受数据分布的影响较少,但是由于计算量太大,应用比较少。
在广告点击率预估问题中,大部分变量是类目型变量,如搜索词、广告ID等,一般采用onehot的方式来处理这类特征。由于搜索词和广告ID这类类目型变量取值空间非常大,因此广告点击率预估的特征的维度非常大。除了类目型变量外,还有少量的数值型特征,如广告标题长度等,也是通过离散化和onehot处理后再加入模型。
2. 特征组合
logistic回归算法是一个线性算法,因此目标值关于每个特征都是线性变化。但是,如果我们认为目标值关于某些自变量存在或可能存在非线性关系,则需要手动将该非线性关系作为一个衍生变量加入自变量中。
例如,当目标值可能与某个自变量的平方存在线性关系,则需要设计一个衍生变量作为一个新的变量放入回归式中;类似的,如果目标值不仅和,这两个变量相关,还和它们之间的交互关系相关,那么需要将这两个变量的组合作为一个新的衍生变量放入模型中。
最常见的添加衍生特征的方式是考虑几个特征不同取值的组合。以性别和职业为例,假设性别有男、女两个取值,职业有学生、教师、其他三个取值;性别和职业的组合是指将两个变量的不同取值组合起来一共构成六种取值的新的类目变量:(男,学生),(女,学生),(男,教师),(女,教师),(男,其他),(女,其他),并将其通过onehot编码方式加入到模型中。
常见的组合方式有下列几种思路:
简单组合行为序列组合不同类别的变量组合
三、模型构建与训练
1. logistic回归算法
logistic回归算法是工业界应用最广泛的线性算法,它通过logistic变换将目标值映射到区间,通过这个概率值来表达属于某个类别的概率。算法的函数表达式如下:
logistic回归算法通过把最小化总体样本的转变为最小化训练样本集合中的,从而求解出参数的最优解估计.
这里即为,该向量的维度即为特征的维度,N为训练样本的个数,y即为我们要求的广告点击率.
2. 模型训练
在模型训练的过程中,为了防止过拟合,需要加入正则项来避免模型过于复杂。在广告点击率预估问题中,最常用的是正则,因为广告点击率预估的参数规模很大,正则的稀疏性能够有效降低取值不为0的参数个数,从而降低线上预估的计算量。加入正则项的模型形式如下:
不同数据集合对应的最优的取值不一样,通常需要通过选取不同的参数在同一份训练集上训练得到模型,然后再同一份测试集上观察和比较不同参数下模型的效果,从而找到最优的参数。