乐趣区

关于数据分析:客户流失生存分析

客户散失 - 生存剖析

客户散失

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

针对客户散失的预测,有许多机器学习模型能够预测客户是否会散失。预测客户散失有几个益处:

  • 提前对有散失可能性的客户进行干涉,将留客措施前置;
  • 针对可能会散失的客户,进行数据分析,找出散失客户与留存客户最大的差别特色;
  • 可依据散失状况,造成及时无效的预警机制;

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

生存剖析

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

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

这种生存建模最乏味的方面是它可能 查看生存工夫和预测变量之间的关系

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

<img src=”https://p.pstatp.com/origin/pgc-image/229d9f5f7a2e43d5b94e8dbe5fc10b22″ style=”zoom: 67%;” />

模型参数解释:

  • 危险函数 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% 的生存率,而其余取值,生存率较低。

通过下面多个特色的生存曲线的绘制,能够得出哪些动作能够进步客户的存活率。

咱们甚至能够绘制出每个客户的生存曲线,通过查看客户特色来剖析低生存率的起因:

<img src=”https://p.pstatp.com/origin/pgc-image/f480f10833b846ffb1ed7df9746599a1″ style=”zoom:67%;” />

还能够,通过对某个客户履行不同策略,来比拟策略对生存曲线的影响:

<img src=”https://p.pstatp.com/origin/pgc-image/aa41ed618be347b997efcfa58ae78ef6″ style=”zoom:67%;” />

这里策略 1(橙色线)的施行,比策略 2(绿色线)成果更好,有更高生存率。所以,能够剖析每个客户并设计被动策略以确保统计上的最高生存率。

小结

Cox 比例危险模型不仅能够找到影响散失的因素,以及不同因素的影响方向,而且可通过特色的剖析,使咱们可能得出个性化的策略来升高客户流失率,甚至还能够进行不同策略之间的比拟,得出能进步留存的最佳策略。


欢送关注集体公众号,第一工夫公布在公众号哦

退出移动版