【数据挖掘】Kaggle ICR 医疗诊断大赛金牌方案汇总

42 篇文章 1 订阅
37 篇文章 6 订阅

赛题名称:ICR - Identifying Age-Related Conditions

赛题链接:https://www.kaggle.com/competitions/icr-identify-age-related-conditions

赛题背景

年龄只是一个数字,但随着年龄的增长会带来一大堆健康问题。从心脏病和痴呆到听力损失和关节炎,衰老是许多疾病和并发症的危险因素。不断发展的生物信息学领域包括对有助于减缓和逆转生物衰老以及预防与年龄相关的主要疾病的干预措施的研究。数据科学可以在开发新方法来解决各种数据问题方面发挥作用,即使样本数量很少。

目前,XGBoost 和随机森林等模型用于预测医疗状况,但模型的性能还不够好。在处理生命垂危的关键问题时,模型需要在不同案例之间做出可靠且一致的正确预测。

赛题方向

数据挖掘

赛题任务

本次比赛的目标是预测一个人是否患有三种疾病中的任何一种,参赛者将使用健康特征数据的测量来解决生物信息学中的关键问题,创建一个针对健康特征测量值进行训练的模型。

评价指标

使用对数损失评估提交。总体效果是每个班级对最终分数的重要性大致相同。

每个观察值要么是类的0,要么是类的1。对于每次观察,您必须提交每个类别的概率。

数据描述

比赛数据包含与三种与年龄相关的状况相关联的五十多个匿名健康特征。您的目标是预测受试者是否被诊断出患有这些病症之一——二元分类问题

请注意,这是一个代码竞赛,其中隐藏了实际的测试集。在此版本中,我们以正确的格式提供了一些示例数据,以帮助您编写解决方案。当您提交的内容被评分时,此示例测试数据将被替换为完整的测试集。完整测试集中大约有 400 行。

  • train.csv - 训练集

  • test.csv - 测试集。您的目标是预测该集合中的受试者属于两个类别中的每个类别的概率。

  • greeks.csv:补充元数据,仅适用于训练集。

  • sample_submission.csv - 格式正确的示例提交文件。

竞赛奖金

  • 第一名 - $18,000

  • 第二名 - $15,000

  • 第三名 - $10,000

  • 第四名 - $7,000

  • 第五名 - $5,000

  • 第六名 - $5,000

金牌方案

第一名

https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430843

我的解决方案完全基于一些复杂的DNN

失败方案:

  1. 渐进式增强明显过拟合,尽管我在此用的时间很少,也没有做太多调优。

  2. “希腊字母”毫无用处。我认为是因为我们对测试数据没有希腊字母。

  3. FE导致过拟合。

有效方案:

  1. 基于变量选择网络的DNN。

  2. 没有对数据进行“随意”归一化,如MinMaxScaler或StandartScaler,而是对每个特征使用了8个神经元的线性投影。

  3. 巨大的dropout值:3个主要层为0.75->0.5->0.25。

  4. 在最后重新加权概率非常有效。

  5. 10折交叉验证,每个fold重复10-30次,根据交叉验证选择每个fold的2个最佳模型(是的,交叉验证在这个比赛中确实有效!)。训练非常不稳定,单个fold的交叉验证分数可能从0.25变到0.05,部分是由于较大的dropout值,部分是由于训练数据较少。这就是为什么我为每个fold选择了2个最佳模型。

  6. 交叉验证有点像多标签。首先,我训练了一些基线DNN,收集所有验证数据,并按以下方式标记: (y_true = 1 and y_pred < 0.2) 或 (y_true = 0 and y_pred > 0.8) -> 标签1,否则标签0。所以,这个标签是一种“难以预测”的标记。另一个标签当然是目标本身。

第二名

https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430860

这里是我们的解决方案:

  • 和许多人一样,我们对测试集使用了time和max(time)+1。

  • 我们删除了time为None的行,当我用UMAP玩数据时,注意到一个奇怪的聚类远离其他所有数据,正是time缺失的行。

  • 用-100填充NaN值,中位数或低数值可能无关紧要。

  • 使用了我在其他比赛中看到的一种技术:用UMAP降维,然后用KMeans给聚类贴标签,这没带来很多分数提升,但方法在那里。

  • 我们手工做了特征排列,删除任何使得分数稍微变差的列。

  • 对于模型,我们使用了CatBoost、某个公开notebook中的XGB参数、和TabPFN。LGBM似乎对我不起作用,因为它总是降低我的交叉验证分数。

  • 然后我们只是对测试集平均我们的预测,就这样。

还要提的是,我们想试着编辑TabPFN以获得词向量,并且我们想过fine tune TabPFN,但没成功。我也尝试用Optuna优化我的模型,但没用。堆叠(Stacking)也没能提高我的分数。

第三名

https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430978

最终的结果就是当时基于catboost模型的一个baseline代码,它的public score是0.21。

由于特征是匿名的,与健康相关的医疗特征,我最初的想法是通过不同特征之间的比率构建新的特征,就像体检报告中的一些指标也是通过其他指标的比率计算出来的。

在此之前,我计划通过corr过滤一些匿名特征,以免构建太多无效的特征。然而,没有进一步的尝试,最终的代码仍然是所有特征的交叉计算。

这个比赛中更有效的操作应该是以下两点:

  1. 一是特征的交叉计算

  2. 二是catboost模型

因为我用同样特征的lightgbm模型在public score上得到了0.22,private score上得到了0.38。

第四名

https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/431173

来看看我解决方案的关键特征:

  1. 使用CatBoostRegressor(默认超参数)进行回归递归填充特征中的空缺

  2. greeks['Epsilon'] 未知的值用 greeks['Epsilon'].min()填充

  3. row_id - 根据Epsilon排序后的train和test中的行号

  4. 对每个'Alpha'、'Beta'、'Gamma'、'Delta'的值训练CatBoostClassifier以创建特征 - 对应这些类别的值的概率。为避免在test上的预测过度训练,我使用了5折交叉验证然后简单平均

  5. 最终模型- CatBoostClassifier没有任何超参数调优和特征消除

在后续的尝试中,我试图通过发明各种新的特征来扩展特征空间,填补空白的复杂化,例如,我试图预测epsilon和row_id,但在交叉验证中没有得到任何改进,而且结果变得更不稳定,所以我意识到这些复杂化只会导致过度训练,于是我停止了这些尝试。

第五名

https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430907

主要要点:

  1. 为每个AlphaBeta GammaDelta训练了模型,并将这些概率堆叠起来作为特征使用。

  2. 即使在训练集上没有缺失值,也为每个特征训练了lgbm补全模型。

  3. 使用RepeatedStratifiedKFold(n_splits=5, n_repeats=5)和一个基本的catboost模型。

注意:去除补全模型对分数没有影响,所以主要优势是堆叠希腊字母。

在这个解决方案之后,我尝试了暴力特征工程和其他建模方法,但它们在public上没有帮助,所以我将其作为最终提交。

第六名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/431048

第七名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/431028

第八名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430897

第九名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430906

第十三名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/431312

第十五名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/431415

第十七名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/430937

第十九名:https://www.kaggle.com/competitions/icr-identify-age-related-conditions/discussion/431099

关注下方《学姐带你玩AI》🚀🚀🚀

回复“ICR”免费领取金牌方案baseline代码合集

码字不易,欢迎大家点赞评论收藏!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值