Python|用Python来进行用户流失预测的实战


Python|用Python来进行用户流失预测的实战
文章图片
借用生存分析的方法来进行用户流失的预测 , 用到了Cox Proportional Hazards模型 。
客户流失率很难预测 。 在你能做一些事情来阻止客户离开之前 , 你需要知道 , 谁将离开 , 什么时候离开 , 这将在多大程度上影响你的业务 。 在这篇文章中 , 我将解释使用生存分析来预测和预防流失的技术 。
客户会不会流失许多数据分析师试图用黑白分明的方式来模拟这个问题:客户流失vs客户没有流失 。 我们很容易用这种方式来看待这个问题 , 因为它是一种我们都知道的模型 —— 监督分类 。
但是这样做忽略了客户流失预测问题的许多细微之处 —— 风险、时间线、客户离开的成本等等 。
不管怎样 , 让我们从一个分类模型开始 , 看看我们最终的结果 。
我们的数据集我们使用的数据集是Kaggle Telco Churn dataset:https://www.kaggle.com/c/telco-churn/data , 它包含超过7000个客户的记录 , 包括特征 , 比如客户的每月费用 , 成为客户的时长(几个月) , 是否有各种附加互联网服务等等 。
以下是前5行:
【Python|用Python来进行用户流失预测的实战】
首先你会注意到有很多类别变量为文本值(' 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 = https://mparticle.uc.cn/api/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(我们正在努力改进的东西)与他们的月费进行了比较 。 我们继续去训练一个逻辑回归模型 , 看看我们是否可以使用这些虚拟的特征来预测客户的流失 。