使用 PyCaret 预测潜在客户得分(正确方法)
上次更新时间
这有帮助吗?
上次更新时间
这有帮助吗?
潜在客户是当今许多企业的驱动力。随着订阅制商业模式的进步,特别是在初创领域,将潜在客户转化为付费客户的能力是生存的关键。简单来说,“潜在客户”代表着对购买你的产品/服务感兴趣的潜在客户。
通常当你获取潜在客户时,无论是通过第三方服务还是自己运行营销活动,通常会包含以下信息:
潜在客户的姓名和联系方式
潜在客户属性(人口统计学、社交、客户偏好)
来源(Facebook 广告、网站登录页、第三方等)
在网站上花费的时间、点击次数等
推荐详情等
市场营销和销售部门在潜在客户管理上投入了大量时间、金钱和精力,这是一个涵盖潜在客户生成、资质评估和盈利化三个关键阶段的概念。
潜在客户生成是激发客户对你的企业产品或服务的兴趣或咨询的过程。生成潜在客户的目的是将兴趣或咨询转化为销售。互联网上有无数第三方公司承诺生成最佳潜在客户。然而,你也可以通过运行营销活动自己生成。潜在客户生成的方法通常属于广告范畴,但也可能包括非付费来源,如有机搜索引擎结果或现有客户的推荐。
潜在客户资质评估是指确定哪些潜在客户最有可能实际购买的过程。它是销售漏斗不可或缺的一部分,销售漏斗通常会接收大量潜在客户,但只有一小部分能够转化。简单来说,潜在客户资质评估意味着评估并优先排序潜在客户,从而得出转化可能性,这样你的市场营销和销售部门就可以追逐优先排序的潜在客户,而不是数量可能高达数千的所有潜在客户。
潜在客户转化是将符合条件的潜在客户最终转化为付费客户的阶段。它涵盖了所有激发购买产品或服务欲望并推动潜在客户做出购买决定的营销实践。这是一个盈利或成交阶段,其结果通常决定了整体营销活动的成功与否。
想象一下,你的团队有很多潜在客户,但资源不足以追逐所有这些客户。无论你是一个拥有大量免费增值用户的产品导向型企业,还是拥有一个优秀的内联潜在客户渠道,或者仅仅是一个优秀的上门销售团队,归根结底,你需要优先安排销售团队的时间,并给予他们“最佳”的潜在客户。
问题是如何做到这一点,从而最大化你的赢单率?
一个简单的方法是分析历史数据,并查看潜在客户转化为销售所基于的属性。例如,在某个特定的国家、城市或邮政编码,潜在客户历史上有 90% 的时间转化为了销售。类似地,你的数据还可以告诉你,在你的网站上花费超过 20 分钟的客户在大多数情况下都会转化为销售。使用这些业务规则,你可以创建一个**潜在客户评分系统**,该系统使用这些业务规则为每个潜在客户附加分数(分数越高越好)。
这种方法的问题在于,业务规则只能覆盖有限的范围。随着业务的扩展,你可以收集的数据类型和多样性将呈指数级增长。在某个时候,手动基于规则的系统将不足够健壮,无法持续增加价值。
机器学习来了
你可以从机器学习的角度来看待**潜在客户评分系统**,你可以根据客户属性、潜在客户来源、推荐和其他可用细节来训练机器学习模型,目标变量将是潜在客户是否转化(是或否)。
如何获取目标变量?大多数 CRM 系统,如 Salesforce、Zoho 或 Microsoft Dynamics,都可以跟踪单个潜在客户及其状态。潜在客户的状态将帮助你创建目标变量。
需要提醒的是,你必须确保训练数据集中不泄露任何信息。例如,你的 CRM 系统可能存储有关潜在客户转化后支付给第三方的推荐费信息,想象一下,如果你在训练数据中使用该信息,技术上就构成了泄露,因为你只会在转化后支付推荐费,这是事后才知道的信息。
直观来看,在网站上花费的时间、活动得分以及潜在客户来源对于潜在客户转化来说是非常重要的信息。让我们通过视觉方式探索它们之间的关系
请注意,来自“添加表单”的潜在客户很可能转化为销售,无论在网站上花费的时间或得分如何。而通过 API 或网站登录页获得的潜在客户则不同。较高的得分以及在网站上花费的较长时间更可能将潜在客户转化为最终销售。
在 PyCaret 中初始化 setup 函数后,它会自动分析数据集并推断所有输入变量的数据类型。如果一切推断正确,你可以按 Enter 键继续。你也可以在 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、准确率、召回率、精确率或任何其他传统指标来调整最佳模型的超参数。
嗯,你现在肯定会问,既然我们已经选择了最佳模型,如何将这个模型应用于新的潜在客户来生成得分?这并不难。
注意,数据集添加了最后三列 — 标签(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 频道。邀请链接.