我试图了解如何计算数据集中每个 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
或通过获取每个 ID 的生存函数 predict_expectation
来计算期望值。第 1 部分:计算预期值
median
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()
(“预期”列)和
predict_expectation()
(“中值”列),如下所示:对于 scikit-survival 只能通过取中位数来计算
(请注意,我知道生命线\scikit-learn中的其他算法可能会有所不同,但请重点关注这个想法)
predict_median
带有“diff”的列表示相应预测列与“时间”之间的差异问题
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
... ... ... ... ... ... ...
输出的内容与
predict_expectation
不同?更推荐使用哪一款?
predict_median
数据集复制此示例,即使您的一致性指数为 0.9,这种情况仍然会发生。
这里有一些我发现的资源可以解释这一点,但我并不完全理解它,如果有人可以进一步分解它,那就太好了。 来源
您可以在这里找到完整编码的示例:https://github.com/felipe0216/survival_examples/blob/main/predict_expectation_scikit.py