腾讯社交广告高校算法大赛心得

感想

写了这东西之后,就感觉自己像是立了个flag一样……

特征的选择

  关于特征选择,其中有两个方面是应该值得关注的。
  一方面是特征的重要性,特征的重要性反映的是特征对模型效果的影响程度,理论上重要性越高的特征应该保留下来,而重要性较低的会考虑删除。特征越多,会使得模型越复杂,减少不必要的特征会使得模型更加稳定。其中常用的方法可以考虑xgboost中计算的特征重要性,或者是通过扰乱某个特征值的次序根据模型效果变化来得出。特征重要性计算的方法不少,大家可以再网上查找一下。
  另一方面是特征分布是否一致,特征分布主要考虑的是线上和线下的分布差异。由于这次比赛的数据具有时序性,并且很多选手也因为在提取特征时因为信息泄露的原因导致线下成绩提升而线上成绩降低,这些问题都可以通过特征值的分布差异来排除掉,当分布不一致的特征,我们应该优先删除。特征分布差异,简单的可以通过线下和线上特征值的均值、标准差差异来考虑,或者基于其它的统计学的方法。
通过特征的重要性和分布综合考虑,应该就可以得到比较理想的特征效果了。

特征生成

  关于特征生成,大体上可以分为两个大方向。
  一个方向就是俗称的“拍脑袋”,根据个人对于数据观测、题目理解等考虑,得出的一系列规则转化为特征。这样很容易就会产生一系列有用或者无用的特征(比如one-hot、各种的转化率、点击量等特征),其中很多的特征所代表的意义其实是重复的,比如对各种ID做转化率的特征,当特征数量越来越多后,提取这类的特征会显得毫无意义。所以应该多角度的来提取特征,使得特征之间形成互补。
  一方面是通过其它模型的结果来生成各种特征,其中能否通过深度学习来产生新的特征?LDA来分析用户和app之间的关系?特征之间不断的组合能否产生比较好的特征?这需要通过对数据的理解,不断的尝试和分析。不过我的并不建议那么快的考虑用其它的模型来生成特征,毕竟这种方法生成的特征有时候并不能很好的理解,并且需要的工作量也比较大,有时候生成的特征也并不一定有效果。

模型的理解

  群里面很多的同学知道该用哪个模型,但是并没有理解模型的原理,所以把很多的时间浪费在模型的选取和调参上。事实上,我们应该先对模型有个比较基础的了解,明白模型以及各个参数的原理,这样才能指引我们如果去生成模型适合使用的特征以及怎样去调参。比如,我选取的模型是xgboost,基本上我是没怎么使用one-hot的特征。
  对于刚开始比赛来讲,模型应该是简单点比较好,这样主要为了方便特征的生成和选择。当特征方面的工作做到一定的程度上,则可以考虑更复杂的模型来提高效果了。至于模型融合等方面的资料,可以参考网上历来各种比赛分享的资料了。

建议

  参加比赛的时候,很多时候选手会因为效果不好等各种原因难免产生比较浮躁和消极的情绪。但我觉得,参加比赛来讲,最重要的是在比赛中有所收获并且提升自己,最直接的方法就是多想多做,而不是光想不做。毕竟比赛的竞争是比较激烈的,获奖的名额比例也不高。或许最后什么名次也没拿到,但是通过不断的提升自己或许以后工作可以升职加薪呢,而这样算下来的钱应该比一个比赛的奖金要多吧。