使用 PyCaret 正确预测潜在客户分数
使用 PyCaret 正确预测潜在客户分数的逐步指南,以提高营销活动的投资回报率。
介绍
潜在客户是当今许多企业的推动力。随着订阅模式的发展,尤其是在初创企业领域,将潜在客户转化为付费客户对于企业的生存至关重要。简单来说,“潜在客户”代表对购买您的产品/服务感兴趣的潜在客户。
通常,当您通过第三方服 务或自己运营营销活动获取潜在客户时,通常会包含以下信息:
- 潜在客户的姓名和联系方式
- 潜在客户属性(人口统计、社交、客户偏好)
- 来源(Facebook 广告、网站落地页、第三方等)
- 在网站上花费的时间、点击次数等
- 推荐详情等
一览潜在客户管理流程
市场营销和销售部门在潜在客户管理上花费了大量的时间、金钱和精力,这个概念包括潜在客户生成、资格认定和变现这三个关键阶段。
👉潜在客户生成
潜在客户生成是引导客户对您的业务产品或服务产生兴趣或询问的起始阶段。潜在客户的创建是为了将兴趣或询问转化为销售。互联网上有无数的第三方公司承诺提供最佳潜在客户。然而,您也可以通过运营营销活动自己生成潜在客户。生成潜在客户的方法通常属于广告范畴,但也可能包括非付费来源,如有机搜索引擎结果或现有客户的推荐。
👉 潜在客户资格认定
潜在客户资格认定是确定哪些潜在客户最有可能实际购买的过程。这是销售漏斗的一个重要部分,通常会吸引许多潜在客户,但只有其中一小部分会转化为实际销售。简单来说,潜在客户资格认定意味着评估和优先处理潜在客户的转化可能性,以便您的市场营销和销售部门可以追踪优先处理的潜在客户,而不是所有可能有数千个的潜在客户。
👉潜在客户转化
潜在客户转化是将经过资格认定的潜在客户最终转化为付费客户的阶段。它包括刺激购买产品或服务的所有营销实践,并推动潜在客户做出购买决策*。*这是变现或结束阶段,其结果通常定义了整个营销活动的成功与否。
👉 潜在客户分数的真正含义是什么?
想象一下,您的团队有很多潜在客户(潜在客户),但没有足够的资 源来追踪所有潜在客户。无论您是一个以产品为导向的企业,拥有大量免费用户,还是拥有出色的入口漏斗潜在客户,或者仅仅是一个了不起的门对门销售团队,最终,您需要优先考虑销售团队的时间,并给予他们“最佳”的潜在客户。
问题是,您如何做到这一点,以便最大化您的成功率?
一种简单的方法是通过分析历史数据,并查看导致潜在客户转化为销售的属性。例如,可能有一个特定的国家、城市或邮政编码,在历史上潜在客户转化为销售的概率达到90%。同样,您的数据还可以告诉您,在您的网站上花费超过20分钟的客户大多数时间会转化为销售。使用这些业务规则,您可以创建一个**潜在客户分数系统**,根据这些业务规则为每个潜在客户分配分数(分数越高越好)。
这种方法的问题在于,您只能通过业务规则覆盖有限。随着业务的扩展,您可以收集的数据类型和种类将呈指数增长。在某个点上,手动基于规则的系统将无法继续提供足够的价值。
机器学习登场
您可以从机器学习的角度来处理**潜在客户分数系统**,在此角度上,您可以使用客户属性、潜在客户来源、推荐等可用的详细信息训练机器学习模型,目标变量将是潜在客户转化(是或否)。
如何获取目标变量?嗯,大多数 CRM 系统,如 Salesforce、Zoho 或 Microsoft Dynamics,都可以跟踪个别潜在客户及其状态。潜在客户的状态将帮助您创建目标变量。
一个需要注意的问题是,您必须确保在训练数据集中不泄露任何信息。例如,您的CRM系统可能存储了有关转介费用的信息,这是付给第三方的,想象一下如果您在训练数据中使用了这些信息,那么从技术上讲这是一种泄露,因为您只会在转化后支付转介费,这是您事后才知道的。
让我们从实际示例开始 👇
什么是 PyCaret?
PyCaret 是一个开源的、低代码的 Python 机器学习库和端到端模型管理工具,用于自动化机器学习工作流程。使用 PyCaret,您可以高效地构建和部署端到端的机器学习流水线。要了解更多关于 PyCaret 的信息,请查看他们的 GitHub。
安装 PyCaret
# 安装 PyCaret
pip install pycaret
👉 数据集
在本教程中,我使用了来自 Kaggle 的一个 Lead Conversion 数据集。该数据集包含超过 9000 个潜在客户的特征,例如潜在客户来源、潜在客户来源、在网站上花费的总时间、在网站上的总访问次数、人口统计信息以及目标列 Converted(表示转化为 1,未转化为 0)。
# 导入库
import pandas as pd
import numpy as np
# 读取 csv 数据
data = pd.read_csv('Leads.csv')
data.head()
👉 探索性数据分析
# 检查数据信息
data.info()
请注意,有几列存在许多缺失值。处理缺失值有几种方法。我将让 PyCaret 自动处理缺 失值。如果您想了解有关在 PyCaret 中填充缺失值的不同方法的更多信息,请查看此 文档链接。
直观地说,网站上花费的时间和活动评分以及潜在客户来源在潜在客户转化方面非常重要。让我们通过可视化方式来探索它们之间的关系:
请注意,来自“Add Forms”的潜在客户无论在网站上花费的时间还是评分上都有可能转化为销售。通过 API 或网站的落地页产生的潜在客户则有不同的情况。评分较高且在网站上花费的时间较长的潜在客户更有可能转化为最终销售。
👉 数据准备
在 PyCaret 的所有模块中,setup 是在进行任何机器学习实验之前的第一个且唯一必需的步骤。此函数负责在训练模型之前进行所有的数据准备工作。除了执行一些基本的默认处理任务外,PyCaret 还提供了广泛的预处理功能。要了解 PyCaret 中所有预处理功能的更多信息,请参阅此 链接。
# 初始化 setup
from pycaret.classification import *
s = setup(data, target='Converted', ignore_features=['Prospect ID', 'Lead Number'])
在 PyCaret 的 setup 函数中初始化后,它会自动对数据集进行分析,并推断所有输入变量的数据类型。如果一切都推断正确,您可以按 Enter 键继续。您还可以在 setup 中使用 numeric_features 和 categorical_features 参数来强制/覆盖数据类型。
还请注意,我在 setup 函数中传递了 ignore_features = ['Prospect ID', 'Lead Number'],以便在训练模型时不考虑它们。这样做的好处是 PyCaret 不会从数据集中删除该列,而是在模型训练时在幕后忽略它。因此,在最后生成预测时,您不需要担心自己手动连接 ID。
👉 模型训练和选择
现在数据准备工作完成了,让我们通过使用compare_models功能开始训练过程。该函数会训练模型库中的所有算法,并使用交叉验证评估多个性能指标。
# 比较所有模型
best_model = compare_models(sort='AUC')
基于AUC指标,最佳模型是Catboost分类器,平均10折交叉验证的AUC为0.9864。
# 打印best_model的参数
print(best_model.get_all_params())
# 除了catboost,你可以这样做:
print(best_model)
👉 模型分析
AUC-ROC曲线
AUC-ROC曲线是用于分类问题的性能度量,它在不同的阈值设置下进行评估。ROC是一条概率曲线,AUC表示可分离性的程度或度量。它告诉我们模型在区分不同类别方面的能力。AUC越高,模型在预测正类和负类方面的能力越好。虽然这对于评估和比较不同模型的性能非常有帮助,但将这个指标转化为业务价值并不容易。
# AUC曲线
plot_model(best_model, plot = 'auc')
SHAP值
与AUC-ROC不同,SHAP值不会告诉您任何关于模型性能的信息,而是解释了具有某个特定值的给定特征相对于如果该特征采用某个基准值时的预测的影响。在下面的图表中,y轴(左侧)显示了模型的所有重要特征,x轴是相关特征的Shapley值,颜色刻度(右侧)是特征的实际值。图表上每个特征上的每个点都是一个客户线索(来自测试集)-它们彼此重叠。
Shap值越高(x轴),正类(在本例中是转化)的可能性就越高。所以从上往下看,我会解释这样的线索:“阅读邮件后会回复”的Shap值较高,相对于基准值来说,转化的可能性更高。相反,如果您看到“响铃”这个标签,情况正好相反,Shap值在基准值的左侧,即负的Shap值,意味着该特征对转化起到了反作用。要更详细地了解Shap值,请参阅此链接。
# Shapley值
interpret_model(best_model)
特征重要性图
特征重要性图是解释模型结果的另一种方式。虽然Shap值只适用于复杂的基于树的模型,但特征重要性图更常见,可用于不同类型的模型。与Shap值不同,特征重要性图不告诉我们特征对特定类别的影响,它只告诉我们特征是否重要。
# 特征重要性
plot_model(best_model, plot = 'feature')
混淆矩阵
混淆矩阵是查看模型性能的另一种方式。在所有可能的工具中,这可能是最简单的一种。它基本上将预测结果与实际标签进行比较,并将它们分为四个象限:
- 真正例(**预测:**转化,**实际:**转化)
- 真负例(**预测:**未转化,**实际:**未转化)
- 假正例(**预测:**转化,**实际:**未转化)
- 假负例(**预测:**未转化,**实际:**转化)
如果将这四个象限加起来,它将等于测试集中的客户线索数量(1667 + 70 + 84 + 952 = 2,773)。
-
952个客户(右下象限)是真正例,这些是模型预测将转化并且实际上转化的线索;
-
70个线索是假正例(这是您可能已经浪费了努力的地方);
-
84个线索是假负例(错过的机会);和
-
1,667个线索是真负例(没有影响)。
**# 混淆矩阵 **plot_model(best_model, plot = 'confusion_matrix')
到目前为止,我们已经为建模准备好了数据(当您运行设置函数时,PyCaret会自动执行此操作),训练了多个模型以选择基于AUC的最佳模型,通过不同的图表进行了性能分析,如AUC-ROC曲线、特征重要性、混淆矩阵和Shapley值。然而,我们还没有回答最重要的问题:
这个模型的商业价值是什么,为什么我们应该使用这个模型?
为了为这个模型赋予商业价值,让我们做一些假设:
- 将潜在客户转化为销售将为第一年带来120美元的收入
- 追踪优先级潜在客户(由模型预测)所花费的时间和精力为15美元