本文介绍了生存分析在产品分析中的多种应用场景,包括用户流失预测、功能采用时间、转化率分析等。文章通过电信客户留存案例展示了Kaplan-Meier生存曲线的解读方法,说明了数据格式要求,演示了Python lifelines库的基本用法,并对比了Kaplan-Meier、Cox比例风险模型和Nelson-Aalen三种估计器的适用场景。
1 生存分析简介
1.1 打破刻板印象
大多数数据科学家听到"生存分析"时,会想到医学研究或流失曲线。
但这种技术涵盖的内容远不止这些!
根据我的经验,生存分析是你在产品分析中可以使用的最通用的工具之一。
就在上周,我用它来支持我为增长团队做的一项分析,在那里我们试图了解我们的赢回活动(win-back campaigns)的效果。

所以我想,向你介绍这种统计方法,并告诉你何时使用它,以及如何有效地将其应用到你的分析中,会是一个好主意。
好了,让我们开始吧!
1.2 何时使用生存分析
生存分析 在试图理解某事发生需要多长时间 时非常有用。当一些用户还没有做那件事(这被称为删失数据 censored data),但你仍然想将他们纳入分析时,它特别有用。
以下是它可以帮助你回答的一些问题:
- 用户多久会流失?
- 采用一个功能需要多长时间?
- 某人在注册后X天仍然活跃的可能性是多少?
- 用户从免费转为付费需要多长时间?
- 在活动或功能发布后,参与度通常何时下降?
这就是为什么每个在科技领域工作的人都应该将它添加到自己的工具箱中。
总之,生存分析在以下情况是理想的:
- 你关心的是时间,而不仅仅是某事是否发生
- 事件可能不会发生在每个人身上(又称删失数据)
2 生存曲线的解读
2.1 Kaplan-Meier曲线示例
这是使用Kaplan-Meier估计器(我们将在文章后面讨论估计器)的典型生存曲线的样子。
在这张特定的图表中,我们可以看到电信客户随时间保持订阅的概率,突出显示了这种可能性如何随着每个月的过去而稳步下降:

2.2 曲线各部分含义
现在,这是你如何解读曲线的不同部分:

3 数据格式与Python实现
3.1 理想的数据格式
现在让我们谈谈如何在实践中使用它,这一切都从数据开始。
这是你的数据的理想格式,以便更容易绘制生存曲线:

这基本上是你应该拥有的两列:
duration:你观察用户多长时间。event:事件是否发生,或者他们只是被_观察_到那个时间点。
好了,一旦有了数据,你就可以开始绘制曲线了......
3.2 使用lifelines库
用Python绘制生存曲线非常直接,使用 lifelines 库。
以下是一个快速示例:

4 估计器选择
4.1 三种常用估计器
生存分析中的估计器是用于计算和可视化事件(如流失)的概率如何随时间变化的统计方法。
生存分析中有几种估计器,但最常用的包括:
- Kaplan-Meier: 当你想要一个非参数、易于解读的生存曲线时使用。非常适合探索性数据分析(EDA)或比较组。
- Cox比例风险: 当你想要理解特征如何影响生存时间时使用(例如,订阅层级是否影响流失速度?)
- Nelson-Aalen: 当你更关注累积风险而不是生存概率时使用(在产品工作中较少见)。
顺便说一下,DATAtab 有一个很棒的工具,可以帮助你可视化和理解每个估计器的工作原理。我强烈推荐你去看看:

5 实践与总结
5.1 动手尝试
如果你想运行我作为示例展示的代码(还有一些额外的内容),请在这里查看Google Collab notebook。

5.2 核心要点
大多数人跳过_生存分析_,因为它听起来很学术。但如果你想更像一个产品或高级数据科学家那样思考,这个工具值得放在你的后口袋里。
如果这篇文章你能带走一样东西,那就让这个简单的心智模型留在你心中:
当你回答_"多久直到......"或"X在Y时间之前发生的可能性是多少?"_时,生存分析应该在你的考虑范围内。