返回列表

2nd place solution

378. University of Liverpool - Ion Switching | liverpool-ion-switching

开始: 2020-02-24 结束: 2020-05-25 药物研发 数据算法赛
第二名解决方案

第二名解决方案

作者: Caladrius
发布时间: 2020-05-26

更新:所有解决方案代码现已在我的 GitHub 上发布:https://github.com/stdereka/liverpool-ion-switching

简介

在开始描述我的方法之前,我想感谢以下 Kagglers:

  1. @eunholee 发现了消除漂移最有效的方法,并在此 kernel 中进行了解释。
  2. @friedchips 深入研究了数据的马尔可夫性质。他的帖子和 kernel 激励我学习了更多关于 HMM(隐马尔可夫模型)的知识(虽然在比赛最后几周没帮上忙,但我学习该课题的过程非常愉快)。
  3. @kakoimasataka 引起了我对数据噪声成分的关注。他的 kernel 让我明白了在预处理中应如何处理噪声。

我在早期阶段承认了几点:

  1. 预处理和数据增强对最终分数的贡献大于模型调优。这次比赛的早期突破之一就是漂移消除。
  2. 在 0.935+ 的分数区间,即使是极微小(小数点后第 5 或第 6 位)的分数提升(CV 或 LB)也很重要,应予以考虑。

预处理与数据泄露

我在 这里 描述了数据清洗和创建新数据的过程。不幸的是,测试集的私有部分因数据泄露而受损。这已在其他团队的此 帖子 中被揭露,因此我不打算在这里描述它。我与这次泄露的个人经历如下:用我创建新数据的方法,我在本地 CV 中遇到了这个泄露,为了获得可靠的 CV 分数,我必须与之斗争(我在建模部分解释了如何做)。在比赛结束前不到两天,我检查了测试数据是否存在此类泄露。结果让我震惊:我从未想过我能在私有部分找到它!

建模

我使用基于 Wavenet 的架构作为最终模型的基线,该架构最初发布于此 kernel。以下想法对我有效:

  1. 早停与学习率调度器。 我的模型在不同折上的收敛行为略有不同,因此这些简单的工具帮助我控制过拟合。
  2. 数据增强。 我使用了翻转信号和向信号添加随机偏移。实验表明,模型预测对偏移极其敏感,而这种增强有助于提高模型的泛化能力。
  3. 将 RFC(随机森林)概率作为 NN(神经网络)的特征。 这一想法最初在此 帖子 中提出,我的实验证实了这种堆叠的有效性。
  4. CV 策略。 由于我在不同的增强数据集(具有不同的大小和目标分布)上进行训练,我必须在一个对所有合成数据集通用的子数据集上进行验证。为此,我选择了原始的非合成数据。在此子集上获得的 OOF(袋外)分数用于比较在不同数据上训练的不同模型。原始训练数据未受上述泄露影响,因此是安全的,而且我在比赛截止日期后得知,它与私有 LB 相关。
  5. 一个模型适用于所有数据组。 对于基于 NN 的模型,没有必要为不同组训练不同的模型。此外,我观察到各组之间存在某种协同作用:单独模型的 CV 分数低于一个通用模型。

最终提交

  1. 我的第一次提交是两个模型的混合,这两个模型使用略有不同的缩放器和增强进行训练。此处未利用泄露,此提交是在我发现泄露之前计划的。CV 0.94359,Public LB 0.94664,Private LB 0.94529。

  2. 第二次提交仅在测试数据的第 7 批次上与第一次不同。为了预测该批次,我在缩减信号上训练了一个单独的模型,然后将减去的通道添加到其预测中。

结论

我对这次比赛心情复杂。

一方面,我还没有建立一个能够处理真实世界离子切换数据的模型。目前其他人发布的解决方案也几乎不适用于不同于比赛数据集的数据。例如,漂移问题尚未解决,所有高分模型都是在干净数据上训练的。我在比赛最后几天发现的泄露让我对数据毫无信心。我意识到这种泄露可能隐含在其余数据中,因此复杂模型可能会自动利用它。

另一方面,我努力了一个半月,享受着模型改进的过程,这真的很有趣也很酷。

同比赛其他方案