记一次公司内部AI竞赛

历时40多天的Cisco全球AI 竞赛终于落下帷幕,虽然最终只得到第6名(总共有1000多人组成的300多支参赛队伍). 但是作为一个学习AI没多久的小白来说,已经非常知足了.整个竞赛的主题是:客户是否会持续订购公司服务的预测. 回想整个过程,感觉比做一个项目更辛苦,跟磨人, 但也收获颇多.

  • 数据的理解:

说的是AI 维度的选取,但是最重要的还是数据的理解的理解,AI模型和算法虽然同样重要,但是只有对数据理解了才能够对数据进行正确的清洗.

  • 数据的降维:

整个竞赛的数据有240多个维度,但是想对数据降维,还真不是好办的.使用了PCA也没什么思路.但是最后却从应用层面发现了一个比较好的办法. 使用随机森林或者XGBoost之类的模型,让模型的树有足够的深度,如果在足够深的情况下,还没有被选中的feature,那就是可以抛弃了.这样就变相的做到了数据的降维.这样最后的效果是数据的维度减少了一半.

  • 手工指定维度的权重:

目前虽然有很多模型,可以对数据指定维度. 但是没有发现有模型可以指定维度的权限,但是聪明如我无意之中发现了一种可能的workaround,就是将Feature复制出一列,这样无形之中此Feature被选中的几率就翻番了.

  • 趋势的理解

机器学习通常要通过对已有的数据整理出规律,其实最有价值的规律,还是特定个体历史趋势.理解了这一点,就会在特征抽取时往这个方向上思考.

  • 自动化匹配(灵活的配置):

模型的可扩展性, 一个竞赛持续时间会跨越比较久,比如这次前后2轮,跨越一个半月,所以模型要做到比较容易的扩展.比如哪些字段需要onehot,最初手工分析了一些做onehot效果也不好,前后调整花了好大经历.最后发现最简单的就是查看指定Feature有多少种类型,如果小于一个特定值,就对此字段启用onehot,这样调整非常灵活,效果也不错.后来发现有的模型(LightGBM)就是用的这种办法.

  • 数据的独立性:

这次竞赛发现对于一个特定的个体,历史上有多处续订和没有续订,但是其他属性基本一致.这样的数据参加训练,会导致结果不稳定,有抖动. 最后做了一个舍弃,只保留最近的一条数据,预测分数有了一个非常大的提升.

同时也发现了对于一个特定的个体,如果有相同产品,相应产品的行为是基本一致的.如果全部保留是一种变相的数据倾斜.最后只保留一条,发现分数也有一个很大的提升.

这说明,维度直接有关联没办法避免,但是如果不同的数据,有类似的行为,汇总后参与训练,结果会更好.

猜你喜欢

转载自flyfoxs.iteye.com/blog/2421076