没想到这么快就又跳槽了,新工作业务压力小,个人时间比较多,所以第一次认真地参加完了一个比赛,收获良多。这个比赛旨在预测广告的转化率pCVR,加入转化率因子优化排序(有的广告可能ctr高,但是转化低),提升广告投放效果,提升ROI。
技术上面的一些收获和展望:
1. 数据集的划分: 数据集的划分要与最终提交的测试集预测逻辑一致。提交的预测集是根据31号之前的数据预测31号的转化率,所以数据集也应该按照日期来划分训练集和验证集。此其一,第二,不考虑日期来随机划分训练集和验证集,可能存在数据泄露。比如,训练集中如果有27号的数据,用27号的数据训练出来的模型来预测27号之前的样本,就存在数据泄露。另外,27号训练出来的模型反映的是27号的规律,用这个规律来预测27号之前的测试集,这个逻辑不太合理。实际情况是,随机划分方式,线上线下结果不一致。而通过20-26号的数据训练,27-28号的数据验证,线下和线上则基本变化一致。(29-30号有些负样本可能是还没有来得及上报转化,所以数据不可信,将其舍弃)
2. 噪音数据预处理: 训练集中有些样本是噪音,比如相同的样本出现很多次,或者同样特征出现不同的label,这些情况在真实场景下都是可能的。在我的处理中,直接将相同的样本去了重,将矛盾的样本全部去掉,这样有大概万分之8的提高。但是,有的参赛选手,从这种噪音数据里面提取了相关特征,据说效果很好,以后可以尝试。
3. 缺失值处理: 测试集上可能有些特征没有取值,对于这种missing value的情况,用众数或者平均数代替简单地赋0可能更有效,有大概万分之2的提高。
4. 统计特征: 对于userID, creativeID, positionID,可以统计下点击量-转化量-转化率等统计特征(但是不能有数据泄露,只能用当天以前的样本进行统计),这个对效果提升特别大(约千分之一)。同时,对于其他特征也可以加入统计特征,比如gender分别是1,2时的点击量-转化量-转化率等统计特征。对于age,connectionType等其他字段也可以加入统计特征。
5. 组合特征: 对于positionID-userID, positionID-creativeID, positionID-connectionType等组合特征,可以统计点击量-转化量-转化率等特征,组合特征对效果也有较大的提升(约千分之一)。
6. 模型寻优: 模型寻优的方式有random search, grid search等,这次比赛模型寻优没有获得太大的效果提升。下次可以尝试用grid search找到最好的参数组合,然后在该点附近缩小范围进一步寻优。另外,有一个自动化寻优工具Hyperot可以根据之前参数组合的表现,决定下次的参数组合,可以进行尝试,看有没有效果。
6. 模型组合: 参数组合的方法有stacking, blending和最简单的average等。下次可以重点进行探索,根据其他参赛者的经验,ensemble可以带来较大的提升,但要保证base model的多样性,尽量相关性小一些。另外,论文[1]中提到的ensemble selection下次也可以尝试一下。
总的来说,特征很重要,特征决定上限,模型决定对上限的接近程度。通过这次比赛,搭建起来整个流程框架,以后可以将更多的时间用来挖掘强特征和探索模型。
[1] Ensemble Selection from Libraries of Models: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/PrabhuVarmaKDD14.pdf