返回列表

5th place solution [Updated]

407. Mechanisms of Action (MoA) Prediction | lish-moa

开始: 2020-09-03 结束: 2020-11-30 药物研发 数据算法赛
第5名方案 [已更新]

第5名方案 [已更新]

作者:YuyaYamamoto (Grandmaster)
比赛排名:第5名

感谢我的队友 Anna,所有参赛者,Kaggle 管理团队,以及哈佛大学创新科学实验室组织了这场精彩的比赛。我想简要分享我们获得第5名的解决方案。

问题设置

本次比赛最困难的问题似乎在于测试集中同时包含了“已见过的”和“未见过的”药物。这使得构建可靠的验证集变得非常困难。

验证策略及其特性

在本次比赛中,主要使用了两种类型的验证策略。一种是传统的 MultilabelStratifiedKFold,另一种是感知组的 MultilabelStratifiedGroupKFold(即 Chris 的方法)。观察基于这些方案训练的模型的预测结果,MultilabelStratifiedKFold 似乎对“已见过药物”给出了更自信的预测,而 MultilabelStratifiedGroupKFold 则给出了更平衡且稳健的预测,这被认为更适合“未见过的药物”。我认为两者在不同方面都很有用。

验证策略对比图

我们的方法

测试集中同时观察到已见和未见过标签的设置,与 Bengali.AI 手写图形分类 比赛类似。因此,我们决定通过度量学习(L2 Softmax -> 余弦相似度)来区分“已见过”和“未见过的”药物,然后根据相似度混合基于每种验证方案训练的模型。如下图所示,这种已见/未见过的分离在某种程度上似乎是可行的。这种方法不需要伪标签或重新训练。简单的前向处理就足够了。

已见与未见药物分离图

特征工程

  • 原始细胞和基因数据
  • PCA(主成分分析)
  • rankGauss
  • 多项式特征
  • 简单统计特征,如均值、最小值、最大值、偏度、峰度、(X_train>9).sum(axis=1) 等

模型

  • 类 ResNet 浅层神经网络
  • TabNet
    特别是针对“未见过的药物”的模型,我们使用了简单的网络结构。

重构 drug_id [已更新]

从比赛一开始,我就基于一种几乎等同于 Chris CV 的方法来验证我的模型。为此,我通过启发式方法重构了 drug_id,包括聚类和许多手动调整。官方 drug_id 在比赛后期才公布,但许多参赛者可能已经过拟合了。一旦任何人获得了不错的 Public LB(公开排行榜)分数,就很难怀疑这是过拟合。冲榜的诱惑和快感是如此强烈。

下表显示了同一模型在两种方法下的 CV 结果。我的方法效果几乎和 Chris CV 一样好。我在比赛最后切换到了 Chris CV,因为它的表现稍好一些。我认为 Chris CV 擅长处理具有大量观测值的 drug_id,并且与实际的划分方式相似。

方法 本地 CV Private 排行榜 Public 排行榜
重构 drug_id + 我的 CV 0.017173034 0.01613 0.01826
官方 drug_id + Chris CV 0.016907018 0.01612 0.01825

结果

Public 排行榜: 0.01812 (第14名)
Private 排行榜: 0.01602 (第5名)

同比赛其他方案