将生存分析应用于分组

Python 中的生存分析

Shae Wang

Senior Data Scientist

按揭问题

DataFrame 名称:mortgage_df

id property type duration paid_off
1 house 25 0
2 apartment 17 1
3 apartment 5
... ... ... ...
100 house 30 1

Property type:按揭所融资房屋类型(house 或 apartment)

房屋与公寓按揭的还清时间有差异吗?
Python 中的生存分析

比较各组的生存分布

我们常需评估不同受试组的生存(或事件/生存概率)是否存在差异。

  • 受试者的维度属性
    • 如不同类型的按揭、不同品牌的轮胎
  • 不同实验组
    • 如处理组 vs. 对照组
  • 同一维度属性的不同取值
    • 如高收入 vs. 低收入家庭
Python 中的生存分析

生存分组比较类型

1. 点估计或生存统计是否不同?
  • 比较两组在某一时点的生存概率
  • 比较两组总体存活(未事件)比例
Python 中的生存分析

生存分组比较类型

2. 潜在分布是否不同?
  • 需要形式化的假设检验
Python 中的生存分析

生存分组比较类型

3. 某个属性对生存的影响有多大?
  • 需要基于回归的建模框架
Python 中的生存分析

可视化组间差异

为每个组拟合 Kaplan–Meier 生存函数,并并排可视化其生存曲线。

优点

  • 使用与解释简单直观。
  • 非参数,更灵活,适配不同生存分布。
  • 直观展示生存函数差异的有用工具。
Python 中的生存分析

识别分组

DataFrame 名称:mortgage_df

id property type duration paid_off
1 house 25 0
2 apartment 17 1
3 apartment 5 0
... ... ... ...
100 house 30 1

为每个组创建布尔掩码。

house = (mortgage_df["property_type"]=="house")
apt = (mortgage_df["property_type"]=="apartment")

若只有 2 个组,只需 1 个掩码;另一组可用取反表示。

Python 中的生存分析

拟合并绘制生存曲线

创建一个图形并实例化 KaplanMeierFitter

ax = plt.subplot(111)
mortgage_kmf = KaplanMeierFitter()

mortgage_kmf 拟合到 house 组,并在图 ax 上绘制。

mortgage_kmf.fit(duration=mortgage_df[house]["duration"], 
                 event_observed=mortgage_df[house]["paid_off"],
                 label="Houses")
mortgage_kmf.plot_survival_function(ax=ax)
Python 中的生存分析

拟合并绘制生存曲线

mortgage_kmf 拟合到 apartment 组,并在图 ax 上绘制。

mortgage_kmf.fit(duration=mortgage_df[apt]["duration"], 
                 event_observed=mortgage_df[apt]["paid_off"],
                 label="Apartments")
mortgage_kmf.plot_survival_function(ax=ax)
Python 中的生存分析

并排可视化

plt.show()

公寓 vs. 独栋的 Kaplan–Meier 生存曲线。

Python 中的生存分析

解读各组的生存曲线

公寓 vs. 独栋的 Kaplan–Meier 生存曲线

  • 平均来看,公寓按揭似乎更快还清。
  • 任一时点,公寓按揭已还清的比例更高。

_注意_:若置信区间在某些点重叠,曲线间存在真实差异的可能性更小。

Python 中的生存分析

Vamos praticar!

Python 中的生存分析

Preparing Video For Download...