机器学习中的客户流失预测

2025年3月17日 | 阅读 14 分钟
Customer Churn Prediction Using Machine Learning

客户流失(也称为客户流失)是指客户停止使用公司产品或服务的情况。

客户流失会影响盈利能力,尤其是在收入高度依赖订阅的行业(例如银行、电话和互联网服务提供商、付费电视公司、保险公司等)。据估计,获取新客户的成本可能高达保留现有客户的五倍。

因此,客户流失分析至关重要,因为它可以帮助企业

  • 识别其服务中的问题(例如,产品/服务质量差、客户支持差、目标受众错误等),以及
  • 做出正确的战略决策,从而提高客户满意度,进而提高客户保留率。

一系列机器学习技术,包括逻辑回归、决策树、随机森林、支持向量机和神经网络,被广泛应用于客户流失的预测。这些算法分析历史客户数据和相关特征,以开发能够有效地将客户分类为流失客户或非流失客户的模型。

代码

导入库

输出

Customer Churn Prediction Using Machine Learning

参数和变量

拥有一些默认参数和变量会很方便。

函数

由于我们将重用部分代码,定义一些函数会很有帮助。







导入数据集

输出

Customer Churn Prediction Using Machine Learning

我们的 DataFrame 包含 14 个特征/属性和 10,000 名客户/实例。最后一个特征“Exited”是目标变量,表示客户是否流失(0 = 否,1 = 是)。其余特征的含义可以从其名称中轻松推断出来。

特征“RowNumber”、“CustomerId”和“Surname”是客户特有的,可以删除。

输出

Customer Churn Prediction Using Machine Learning

输出

Customer Churn Prediction Using Machine Learning

我们的 DataFrame 中没有缺失值。

输出

Customer Churn Prediction Using Machine Learning

最重要的事情是:

  • 客户年龄范围从 18 到 92 岁,平均值约为 40 岁,
  • 平均(和中位数)客户保有期为 5 年,因此大多数客户是忠诚客户(保有期 > 3),并且
  • 大约 50% 的客户是活跃的。

EDA 将帮助我们更好地理解我们的数据集。但是,在我们进一步查看数据之前,我们需要创建一个测试集,将其放在一边,并仅用于评估我们的机器学习模型。

分割数据集

我们将使用 scikit-learn 的 train_test_split() 函数将数据集拆分为训练集和测试集,该函数实现了随机抽样。我们的数据集足够大(尤其与特征数量相比),因此我们不必担心引入抽样偏差。

输出

Customer Churn Prediction Using Machine Learning

探索性数据分析

目标变量(“Exited”)已编码,可以取两个可能的值:

  • 零 (0) 表示未流失的客户,以及
  • 一 (1) 表示流失的客户。

输出

Customer Churn Prediction Using Machine Learning

银行保留了 80% 的客户。

请注意,我们的数据集存在倾斜/不平衡,因为“保留”类别中的实例数量远多于“流失”类别中的实例数量。因此,准确性可能不是衡量模型性能的最佳指标。

不同的可视化技术适用于不同类型的变量,因此区分连续变量和分类变量并将它们分开查看会很有帮助。

输出

Customer Churn Prediction Using Machine Learning

连续变量

输出

Customer Churn Prediction Using Machine Learning
  • “年龄”略微偏向右侧,即它在中位数的右侧延伸得比左侧更远,
  • “信用分数”的大多数值高于 600,
  • 如果我们忽略第一个分箱,“余额”遵循相当正态分布,并且
  • “估计薪资”的分布或多或少是均匀的,几乎没有提供信息。

相关性

我们将计算每对(连续)特征之间的标准相关系数。

输出

Customer Churn Prediction Using Machine Learning

我们的特征之间没有显著的相互关联,因此我们**不必**担心多重共线性。

年龄

输出

Customer Churn Prediction Using Machine Learning

有趣的是,年龄组之间存在明显差异,因为年龄较大的客户更有可能流失。这一观察结果可能表明偏好随年龄而变化,而银行未能调整其策略以满足老年客户的需求。

信用分数

输出

Customer Churn Prediction Using Machine Learning

在信用分数方面,保留客户和流失客户之间没有显著差异。

余额

输出

Customer Churn Prediction Using Machine Learning

这两个分布非常相似。有很大比例的非流失客户账户余额较低。

估计薪资

输出

无论是流失客户还是保留客户,其薪资分布都显示出相似的均匀分布。因此,我们可以得出结论,薪资对流失的可能性没有显著影响。

分类变量

输出

Customer Churn Prediction Using Machine Learning

要点

  • 银行在三个国家(法国、西班牙和德国)设有客户。大多数客户在法国。
  • 男性客户多于女性,
  • 只有一小部分客户在第一年内流失。拥有 1 到 9 年客户保有期的客户数量几乎相同,
  • 大多数客户购买了 1 或 2 种产品,而一小部分客户购买了 3 或 4 种产品,
  • 绝大多数客户拥有信用卡,并且
  • 近 50% 的客户不活跃。

地理学

输出

Customer Churn Prediction Using Machine Learning

德国的客户比其他两个国家的客户更有可能流失(流失率几乎是西班牙和法国的两倍)。造成这一发现的原因有很多,例如竞争加剧或德国客户的偏好不同。

性别 (Gender)

输出

Customer Churn Prediction Using Machine Learning

女性客户更有可能流失。

客户保有期

输出

Customer Churn Prediction Using Machine Learning

客户保有期(年数)似乎不会影响流失率。

产品数量

输出

Customer Churn Prediction Using Machine Learning

有趣的是,拥有 3 或 4 种产品会显着增加流失的可能性。我不确定如何解释这个结果。这可能意味着银行无法妥善支持拥有更多产品的客户,从而增加了客户的不满。

持卡人

输出

Customer Churn Prediction Using Machine Learning

拥有信用卡似乎不会影响流失率。

活跃会员

输出

Customer Churn Prediction Using Machine Learning

不活跃客户更有可能流失,这不足为奇。相当一部分客户不活跃,因此银行将受益于改变其政策,使更多客户活跃起来。

数据处理

数据预处理是将原始数据转换为易于阅读的格式,适用于构建和训练机器学习模型的流程。

特征选择

EDA 揭示了几个可以删除的额外特征,因为它们对预测目标变量没有价值。

  • “估计薪资”在两种类型的客户中都显示出均匀分布,可以删除。
  • “客户保有期”和“持有信用卡”类别具有相似的流失率,被认为是冗余的。

输出

Customer Churn Prediction Using Machine Learning

“客户保有期”和“持有信用卡”的卡方检验值较小,p 值大于 0.05(标准截止值),证实了我们最初的假设,即这两个特征不包含任何有用的信息。

编码分类特征

机器学习算法通常要求所有输入(和输出)特征都是数字。因此,在构建模型之前,需要将分类特征转换为(编码为)数字。

我们的数据集中有两个需要编码的特征:

  • 对于“性别”,我们将使用 scikit-learn 的 LabelEncoder(),它将每个唯一标签映射到一个整数(男性 --> 1,女性 --> 0)。
  • 对于“地理位置”,我们将手动映射值,以便德国的客户值为 1,所有其他客户(法国和西班牙)值为 0。我选择此方法是因为其他两个国家的客户流失率几乎相等,且远低于德国。因此,将其编码为区分德国和非德国客户是有意义的。此外,我尝试对此特征进行独热编码(get_dummies()),而法国和西班牙的两个新特征的重要性很小。

缩放

特征缩放是用于标准化数据集中特征范围的技术。


处理类别不平衡

如前所述,待预测的类别存在不平衡,一个类别(0 - 保留)比另一个类别(1 - 流失)更为普遍。

输出

Customer Churn Prediction Using Machine Learning

类别不平衡通常是一个问题,并且在许多现实世界的任务中都会发生。使用不平衡数据进行分类会偏向多数类,这意味着机器学习算法很可能会得到除预测最常见类别之外几乎无用的模型。此外,在处理类别不平衡数据时,常用指标可能会产生误导(例如,如果一个数据集中有 99.9% 的 0 和 0.01% 的 1,那么总是预测 0 的分类器将具有 99.9% 的准确率)。

输出

Customer Churn Prediction Using Machine Learning

建模

我们首先创建两个简单的模型来估计训练集上的基线性能。

输出

Customer Churn Prediction Using Machine Learning

注意:我们可以使用更多(更强大)的分类器,例如随机森林或/和 XGBoost。然而,我们宁愿在这个阶段排除它们,因为它们的默认参数使它们更容易过拟合训练集,从而提供不准确的基线性能。

1. 逻辑回归

输出

Customer Churn Prediction Using Machine Learning
Customer Churn Prediction Using Machine Learning

2. 支持向量分类器

输出

Customer Churn Prediction Using Machine Learning
Customer Churn Prediction Using Machine Learning

3. 随机森林分类器

输出

Customer Churn Prediction Using Machine Learning
Customer Churn Prediction Using Machine Learning

4. 梯度提升分类器

输出

Customer Churn Prediction Using Machine Learning
Customer Churn Prediction Using Machine Learning

5. XGBoost 分类器

输出

Customer Churn Prediction Using Machine Learning
Customer Churn Prediction Using Machine Learning

6. LGBM 分类器

输出

Customer Churn Prediction Using Machine Learning
Customer Churn Prediction Using Machine Learning

集成学习

我们可以组合所有这些分类器的预测,以确定与每个单独的组成分类器相比,我们是否能获得更好的预测性能。这是集成学习背后的主要动机。

输出

Customer Churn Prediction Using Machine Learning

特征重要性

输出

Customer Churn Prediction Using Machine Learning

“年龄”和“产品数量”似乎是所有分类器中最有用的特征,其次是“活跃会员”和“余额”。另一方面,“信用分数”是最不重要的特征,对于 LGBM 以外的所有估计器,其值都非常接近于零。

性能比较

输出

Customer Churn Prediction Using Machine Learning

输出

Customer Churn Prediction Using Machine Learning

所有其他分类器的召回率都高于 70%(基线性能)。XGB 是召回率最高的模型(78.5%)。然而,LGBM 分类器具有最高的准确率、精确率和 AUC,整体性能最佳。

输出

Customer Churn Prediction Using Machine Learning

虚线对角线代表纯随机分类器;一个好的分类器应尽可能远离该线(朝向左上角)。

在我们的案例中,除逻辑回归外,所有分类器的表现都相似。LGBM 的表现似乎略好,如稍高的 AUC(0.888)所示。

输出

Customer Churn Prediction Using Machine Learning

此图显示,如果我们以模型预测的 50% 最有可能流失的客户为目标,模型将选出 80% 实际流失的客户,而随机选择只能选出 50% 的目标客户。

在测试集上评估


输出

Customer Churn Prediction Using Machine Learning

输出

Customer Churn Prediction Using Machine Learning

输出

Customer Churn Prediction Using Machine Learning

所有模型在测试集上的性能与训练集相似,这证明我们没有过拟合训练集。因此,我们可以预测客户流失,召回率约为 78%。

结论

总而言之,使用机器学习进行客户流失预测是企业优化客户保留策略、提高客户满意度并推动长期增长的宝贵工具。通过利用机器学习算法的力量,企业可以深入了解客户行为,并采取主动措施来保留其宝贵的客户群。