360. 2019 Data Science Bowl | data-science-bowl-2019
首先,感谢 Kaggle 团队举办这场激动人心的比赛,同时也祝贺所有获胜团队和取得优异成绩的团队。
我独自一人参加了这次比赛,虽然过程艰难,但这确实是一场非常有趣的比赛。
一年前,我在 Microsoft Malware 竞赛中经历过一次非常大的排名下滑(从第2名跌至约1500名)。
基于那次经验,我在本次比赛中特别致力于验证策略和公开/私有数据分析。
结果,我通过排名上升获得了我的第一枚金牌。
以下是我的解决方案。(很抱歉我的英语不太好。)
第10名(单人金牌) / 3523支队伍
我认为公开数据集的分布不适合用于验证,因为只有 1000 条记录。
我通过以下方式计算:对训练集的 OOF(样本外)预测进行截断并随机抽样 1000 行,重复 1000 次取平均值。
直方图如下所示。
从这个直方图来看,公开数据集似乎属于罕见情况。
因此,我选择信任 CV(忽略 LB),并使用 CV 表现最好的阈值(下一节详述)。
最终我使用了常数阈值 [1.04, 1.76, 2.18]。
该阈值是通过在 500 个截断 OOF 验证中取 OptimizedRounder 阈值的平均值计算得出的。
我尝试了许多方法,但我相信局部 CV 预测中的最大阈值是最可靠的。
一些公开内核根据目标分布决定阈值。
在我的实验中,该方法在公开 LB 上的表现优于其他方法,但我认为该方法对公开 LB 过拟合了,因为其分布不等于截断后的目标分布,也不是 QWK 的最佳分布。
我总共制作了 3000~5000 个特征,但我认为没有“魔法特征”。
(最终我使用了大约 300 个特征。)
对我来说有效的特征如下:
为了评估特征在截断验证中的效果,我使用了基于截断训练数据的 LGB 特征重要性。
在每一折中,我制作 50 个截断数据集,并利用 lightgbm 的 init_model 参数每 5 次迭代更换一次数据集。
我使用了前 300 个特征(