PYTHON条件生存森林模型CONDITIONAL SURVIVAL FOREST分类预测客户流失交叉验证可视化|数据分享

简介: PYTHON条件生存森林模型CONDITIONAL SURVIVAL FOREST分类预测客户流失交叉验证可视化|数据分享

原文链接:http://tecdat.cn/?p=26982 


简介

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

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

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


数据集


描述和概述


团队想要使用的数据集查看文末了解数据获取方式包含以下变量

从分类到数值


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

# 创建向量
dtset = pd.get_dummies(rawdaset, columns=caegres)
# 创建时间和事件列
timeolun = 'onth_tive
ent_clmn = 'chuned' (事件列)。
# 提取特征
特征 = np.setdiff1d(daaet.oums, \[tie_olmn,\] ).tolist()

探索性数据分析


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


空值和重复


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

# 检查是否为空值
Null = sum(dtaet\[feaues\].isnull().sum())
# 如果存在重复的数据,则将其删除
daast = datt.drop\_duplicates(keep='first').reset\_index(drop=True)
# 数据集中的样本数
N = det.shape\[0\] 。

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


相关性


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

图 1 - 相关性


点击标题查阅往期内容


PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像


01

02

03

04


建模


构建模型


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

# 建立训练和测试集
dex\_train, index\_test = train\_test\_split( range(N), test_size = 0.35)
# 创建X、T和E输入
X\_tain, Xtst = daa\_ain\[ftures\], datts\[fees\]
T\_tin, T\_tst = daa\_rain\[ie\_olumn\], dta\_est\[tme\_olumn\]
E\_tain, \_tst = daa\_tain\[vent\_cumn\], dattet\[evet_lumn\]

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

# 拟合模型
cf.fit(\_trai, T\_tra, \_tain, ax\_eatrs='sqrt',

变量重要性


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

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

这是最重要的变量中的前 5 个。

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

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


交叉验证


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


C-index


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


Brier score


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

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

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


预测


总体预测


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

comroal(cf, X\_tst, T\_tst, E_tst

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

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


个人预测


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

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

cree\_rskups(oel=csf, X=X\_test

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


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

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

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

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


结论


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

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

相关文章
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
124 10
|
14天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
64 3
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
22天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
106 80
|
2月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
158 59
|
11天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
33 14
下一篇
开通oss服务