返回列表

10th Place Solution: A feature-centric approach with Multi-Stage selection

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

开始: 2025-06-16 结束: 2025-09-15 化学与材料 数据算法赛
第 10 名解决方案:基于多阶段选择的多特征中心方法

第 10 名解决方案:基于多阶段选择的多特征中心方法

一个简单有效的配方:协调数据 + 特征选择 + LightGBM

作者: Giorgos F
竞赛排名: 第 10 名
发布时间: 2025 年 9 月 19 日

各位 Kaggle 伙伴们,让我分享一下我在这次比赛中的方法。它结合了外部数据集协调、激进的多阶段特征选择以及受物理学启发的特征包。我不依赖复杂的模型架构或后处理调整,而是策略性地从提供的化学结构中构建尽可能 robust 和信息丰富的特征集,然后训练一组定制的 LightGBM 模型。这个代码本建立在社区伟大的工作和想法之上,我要感谢大家的分享。

1. 数据准备:统一且协调的训练集

我最初将原始的 train.csv 与所有提供的补充数据集合并,然后使用了来自各种许可来源的数据集,并通过针对主机数据的线性校准来减少分布不匹配。简单地连接数据是不够的,因为补充数据集来自不同的模拟运行并显示出分布偏移。在合并之前,我对每个新数据集中的重叠样本与原始训练集之间的关系进行了分析。在清理和标准化每个数据集的 SMILES 之后,对于某些目标,我训练了一个简单的线性回归模型来量化偏移。然后使用 resulting slope and intercept 调整额外数据,使其分布与竞赛的真实数据对齐,然后再用于插补。这个协调步骤对于有效利用外部数据至关重要,并显著增加了可用标签的数量。

2. 基本策略:多阶段特征选择

特征池

在增强训练数据集后,我使用 RDKit 描述符、指纹(Morgan -ECFP, Atom Pair, Topological Torsion, MACCS Keys)和自定义特征(如羟基、酯和芳香环)从 SMILES 创建了超过 5,400 个特征的初始池。

统计筛选 (Statistical Gating)

这是最关键的一步。我不是对所有目标使用一个特征集,而是为每个目标创建一个独特的特征集。仅当特征通过以下“统计门槛”时,才会保留用于特定目标:

  1. k-相关性 (k-of-Correlation):它必须在至少 k=2 个相关性测试中显示出统计显著的关系(连续特征为皮尔逊、斯皮尔曼和距离相关)。
  2. 互信息联合 (Mutual Information Union):或者,其互信息 (MI) 得分必须位于该目标所有特征的前 10%。

过滤后,~5,400 个原始描述符减少到每个目标约 2,000–2,800 个。

共线性修剪 (Collinearity Pruning)

为了减少冗余和模型不稳定性,我对五个特征集中的每一个进行了最终的修剪步骤,从任何皮尔逊相关性大于 0.80 的特征对中移除一个特征。
上述过程正确地识别出每个属性的适当特征是不同的,从而创建了相应的子集;例如,最初为 Tg 选择了 2,734 个特征,而仅为 Tc 选择了 1,912 个特征。

物理信息增强 (Physics-Informed Augmentation)

最后,我根据物理直觉定义了两个概念性的特征包:
'Packing_Mobility':与分子大小、形状、分支和分子间力相关的特征(例如 MolWt, TPSA, GraphDiameter)。这些被认为对 Tg, Density 和 FFV 很重要。
'Scale_Stability':与化学稳定性和连通性相关的特征(例如 NumHDonors, EState indices, RotFreedomIdx)。这些被优先用于 Tc 和 Rg。
如果在统计筛选过程中被过滤掉,这些“必须有”的特征会被添加回每个目标的最终特征集中。这一步注入了额外的领域知识,略微增加了最终特征计数(例如,Tg 从 2,734 增加到 2,766)。

3. 建模与训练

我使用了五个不同的 LightGBM 回归器,使用 Optuna 在其专用的特征子集上进行超参数调整。我还使用了标准的 5 折交叉验证 (CV),为了防止任何泄露,特征选择过程(统计筛选和修剪)使用折叠内选择器函数在每个训练折叠内独立重新运行,试图确保验证分数的可靠性。与其他目标相比,Tg 的最终 OOF MAE 是竞赛中数据问题的一个指标。将预测与 CatBoost 平均可以给我第 6 名的成绩,但这次最后的提交在截止日期后 30 分钟才评分,因此不计入成绩!

4. 测试过的想法与经验教训

我简要探索了几个其他想法,但没有纳入最终解决方案:

  • 基于聚类的交叉验证 (Clustering-based CV):使用 Tanimoto 相似度创建化学簇用于 GroupKFold 导致折叠粒度过细且验证分数不稳定。
  • 迁移学习 (Transfer Learning):使用数据丰富目标(如 FFV)的预测作为数据稀疏目标(如 Rg)的元特征并没有产生显著的改进。
  • 集成学习 (Ensembling):将 LightGBM 与 XGBoost 混合并没有提高分数,可能是因为模型捕获了相似的模式。
    稀疏多任务模型:由于所有五个目标的完整标签极度稀疏,MultiTaskLasso 和多任务神经网络都表现挣扎。
  • 额外的物理特征:我尝试了更多关于链动力学和分子间力的特征,但它们除了主要包之外没有增加可测量的增益。

展望未来

这是一场具有挑战性的比赛,希望这是一篇有趣的文章。祝大家在未来的比赛中好运!

同比赛其他方案