生存分析在R语言中的应用

作为在线零售连锁店Mazon的分析团队负责人,收到了一批有限的优惠,每个客户成本为200美元。如果客户在其整个生命周期内至少消费20000美元,那么这个优惠就能收支平衡。希望尽早锁定那些有可能消费20000美元的客户。拥有他们的会员卡等级信息(白金卡成本较高,金卡成本较低)以及他们对上次营销活动的反应率。已经用这个优惠针对客户进行了一年的营销。现在,希望从过去反应数据中学习,并据此进行针对性营销。需要找出应该针对哪个客户群体进行这个优惠。由于依赖变量是响应活动的时间,这包含了尚未响应的人的删失数据,因此需要使用生存分析。

数据结构

原始数据包括一个唯一ID、两个输入变量和两个目标变量。第一个目标变量是月份,表示客户未完成20000美元总消费的月份数。第二个目标变量是Purchase_2k,表示客户是否最终消费了20000美元。任何尚未消费20000美元的客户不是非响应者,而是删失数据。删失数据是实际响应标签未知的观察结果。例如,客户ID“213”在数据收集时消费了19999美元,他的月份变量将有8的值,Purchase_2k将有0的值。但如果第二天客户213完成了20000美元的消费,因此在收集数据的日期,这个数据不应被视为非响应者,而是一个删失观察。其他直接技术如逻辑回归不能将删失数据纳入模型。然而,生存分析能够考虑它们。

生存分析理论(可选阅读)

生存分析是死亡时间的建模,但在统计学中有着更广泛的用途。任何事件都可以定义为死亡。例如,结婚的年龄、客户在首次访问网站后首次购买产品的时间、员工的流失时间等都可以作为生存分析的模型。假设T是一个随机变量,表示变量时间。定义函数f(t)为这个随机变量的概率分布函数(pdf)。F(t)是累积分布函数,F(t) = Pr { T < t }。现在,生存函数S(t)的数学表达式如下:

S(t) = 1 - F(t)

最后,定义风险函数(事件发生的瞬时率)如下:

h(t) = f(t) / S(t)

从上述关系中,如果已知生存函数、pdf或风险函数中的一个,其他可以很容易地计算出来。估计这些函数有三种解决方案。以下是三种估计方法:

  1. 非参数解:最简单的解决方案,可用于描述性分析,但不能外推以找出删失数据的生存期。
  2. 半参数解:在行业中广泛使用。本文将详细讨论。
  3. 参数解:不会涉及这种估计方法。原因是不同软件找到的参数有不同的符号。将在将来的文章中介绍。

在R中解决生存分析(初始化)

要在R中对生存分析进行建模,需要加载一些额外的包。以下是开始分析所需的初始步骤。

library(survival) setwd("D:/") mydata <- read.csv("D:/worksheet.csv") attach(mydata)

一旦将数据加载到临时内存中,需要创建一个输入变量的数组。注意,到目前为止,非参数和半参数都有相同的标准代码。将在后续过程中使用不同的代码。

Cust <- Customer_id l_resp <- Last_Response_tag Plat <- Platinum_flag span <- Months Resp <- Purchase_2k X <- cbind(l_resp,Plat)

非参数解

生存分析问题的非参数解提供了一个方向性视图,显示哪个档案具有更好的生存率。它不能被外推到更高的时间跨度预测。使用以下步骤创建生存曲线,并深入了解整个投资组合的生存视图。

kmsurv <- survfit(Surv(span,Resp) ~ 1) summary(kmsurv) plot(kmsurv,xlab = "span",ylab="Survival Probability")

以上是在执行代码后得到的图表。让尝试理解这个曲线。这是一个生存曲线,它显示了以下关于人口的事实:

  1. 曲线从低于1的点开始,这意味着一些观察/客户在收到优惠后立即消费了20000美元(在第0个月)。
  2. 6个月后,大约62%的人口存活。换句话说,38%的人口消费了超过20000美元。
  3. 即使在12个月后,也有大约38%的人口存活。这并不意味着他们永远不会消费。但从非参数解中不能外推超过12个月的解决方案。

要深入了解这个人口,让看看个体层的生存曲线。层是人口输入变量的不同水平。在本案例研究中,有两个输入变量的2个水平。

  1. 第一变量(上次响应):任何单个客户要么在上次优惠中响应,要么没有。因此,这个变量有两个水平。
  2. 第二变量(会员资格):提供两种类型的会员资格。客户可以是黄金或白金。同样,这个变量有两个水平。

执行以下代码以获得这些个体水平的生存曲线。

group1 <- l_resp group2 <- Plat kmsurv1 <- survfit(Surv(span,Resp) ~ group1) summary(kmsurv1) plot(kmsurv1,xlab = "span",ylab="Survival Probability")

以上是在执行代码后得到的曲线。请注意,具有更高概率值的曲线是group1 =0或上次活动非响应者。因此,可以从这个图中推断,上次活动的非响应者在任何时间点直到12个月不响应这次活动的概率更高。可以对套餐做类似的练习。同样,发现拥有白金套餐的客户在任何月份内消费20000美元的概率更高。

Cox(1972)引入了一种方法,直接关注使用时间和档案变量估计风险函数。以下是想要解决的风险方程:

coxph <- coxph(Surv(span,Resp)~X,method = "breslow") summary(coxph)

让逐步理解输出结果。

  1. 数据摘要:输出的第一行总结了整个数据。总共有199个观察结果,其中84个观察结果已经发生。
  2. 系数估计:这些估计帮助了解档案对生存率的影响。如所见,两个变量的p值都很低,因此两个变量都是显著的。同时,它们都有正号,这意味着两个事实:
  3. 白金客户消费超过20000美元的概率更高。
  4. 上次活动响应者消费超过20000美元的概率更高。
  5. 边际效应表:与表2相比,这个表没有新内容。但是,它告诉输入变量(在这种情况下只有两个水平变量)的单位增加导致的事件风险增加的百分比。因此,以下是从这个表中得出的见解:
  6. 白金客户有230%更高的机会消费超过20000美元。
  7. 上次活动响应者有290%更高的机会消费超过20000美元。

生存分析为几乎不可能精确解决的一系列问题提供了解决方案。这些解决方案目前在行业中并不常见,但没有理由怀疑其在未来的高实用性。本文介绍了如何在R上获得生存分析解决方案的框架。在未来的文章中,还将介绍如何在SAS中进行生存分析。

是否在业务领域找到了可以实施生存分析的机会?是否觉得这篇文章有帮助?最近是否研究过其他前沿建模技术?结果是否令人鼓舞?请在下面的评论中告诉想法。

如果喜欢刚刚阅读的内容,并希望继续分析学习,

订阅电子邮件,

在twitter上关注

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485