首先,我要感谢组织这次比赛的所有人,谢谢!鉴于数据量较小,比赛结果相当不确定,但我很高兴能够取得好成绩。
现在,我将介绍我的解决方案。
解决方案概述
我的解决方案的要点如下。
基于规则的患者拆分(最重要)
我在查看训练数据时发现,updrs 值极低的健康患者仅在每隔一年进行测试(0、12、24、36、48、60 个月……),而半年数据(6、18、30、42、54 个月……)则不存在。
测试数据中也是如此。对于在第6个月或第18个月没有数据的患者,降低UPDRs值会显著改善LB。
仅使用 visit_month 进行建模
建模基本上仅使用 visit_month 特征。然而,第(1)点中提到的“updrs 值极低的健康患者”即使在经过一段时间后仍然保持较低的 updrs 值,因此这些患者会从建模的训练数据中被移除。补充数据也会被使用,但会移除 month = 5 的患者数据以及仅有 month = 0 数据的患者。
使用的建模方法如下:
- 简单线性回归(参考 AmbrosM 的笔记本)
- 使用 Huber 损失函数的 CatBoost 回归
- 使用 MAE 损失函数的 CatBoost 回归
创建这三种回归模型并通过加权平均来获得更高的 CV。
对于验证,通过尽可能使每个折叠中的目标分布保持一致,进行了分组 K 折交叉验证。
提交选择
对于最后一次提交,选择了以下两个提交结果。
A. LB 和 CV 最佳提交:应用方法 1) 至 2),LB 和 CV 均较高且一致(CV:54.41,LB:54.4)。
B. 仅 CV 最佳提交:对于在测试数据中蛋白质/肽可用的患者,使用具有蛋白质/肽特征的模型结果,而不使用 visit_month 的结果。在这种情况下,CV 改善了约 0.4,但 LB 下降了相同的幅度。(CV:54.02,LB:54.9)
因此,提交 A 的得分更好(Private:60.5)。提交 B 的得分为 61.2。
总之,这是一场非常不确定的比赛,但通过仔细观察数据,并谨慎采用能够同时提高 CV 和 LB 的方法,我取得了不错的成绩。
我基本上都是在 Kaggle 笔记本上完成所有工作的,所以我会公布代码。不过代码尚未重构,可读性较差。
代码