我试图了解如何计算数据集中每个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"])
使用predict_survival_function()
一致性指数=0.82
第2部分:将结果与实际值进行比较
现在我已经使用两种方法创建了一个表:predict_expectation()
(“预期”列)和predict_median
(“中间”列),如下所示:
对于scikit生存率,只能通过取中位数(请不要告诉我,对于生命线中的其他算法,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”的列表示相应预测列和“time”之间的差异
问题
为什么预期的时间如此之短
这个方法有什么问题吗?我应该预测整个数据(审查+未审查)还是只预测审查?(我已经尝试了三种可能的排列方式,只进行了审查,只进行了未审查,两者都进行了,但它仍然处于关闭状态)。我的理解是,如果每个ID的生存曲线收敛到0(未经审查的数据),您可以使用曲线下的面积进行计算,如果它被审查,您需要使用surv曲线的中值。(我做了上述计算,并牢记这一点)
我怎样才能得到更精确的估计
如果进行实验,只在未经审查的数据上拟合模型,然后在相同的未经审查的数据上进行预测,你应该得到一个非常接近的估计,对吗?事实并非如此。你应该能够通过从期望的中间值取平均值来检查这一点,它应该与实际值的中间值相似,对吗?或者您可以检查“diff”列的平均值,看看它是否至少平均为0,但事实并非如此,这表明模型中存在一些潜在的偏差
为什么predict_expectation
输出的内容与predict_median
不同?推荐使用哪一种
这种现象发生在任何数据集上,您可以尝试使用from lifelines.datasets import load_leukemia
数据集复制此示例,即使您的一致性索引中有0.9,这种情况仍然会发生
这里有一些我找到的资料可以解释这一点,但我不完全理解,如果有人能把它再细分一点,那就太好了
来源
您可以在这里找到一个完整编码的示例:https://github.com/felipe0216/survival_examples/blob/main/predict_expectation_scikit.py
目前没有回答
相关问题 更多 >
编程相关推荐