642. CIBMTR - Equity in post-HCT Survival Predictions | equity-post-HCT-survival-predictions
首先,我想感谢我的队友们这段有趣的旅程。
既然我们知道数据是合成的以及它是如何产生的,我们查看了 SurvivalGAN 论文。正如你在这张图片中看到的,TimeRegressor 是与特征和类别信息一起训练的。因此我们将问题分为两部分:
对于回归部分,我们训练并集成了 2 个模型,将 efs 作为额外特征提供。然后在测试集和验证集上进行推理时设置 efs=1。通过这个技巧,我们估计如果有 efs,efs 时间可以持续多久。我们的模型是 xgboost 和 histgbm。
对于分类,我们使用 RealMLP, HistGBM 和 Catboost 模型,没有进行特征工程。我们通过 CV 上调优的权重对这些模型进行集成。然后我们将它与回归预测结合来计算风险评分:
R = p(efs=1) * p(efs_time | efs=1)
在我们的案例中,p(efs_time | efs=1) 是 sigmoid(-regression_prediction)。
此外,我们训练了一个神经网络来近似竞争指标并直接预测风险评分。它使用树模型的回归预测,并优化近似竞争指标和辅助二元分类损失。
def loss_func(y_risk, y_time, y_efs):
y_risk, y_time, y_efs = y_risk.ravel(), y_time.ravel(), y_efs.ravel()
loss = []
for i in range(len(y_risk)):
if y_efs[i] == 1:
filt = y_time[i] < y_time
s = (y_risk - y_risk[i]).tanh()
loss.append(s[filt])
loss = torch.cat(loss).mean()
return loss
我们将它与我们的主流程进行排名集成(rank ensemble)。
一旦像我们那样将问题分为两部分,即使使用自动化机器学习也有可能获得金牌。
以下是我们使用 AutoGluon 的实验结果:
| AutoGluon 设置 | OOF 分数 | 公共排行榜 | 私有排行榜 |
|---|---|---|---|
| 中等质量 (Medium Quality) | 0.6884 | 0.694 | 0.697 |
| 高质量 (High Quality) | 0.6910 | 0.694 | 0.698 |
| 最佳质量 (Best Quality) | 0.6921 | 0.695 | 0.699 |
Anil 尝试通过调整 OOF 预测上的自定义 sigmoid 函数来改进 efs-classifier 模型的输出:
calibrated_proba = 1 / (1 + np.exp(-beta * (raw_proba - gamma)))
这种校准导致 OOF 提高了约 0.002,但导致公共排行榜下降 0.001,私有排行榜提高 0.001。