客户流失-生存分析

客户流失

不同行业、处于不同的客户生命周期,对客户流失的定义均有差异。但总的来说,客户流失指的就是在一定时期内不再使用公司产品和服务的客户。

针对客户流失的预测,有许多机器学习模型可以预测客户是否会流失。预测客户流失有几个好处:

  • 提前对有流失可能性的客户进行干预,将留客措施前置;
  • 针对可能会流失的客户,进行数据分析,找出流失客户与留存客户最大的差异特征;
  • 可根据流失情况,形成及时有效的预警机制;

我们知道了哪些客户会流失,以及客户流失的概率,还必须下发某些策略来留住处于流失边缘的客户。但,还是有些问题,通过流失预测模型知道了某些客户会流失,也知道特征重要性,但仍然抓不住挽留客户的“钩子”,数据分析师只能针对这些流失客户,以及重要影响特征进行拆解,得到一些蛛丝马迹。

生存分析

COX比例风险模型(cox proportional-hazards model)

简称COX模型,是英国统计学家D.R.COX(1972)提出的一种半参数回归模型。该模型通常是用于医学研究中,分析一个或多个前定变量对患者生存时间的影响。

这种生存建模最有趣的方面是它能够检查生存时间和预测变量之间的关系

例如,如果我们正在检查患者的存活率,那么预测变量可以是年龄、血压、性别、吸烟习惯等。这些预测变量通常被称为协变量。

模型参数解释:

  • 风险函数 Hazard function λ(t):给出在时间 t 处死亡的瞬时风险;
  • 协变量Z:特征向量;
  • 基线风险函数λo(t) :描述的是事件风险随时间的变化,它是所有协变量都等于 0 的潜在风险;

另外,与单变量分析常用的Kaplan-Meier 曲线,COX模型是多因素生存分析的方法,并且COX模型可以包含类别变量(例如性别),还可以包含数值变量(例如年龄)。

而Kaplan-Meier 曲线只能包含类别变量。并且COX回归把生存分析方法拓展到同时评估几种风险因素对生存时间的影响,有更广泛的运用(直接好家伙?)。

模型应用

以Kaggle上的电信流失的数据集为例,利用lifelines包搭建风险模型。

  1. 读取数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('Telecom_customer churn.csv')
df = df.dropna()
df.set_index('Customer_ID', inplace=True)
复制代码
  1. 删除类别数大于2的特征
df_str = df.loc[ : , df.dtypes == object]

for i in df_str.columns:
   if len(np.unique(df_str[i].values)) >2:
       del df[i]
复制代码
  1. 特征one-hot
df_str = df.loc[:, df.dtypes == object]
for i in df_str.columns:
   one_hot = pd.get_dummies(df[i])
   one_hot.columns = [ i +'_'+j for j in one_hot.columns]
   df = df.drop(i,axis = 1)
   df = df.join(one_hot)
   
survival_time = df['months'].values
del df['months']
churn = df['churn'].values
del df['churn']
复制代码
  1. 删除相关性高的特征
corr_matrix = df.corr().abs()
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))
to_drop = [column for column in upper.columns if any(upper[column] > 0.98)]
df.drop(to_drop, axis=1, inplace=True)

df = df[list(df.columns[:69])]
df['months'] = survival_time
df['churn'] = churn
df = df[df['churn'] == 1]
复制代码
  1. 选择变量并建立cox模型
df_sampled = df.sample(n=1000)
from lifelines import CoxPHFitter

cph = CoxPHFitter(penalizer=0.01) 
cph.fit(df_sampled, duration_col='months', event_col='churn')
df_stats = cph.summary

features_valuable = list(df_stats[df_stats['exp(coef)'].values > 1.01].index) + list(df_stats[df_stats['exp(coef)'].values < 0.98].index)
df = df[features_valuable+['churn','months']]
复制代码

CPH 模型的基本假设之一是特征不存多重共线性,需在建模前处理特征之间的多重共线性:

  • 可以在拟合 Cox 模型之前解决多重共线性问题;
  • 可以在回归期间对系数的大小应用惩罚,使用惩罚可以提高估计的稳定性并控制协变量之间的高度相关性。
  1. 模型结果解读
cph.summary

cph.plot()
复制代码

危险比 (HR) 等于exp(coef) ,其中 coef 是特征对应的权重 。

如果某个特征的 exp(coef) = 1,则它不起作用;如果 exp(coef) > 1,则降低风险,提高生存率

了解每个特征或决策的影响的最佳方法是,通过保持其他特征数据不变来绘制单个特征或决策的生存曲线。

这里调用 plot_partial_effects_on_outcome( )方法并传递参数——感兴趣的特征和要显示的值。

特征models=9,超过42个月有80%的生存率,而其他取值,生存率较低。

通过上面多个特征的生存曲线的绘制,可以得出哪些动作可以提高客户的存活率。

我们甚至可以绘制出每个客户的生存曲线,通过查看客户特征来分析低生存率的原因:

还可以,通过对某个客户实行不同策略,来比较策略对生存曲线的影响:

这里策略1(橙色线)的实施,比策略2(绿色线)效果更好,有更高生存率。所以,可以分析每个客户并设计主动策略以确保统计上的最高生存率。

小结

Cox 比例风险模型不仅可以找到影响流失的因素,以及不同因素的影响方向,而且可通过特征的分析,使我们能够得出个性化的策略来降低客户流失率,甚至还可以进行不同策略之间的比较,得出能提高留存的最佳策略。


免责声明:务必仔细阅读

  • 本站为个人博客,博客所转载的一切破解、path、补丁、注册机和注册信息及软件等资源文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。

  • 本站为非盈利性站点,打赏作为用户喜欢本站捐赠打赏功能,本站不贩卖软件等资源,所有内容不作为商业行为。

  • 本博客的文章中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.

  • 本博客的任何内容,未经许可禁止任何公众号、自媒体进行任何形式的转载、发布。

  • 博客对任何脚本资源教程问题概不负责,包括但不限于由任何脚本资源教程错误导致的任何损失或损害.

  • 间接使用相关资源或者参照文章的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 博客对于由此引起的任何隐私泄漏或其他后果概不负责.

  • 请勿将博客的任何内容用于商业或非法目的,否则后果自负.

  • 如果任何单位或个人认为该博客的任何内容可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明至admin@proyy.com.我们将在收到认证文件后删除相关内容.

  • 任何以任何方式查看此博客的任何内容的人或直接或间接使用该博客的任何内容的使用者都应仔细阅读此声明。博客保留随时更改或补充此免责声明的权利。一旦使用并复制了博客的任何内容,则视为您已接受此免责声明.

您必须在下载后的24小时内从计算机或手机中完全删除以上内容.

您使用或者复制了本博客的任何内容,则视为已接受此声明,请仔细阅读


更多福利请关注一一网络微信公众号或者小程序

一一网络微信公众号
打个小广告,宝塔服务器面板,我用的也是,很方便,重点是免费的也能用,没钱太难了,穷鬼一个,一键全能部署及管理,送你3188元礼包,点我领取https://www.bt.cn/?invite_code=MV9kY3ZwbXo=


一一网络 » 客户流失-生存分析

发表评论

发表评论

一一网络-提供最优质的文章集合

立即查看 了解详情