kaggle Santander Customer Transaction Prediction总结

记一次失败的竞赛经历

数据分析

1.样本不均衡。在20万训练数据集中,正样本(y=1)为2万,负样本(y=0)为18万。

2.所有原始特征之间相关性很小。这一点很奇怪,很少有数据集所有特征之间相关性都很小的。

3.所有特征的分布都类似。这一点也是挺奇怪,应该是主办方对数据做了某种变换。

特征工程

1.由于这个赛题所有特征均为匿名特征且特征之间没有什么关联,所以可以考虑对数据进行重新洗牌(shuffle)。对于训练数据,分别在标签为0和标签为1的样本中进行重新洗牌。即对于每个特征都进行shuffle操作,这样得到完全不同的样本,分别用这些不同的样本去训练,然后做预测,最后取平均得到最后的结果。

2.value_count特征。去除test中的合成数据后求各个特征中唯一值的个数。

3.排序特征。对数值特征进行排序。

4.相似比率特征之间的统计特征。这里的比率为对某个特定值,求target为1的概率。然后对所有特征做相似性分析,把相似性高的特征划为一组。如下:

然后对每组相似特征求统计特征。

TOP选手方案:

特征部分:

1.count特征。包括value_counts特征,至少在target=1的数据里出现过一次的值,至少在target=0的特征里出现过一次的值,在target=0和target=1中至少出现过两次的值,在训练数据集中只出现过一次的值,在训练集加真实测试集中只出现过一次的值,用特征的均值去替换该特征中的唯一值(?),四舍五入后求count特征(?)(count特征应该是比较重要的一个特征,在比赛中对其挖掘的太少了,只做了value_counts的特征)

2.把所有的特征列全部堆成一列(200000*200,1)做为一个特征,count做为第二个特征,特征名称做为第三个特征(类别),然后用模型训练。这个模型的得分会比较低(0.53左右),但是使用id聚合得到符合格式的结果,会得到较高的分数(0.924)。这是一个比较神奇的做法,因为这些数据都是独立的,在使用gbm模型去训练时,模型可能会学到一些特征的关联关系,而实际上这些关系很可能是不存在的(因为独立),这种方法消除了模型学到虚假联系的可能性。

3.对特征进行标准化。

其他一些技巧:

1.神经网络训练技巧:添加batch norm和小的dropout,采用0.01的学习率,一个训练周期只使用15次迭代(epoch)。

2.在使用lightgbm等树模型的时候,可以画出其节点分裂图,观察哪些特征有用,从而帮助进行下一步的特征工程。

总结:

这个比赛总之是挺可惜的,赛后看了一下前排大佬的开源,感觉其实几个关键的点都找到了,但是缺了一点坚持和运气。心态上有些急于求成,总是想找可以上很多分的magic,而忽略了对基本操作的深入理解(灯下黑?)。多尝试不同的模型,本题中有效的使用神经网络也是获胜的一个关键点。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章