更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer
作者:谭学仕
首先很感谢腾讯举办这次比赛,让我们学生党可以接触到这么丰富的数据。这是我们团队第二次参加数据挖掘的比赛,虽然在第一次的比赛中没能取得好的成绩,但也从中吸取了很多经验和教训,让我们尽快地开展了工作。抱着学习和交流的心态,我们参加了这次腾讯举办的广告社交大赛。
在参加比赛中,我们觉得以下几点可以帮助我们尽快融入比赛中的:
1、首先要理解业务场景。
刚看到题目时,我们并没有着急开始分析数据,而是,首先明确了任务要求和提供的数据。在这个比赛中,我们要预测的是31天的转化率,官方提供了17到30天的 历史行为数据,还有用户和广告的基本信息;对于业务的理解,我们需要知道提供的每张表格中那些信息,每种信息是怎样关联起来的。了解业务场景有助于我们提取优秀的特征,我们可以假设自己是一个点击的用户,从一个用户的角度来思考怎样的特点会吸引发生转化行为;
2、如何开展特征工程。
构造怎样的特征工程和你对业务理解有关,这是一个关于时间序列的问题,用户的过去行为反映了用户在31天的可能转化的情况,所以我们可以考虑用户过去时间里的点击后发生转化的比率来表征用户的特征,同时我们也用了APPid点击后发生转换的比率来表征app的特征;在构造特征的过程中,由于这是一个关于时间序列的问题,要防止“穿越”行为——用用户未来的数据表征当前用户的特征;同时,构造特征时,除了自己对了业务的理解外,还可以进行数据分析, 一个方法是按label进行分组统计的操作,看看哪一类特征在lable中有着不一样的分布,下面这一段代码统计lable在不同的positionID和age类型下的转化率。
per_positionID= traintestUser.groupby('positionID').apply(lambda df: np.mean(df["label"])).reset_index(name = 'per_positionID')per_age= traintestUser.groupby('age').apply(lambda df: np.mean(df["label"])).reset_index(name = 'per_age')
这是我们的实验结果:
从结果可以看出不同的positionID在转化率上有着很大的差别,所以我们把positionID的转化率作为一个重要的特征,'age'在不同的类别上的转化率并没有很大的区别,所以‘age’的区分能力并不强;
对于表格数据表达信息不直观的问题,可以考虑做数据的可视化,下面是对age的转化率做可视化的结果:
同样展现了不同的age类型在转化率上没有较大差别,也就没有很大的区分能力。对于如何进行数据可视化,kaggle上有一个不错的分享:
https://www.kaggle.com/benhamner/python-data-visualizations
3、特征工程的重要性。
就像一句老话说的那样,“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”,所以说,在比赛的前期阶段我们更加要重视特征工程的构建,一个好的特征就能使得损失下降很多。举一个例子来说明,在这个比赛中,组合特征就是一个很强的特征,用户点击后安不安这个APP和这个APP性质有很大关联,有些APP是针对男性的,有些APP是针对未婚人士的,所以我们提取了APP和性别、年龄、婚姻状态来做组合特征,加上这几维特征后,我们线上的损失直接下降了0.002,相对于调参和换其他算法,这样的提高来得更加直接些;当做特征工程没有很大的作用时,我们才开始考虑做参数调优和模型融合;
4、多和别人交流。
由于我们参加比赛的经验不足,在思路方面不是很开阔。在交流群上和别人进行交流能打开自己的思路,同时,也可以多多参考Kaggle上类似的比赛,除了能学习到别人的思路想法以外,还可以学到大神的代码风格,增强实现自己想法的能力。
抱着学习进步的心态参加这次比赛,学习很多大神分享的经验,就算没能获得很好的名次,也是一次很难得的经历。希望这次比赛越办越好,大家在这次比赛中有所收获。
领取专属 10元无门槛券
私享最新 技术干货