生存分析不难!轻松了解 R 中的 Kaplan-Meier 模型
您听说过生存分析吗? 第一次听到它时,您可能会觉得很吓人,但实际上它并不复杂。 今天,我们就来看看 卡普兰-梅耶生存分析模型R 语言入门我要试试。
生存分析通常用于生命科学或医学研究、 客户流失分析或 产品使用寿命也是一种常用来衡量治疗效果的强大工具。让我们以生存分析的经典模型卡普兰-梅尔模型为例。
什么是 Kaplan-Meier 生存分析?
生存分析是对 事件(如关闭、流失、死亡等)这种模式可以让您分析某个事件发生前的时间,例如 客户流失概率或 产品多久会失效测量
卡普兰-梅耶模型创建了一条生存曲线,并利用 事件在一段时间内发生的可能性直观。每当这条曲线下降,就说明发生了一个事件。
通过简单示例学习卡普兰-梅耶模型
现在,让我们来看一个可以在现实生活中应用的简单例子。 客户流失分析例如,我们可以假设有 10 位客户正在使用我们的服务。我们可以使用 Kaplan-Meier 模型来分析客户流失的概率。
我们将使用 R 代码将这一过程可视化。
# 加载所需的库
library(survival)
library(survminer)
# 创建 10 个客户的数据
# 记录客户使用服务的年份和流失的年份
data <- data.frame(
customer = 1:10、
start_year = rep(2020, 10), # 所有客户从 2020 年开始使用服务
leave_year = c(2021, NA, 2022, NA, 2023, 2024, NA, NA, 2023, 2024) # 如果他们没有离开,则为 NA
)
# 计算客户使用服务的时间
data$time_in_service <- ifelse(is.na(data$leave_year), 2024 - data$start_year, data$leave_year - data$start_year)
# 以 1 或 0 显示客户是否离开(1:离开,0:仍在使用)
data$status <- ifelse(is.na(data$leave_year), 0, 1)代码说明:
- 生成数据:为 2020 年开始使用服务的 10 位客户创建数据。一些客户在 2021 年开始流失,而另一些客户仍在使用服务。
- 计算流失期计算每位客户使用服务的年限。未流失的客户被视为使用服务至 2024 年。
- 反弹与否显示客户是否流失,1(已流失)和 0(仍在使用)。
可视化 Kaplan-Meier 生存曲线
现在,让我们根据数据绘制一条 Kaplan-Meier 生存曲线。让我们绘制一条曲线,直观地表示客户使用我们服务的时间。
应用 # Kaplan-Meier 生存模型
fit <- survfit(Surv(time_in_service, status) ~ 1, data = data)
可视化 # 生存曲线(明确传递数据)
ggsurvplot(fit、
data = data, # 将数据传给 ggsurvplot
conf.int = TRUE, # 显示置信区间
xlab = "使用服务的时间长度(年)",# x 轴标签
ylab = "使用服务的客户百分比",# y 轴标签
title = "使用服务的客户生存曲线", # 图表标题
palette = "蓝色", # 图表颜色
risk.table = TRUE, # 为每年添加风险表
ggtheme = theme_minimal()) # 应用最小主题代码说明:
- 应用卡普兰-梅耶模型客户流失:对客户数据应用 Kaplan-Meier 生存模型,计算客户流失的概率。
- 可视化生存曲线:
ggsurvplot根据客户使用服务的时间,使用函数绘制客户生存曲线。conf.int = TRUE表示置信区间,以增加对结果的置信度。 - 添加风险表注:在图表下方添加一个表格,显示每年使用该服务的客户数量。
解读可视化结果

1. 生存曲线概述
- 该图显示了使用您服务的客户的生存曲线。
- x 轴表示服务年限,单位为年、 y 轴表示仍在使用该服务的客户百分比。
- 最初,所有客户(100%)都在使用服务,随着时间的推移,客户流失,生存曲线逐渐下降。
2. 曲线上的关键点
- 该图是一个 0 年并初步显示所有客户(10)都在使用该服务。
- 1 年并出现第一次流失,此时存活率曲线会从 100% 变为大约 90%到底部。
- 2 年然后会再次出现流失,导致生存曲线下降到 约 80%到底部。
- 3 年 此后,存活率曲线又开始回落、 60%的客户保留并继续使用该服务。
- 4 年 此时,存活率曲线进一步下降,最后定格在大约 50%是唯一的客户。
3. 置信区间(灰色阴影)
- 蓝色生存曲线周围 灰色调是 置信区间为
- 这显示了各点存活概率的置信度,阴影越宽表示预测的不确定性越大。
- 存活率曲线每向下倾斜一次,置信区间就会扩大一次,从而增加了预测的不确定性。
4 风险人数表
- 图表底部有一个名为 "风险人数 "的表格。
- 该表显示了每年仍在使用该服务的用户数量。
- 0 年 目前,所有 10 位客户都在使用这项服务。
- 1 年 之后,还剩下 9 位顾客、 2 年 后来是 8 人、 3 年 后来,有六个人仍在使用这项服务。
5.解读曲线
- 存活率曲线下降曲线向下倾斜的部分表示客户放弃了服务。服务使用时间越长,客户流失越多,存活率曲线逐渐下降。
- 最后存活率用户数量:四年后,有一半(50%)用户仍在使用该服务,这意味着其他 50% 用户已离开该服务。
该图使用 Kaplan-Meier 生存分析法直观地显示了客户使用服务的时间以及他们的流失趋势。您可以清楚地了解随着时间推移客户流失的百分比。
总结:Kaplan-Meier 模型 R 分析不再困难!
今天,我们揭开了 Kaplan-Meier 生存分析模型的神秘面纱,甚至还使用 R 将其可视化。这个模型起初可能看起来很吓人,但一旦将其应用到客户流失分析等实际案例中,就会变得更容易理解。希望您今后能将此模型用于各种数据分析!
一次性复制下面的全部代码,并添加 RStudio如果您想了解 Kaplan-Meier 模型在现实世界中的应用,请查看 黑白厨师也难逃的米其林魔咒:《R》分析的故事 希望您能回顾一下这篇文章。
#F 完整 R 代码
# 加载所需的库
library(survival)
library(survminer)
# 创建 10 个客户的数据
# 记录客户使用服务的年份和流失的年份
data <- data.frame(
customer = 1:10、
start_year = rep(2020, 10), # 所有客户从 2020 年开始使用服务
leave_year = c(2021, NA, 2022, NA, 2023, 2024, NA, NA, 2023, 2024) # 如果他们没有离开,则为 NA
)
# 计算客户使用服务的时间
data$time_in_service <- ifelse(is.na(data$leave_year), 2024 - data$start_year, data$leave_year - data$start_year)
# 以 1 或 0 显示客户是否离开(1:离开,0:仍在使用)
data$status <- ifelse(is.na(data$leave_year), 0, 1)
应用 # Kaplan-Meier 生存模型
fit <- survfit(Surv(time_in_service, status) ~ 1, data = data)
可视化 # 生存曲线(明确传递数据)
ggsurvplot(fit、
data = data, # 将数据传给 ggsurvplot
conf.int = TRUE, # 显示置信区间
xlab = "使用服务的时间长度(年)",# x 轴标签
ylab = "使用服务的客户百分比",# y 轴标签
title = "使用服务的客户生存曲线", # 图表标题
palette = "蓝色", # 图表颜色
risk.table = TRUE, # 为每年添加风险表
ggtheme = theme_minimal()) # 应用最小主题




