动态特征
特征对点击率预测有多种选择的方法,我们现在有三个轴,有ad,user,context。User上有很多标签,cookie,age,gender是从定向信息中得到的,url上有一些域名和分析得到的topic,ad上有层次的category,advertiser,campaign,solution,creative,url。很显然,如果仅仅作为一个learning的问题,任何两个轴或三个轴组合出来的特征都是可以用作于logistic regression中的特征去学习的,还可以分析出每个特征的强度是多少,但这也会产生前面所提到的大量特征的问题,组合出上亿个特征并不奇怪。
我下面介绍的是另外一方面思路,一种直觉的特征的选择方案,对于这种CTR预测问题,或者说对于一些互联网问题,动态特征还是蛮有效的。动态特征是相对静态特征而言的,静态特征举一个例子,上文提到过静态特征可以通过组合得到,比如年龄等于15岁并且广告是电商广告,如果user和ad满足这两个条件,则特征值为1,否则为0。而动态优化是统计出这个组合在历史上它的表现是什么情况,即年龄等于15岁且为电商广告在历史上点击率如何,历史上的点击率显示是一个特别强的指标,或者说它比1或是0代表的信息要多。动态特征即是在标签组合维度上聚合点击反馈统计作为CTR预测的特征。也可以换一个角度去理解,我们可以认为这种聚合维度上的CTR是一个弱分类器,比如上例中只知道年龄和广告类型对点击率进行预测。我们对成千上万的组合特征就可以训练得到成千上万的弱分类器,这种弱分类器再作为最后learning模型的输入特征。
动态特征的优势有:1. 工程架构扩展性比较强,因为生成动态特征,只需要在历史数据上作统一的挖掘流量,只需要进行配置就可以实现对任意特征的挖掘,它与在线学习相比,上文讲到,特征上的任何一个方案,都对应模型上的一个方案,如果在模型上快速地变weight与在特征集合上快速变特征,变特征会简单的多,因为变模型在广告投放的过程中还涉及多台机器通信的问题,变特征没有这个问题,即使你需要计算的很快速,也可以用流式计算平台实现。2. 对于新的(a, u, c)组合有较强的back-off能力,比如有一种广告素材是没有出现过的,如果想在模型中把这个特征加进去,把权重更新出来,过程是比较复杂的。如果是仅仅在特征端对它进行描述,这个素材对不同的人群的CTR都作为动态特征放在系统里,只要流式计算做的足够快,只要广告上线,就可以迅速地就可以在模型中做出正确的决策。动态特征的缺点是,因为特征都是动态的,是需要一个很大的Cache去存储,存储的量是巨大的,因为所有的组合都可以生成动态特征,另外,更新的速度要求也比较高。
我举几个组合的例子,比如cookie(u)和creative(a)可以组合,但这种组没有太大意见,因为cookie和creative无论你做动态特征还是静态特征,能得到的统计信息都太少了,再比如gender(u)和topic(c),这种组合能得到的统计信息就比较多,它得到的结论也比较稳定,但就不足够精细了。Location(u)和advertise(a)同样也是统计量比较大,但是不够精细。还有category(a)和category(u),cookie(u),creative(a),gender(u)这么特征或是做静态的,或是做动态的,我们用模型学习出最有价值的特征,用于最后的决策。