人工智能/模式识别/机器学习精华专题码农的世界程序员技术栈

为分类问题中的数据倾斜选择正确的度量

2019-05-14  本文已影响4人  AI读芯术

全文共3271字,预计学习时长6分钟

选择合适的度量标准去解决分类问题,可以让我们更好地了解模型,让模型更快地实现自我优化,并获得更多面向业务的结果。比如:

解决模棱两可的问题

天气预报、股价预测、信用欺诈检测等都试图通过建立数据模式来解决一个看似模糊的问题。我们往往试图找出观测数据和观测目标标签之间的关系,并进一步利用发现的这些关系进行预测。

那么,我们发现的数据和预测目标之间关系的质量如何呢?

求函数近似值

在所有有可能的数据下,每一个事件都是可预测的,因此每一个目标观测都可以用一个函数来解释,这个函数采用了正确的预测值集。

f(AllPredictors)->y

or

f(AllPredictors) gives target

我们试图找到一个函数g,与f值非常近似。由于有时没有所有预测变量和所有的观测值,因此不可能找到函数f本身。所以发现:

g(Some subset ofPredictors) -> y [Correct in most cases]

g与f的近似程度如何?

“g与f的近似程度”将取决于我们的预测器,以及我们的学习算法。

我们有两个问题,第一:函数近似程度有多高?第二:在数据和目标之间找到的关系有多好?度量标准会回答这些问题。

一个好的指标来预测第二天的降雨情况

我们每天都会对第二天进行预测。比如我们经常会预测明天是否会下雨?需要带伞吗?

假设只有87天下雨,278天没下雨。我们可以预测这些天中下雨天有42天。但总的来说,预测有122天要下雨。87天中有42天是正确的,278天中有278-80=198天,42+198=240天。所以正确率为240/365或65%。但如果我们的目的是保护用户不被淋湿,那么我们失败了87-42=45次。有一半的雨都没料到。所以,虽然65%的时间是正确的,但仍然有45天被淋湿,只在42天没被淋湿。 

所以,使用的指标(总误差的百分比)是否是问题的正确指标?请看下面2个案例:

案例1:避开下雨天:客户基于你的预测来计划外出。也许你可以用另一种方法衡量?就像“检测到%雨天”和“N天之前的TTL /预测”一样,由于我们的用户希望能避开下雨天,如果我们能检测到大多数雨天就更好了。此外,在这种情况下,提前提供预测(第二个度量标准)以供用户计划也很重要。我们在努力优化两者。

案例2:通勤交通路线选择:在这里你可以预测每小时的情况并且不需要查找所有下雨天,更重要的是大部分时间都要正确,因此用户(或地图应用程序)可以在大多数时间选择正确的路线。这里“整体的正确时间百分比”确实是一个很好的指标。

由此可见,成功的机器学习解决方案不仅需要定义精度、召回、准确度。指标可能还需要考虑重要的业务因素,例如应该何时进行预测?需要预测多长时间?(需求预测域)算法需要多长时间等等。

本文重点研究了分类问题的一个子集——偏差标签分类问题。在这些问题中,目标标签不是均匀分布的。示例本身存在偏差,其中正标签(下雨)仅为87,而负标签为278个,偏差为1:3。

像信用欺诈这样的问题有很多偏差,99%的例子是负标签(非欺诈),只有1%是正标签(欺诈)。因此,诸如准确性、精确度、召回之类的通用指标无法达到目的。此外,许多组织都有一套关于精确、召回的概念(90%精确度,95%召回率)。但对于这些偏重类的问题,这些数字大多是无法实现的。因此,正确的问题是:机器学习模型能否提供商业价值?指标应反映此问题。

可用于分类问题的度量标准

本文提供了当前流行的scikit库中可用的分类指标列表。下面是从最好到最差的排序(关于偏差问题):

敏感度分数

特异性分数

精确度

召回

平衡准确度

准确性

F1得分

AUC-ROC

精确召回曲线下的平均精度/面积

不平衡/偏差问题的分类度量行为

我们将人工创建一些数据然后将偏差分为正面和负面两类。接下来,使用分类算法和一些指标来检查指标对增加的偏差的反应。

理想情况下,如果没有对模型进行微调或对数据进行重新采样,合适的指标应该是从好到坏。另一方面,不考虑偏差的指标将不会显示出很大的变化,甚至可能随着变差的增大而增大。

首先看看不平衡的数据是什么样的,使用scikit的make_moons api函数。

激活不平衡图代码

当增加不平衡时的结果为:

不平衡增加

接下来看看在不断增加的不平衡下各种指标是怎样的。

生成数据

接下来,定义一个连续构建模型的函数。

模型构建器函数

最后,编写了一个遍布于各种不平衡值以及我们提供的指标的函数,并绘制了指标与不平衡的关系图。

绘制指标与不平衡的函数

此处使用了np.logspac来生成不平衡值。这有助于生成更多接近0的值,更少接近1的值。第8行的函数调用不平衡数据,这是一个自定义函数,可以在同一文件夹的lib.py中找到。其他自定义函数在同一个文件中。

最后,来运行它。使用F1、准确性、召回和精确性作为度量标准。

度量与不平衡-I

观察结果如下:

准确性对不平衡一点也不敏感,而精度、召回和F1对不平衡敏感。

接下来,尝试一些其他指标。我们定义了两个新的指标:precision@recall=75和recall@precision=75,因此我们将recall/precision保持在一个设定的阈值,然后检查不平衡是如何影响其他指标的。

指标与不平衡 - II

注意,所有这些指标都对不平衡很敏感。为了改进,需要调整模型。另一方面,准确度对不平衡不敏感,因此呈现出良好性能的虚假舒适画面。这是因为随着偏差的增加,预测最频繁出现的类别将呈现高精度。在1:99的偏差情况下(1个正偏差和99个负偏差),如果预测结果总是负的,那么99%是准确的。准确度=正确预测数/总示例数。

最后将AUC-ROC和平均精度与准确度进行比较。

指标与不平衡性 - III

注意,AUC-ROC对不平衡不敏感。因此,如果数据集有偏差,那么AUC-ROC就不是一个很好的指标。来找出其中的原因。

关于AUC-ROC对不平衡不敏感的解释

ROC曲线和术语

对于不同的阈值(0-1),ROC曲线呈现出真阳性与假阳性。随机猜测的最小值可能是0.5。

让我们看看它对增加不平衡有什么作用。

我们想证明的是:随着不平衡的增加,TPR和FPR保持不变。Eq 1: TPR = TP/(TP+FN)

随着不平衡的增加,TPR将基本保持不变,因为它取决于对正偏差例子进行的错误分类。如果算法的检测性为90%,那么TPR = 90 /(90+ 10)= 0.9,即TPR不依赖于偏差,而仅依赖于算法检测正偏差的程度。

Eq 2: FPR =FP/(TN+FP)

有趣的是,随着偏差的增加,我们将会得到更多的FP,假设算法将每100个负偏差例子中的1个归类到正偏差里面(FP),那么当偏差值较高时,我们得到的负偏差将比正偏差多很多,也将得到很多FP。但在这里不考虑FP,考虑的是FPR。注意TN的分母,真负值(TN)也会因负偏差类别的增加而增加。因此,FPR也保持不变。

鉴于两个方程式在直观上是相同的,因此AUC-ROC对偏差不敏感也就不足为奇了。

使用派生指标解决不平衡/偏差问题

建议根据需求使用以下两种方法之一。

Precision@Recall=x or FPR@Recall=x

Recall@Precision=x

为什么有用?

举一个欺诈检测的例子,如果想检测95%的欺诈,那么召回率= 0.95,现在你要确保没有太多的FP。精度= TP /(TP + FP),因此请提高精度,降低FP。你在公式中修复了x,所以你对召回有所了解,现在通过不断召回来优化模型,以提高精度或降低FPR。

同样的,比如说癌症的药物管理(化疗)。要确保没有这种疾病的人不会开这种药物,因为它对健康有巨大的影响。医院认为诊断的错误率只有千分之一。或者精度=999/(999+1)=0.999。所以精度是固定的,现在你的模型必须增加检测/召回。因此,recall@precision=0.999是一个很好的度量标准。

除了使用这些特定问题的派生度量之外,指标还可以由多个约束条件组成。例如,在谈到的降雨预报问题中,你可以有一个像Precision@Recall=0.8,Duration=7Days的指标,即你想要检测80%的雨天,并在至少7天之前预测到降雨。通过这些约束条件,你也能优化精度。

选择正确的度量标准时要注意的事项

基于问题和度量的数学性质

如果分布存在偏差,则准确性和AUC-ROC不是优选。最好使用Precision / Recall或某些派生度量。

基于商业效用

在这种情况下,派生指标是优选,因为它们最适合用于商业案例。我们在上面展示了Precision@ Recall = x和Recall @ Precision = x如何很好地编码业务需求。

为什么不使用曲线下面积/f1得分/AP作为度量

仅供参考:这只是一个观点。

请注意,当精度和召回互换时,F1可以是相同的值。设精度= 0.9,召回= 0.3,然后f1 =0.45,将它们互换,并设召回= 0.9,精度= 0.3,结果仍然是f1 = 0.45。现在,如果将f1作为模型指标,那么精度和召回的值是多少呢?贵公司是否准备好接受这两个值了呢?他们能理解吗?

至于AP/AUC-ROC,它们也有类似的情况,即曲线下的面积可能相同,因为两个外观非常不同的曲线优化方式各不相同。

注意:

· 不要将AUC-ROC、PR曲线区域(平均精度分数)等用于业务报告。

· 不要在报告中使用像F1 Score这样复杂的指标。

· 使用派生度量标准,这样可以轻松地轻松捕获业务的精髓。

· 如果数据不平衡,请不要使用准确性或auc-roc。

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

上一篇下一篇

猜你喜欢

热点阅读