返回列表

4th place: Factorized modelling approach

642. CIBMTR - Equity in post-HCT Survival Predictions | equity-post-HCT-survival-predictions

开始: 2024-12-04 结束: 2025-03-05 临床决策支持 数据算法赛
第四名:因子化建模方法

第四名:因子化建模方法

作者:Herra Huu (Grandmaster)

发布时间:2025-03-06

竞赛排名:第 4 名

分数:Private 0.69936, Public 0.69724

总运行时间:4 小时

*此版本还包括 LightGBM 模型(下文未提及),但在集成中影响甚微

作为对比,单一模型分数(无 Bagging):

模型 Private 分数 Public 分数 运行时间
CatBoost 0.69784 0.69500 30 分钟
XGBoost 0.69765 0.69538 5 分钟
TabM 0.69636 0.69383 6 分钟
LightGBM 0.69793 0.69516 5 分钟

在长假之后重返 Kaggle 很有趣。尤其是考虑到这是一场不错的“老式”竞赛,数据集不大且为表格数据。以下是我解决方案的简要总结。

引言

本次竞赛的目标是根据异体造血干细胞移植(allogeneic HCT)事件的风险评分对患者进行排名。作为第一步,思考完美解决方案是什么样的是很有用的。在这种情况下,完美的解决方案应该是:

  1. 所有无事件患者(efs=0)应位于列表底部(它们之间没有定义的顺序)。
  2. 对于 efs = 1 的患者,按事件时间排序。

显然,这个排名问题是不可微的,尤其是因为 1) 引入了类似阶跃函数的行为用于期望排名。处理此类问题的一种常见方法是引入原始任务的某种软/平滑版本。然而,根据我的经验,这种方法往往会使训练过程中的事情变得不稳定,或者如果平滑得太多,就不能很好地匹配原始问题。

因此,本次竞赛我的主要想法是直接遵循步骤 1-2),并将问题分为两部分:

  1. 预测事件发生的概率
  2. 预测有事件患者中的预期排名位置

最后,给定这两个预测,我们可以将预期排名位置计算为风险评分。

模型公式:

risk_score = P(event = 0)*(s0_group/2) + P(event = 1)*(s0_group + (1-s0_group)*E[rank% | event = 1])
, 其中 s0_group = sum_{race_group = group} P(event = 0) / N_group

P(event):

  • 针对 efs 事件的二分类问题。
  • 删失数据点被视为部分观测值。
  • 这些数据点的权重计算为 Kaplan-Meier 估计量给出的累积密度,并缩放到 (0,1) 范围。

E[rank% | event = 1]:

  • 条件回归模型,用于预测确实发生事件的数据点的基于时间的排名。
  • 模型仅使用 efs = 1 的数据点进行训练。
  • 目标值为 rank% = rank(-time)/N。
  • 因此,目标值介于 0 和 1 之间,0 = 最长时间,1 = 最短时间。
  • 对于所有算法,我使用形式为 inverse_normal_cdf(rank%) 的目标变换("z-score"),然后通过 normal_cdf(pred) 将预测值转换回百分比。

算法:

对于这两个任务,使用以下包/算法实现了三种不同的模型:

  • TabM
  • CatBoost
  • XGBoost

因此,总共训练了六个模型。首先通过计算加权和来合并它们的预测(分别针对时间和事件使用不同的权重),最后通过上述公式计算风险评分。

同比赛其他方案