文档
  • PyCaret 3.0
  • 快速入门
    • 💻安装
    • 🚀快速入门
    • ⭐教程
    • 📶模块
    • ⚙️数据预处理
      • 数据准备
      • 缩放与转换
      • 特征工程
      • 特征选择
      • 其他设置参数
    • 💡函数
      • 初始化
      • 训练
      • 优化
      • 分析
      • 部署
      • 其他
  • 学习 PYCARET
    • 📖博客
      • 宣布推出 PyCaret 1.0
      • 宣布推出 PyCaret 2.0
      • 关于 PyCaret 你可能不知道的 5 件事
      • 构建并部署你的第一个机器学习 Web 应用
      • 使用 PyCaret 在 Power BI 中构建你自己的 AutoML
      • 在 Google Kubernetes 上部署机器学习流水线
      • 在 AWS Fargate 上部署 PyCaret 和 Streamlit
      • 使用 PyCaret 在 Power BI 中进行异常检测
      • 在 Google Kubernetes 上部署机器学习应用
      • 在 GKE 上部署机器学习流水线
      • 在 AWS Fargate 上部署机器学习流水线
      • 使用 Docker 在云上部署机器学习流水线
      • 使用 PyCaret 在 Power BI 中进行聚类分析
      • 使用 ONNX Runtime 在边缘设备上部署 PyCaret 模型
      • GitHub 是你所需要过的最好的 AutoML
      • 在 AWS Fargate 上部署 PyCaret 和 Streamlit
      • 使用 PyCaret 和 MLflow 轻松实现 MLOps
      • 使用 PyCaret 在 Power BI 中进行聚类分析
      • 使用 PyCaret 在 Alteryx 中进行机器学习
      • 使用 PyCaret 在 KNIME 中进行机器学习
      • 使用 PyCaret 在 SQL 中进行机器学习 第一部分
      • 使用 PyCaret 在 Power BI 中进行机器学习
      • 使用 PyCaret 在 Tableau 中进行机器学习
      • 使用 PyCaret 进行多时间序列预测
      • 使用 PyCaret 预测客户流失
      • 使用 PyCaret (正确地)预测潜在客户评分
      • 使用 PyCaret 在 Python 中进行 NLP 文本分类
      • 使用 PyCaret (正确地)预测潜在客户评分
      • 使用 PyCaret 预测黄金价格暴跌
      • 使用机器学习预测黄金价格
      • PyCaret 2.1 功能概述
      • 使用 PyCaret 将机器学习模型传输到 SQL Server
      • 使用 PyCaret 和 Gradio 加速你的机器学习
      • 时间序列 101 - 初学者指南
      • 使用 PyCaret 进行时间序列异常检测
      • 使用 PyCaret 回归进行时间序列预测
      • 使用 PyCaret 在 Power BI 中进行主题建模
      • 使用 PyCaret 编写和训练自定义机器学习模型
      • 使用 PyCaret 和 Streamlit 构建和部署机器学习应用
      • PyCaret 2.3.6 发布了!了解新功能?
    • 📺视频
    • 🛩️速查表
    • ❓常见问题
    • 👩‍💻示例
  • 重要链接
    • 🛠️版本说明
    • ⚙️API 参考
    • 🙋 讨论
    • 📤问题
    • 👮 许可证
  • 媒体
    • 💻Slack
    • 📺YouTube
    • 🔗LinkedIn
    • 😾GitHub
    • 🔅Stack Overflow
由 GitBook 提供支持
本页内容
  • 使用 PyCaret (正确地)预测客户流失
  • 引言
  • 什么是客户流失?
  • 客户流失机器学习模型在实践中如何使用?
  • 客户流失模型工作流
  • 让我们开始实际示例
  • PyCaret
  • 安装 PyCaret
  • 👉数据集
  • 👉 探索性数据分析
  • 👉数据准备
  • 👉 模型训练与选择
  • 超参数调优
  • 模型分析
  • 👉 在 PyCaret 中添加自定义评估指标
  • 重要链接
  • 更多 PyCaret 相关教程

这对你有帮助吗?

  1. 学习 PYCARET
  2. 博客

使用 PyCaret 预测客户流失

上一篇使用 PyCaret 进行多时间序列预测下一篇使用 PyCaret (正确地)预测潜在客户评分

最后更新于 2 年前

这对你有帮助吗?

使用 PyCaret (正确地)预测客户流失

一篇关于如何使用 PyCaret 正确预测客户流失的分步指南,它能真正优化业务目标并提高投资回报率 (ROI)

使用 PyCaret (正确地)预测客户流失 — 作者配图

引言

客户留存是订阅制商业模式公司最重要的关键绩效指标 (KPI) 之一。竞争非常激烈,尤其是在 SaaS 市场,客户可以自由选择众多提供商。一次糟糕的体验可能就会导致客户转投竞争对手,从而造成客户流失。

什么是客户流失?

客户流失是指在特定时间范围内停止使用你公司产品或服务的客户百分比。计算流失率的一种方法是将给定时间间隔内失去的客户数量除以期初的活跃客户数量。例如,如果你上个月有 1000 个客户,流失了 50 个,那么你的月流失率为 5%。

预测客户流失是一个具有挑战性但极其重要的业务问题,尤其是在客户获取成本 (CAC) 较高的行业,如科技、电信、金融等。能够在客户流失的高风险期尚有时间采取措施时预测到这一点,对于公司而言意味着巨大的额外潜在收入来源。

客户流失机器学习模型在实践中如何使用?

客户流失预测模型的主要目标是通过主动与流失风险最高的客户互动来留住他们。例如:提供礼品券或任何促销价格,并锁定他们一年或两年,以延长他们对公司的生命周期价值。

这里有两个主要的概念需要理解

  • 我们希望客户流失预测模型能够提前预测流失(例如提前一个月、三个月甚至六个月——这取决于具体用例)。这意味着你必须对截止日期极其小心,即不应使用截止日期之后的任何信息作为机器学习模型的特征,否则会导致数据泄露。截止日期之前的时期称为 事件期。

  • 通常对于客户流失预测,你需要花一些功夫来创建 目标列,因为它通常不是你想要的格式。例如,你想预测客户是否会在下个季度流失,因此你会遍历截止到事件日期的所有活跃客户,并检查他们在下个季度是否离开了公司(1 表示是,0 表示否)。在这种情况下,这个季度称为 绩效窗口期。

客户流失模型工作流

现在你已经理解了数据的来源以及如何创建流失目标(这是问题中最具挑战性的部分之一),让我们讨论一下这个机器学习模型将如何在业务中使用。请从左到右阅读下面的图表

  • 使用客户流失历史数据(事件期用于 X 特征,绩效窗口期用于目标变量)训练模型。

  • 每个月将活跃客户群输入到 机器学习预测模型 中,以返回每个客户的流失概率(在商业术语中,这有时称为流失评分)。

  • 该列表将按概率值(或他们所说的评分)从高到低排序,客户留存团队将开始与客户互动,以阻止流失,通常通过提供某种促销或礼品卡来锁定他们再留几年。

  • 流失概率非常低的客户(或者说模型预测不会流失的客户)是满意的客户。无需对他们采取任何行动。

让我们开始实际示例

PyCaret

安装 PyCaret

**# install pycaret
**pip install pycaret

👉数据集

**# import libraries**
import pandas as pd
import numpy as np

**# read csv data
**data **= **pd.read_csv('[https://raw.githubusercontent.com/srees1988/predict-churn-py/main/customer_churn_data.csv'](https://raw.githubusercontent.com/srees1988/predict-churn-py/main/customer_churn_data.csv'))

👉 探索性数据分析

**# check data types
**data.dtypes

请注意 TotalCharges 的类型是 object 而不是 float64。经过调查,我发现这一列中存在一些空白字符,这导致 Python 强制将数据类型设为 object 。为了解决这个问题,我们需要在更改数据类型之前去除空白字符。

**# replace blanks with np.nan**
data['TotalCharges'] = data['TotalCharges'].replace(' ', np.nan)

**# convert to float64**
data['TotalCharges'] = data['TotalCharges'].astype('float64')

直观来看,合同类型、客户在网时长 (tenure) 和资费计划是预测客户流失或留存非常重要的信息。让我们探讨一下它们之间的关系

请注意,大部分流失都出现在“按月”合同中。这当然很合理。此外,我可以看到随着在网时长的增加,总费用也随之增加,在网时长长但费用低的客户流失可能性要小于在网时长长且费用高的客户。

缺失值

**# check missing values
**data.isnull().sum()

请注意,由于我们将空白值替换为了 np.nan,TotalCharges 列现在有 11 行缺失值。没问题——我会交给 PyCaret 自动进行填充。

👉数据准备

**# init setup**
from pycaret.classification import *
s = setup(data, target = 'Churn', ignore_features = ['customerID'])

无论何时你在 PyCaret 中初始化 setup 函数,它都会分析数据集并推断所有输入特征的数据类型。在这种情况下,你可以看到除了 tenure MonthlyCharges 和 TotalCharges 之外,其他所有特征都是类别型的,这是正确的,你现在可以按 Enter 继续。如果数据类型推断不正确(有时可能会发生),你可以使用 numeric_feature 和 categorical_feature 参数来覆盖数据类型。

此外,请注意我在 setup 函数中传递了 ignore_features = ['customerID'] 参数,这样在训练模型时就不会考虑它。这样做的好处是 PyCaret 不会从数据集中删除该列,它只是在后台忽略它用于模型训练。因此,当你在最后生成预测结果时,无需担心自己重新将 ID 合并回去。

👉 模型训练与选择

数据准备完成后,让我们使用 compare_models 功能开始训练过程。此函数会训练模型库中所有可用的算法,并使用交叉验证评估多个性能指标。

**# compare all models**
best_model = compare_models(sort='AUC')

基于 AUC 的最佳模型是 Gradient Boosting Classifier。使用 10 折交叉验证得到的 AUC 是 0.8472。

**# print best_model parameters**
print(best_model)

超参数调优

你可以使用 PyCaret 的 tune_model 函数来自动调整模型的超参数。

**# tune best model**
tuned_best_model = tune_model(best_model)

请注意,AUC 从 0.8472 略微增加到了 0.8478 。

模型分析

**# AUC Plot**
plot_model(tuned_best_model, plot = 'auc')
**# Feature Importance Plot**
plot_model(tuned_gbc, plot = 'feature')
**# Confusion Matrix**
plot_model(tuned_best_model, plot = 'confusion_matrix')

这个混淆矩阵是针对测试集的,测试集包含我们数据的 30%(2,113 行)。我们有 309 个 真阳性 (15%)——这些是我们能够延长生命周期价值的客户。如果我们没有预测到,就没有干预的机会。

我们还有 138 个 (7%) 假阳性,这些客户会让我们赔钱,因为给他们的促销活动只会是额外的成本。

1,388 个 (66%) 是真阴性(好客户),278 个 (13%) 是 假阴性(这是一个错失的机会)。

到目前为止,我们训练了多个模型,选择 AUC 最高的最佳模型,然后对最佳模型进行超参数调优,以在 AUC 方面进一步提升性能。然而,最高的 AUC 不一定能转化为对业务最好的模型。

在流失模型中,真阳性 的回报与 假阳性 的成本通常大不相同。我们使用以下假设

  • 向所有被识别为流失的客户(真阳性 + 假阳性)提供价值 1,000 美元的代金券;

  • 如果我们能够阻止流失,我们将获得 5,000 美元的客户生命周期价值。

使用这些假设和上面的混淆矩阵,我们可以计算出该模型的美元影响

这是一个不错的模型,但问题在于它不是一个业务智能的模型。相比于没有模型,它做得已经很好了,但我们如何训练和选择一个能最大化业务价值的模型呢?为了实现这一点,我们必须使用业务指标,而不是任何常规指标(如 AUC 或准确率)来训练、选择和优化模型。

👉 在 PyCaret 中添加自定义评估指标

多亏了 PyCaret,使用 add_metric 函数可以非常轻松地实现这一点。

**# create a custom function
**def calculate_profit(y, y_pred):
    tp = np.where((y_pred==1) & (y==1), (5000-1000), 0)
    fp = np.where((y_pred==1) & (y==0), -1000, 0)
    return np.sum([tp,fp])

**# add metric to PyCaret
**add_metric('profit', 'Profit', calculate_profit)

现在让我们运行 compare_models 并看看神奇之处。

**# compare all models**
best_model = compare_models(sort='Profit')

请注意,这次添加了一个新的 Profit 列,令人惊讶的是,在 AUC 方面表现相当糟糕的 Naive Bayes 模型在利润方面却是最佳模型。让我们看看原因

**# confusion matrix**
plot_model(best_model, plot = 'confusion_matrix')

客户总数仍然相同(测试集中的 2,113 个客户),变化的是模型现在在假阳性和假阴性上的错误方式。让我们用美元价值来衡量它,使用相同的假设(如上所述)

***砰! *我们刚刚通过一个 AUC 比最佳模型低 2% 的模型,将利润提高了约 400,000 美元。这是怎么发生的?嗯,首先,AUC 或任何其他开箱即用的分类指标(准确率、召回率、精确率、F1 分数、Kappa 等)都不是业务智能指标,因此它没有考虑风险和回报的权衡。添加自定义指标并将其用于模型选择或优化是一个很棒的主意,也是正确的做法。

使用这个轻量级的 Python 工作流自动化库,你可以实现无限可能。如果你觉得这很有用,请不要忘记在我们的 GitHub 仓库上给我们一个 ⭐️。

重要链接

更多 PyCaret 相关教程

如何创建客户流失数据集 — 作者配图
客户流失模型工作流 — 作者配图

在本节中,我将演示机器学习模型训练与选择、超参数调优、结果分析和解释的完整端到端工作流。我还将讨论你可以优化的指标,以及为什么像 AUC、准确率、召回率这样的传统指标可能不适合客户流失模型。我将使用—— 一个开源、低代码的机器学习库来执行这个实验。本教程假设你对 PyCaret 有基本的了解。

是一个开源、低代码的机器学习库和端到端模型管理工具,内置于 Python 中,用于自动化机器学习工作流。PyCaret 以其易用性、简洁性以及快速高效地构建和部署端到端机器学习流水线的能力而闻名。要了解更多关于 PyCaret 的信息,请查阅其.

PyCaret 的功能 — 作者配图

在本教程中,我将使用一个来自 Kaggle 的数据集。该数据集已经包含了我们可以直接使用的目标列。你可以直接从这个链接中读取该数据集。(特别感谢 srees1988)

数据集样本 — 作者配图
数据类型 — 作者配图
按在网时长、费用和合同类型划分的客户流失 (作者配图)
缺失值 — 作者配图

在 PyCaret 的所有模块中都一样,setup 是在 PyCaret 中执行任何机器学习实验的第一个也是唯一一个强制性步骤。此函数负责处理训练模型之前所需的所有数据准备工作。除了执行一些基本的默认处理任务外,PyCaret 还提供广泛的预处理功能。要了解 PyCaret 中的所有预处理功能,你可以查阅这个.

pycaret.classification 中的 setup 函数 — 作者配图
setup 输出 — 显示已截断 — 作者配图
compare_models 输出 — 作者配图
最佳模型参数 — 作者配图
tune_model 结果 — 作者配图
AUC 图 — 作者配图
特征重要性图 — 作者配图
Gradient Boosting Classifier 混淆矩阵 — 作者配图
该模型对 2,113 位客户的美元影响 — 作者配图
compare_models 输出 — 作者配图
Naive Bayes 混淆矩阵 — 作者配图
该模型对 2,113 位客户的美元影响 — 作者配图

我希望你能体会到 PyCaret 的简洁和易用性。仅用几行代码,我们就能够训练多个模型并选择对业务重要的那个。我是一名定期博主,主要撰写关于 PyCaret 及其在实际应用中的案例。如果你想收到自动通知,可以关注我的, ,和.

PyCaret — 作者配图
PyCaret — 作者配图

要了解更多关于 PyCaret 的信息,请关注我们的和.

加入我们的 Slack 频道。邀请链接.

📖
PyCaret
PyCaret
GitHub
电信客户流失
GitHub
链接
Medium
LinkedIn
Twitter
LinkedIn
Youtube
这里
文档
博客
GitHub
Stack Overflow
安装 PyCaret
Notebook 教程
贡献 PyCaret
使用 PyCaret 在 Alteryx 中进行机器学习 一篇关于如何使用 PyCaret 在 Alteryx Designer 中训练和部署机器学习模型的分步教程towardsdatascience.com
使用 PyCaret 在 KNIME 中进行机器学习 一篇关于如何使用 PyCaret 在 KNIME 中训练和部署端到端机器学习流水线的分步指南towardsdatascience.com
使用 PyCaret + MLflow 轻松实现 MLOps 一篇适合初学者、关于如何使用 PyCaret 将 MLOps 集成到你的机器学习实验中的分步教程towardsdatascience.com
使用 PyCaret 编写和训练你自己的自定义机器学习模型 towardsdatascience.com
使用 PyCaret 构建,使用 FastAPI 部署 *一篇关于如何使用 PyCaret 构建端到端机器学习流水线的适合初学者、分步教程以及…*towardsdatascience.com
使用 PyCaret 进行时间序列异常检测 一篇关于如何使用 PyCaret 对时间序列数据进行无监督异常检测的分步教程towardsdatascience.com
使用 PyCaret 和 Gradio 加速你的机器学习实验 一篇关于如何快速开发机器学习流水线并与之交互的分步教程towardsdatascience.com
使用 PyCaret 进行多时间序列预测 一篇关于如何使用 PyCaret 预测多个时间序列的分步教程towardsdatascience.com