首页 > 编程语言 >Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证

时间:2022-11-09 13:03:22浏览次数:81  
标签:预测 生存 Python 模型 Conditional 客户 时间 Forest 我们


简介

客户流失/流失,是企业最重要的指标之一,因为获取新客户的成本通常高于保留现有客户的成本。

事实上,根据一个 ​​study by Bain & Company​​,随着时间的推移,现有客户倾向于从公司购买更多产品,从而降低企业的运营成本,并可能将他们使用的产品推荐给其他人。例如,在金融服务领域,客户保留率每增加 5%,利润就会增加 25% 以上。

通过使用生存分析,公司不仅可以预测客户是否可能停止开展业务,还可以预测该事件何时发生。


​​数据集​​

描述和概述

团队想要使用的数据集包含以下功能:

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_数据

从分类到数值

有几个分类特征需要编码为 one-hot 向量:


1.  # 创建向量
2.
3. dtset = pd.get_dummies(rawdaset, columns=caegres)
4.
5. # 创建时间和事件列
6. timeolun = 'onth_tive
7. ent_clmn = 'chuned' (事件列)。
8.
9. # 提取特征
10. 特征 = np.setdiff1d(daaet.oums, [tie_olmn,] ).tolist()

探索性数据分析

在这里,我们将只检查数据集是否包含 Null 值或是否有重复的行。然后,我们将看看特征相关性。

空值和重复

首先要做的是检查 raw_dataset 是否包含 Null 值和重复的行。


1.  # 检查是否为空值
2. Null = sum(dtaet[feaues].isnull().sum())
3.
4. # 如果存在重复的数据,则将其删除
5. daast = datt.drop_duplicates(keep='first').reset_index(drop=True)
6.
7. # 数据集中的样本数
8. N = det.shape[0] 。

事实证明,数据集没有任何 Null 值或重复项。

相关性

让我们计算和可视化特征之间的相关性

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_数据集_02

图 1 - 相关性


建模

构建模型

为了稍后执行​​交叉验证​​并评估模型的性能,让我们将数据集拆分为训练集和测试集。


1.  # 建立训练和测试集
2. dex_train, index_test = train_test_split( range(N), test_size = 0.35)
3.
4. # 创建X、T和E输入
5. X_tain, Xtst = daa_ain[ftures], datts[fees]
6. T_tin, T_tst = daa_rain[ie_olumn], dta_est[tme_olumn]
7. E_tain, _tst = daa_tain[vent_cumn], dattet[evet_lumn]

注意:超参数的选择是使用网格搜索选择获得的。

  1.   
  2.  # 拟合模型
  3.  cf.fit(_trai, T_tra, _tain, ax_eatrs='sqrt',

变量重要性

建立生存森林模型后,我们可以计算特征重要性:

  1.  # 计算变量的重要性
  2.  sf.vaialeipotanetle.head(5)

这是最重要的功能中的前 5 个。

 

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_数据集_03

由于功能的重要性,我们可以更好地了解是什么推动了保留或流失。在这里,会计和薪资管理产品、满意度调查得分以及与客户支持通话的时间都发挥着重要作用。

注意:重要性是扰动和未扰动错误率之间的预测误差差异


交叉验证

为了评估模型性能,我们之前将原始数据集拆分为训练集和测试集,以便我们现在可以在测试集上计算其性能指标:

这C-index代表模型辨别能力的全局评估: 这是模型根据个体风险评分正确提供生存时间可靠排名的能力。一般来说,当 C-index 接近 1 时,模型具有近乎完美的判别力;但如果接近0.5,则没有区分低风险和高风险对象的能力。

Brier score

这Brier score测量给定时间状态和估计概率之间的平均差异。 因此,分数越低(通常低于 0.25),预测性能就越好。为了评估跨多个时间点的整体误差测量,通常还计算综合 Brier 分数 (IBS)。

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_数据集_04


图 2 - 条件生存森林 - Brier 分数和预测误差曲线

IBS 在整个模型时间轴上等于 0.13。这表明该模型将具有良好的预测能力。


预测

总体预测

既然我们已经建立了一个似乎可以提供出色性能的模型,让我们比较每个时间 t 停止与 SaaS 公司开展业务的实际客户数量和预测客户数量的时间序列。

comroal(cf, X_tst, T_tst, E_tst

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_机器学习_05


图 3 - 条件生存森林 - 流失的客户数量

该模型总体上提供了非常好的结果,因为在整个 12 个月的窗口中,它只会产生约 5 个客户的平均绝对误差。


个人预测

让我们计算在 所有时间 t 中保留客户的概率

首先,我们可以根据风险评分分布构建风险组。

  1.   
  2.  cree_rskups(oel=csf, X=X_test

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_机器学习_06


图 4 - 条件生存森林 - 风险组


在这里,可以区分 3 个主要群体, 风险、 风险 和  风险群体。由于 C 指数较高,模型将能够对每组随机单元的生存时间进行适当的排序。

让我们随机选择每组中的单个单元,并比较它们在所有时间 t 中保留客户的概率。为了证明我们的观点,我们将特意选择经历过事件的单位来可视化事件的实际时间。

Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_数据_07


图 5 - 条件生存森林 - 预测个人保留客户的概率

在这里,我们可以看到该模型设法提供了对事件时间的出色预测。


结论

我们现在可以保存我们的模型,以便将其投入生产并为未来的客户评分。

总之,我们可以看到,可以预测客户在不同时间点停止与公司开展业务的时间。该模型将帮助公司在留住客户方面更加积极主动;并更好地了解导致客户流失的原因。


Python条件生存森林模型Conditional Survival Forest 预测客户流失交叉验证_数据_08

标签:预测,生存,Python,模型,Conditional,客户,时间,Forest,我们
From: https://blog.51cto.com/u_14293657/5835854

相关文章

  • Python用Apriori 算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
    Apriori算法是一个相当新的算法,由Agrawal和Srikant于1994年提出。它是一种用于频繁项集挖掘的算法,允许公司理解和组织向上销售和交叉销售活动。视频:R语言关联规则模......
  • Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法Python用MCM
    相关视频:马尔可夫链原理可视化解释与R语言区制转换Markovregimeswitching实例马尔可夫链原理可视化解释与R语言区制转换Markov regime switching实例,时长07:25相关视频......
  • Python用ARIMA ,ARIMAX预测商店商品销售需求时间序列数据
    本文在相对简单的​​数据集​​上探索不同的时间序列技术。给定5年的商店商品销售数据,并要求您预测10家不同商店的50种不同商品在3个月内的销售额。处理季节性的最......
  • Python+Selenium+Firefox配置环境
    PythonSeleniumFirefox及geckodriver有版本兼容的问题,这里本着懒癌的原则使用最新版的Selenium+Firefox和geckodriver。准备环境Python:3.7Firefox:66geckodriver:0.2......
  • Python xlsx 导出格式化
    前言Python文件导出最简单方法是pandas中的to_excel。如何生成具有一定简单格式的文本?个人感觉xlsxwriter无论是文档还是使用方法个人感觉都很赞。目标适用web文件流导......
  • Python|使用Flask进行Web开发
    基础知识Flask是一个用Python编写的Web应用程序框架。它由ArminRonacher开发,他领导一个名为Pocco的国际Python爱好者团队。Flask基于WerkzeugWSGI工具包和Jinja2模......
  • python应用——借助tinify库实现批量压缩图片
    说在前面的话:转到移动组之后,干起了移动端混合开发,虽说现在的混合开发技术在不断的迭代了,但对比起网页应用来说有一些先天的不足,诸如,硬件性能就是很大的一方面。在pc上调......
  • python(27)反射机制
    1.什么是反射?它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法 2.反射的优点一个概念被提出来,就是要明白它的优点有哪些,这样我......
  • Python 判断字符串是否为数字
    最近的一个小软件,遇到了一个问题就是需要把字符串转成数字,可字符串中有时候会出来特殊字符。所以只需要做一个转换函数才可以的。下面这个函数比较凑效。这里做一个笔记本......
  • python3执行pip list出现警告
    python3执行piplist出现警告WARNING:Youareusingpipversion21.2.3;however,version22.3.1isavailable.Youshouldconsiderupgradingviathe'F:\Python39......