问题描述
我试图了解如何计算数据集中每个 ID 的预期时间。我有一个看起来像数据框形状的数据集 (500,4):
ids var1 var2 churn time
0 1.738434 324 0 21.0
1 1.541176 12 0 4.0
2 2.049281 753 1 5.0
3 1.929860 563 0 16.0
4 1.595027 22 0 5.0
... ... ... ... ...
让我们使用 lifelines
来计算期望值,使用 predict_expectation
或为每个 ID 取生存函数的 median
。
第 1 部分:计算期望值
cph = CoxPHFitter()
cph.fit(data,"time","churn")
censored_df = data[data["churn"]==0]
cph.predict_expectation(censored_df) #conditional_after=censored_df["time"])
#or
cph.predict_median(censored_df) #conditional_after=censored_df["time"])
对于 scikit-survival 是使用 predict_survival_function()
一致性指数 = 0.82
第 2 部分:将结果与结果进行比较
所以现在我使用两种方法创建了一个表格:predict_expectation()
("expected" column) 和 predict_median
("median" column) 如下所示:
对于 scikit-survival,它只能使用中值方法计算 (请不要说我知道 Lifelines\scikit-learn 中的其他算法可能会有所不同,但请专注于想法)
ids churn time expected diff_expectation median diff_median
0 0 21.0 21.526222 0.526222 8.0 -13.0
1 0 4.0 21.819911 17.819911 13.0 9.0
3 0 16.0 23.189344 7.189344 9.0 -7.0
4 0 5.0 22.090598 17.090598 12.0 7.0
6 0 8.0 21.545022 13.545022 10.0 2.0
... ... ... ... ... ... ...
带有“diff”的列代表各自预测列与“时间”之间的差异
问题
-
为什么预期的时间如此偏离?
-
方法有什么问题吗?我应该在整个数据中进行预测(审查+未审查)还是仅使用审查? (我已经尝试了三种可能的排列,只有经过审查,只有未经审查,两者都有,而且仍然关闭)。我的理解是,如果每个 ID 的生存曲线收敛到 0(未经审查的数据),您可以使用曲线下的面积进行计算,如果经过审查,则需要使用 surv 曲线的中位数。 (我已经做了上面的计算,记住这一点)
-
我怎样才能获得更接近的估计值?
-
如果运行实验并仅在未经审查的数据上拟合模型,然后对相同的未经审查的数据进行预测,您是否应该得到非常接近的估计,对吗?事实并非如此。您应该能够通过从预期中位数中取平均值来检查这一点,它应该与实际值的中位数相似,对吗?或者你可以检查“diff”列的平均值,看看它是否至少平均为 0,但事实并非如此,这表明模型中存在一些潜在的偏差
这种现象发生在任何数据集上,您可以尝试使用 from lifelines.datasets import load_leukemia
数据集复制此示例,即使您的相关索引为 0.9,这种情况仍然会发生。
以下是我发现的一些资源,可以解释这一点,但我并不完全理解,如果有人能将其分解得更细一些,那就太好了。
来源
- https://github.com/sebp/scikit-survival/issues/94
- https://github.com/sebp/scikit-survival/issues/190
- https://scikit-survival.readthedocs.io/en/latest/user_guide/understanding_predictions.html
- https://lifelines.readthedocs.io/en/latest/fitters/regression/CoxPHFitter.html#lifelines.fitters.coxph_fitter.CoxPHFitter.predict_expectation
您可以在此处找到完整编码的示例:https://github.com/felipe0216/survival_examples/blob/main/predict_expectation_scikit.py
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)