有一种“错误”的方式
原文:
towardsdatascience.com/theres-a-right-way-to-be-wrong-05b5c0ece56c
如何通过结合商业背景和错误成本来做出更好的预测
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6b67b0b3e96189022941f886aadf0293.png
作者提供的图片(通过 Midjourney)
有一天,我的母亲左眼出现视力问题,去看医生。医生做了快速检查,结论是没有问题;只是随着年龄的增长,眼睛逐渐变差。
短时间内,症状恶化,我母亲得到了第二次意见。结果发现她患有视网膜脱落,治疗的延误造成了永久性损害。
人们在工作中经常犯错误;你不可能在所有情况下都正确。但有些错误比其他错误代价更高,我们需要考虑这一点。
如果医生说“可能有问题”并让我的母亲进行进一步检查,那么他们所有人都有可能检查结果都是阴性,最终发现什么问题都没有。但那种情况下犯错的成本只是浪费了一些时间和医疗资源,并没有造成器官的永久性损害。
医疗领域是一个极端的例子,但同样的逻辑也适用于数据科学、业务运营、市场营销或产品等职位:
在做出预测时,我们应该考虑错误的后果或成本。
例如,如果你在 Uber 工作并试图预测需求(你永远无法 100%准确地做到这一点),你更愿意市场上司机过多还是过少?
不幸的是,根据我的经验,这些业务利益相关者和数据科学家之间的对话很少发生。让我们试着改变这一点。
在这篇文章中,我将涵盖:
我们做出错误预测的不同方式
如何确保你以“正确”的方式犯错
4 个现实生活中的例子,让你思考你希望如何“错误”
每当 Torsten Walbaum 发布文章时,都会收到电子邮件。
我们犯错误的不同方式
当我们进行预测时,我们通常试图做的是:
预测一个类别或结果(例如,将流失的用户与不会流失的用户区分开来);这被称为“分类”
预测一个数字(例如下一年度的销售额)
让我们看看在每种情况下正确或错误意味着什么。
预测一个类别或结果
在所谓的分类问题中,犯错意味着我们将错误的标签分配给某个事物。为了简单起见,我们将专注于只有两种可能结果的问题(二元分类)。
例如,假设我们正在尝试预测一个潜在客户是否会从我们这里购买。有四种结果:
我们预测一个潜在客户会购买,他们也确实购买了(真阳性)
我们预测一个潜在客户会购买,但他们没有(假阳性)
我们预测他们不会购买,但他们确实购买了(假阴性)
我们预测他们不会购买,他们确实没有(真阴性)
2(假阳性)和#3(假阴性)是我们可能犯错误的方式。
我们可以将我们的预测放入所谓的错误矩阵(或混淆矩阵)中,看看我们做得如何:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/96056d798a4967c6a9cdd86ca5ab73f0.png
作者图片
有三个重要的指标帮助我们了解我们犯了多少错误,以及以何种方式犯错误:
我们的准确率告诉我们总体上有多少预测是正确的;它是我们的正确预测(真阳性 + 真阴性)的总和除以预测的总数
我们的精确率告诉我们我们多少个积极的预测是正确的。**也就是说,在我们说会购买的所有潜在客户中,实际上有多少人真的购买了?它是真阳性除以所有积极的预测(真阳性 + 假阳性)。
我们的召回率告诉我们我们正确预测了多少相关结果,换句话说,我们的模型有多敏感。**也就是说,在所有最终从我们这里购买的客户中,我们在预测中识别了多少人?它是真阳性除以真阳性加上假阴性。
所以现在你有三个不同的指标告诉你你的预测有多准确。你应该优化哪一个?
我们将在下一部分讨论这个问题。
预测一个数字
当我们预测一个像销售额这样的数字时,这要简单一些。我们的预测要么高于实际数字,要么低于实际数字(或者达到目标——开个玩笑,这种情况很少发生 😭)。
在这里,你可以用不同的方式来衡量你预测的准确性;最流行的方式可能是平均绝对误差(MAE)和平均绝对百分比误差(MAPE)。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/632b816646acb3a04df18485aeea1351.png
作者图片
问题:默认情况下,这些准确性的度量将过度预测和不足预测视为同样糟糕。然而,在现实中,这很少是情况:
例如,如果你在预测库存需求,预测过高(仓库里多了几件物品)和预测过低(库存耗尽,导致你损失了宝贵的销售额)是非常不同的。
这里的关键问题是:对于你试图预测的业务用例,你更愿意过高还是过低?
如何确保你以“正确”的方式犯错误
就算一个预测模型有很好的准确率,并不意味着它在你想让它做的事情上做得很好。
这里有一个我遇到的真正例子来阐述这个观点:
假设你在市场营销或销售领域工作,并希望预测哪些潜在客户会导致成功的交易。你使用历史数据训练了一个简单的模型,并且难以置信你的眼睛。90%的准确率!第一次尝试就做到了!
但是然后你更详细地查看结果,看到以下情况:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3cb43063084f71541d622184627c65f4.png
作者提供的图片
我们的准确率是 90%,但该模型未能识别出最终成为赢得客户的任何交易。由于大多数潜在客户从未转化,该模型只需预测“没有任何潜在客户会转化”就能实现高准确率。
同样,你可能有一个用于预测库存需求的预测模型,它在纸上看起来相当不错,因为它有相当高的准确率。但如果你更仔细地观察,你会发现它几乎总是略微低估,结果导致你的商店在一天结束时库存耗尽。
显然,这样的模型并不很有用。
在进行此类预测时,你面临两个主要挑战:
你的预测模型没有业务背景;也就是说,如果你没有明确地告诉它,模型不知道犯错的成本是高是低
在分类问题中,我们想要预测的事件通常是罕见的
好消息是,你可以解决这两个问题。
如果你从事商业或产品方面的工作,这是一个接近你数据科学同行工作的绝佳机会;如果你是数据科学家,这是那种业务背景对提供有用分析至关重要的情形之一。
第 1 步:理解犯错的成本
使预测模型具有成本意识的第一步是理解这种成本。
这里有一些需要考虑的关键成本类型:
直接成本:在许多情况下,错误的预测会直接导致业务产生财务成本。例如,如果一家公司未能识别出欺诈交易,他们可能不得不承担由此产生的成本。
机会成本:如果你的预测错误,你通常没有高效地使用你的资源。例如,如果你预测了非常高的支持工单量,并相应地安排了人员,当实际收到的工单少于预测时,你的支持人员将处于闲置状态。
损失收入:误分类或其他错误预测可能导致你错失销售。例如,你决定不对客户发送促销活动,因为你的模型预测他们不会感兴趣,但事实上,如果他们收到促销电子邮件,他们可能会进行购买。
退订与流失:另一方面,有许多场景中,错误的预测可能会惹恼用户或客户,并导致他们流失。继续上述例子,如果你因为认为用户可能对促销活动感兴趣而发送过多的电子邮件或推送通知,他们可能会退订这些通讯渠道,甚至流失。
你可以同时有多种类型的成本(例如直接成本和损失收入)。
将所有适用的个别成本因素相加,以确定在特定场景(例如分类中的假阳性或假阴性,或在预测数字时的过度或不足预测)中犯错的总体成本。
第 2 步:使您的预测模型“具有成本意识”
分类(预测类别或结果)
一旦您计算了每种类型错误的成本(误报 & 误判),您就可以计算您预测模型错误的预期总成本。
您通过将每种类型错误的概率与该类型错误的成本相乘,并将所有这些加起来得到这个总体成本:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/52e93a510d5852baef845b05b4a32fde.png
作者图片
从数学上讲,您的目标应该是最小化这个总体成本。但要做到这一点,您需要确保您的预测模型实际上考虑了这一成本。
有许多方法可以使您的分类模型具有成本意识,但我会介绍我在实践中发现最有用的三种主要方法:
1. 调整分类阈值
许多分类模型,如逻辑回归,实际上并不输出分类,而是输出事件发生的概率(所谓的概率模型)。
所以,以之前的例子为例,如果您正在预测哪些交易是欺诈的,模型实际上并没有直接说“这是一笔欺诈交易”,而是说“这笔交易有[X%]的概率是欺诈”。
在第二步中,交易根据其概率被放入两个桶中:
桶 1:欺诈交易
桶 2:正常(非欺诈)交易
默认情况下,阈值是 50%;所以所有概率大于 50%的交易都进入桶 1,其余的进入桶 2。
然而,您可以更改此阈值。例如,您可能决定 20%的概率就足够将交易标记为欺诈。
您为什么要这样做呢?
这涉及到错误的成本。漏掉欺诈交易对公司来说比将交易标记为欺诈但实际上是正常的交易的成本要高得多;在后一种情况下,您只需承担额外的手动审查成本和交易延迟,这可能会让客户感到烦恼。
您如何决定选择哪个阈值?
您有两个选择:
选项 1:使用精确度-召回曲线
所说的精确度-召回曲线显示了不同阈值下的精确度(我们多少个正面预测是正确的)和召回率(我们成功识别的相关结果有多少)。
这是一个权衡:您想要检测的欺诈交易越多(更高的召回率),您就会得到更多的误报(更低的精确度)。您可以与您的业务伙伴就曲线上您感到舒适的一点达成一致。例如,他们可能希望捕获的欺诈交易的最小份额。
为了确保您的选择是合理的,您可以按照本章开头公式计算您选择的点的错误总成本。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e7fd3b7ee319bba296532325cb569b7f.png
作者图片
选项 2:计算成本最小化阈值
根据假阳性和假阴性的成本,你可以计算出最小化总体成本的国值。
对于一个校准良好的模型,这是:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2a5dc7dccb943786f09c8e0acb0c6586.png
《成本敏感学习的基石,C. Elkan(2001)
一个例子:
如果你的假阴性(例如,未能识别欺诈交易)的成本是 9 美元,而假阳性(例如,错误地将交易标记为欺诈)的成本是 1 美元,那么 _ 理想阈值 _ 将是 1 / (9 + 1) = 1 / 10 = 0.1。
因此,即使某物是欺诈的可能性只有略高于 10%,你也希望标记交易并让人类进行审查。
2. 重新平衡训练数据集
如上所述,我们试图预测的事件通常在我们训练模型的数据中代表性不足(这些事件被称为“少数类”)。
同时,未能识别这些事件通常会给企业带来非常高的成本。
一些例子:
我们试图预测哪些用户将在接下来的 X 天内流失,但在给定的时间段内,很少用户实际上会流失
你预测某个交易是否为欺诈,但欺诈是绝对例外
我们试图预测扫描中是否有癌症迹象,但大多数患者都是健康的
未能检测这些罕见事件通常成本很高,但大多数模型在处理这种不平衡的数据集时表现不佳。它们简单地没有足够的例子来学习。
为了解决这个问题,你可以对代表性不足的类的示例进行过采样,以便正事件得到更均匀的表示。用简单的话说:你正在创建更多罕见事件的实例,以便模型更容易训练以检测它们。
你可以通过在训练数据集中复制少数类的现有示例,或者创建合成示例来实现这一点。
或者,你也可以减少多数类的实例以平衡事物(欠采样)。过采样和欠采样都存在挑战,这超出了本文的范围。我在文章末尾提供了一些进一步阅读的资源。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c0e53d9a924244d23eabe8d649a9390a.png
图片由作者提供
你如何重新平衡你的数据集以最小化错误成本?
如果你的分类器使用标准的 0.5 阈值,你可以通过以下公式计算需要将多数示例的数量乘以多少倍:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/58ac4d4b3a73ca471ea170d413f93d1f.png
成本敏感学习的基石,C. Elkan (2001)
一个例子:
所以使用与上面示例相同的值(错误地将交易标记为欺诈的成本为 1 美元,错过欺诈交易的成本为 9 美元),这个系数将是 1 / 9 = 0.1111。
换句话说,我们将通过 9 倍(欠采样)的比例减少训练集中多数示例的数量。
3. 修改每个类的权重
许多机器学习模型允许你调整分配给每个类的权重。
那会做什么?再次假设我们正在预测我们应用中的欺诈交易。我们的模型试图最小化误分类。默认情况下,未能识别欺诈和错误地将正常交易标记为欺诈被视为同样糟糕。
如果我们给少数类(我们的欺诈交易)分配更高的权重,那么我们实际上使这个类中的错误(即未能识别欺诈)的成本更高,从而激励模型减少这些错误。
预测一个数字
我们已经讨论了很多关于如何使你的分类模型成本感知的内容,但并非所有预测都是分类。
如果你正在预测你需要多少库存或你期望销售团队有多少有机潜在客户?在这些情况下预测过高或过低对业务的影响非常不同,但如前所述,大多数广泛使用的预测方法忽略了这种业务背景。
进入:分位数预测。
传统的预测通常试图提供一个“最佳估计”,以最小化整体预测误差。另一方面,分位数预测允许你定义你希望有多“保守”。
你选择的“分位数”代表实际值落在预测值以下的概率。例如,如果你想确保你不会低估,你可以在 90 分位数进行预测,实际值预计有 90%的时间低于你的预测。
换句话说,你正在将更高的成本分配给低估,而不是高估。
4 个真实案例
那么就这么多理论;让我们将其付诸实践。
这里有一些真实场景,在这些场景中,你必须确保你选择了“正确”的错误方式。
示例 1:B2B 市场营销与销售中的潜在客户评分
🤔 问题:
类型:预测一个结果(分类问题)
你在一家 B2B SaaS 公司工作,并希望弄清楚哪些潜在客户会“成交”,即转化为客户。你的模型识别出的高潜力潜在客户将得到销售代表的特别关注,并针对他们进行额外的市场营销努力。
💸 错误的成本:
误报:如果你错误地将潜在客户标记为“高潜力”,你将 1) 浪费销售代表的时间,2) 浪费用于高接触市场营销活动(例如礼物)的资金。
假阴性:如果您未能识别出高潜力的潜在客户,您关闭交易的机会将降低,因为您没有部署最佳策略,从而导致收入损失。
⚙️ 优化目标:
默认情况下,您的模型会将非常少的潜在客户标记为“高潜力”,因为在训练数据中,大多数潜在客户从未成交。
然而,由于在 B2B SaaS 中失去一笔交易通常比在失败的交易上浪费一些资源(尤其是如果您针对的是中型或大型企业公司,交易规模更大)的成本要高得多,因此您需要调整模型以大量惩罚假阴性。
示例 2:销售促销的库存
🤔 问题:
类型:预测一个数字
您在一家电子商务公司工作,并希望预测在即将到来的大型活动(例如亚马逊 Prime Day)期间您最重要的产品的需求。
💸 错误的成本:
过度预测:如果您高估了需求,您将会有过剩的库存。成本包括仓库的存储成本,如果您无法在以后销售这些商品,您可能还需要冲销这些商品的价值。
低估预测:如果您低估了需求,您将耗尽库存并错失销售机会。此外,您的声誉将受到影响,因为客户在电子商务中重视持续可用性和可靠性,这可能导致客户流失。
⚙️ 优化目标:
耗尽库存的成本远高于持有一些过剩(非易腐)库存。因此,您希望最大限度地减少这种情况发生的可能性。
您可以使用分位数预测来决定您愿意承担多少库存风险。您希望有 50%、70%还是 90%的机会拥有足够的库存来满足需求?
示例 3:电子邮件促销
🤔 问题:
类型:预测一个结果(分类问题)
您计划运行一种新的电子邮件营销活动,并试图确定您应该针对哪些用户。
💸 错误的成本:
假阳性:如果您将某人纳入活动,但他们发现这不相关,他们可能会取消订阅。成本是您不能再通过其他活动给他们发邮件,可能会失去未来的参与或销售机会。
假阴性:如果您没有选择那些会发现活动相关的用户,您就放弃了近期的用户参与或销售。
如您所见,这里的权衡是在短期收益和潜在的长期负面影响之间。
⚙️ 优化目标:
这种情况不太明确。您需要量化能够向用户发送电子邮件的“终身价值”,然后调整您的模型,以便预期的取消订阅带来的预期未来收入损失等于电子邮件活动本身的预期短期收益。
示例 4:销售招聘
🤔 问题:
类型:预测一个数字
您在一家 B2B 公司工作。您正在推出一个新市场,并预测预期的合格机会数量,以确定您应该招聘多少销售代表。
💸 错误的成本:
**预测过高:**如果你的预测过高,你将招聘比你能够“养活”的更多销售代表。代表将无法完成他们的配额,士气将下降,你最终不得不裁员。
**预测不足:**如果你的预测过低,你将拥有比预期更多的销售机会。在一定范围内,这种超额量可以被“吸收”(代表将花费更少的时间在主动外联上,其他市场的经理和代表可以帮忙等)。只有当你严重低估时,你才会开始错失金钱。
⚙️ 优化目标:
过度预测,以及随之而来的过度招聘,成本极高。由于业务有更多灵活的方式来应对预测不足,你将希望选择一个分位数预测,这样实际交易量大多数时间都会高于预测值。
总之
预测的价值仅在于它所启发的决策。
如果你不将现实生活中的情境融入到你的分析中,无论你的模型多么复杂,输出的结果至多是不理想的,最坏的情况是有害的。
然而,当数据科学和业务/产品利益相关者合作,计算错误成本并调整模型以反映业务的优先级时,预测就成为一个极其有用的工具。
为了获得更多实用的分析建议,请考虑在这里关注我,在 Medium 上,在LinkedIn或Substack上。
