返回列表

4th private (7th public) place writeup, link to code

360. 2019 Data Science Bowl | data-science-bowl-2019

开始: 2019-10-24 结束: 2020-01-22 学习效果预测 数据算法赛
第4名(私榜)/第7名(公榜)方案分享

第4名(私榜)/第7名(公榜)方案分享

作者: Sergei Fironov (Grandmaster) | 团队: Crystal Cave Miners

非常感谢 Booz Allen Hamilton 举办这场精彩的比赛,也感谢所有参与者分享有趣的想法和讨论!

我们从公榜第7名跃升至私榜第4名。我们选定的最佳提交成绩为私榜 0.561,公榜 0.572。这是神经网络的融合结果。第二个方案是一个三层堆叠模型,成绩为私榜 0.560,公榜 0.566。

首先分享一些思路

  1. 测试集可以使用与训练集相同的流程进行标记,并用于训练。
  2. 对事件序列使用 TfIdf。每个 event_id 可以编码为 title + event_code + correct_flag + incorrect_flag。之后,我们可以将 installation_id 的历史记录视为标记序列,并对其进行 tfidf 训练。在训练过程中,我们对当前评估之前的实际标记序列应用转换器。
  3. 一些片段和其他标题对于评估准确性非常重要。也许它们的顺序并不那么重要,但 RNN 架构可以很好地处理它们在用户历史记录中的存在。
  4. 我们的数据量很少,稳定性比实际得分重要得多。如果改变列的顺序会导致得分下降,那说明我们的做法有问题。

模型

神经网络

Tfidf 特征 + 基于标题序列(最后 64 个)的 RNN,附带一些额外特征:

  1. 标题的嵌入维度 dim=7。
  2. 标题期间的正确尝试次数。
  3. 标题期间的错误尝试次数。
  4. 2 和 3 的比率。
  5. 标题开始之间时间间隔(秒)的对数。
  6. 上一个类似标题中的正确尝试次数。
  7. 上一个类似标题中的错误尝试次数。
  8. 7 和 6 的比率。
  9. (9) 我尝试了很多次将计数器按原样包含在模型中。最后我放弃了,但这些模型在私榜上表现更好。

大多数单一网络的得分都在 0.56+ 区间。对我来说最有趣的一个模型拥有相同的公榜和私榜分数:
https://www.kaggle.com/sergeifironov/bowl-stabilize-coefs-cntrs-all5

树模型

Lightgbm, Xgb, Catboost。(即将补充)

堆叠

  • 第 0 层:NN 折中折模型(5 个外层折叠,5 个内层折叠),lgbm,catboost。
  • 第 1 层:MLP, Lightgbm。
  • 第 2 层:Ridge。

参考讨论:https://www.kaggle.com/c/data-science-bowl-2019/discussion/127312

验证

我在这个话题中写了很多:https://www.kaggle.com/c/data-science-bowl-2019/discussion/125001,但在比赛快结束时,我放弃了让它与公榜相关的尝试,转而使用了一个非常简单的验证方法,根本没有使用 installation id 分组。

对我们无效的方法

  1. Transformers、GPT-2 和 BERT 向量,基于预测 event_id、title、title+accuracy_group 等任务进行训练。它们没用。
  2. 图神经网络。
  3. 事件序列上的 Transformer。对于这么小的数据量来说,它太臃肿了。
同比赛其他方案