生存分析

电信客户流失生存分析:从 Kaplan-Meier 到客户生命周期价值

2026-04-28 | 阅读约 15 分钟 | 基于 Databricks 官方教程

目录

  1. 引言
  2. 数据集介绍
  3. 数据预处理
  4. Kaplan-Meier 估计与 Log-Rank 检验
  5. Cox 比例风险模型
  6. 加速失效时间模型(AFT)
  7. 客户生命周期价值(CLV)
  8. 总结与结论

1. 引言

生存分析(Survival Analysis)是一类用于分析"事件发生时间"的统计方法。 它最初起源于医学领域,用于研究患者的存活时间。如今,生存分析已广泛应用于电信、金融、制造等行业。

为什么用生存分析来研究客户流失?
传统的分类模型(如逻辑回归)只能预测客户是否会流失,但无法回答何时流失。 生存分析不仅建模流失时间,还能处理删失数据(即观测期内未流失的客户), 并输出随时间变化的生存概率曲线。

本文基于 Databricks 官方生存分析教程,对 IBM 电信客户流失数据集应用了三种互补的分析方法:

方法类型核心用途
Kaplan-Meier非参数单变量生存概率估计
Cox 比例风险模型半参数多变量风险建模
加速失效时间模型全参数替代性多变量建模

2. 数据集介绍

数据集来自 IBM, 模拟了一家虚构电信公司的客户数据,共包含 7,043 条客户记录。

核心变量

类别变量说明
目标变量tenure客户在公司的月数
事件指标Churn是否已流失(Yes/No)
人口统计gender, SeniorCitizen, Partner, Dependents客户基本信息
服务订阅InternetService, OnlineSecurity, TechSupport订购的各项服务
账户信息Contract, PaymentMethod, MonthlyCharges合同与付费详情

其中,tenure(存续时间)和 Churn(事件标记)是生存分析的两个必要输入。 对于已流失客户,tenure 表示其在离开前的总月数;对于仍在活跃的客户,tenure 是观测截止时的月数(右删失数据)。

3. 数据预处理

数据管道架构

CSV 原始文件 → Bronze 表(PySpark DataFrame)→ Silver 表(筛选清洗)→ Pandas DataFrame

Bronze 层(原始数据)

Silver 层(清洗数据)

对原始数据应用了两个关键变换:

  1. 流失编码:将字符串列 Churn(Yes/No)转换为数值列 churn(1/0)
  2. 数据筛选:仅保留按月付费(Month-to-month)且有互联网服务的客户
为什么只筛选按月付费客户?
按月付费的客户可以随时取消服务,因此是最容易流失的群体。 一年期和两年期合约客户有合同约束,流失模式不同。 聚焦于按月付费群体使分析更具针对性和实用性。

预处理结果

4. Kaplan-Meier 估计与 Log-Rank 检验

方法概述

Kaplan-Meier(KM)估计是最常用的非参数生存函数估计方法。 它计算在时间 t 之后继续存活的概率:

Ŝ(t) = ∏ti ≤ t (1 - di / ni)

其中 di 是时间 ti 的事件数(流失数),ni 是该时刻处于风险中的人数。

总体水平结果

协变量分层分析

我们对每个分类变量绘制分层 KM 曲线,并使用 Log-Rank 检验 判断组间生存曲线是否存在统计学显著差异(原假设:各组生存曲线相同)。

变量p 值是否显著观察结果
gender(性别)> 0.05曲线重叠,性别不影响流失
seniorCitizen(老年人)< 0.05老年客户流失更快
partner(配偶)< 0.05有配偶的客户留存更久
dependents(家属)< 0.05有家属的客户留存更久
internetService< 0.05DSL 客户比光纤客户留存更久
onlineSecurity< 0.05强保护效应
techSupport< 0.05强保护效应
onlineBackup< 0.05中等保护效应
paperlessBilling< 0.05无纸化账单与更高流失率相关
paymentMethod< 0.05电子支票用户流失更快
注意:KM 估计是单变量方法,一次只能分析一个变量对生存的影响。 若需同时考虑多个变量的效应,需要使用 Cox 比例风险模型等多变量方法。

5. Cox 比例风险模型

方法概述

Cox 比例风险模型(CPH)是最流行的半参数生存分析方法, 支持多变量分析。其数学表达式为:

h(t|X) = h0(t) × exp(β1X1 + β2X2 + … + βpXp)

其中:

数据准备

对 5 个分类变量进行独热编码,并选择以下特征:

模型结果

协变量系数方向exp(coef)p 值解释
dependents_Yes< 1< 0.005有家属降低流失风险
internetService_DSL< 1< 0.005DSL 降低流失风险(相比光纤)
onlineBackup_Yes< 1< 0.005在线备份降低流失风险
techSupport_Yes< 1< 0.005技术支持降低流失风险

所有协变量统计显著(p < 0.005),且均具有保护效应(exp(coef) < 1)。 模型一致性指数(Concordance)约为 0.63,表明中等预测能力。

比例风险假设检验

CPH 模型的核心假设是风险比随时间保持不变。我们使用三种方法进行检验:

方法 1:Schoenfeld 统计检验

结果:4 个变量中有 3 个违反比例风险假设(p < 0.05),说明风险比随时间变化。

方法 2:Schoenfeld 残差图

方法 3:Log-Log KM 图

在 log-log 尺度下,若比例风险假设成立,各组的曲线应当平行。 实际观察发现曲线不平行,进一步证实了假设违反。

假设违反后的应对方案:
  1. 若目标是预测,可以保持现有模型(关注损失指标)
  2. 对问题变量进行分层建模
  3. 引入时变协变量(扩展 Cox 模型)
  4. 使用三次样条(Cubic Splines)增加灵活性
  5. 改用其他方法(如加速失效时间模型)

6. 加速失效时间模型(AFT)

方法概述

加速失效时间(Accelerated Failure Time, AFT)模型是一种全参数方法。 其核心概念是"加速因子":

直观理解:就像狗的寿命是人类的 1/7 一样——它们经历相同的生命阶段,只是速度不同。 AFT 模型就是在量化各种因素如何加速减缓事件发生的速度。
SB(t) = SA(γ × t)

其中 γ 是加速因子。当 exp(β) > 1 时,该因素延长生存时间(保护作用); 当 exp(β) < 1 时,该因素缩短生存时间(风险因素)。

分布选择

我们使用 Log-Logistic 分布,其生存函数为:

S(t) = 1 / (1 + λtp)

其他可选分布包括 Weibull 和 Log-Normal。

模型结果

假设验证

使用 log-odds 诊断图验证:

  1. 分布适合性(线条是否为直线):线条较为平直 → Log-Logistic 分布选择合理
  2. 比例赔率假设(线条是否平行):线条大多不平行 → 假设部分违反

CPH 与 AFT 对比

方面Cox PHLog-Logistic AFT
类型半参数全参数
假设比例风险比例赔率 + 分布假设
假设满足?违反部分违反
输出解释风险比加速因子
一致性指数~0.63~0.63

7. 客户生命周期价值(CLV)

方法论

利用 CPH 模型预测生存概率,结合预期收入计算 CLV:

CLV = ∑m=1M [S(m) × Monthly Profit] / (1 + r)m

其中:

关键里程碑

时间节点累计净现值(CLV)
12 个月约 $260-280
24 个月约 $420-450
36 个月约 $520-550

业务应用

8. 总结与结论

核心发现

  1. 按月付费互联网用户流失率高达约 53%,是留存策略的重点目标群体。
  2. 强保护因素(降低流失风险):技术支持、在线安全、DSL 互联网、有家属。
  3. 风险因素(增加流失风险):光纤互联网、电子支票支付、无纸化账单、老年客户。
  4. 性别不显著影响客户流失行为。
  5. 比例风险假设被违反,表明协变量与风险的关系随时间变化。

业务建议

局限性与未来工作

参考文献

  1. Databricks Industry Solutions: Survival Analysis
  2. Kleinbaum, D., & Klein, M. (2012). Survival Analysis: A Self-Learning Text (3rd ed.). Springer.
  3. Lifelines Python Library: Documentation
  4. IBM Telco Customer Churn Dataset: GitHub