使用 PyCaret 预测潜在客户得分(正确的方法)
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
如今,潜在客户是许多企业发展的驱动力。随着订阅制商业模式的发展,特别是在初创企业领域,将潜在客户转化为付费客户是生存的关键。简单来说,“潜在客户”代表着对购买你的产品/服务感兴趣的潜在顾客。
通常当你获取潜在客户时,无论是通过第三方服务还是自己运行营销活动,它通常包含以下信息:
潜在客户的姓名和联系方式
潜在客户属性(人口统计学、社交、客户偏好)
来源(Facebook 广告、网站着陆页、第三方等)
在网站上花费的时间、点击次数等
推荐详情等
市场营销和销售部门在潜在客户管理上花费了大量的时间、金钱和精力。我们将潜在客户管理理解为包括潜在客户生成、资格评估和货币化这三个关键阶段的概念。
潜在客户生成是激发客户对你的产品或服务的兴趣或咨询的过程。生成潜在客户的目的是将兴趣或咨询转化为销售。互联网上有无数第三方公司承诺生成最佳潜在客户。然而,你也可以通过自己运行营销活动来做到这一点。生成潜在客户的方法通常属于广告的范畴,但也可能包括非付费来源,例如有机搜索引擎结果或现有客户推荐。
潜在客户资格评估是指确定哪些潜在客户最有可能实际购买的过程。它是销售漏斗中不可或缺的一部分,销售漏斗通常会接收大量潜在客户,但只有一小部分能转化为实际购买。简单来说,潜在客户资格评估意味着评估潜在客户并确定其优先级,以得出转化的可能性,这样你的市场营销和销售部门就可以追逐那些优先级高的潜在客户,而不是所有的潜在客户,因为潜在客户数量通常可能达到数千。
潜在客户转化是将合格的潜在客户最终转化为付费客户的阶段。它包含所有刺激购买产品或服务欲望并将潜在客户推向购买决定的营销实践*。*这是货币化或成交阶段,其结果通常决定了整个营销活动的成功与否。
想象一下你的团队有很多潜在客户(潜在顾客),但没有足够的资源来跟进所有客户。无论你是一家拥有大量免费用户的产品驱动型企业,拥有一个优秀的入站潜在客户漏斗,还是仅仅拥有一支出色的上门销售团队,归根结底,你需要优先安排销售团队的时间,并将“最佳”潜在客户分配给他们。
问题是,你如何做到这一点,从而最大限度地提高你的成交率?
一种简单的方法是分析历史数据,并查看基于哪些属性潜在客户已经转化为销售。例如,可能存在某个特定的国家、城市或邮政编码,历史数据显示该地的潜在客户有 90% 的时间转化为销售。同样,你的数据也可以告诉你,在你的网站上花费超过 20 分钟的客户大多数时候都会转化为销售。使用这些业务规则,你可以创建一个**潜在客户得分系统**,利用这些业务规则为每个潜在客户附加得分(得分越高越好)。
这种方法的问题在于,业务规则只能覆盖有限的范围。随着你的业务扩展,你可以收集的数据类型和种类会呈指数级增长。在某个时候,手动基于规则的系统将不够健壮,无法持续增加价值。
机器学习登场
你可以从机器学习的角度来处理**潜在客户得分系统**,利用客户属性、潜在客户来源、推荐和其他可用详细信息来训练机器学习模型,目标变量将是潜在客户转化(是或否)。
你如何获取目标变量?大多数 CRM 系统,如 Salesforce、Zoho 或 Microsoft Dynamics,都可以跟踪单个潜在客户及其状态。潜在客户的状态将帮助你创建目标变量。
需要注意的一点是,你必须确保训练数据集中不会发生任何信息泄露。例如,你的 CRM 系统可能存储了潜在客户转化后支付给第三方的推荐费信息,想象一下如果你在训练数据中使用了这些信息,这在技术上属于泄露,因为你只会在转化后支付推荐费,这是你事后才知道的事情。
直观来看,在网站上花费的时间、活动得分以及潜在客户来源对于潜在客户转化来说是非常重要的信息。让我们通过可视化方式探索它们之间的关系。
请注意,来自“添加表单”的潜在客户很可能转化为销售,无论在网站上花费的时间或得分如何。而通过 API 或网站着陆页产生的潜在客户则不同。更高的得分以及在网站上花费更长的时间更有可能将潜在客户转化为最终销售。
在 PyCaret 中初始化 setup 函数后,它会自动对数据集进行概要分析并推断所有输入变量的数据类型。如果一切推断正确,你可以按回车键继续。你也可以在 setup 中使用 numeric_features 和 categorical_features 参数来强制/覆盖数据类型。
另外,请注意我在 setup 函数中传递了 ignore_features = ['Prospect ID', 'Lead Number'],这样在训练模型时就不会考虑这些特征。这样做的好处是 PyCaret 不会从数据集中移除这些列,它只是在后台忽略它们用于模型训练。因此,当你最后生成预测结果时,无需担心自己将 ID 重新连接回去。
数据准备完成后,现在我们开始训练过程,使用 compare_models 功能。此函数训练模型库中所有可用的算法,并使用交叉验证评估多个性能指标。
基于AUC* *的最佳模型是Catboost 分类器,其平均 10 折交叉验证 AUC 为0.9864。
AUC — ROC 曲线是分类问题在各种阈值设置下的性能度量。ROC 是一条概率曲线,AUC 表示可分离性的程度或度量。它说明了模型区分不同类别的能力。AUC 越高,模型预测正类和负类的能力越好。虽然它对于评估和比较不同模型的性能非常有帮助,但将此指标转化为商业价值并不容易。
与 AUC-ROC 不同,SHAP 值不会告诉你任何关于模型性能的信息,而是解释了给定特征的某个值与该特征取某个基线值时的预测结果相比产生的影响。在下面的图表中,y 轴(左侧)显示了模型的所有重要特征,x 轴是相关特征的 Shapley 值,颜色标尺(右侧)是特征的实际值。每个特征上的每个点代表一个客户潜在客户(来自测试集)—— 它们相互重叠。
特征重要性图是另一种解释模型结果的方式。虽然 SHAP 值仅适用于复杂的基于树的模型,但特征重要性图更常见,可用于不同类型的模型。与 SHAP 值不同,特征重要性图不告诉我们特征对特定类别的影响,它只告诉我们特征是否重要。
混淆矩阵是另一种查看模型性能的方式。在所有可能的工具中,这也许是最简单的一种。它基本上将预测结果与实际标签进行比较,并将它们分为四个象限:
真阳性(预测:转化,实际:转化)
真阴性(预测:未转化,实际:未转化)
假阳性(**预测:**转化,实际:未转化)
假阴性(预测:未转化,实际:转化)
如果你将所有四个象限相加,它将等于测试集中的客户潜在客户数量(1667 + 70 + 84 + 952 = 2,773)。
952 个客户(右下象限)是真阳性,这些是模型预测会转化的潜在客户,而且他们确实转化了;
70 个潜在客户是假阳性(这是你可能浪费了精力的地方);
84 个潜在客户是假阴性,即(错失的机会);以及
1,667 个潜在客户是真阴性(没有影响)。
**# 混淆矩阵 **plot_model(best_model, plot = 'confusion_matrix')
到目前为止,我们已经准备好用于建模的数据(当你运行 setup 函数时,PyCaret 会自动完成),训练了多个模型以选择基于 AUC 的最佳模型,并通过不同的图表(如 AUC-ROC、特征重要性、混淆矩阵和 Shapley 值)分析了性能。然而,我们还没有回答最重要的一个问题:
这个模型的商业价值是什么?我们为什么应该使用这个模型?
为了为这个模型附加商业价值,让我们做一些假设:
转化为销售的潜在客户将在第一年带来 120 美元的收入
用于跟进优先潜在客户(如模型预测)的时间和精力成本为 15 美元
模型错过的机会(假阴性)产生负 120 美元的隐性成本(你可以选择是否添加此项,因为它不是实际成本,而是机会成本 — 完全取决于使用场景)
如果你稍作计算,你会得出88,830 美元的利润。计算如下:
这可能是一个好模型,但它不是一个商业智能模型,因为我们还没有将成本/利润的假设输入进去。默认情况下,任何机器学习算法都会优化传统的指标,如 AUC。为了实现业务目标,我们必须使用业务指标来训练、选择和优化模型。
感谢 PyCaret,使用 add_metric 函数可以非常轻松地实现这一点。
现在让我们再次运行 compare_models
注意这次添加了一个新列 利润,并且根据利润指标,**Catboost 分类器**不再是最佳模型。现在是**Light Gradient Boosting Machine**。虽然在这个例子中差异并不显著,但根据你的数据和假设,有时这可能意味着数百万美元的差异。
客户总数仍然相同(测试集中有 2,773 名客户),变化的是模型在假阳性和假阴性方面的错误方式。让我们用相同的假设(如上所述)来衡量它的价值:
利润现在是 89,925 美元,而使用 Catboost 分类器时是 88,830 美元。这是一个 1.2% 的提升,根据假阳性和假阴性的数量及成本,这可能转化为数百万美元。除此之外,你还可以做其他一些事情,例如通过明确优化利润而不是 AUC、准确率、召回率、精确率或任何其他传统指标来调整最佳模型的超参数。
嗯,你现在肯定会问,既然我们已经选择了最佳模型,如何将这个模型应用于新的潜在客户来生成得分?这并不难。
注意数据集末尾添加了最后三列 — Label(1 = 转化,0 = 未转化)、Score_0 和 Score_1 分别表示每个类别介于 0 到 1 之间的概率。例如,第一个观测值的 Score_0 是 0.9973,意味着未转化的概率为 99.7%。
使用这个轻量级的 Python 工作流程自动化库,你可以实现无限可能。如果你觉得这很有用,请不要忘记在我们的 GitHub 仓库上给我们一颗 ⭐️。
是一个开源、低代码的机器学习库和端到端模型管理工具,用于自动化机器学习工作流程。使用 PyCaret,你可以高效地构建和部署端到端机器学习 pipeline。要了解更多关于 PyCaret 的信息,请查看他们的.
本教程中,我使用了一个来自 Kaggle 的数据集。该数据集包含 9,000 多个潜在客户,其中包括潜在客户来源、潜在客户渠道、在网站上花费的总时间、网站总访问次数、人口统计信息以及目标列 Converted(1 表示转化,0 表示未转化)。
请注意,有几列包含许多缺失值。有几种处理缺失值的方法。我将让 PyCaret 自动处理缺失值。如果你想了解更多关于 PyCaret 中填补缺失值的不同方法,请查看此.
PyCaret 所有模块共有的特点是,setup 是在 PyCaret 中执行任何机器学习实验的第一步也是唯一必需的步骤。此函数负责模型训练之前所需的所有数据准备工作。除了执行一些基本的默认处理任务外,PyCaret 还提供了广泛的预处理功能。要了解有关 PyCaret 中所有预处理功能的更多信息,你可以查看此.
SHAP 值越高(x 轴),正类(本例中为转化)的可能性越高。因此,从顶部开始看,我将解释为标记为“阅读邮件后会回复”的潜在客户,与基线相比具有较高的 SHAP 值,意味着转化的可能性更高。相反,如果你看到“正在响铃”的标签,情况则完全相反,SHAP 值位于基线的左侧,即负 SHAP 值,这意味着此特征不利于转化。要更详细地了解 SHAP 值,请参阅此.
我是一名定期撰写博客的作者,主要撰写关于 PyCaret 及其在现实世界中的用例。如果你想自动收到通知,可以关注我的, ,和.
要了解更多关于 PyCaret 的信息,请关注我们的和.
加入我们的 slack 频道。邀请链接.