因为在做京东的算法大赛,小白选手,看了一些别人的入门级程序,胡乱改了一通,也没有什么大的进展,而且感觉比赛的问题和点击率预估还是有点像的,所以搜了个论文来读,看看牛人们的思路。于是找到了这篇论文。
这篇文章主要是提出了一个GBM+LR这样的结构,并且效果得到了很大的提升。具体结构如下图所示。
在解决点击率预估问题的时候,最重要的是在特征工程的构建上,也就是特征选择的过程(深以为然),再加上一个正确的模型。利用本文的模型,其他一些参数的调整,对准确率的影响都比较小。
Experimental setup
- 首先,就是划分训练集和测试集。(这也是我在做比赛过程中遇到的第一个问题······不知道咋划分·····文章里没有具体说明)
- 评价指标的设定。
在本文中,用的是Normalized Entrophy(NE)和Calibration.
Normalized entrophy
表达式为:
分子实际上就是logistic regression的损失函数,分母就是平均的损失,平均的损失实际上就等于整个数据集的entropy,所以叫normalized entropy,这种是消除了不平衡数据集的影响
在分类问题中,cross entrophy损失是常用的。备选的有准确率和MSE。其中,准确率并不能很好的反应模型的好坏,所以最先排除。MSE较之更进一步,能够描述模型之间的差异,但是还是不够好,因为MSE的loss函数是非凸的,所以会存在多个极值点,输出的曲线是波动的。(非凸优化)
而交叉熵损失,是一个凸函数,利用梯度下降法,具有很好的收敛特性。分类问题一般都是 one-hot + cross entrophy。
其中利用one-hot形式计算label的概率时,用的时softmax函数。
Calibration
这个指标很简单,就是预估的点击率除以实际的点击。
对于点击率预测,最关心的是点击率预测的准确性,而不太注重ROC这种rank order指标
Prediction model construction
系统的整体结构如上图所示,是一个决策树+LR的串联结构。其中,树的作用就是一个特征转换结构,将输入的原始的特征,通过树结构进行优化,作为LR的输入。
在树的转换作用中,有几个小小的tricks:
1. 对于值为连续型的特征,可以先bin,然后用bin后的index作为categorical 特征。(我的理解是先进行连续值得离散化,pandas里好像有bin、cut这类函数可以实现,然后得到得Index是不是还要dummy一下,作为one-hot特征)
2. 对于categorcial特征,可以利用笛卡儿积创造新得特征。但是,并不是所有得组合都是有用得。如果是没用的,在剪枝(prune out)的时候会被剪掉。
在这里,用到的提升树是GBM,并且使用了传统的
算法。
我们可以把利用提升树进行特征转换的过程看成一个有监督的特征编码的过程,也就是说将一个实值的向量转化为一个简洁的二值化向量。而从根节点到叶节点的这样一个路径代表着某个特征的一种规则。
(未完······)