借用生存分析的方法来进行用户流失的预测,用到了Cox Proportional Hazards模型。
客户流失率很难预测。在你能做一些事情来阻止客户离开之前,你需要知道,谁将离开,什么时候离开,这将在多大程度上影响你的业务。在这篇文章中,我将解释使用生存分析来预测和预防流失的技术。
客户会不会流失
许多数据分析师试图用黑白分明的方式来模拟这个问题:客户流失vs客户没有流失。我们很容易用这种方式来看待这个问题,因为它是一种我们都知道的模型 —— 监督分类。
但是这样做忽略了客户流失预测问题的许多细微之处 —— 风险、时间线、客户离开的成本等等。
不管怎样,让我们从一个分类模型开始,看看我们最终的结果。
我们的数据集
我们使用的数据集是Kaggle Telco Churn dataset:https://www.kaggle.com/c/telco-churn/data,它包含超过7000个客户的记录,包括特征,比如客户的每月费用,成为客户的时长(几个月),是否有各种附加互联网服务等等。
以下是前5行:
首先你会注意到有很多类别变量为文本值(' Yes ', ' No ',等等),我们使用pd.get_dummies来修复这些:
dummies = pd.get_dummies( data[[ 'gender', 'SeniorCitizen', 'Partner', 'Dependents', 'tenure', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract', 'PaperlessBilling', 'PaymentMethod', 'Churn' ]]) data = dummies.join(data[['MonthlyCharges', 'TotalCharges']])
如果你按照下面的步骤去做,你还需要修复total charge列中的一些缺失值,这些值使整列变成了文本而不是数字:
data['TotalCharges'] = data[['TotalCharges']].replace([' '], '0')data['TotalCharges'] = pd.to_numeric(data['TotalCharges'])
现在我们有了一个可用的数据格式,我们把它可视化一下:
from matplotlib import pyplot as plt plt.scatter( data['tenure'], data['MonthlyCharges'], c=data['Churn_Yes']) plt.xlabel('Customer Tenure (Months)') plt.ylabel('Monthly Charges')
很难从这张图中得出任何结论,这个图将客户的tenure(我们正在努力改进的东西)与他们的月费进行了比较。我们继续去训练一个逻辑回归模型,看看我们是否可以使用这些虚拟的特征来预测客户的流失。