返回列表

11 public, 27 private LB solution No Tg magic tricks

667. NeurIPS - Open Polymer Prediction 2025 | neurips-open-polymer-prediction-2025

开始: 2025-06-16 结束: 2025-09-15 化学与材料 数据算法赛
11 公开榜,27 私有榜解决方案:无 Tg 魔法技巧
作者: Andrey Chankin (bluepill) [MASTER]
发布时间: 2025 年 9 月 17 日
竞赛排名: 第 27 名
标题: 11 公开榜,27 私有榜解决方案:无 Tg 魔法技巧

11 公开榜,27 私有榜解决方案:无 Tg 魔法技巧

大家好,Kaggle 伙伴们!

以下是我解决方案的简要说明。

特征生成

  1. 最初我从 RDKit 及其描述符和指纹开始(约 9500 个特征)
  2. 在发布了一个包含 mordred 特征的笔记本后,我研究了不同的特征生成方法,添加了 mordred-community 特征,这在 CV 上带来了提升(约 13,000 个特征)
  3. 我浏览了我在 pubmed 和 github 仓库上找到的论文,添加了专家制作的自定义特征(约 15,000 个特征)
  4. 直到最后发现了 SKFP 库,它包含了上述所有描述符和 FP,组合后的特征数量可能超过 100,000,但我丢弃了 n_features > 3000 的 FP 和所有 3D 特征,因为在推理阶段计算它们需要很长时间(剩余约 27,000 个特征)

特征选择

考虑到非常高数量的特征,我需要显著减少它,我的方法如下:

  1. 单独存储每个特征子集(例如,1 个 dataframe 用于 AtomPair FP,另一个用于 TT FP 等)
  2. 在此数据上运行“深度”(2000 个估计器,max_depth=6)lgbm boosting,保存特征重要性并使用顶部特征子集重新运行模型,子集的 n_features 从网格中选择,如(16, 32, 64 等,最多 1000 个特征)
  3. 保存每个顶部特征子集并将它们合并到一个单独的 dataframe 中
  4. 重复步骤 2,根据 CV 性能选择顶部特征

来自特征生成阶段的数据集 1-4 的顶部特征数量有所不同,但对于 Tg/Tc/FFV/Rg,通常选择了 50-90 个特征,其中约 50% 来自 mordred FP。对于 FFV,平均为 300-600 个。

外部数据集

我总共找到并清理了约 30 个针对不同目标的数据集,但是,除了已经发布的数据集外,只使用了其中的 3 个:2 个用于 Tc,1 个用于 Density。我怀疑它们的影响,因为 LB 只有 8%,但决定保留 RadonPy 数据集。

如何检查影响

方法 #1

  1. 检查分布,如果有显著偏移 - 不使用
  2. 检查 SMILES 字符串,如果看起来与训练数据格式不同 - 不使用
  3. 检查 SMILES 重叠值,如果值显著不同 - 不使用(除了大 Tg 文件,出于某种原因它带来了提升,尽管重叠差异巨大)
  4. 如果以上条件都不满足 - 估计重叠上的 MAE
  5. 尝试平移外部数据以最小化重叠上的 MAE
  6. 如果 MAE > 原始数据平均预测 MAE - 不使用

在最终提交中,我使用了通过这种方式选择的数据集

方法 #2

  1. 在原始数据上训练模型
  2. 估计 MAE 分布
  3. 对于每个外部源预测值
  4. 仅保留 MAE < 原始数据 CV MAE 均值的样本

我认为这也可能带来一些提升,但对 Tg 没有效果,所以我放弃了这个想法

评估提升效果

我决定分别估计每个目标的性能,并用均值填充其他目标,以确保我知道提升来自哪里。这种方法有一个显著的问题 - 测试单个模型你需要为 5 个目标花费所有 5 个每日提交名额,直到最后 2 天我还没有提交我最好的组合。在最后 2 天,不幸的是,我在组合最终解决方案时犯了一些愚蠢的错误,失去了 6/10 的提交名额,剩下的 2/4 失败是因为我用完了 GPU 配额,尽管我有 45 小时的 google 订阅。

我发现来自平均值提交的最显著提升是由 Rg 目标实现的,其他目标大致相同。有趣的部分是,如果没有 @dmitryuarov 提供的外部数据源,Tg 的得分只有 112,我本应该觉得可疑,但我没有。

使用的模型

我阅读了 POINT2 论文,决定使用他们列出的一些方法。

在最终提交中,我使用了:

  1. 来自 @alejandrolopezrincon 公开笔记本的 XGB,这是一个不错的 65-66 基线,我只是给 Rg 目标添加更多特征就可以做到 62-63。
  2. GNN,最初从 POINT2 github 复制,但后来重写,带来了不错的提升。
  3. GREA,也来自 POINT2,同样重写了。
  4. MLP,同上。
  5. TabPFN,在 CV 阶段整体表现最好。
  6. TabNET - 质量低,未提交。
  7. 来自 @nakanishiwataru 的 ChemBERTA - 我决定不使用它以节省 GPU 配额,且结果比 MLP 平均值更差

我不会在这里深入细节,主要是因为进行了数百次实验,但我会提供每个目标的简要结果,从最好到最坏排序。

目标 1 2 3 4 5 6
Tg XGB TabPFN MLP GREA GNN ChemBERTa
FFV GREA XGB TabPFN GNN MLP ChemBERTa
Tc TabPFN GREA GNN XGB MLP ChemBERTa
Density GREA GNN TabPFN XGB MLP ChemBERTa
Rg XGB TabPFN ChemBERTa MLP

Rg GREA/GNN 由于 CV 性能低未提交

增强方法在我的测试中对 Rg 和 Density 有效。

我想说,可能有很多不同的实验,我相信 TabPFN 和 boosting 可以做得更好,因为我没有提交名额来选择最佳特征子集。

最终融合

Aug - 表示是否使用公开笔记本中提出的增强方法
high/mid/low w - 表示融合预测值的权重高低

目标 Aug boosting TabPFN GREA/GNN MLP ChemBERTa
Tg - + 高权重 + 高权重 + 低权重 + 中权重 -
Tc - + 中权重 + 高权重 + 高权重 + 低权重 -
FFV +- + 中权重 + 中权重 + 高权重 + 中权重 -
Density + + 中权重 + 中权重 + 高权重 + 中权重 -
RG + + + 低权重 - - -

总结

我在发现第一个测试数据问题时加入了这次竞赛,怀疑此后是否值得参与。出于某种原因,我在过去一年参加的 3/4 竞赛都有 major 数据/指标问题、指标黑客、数据泄露,现在是测试中不同的测量单位。

总的来说,对我来说,这是一个巨大的失望,甚至不是因为我竞争金牌却只得到了银牌,而是因为我不知道我的真实结果。一些花哨的技巧,比如预测乘法,并不能减轻这种挫败感。

非常强的解决方案可能会掉出金牌区,潜在地使主办方失去新的 SOTA 方法,但他们似乎完全不感兴趣。

我想感谢所有与社区分享并突出数据问题的人,@angantyr @dmitryuarov @oleggromov 和其他人。

同比赛其他方案