导语:在进阶篇里面,将会讨论ROC和PR曲线的联系,在不平衡数据中的偏差问题,同时利用公式来说明TPR/FPR/Precision三者之间的关系,在第三部分结合业务场景将介绍了几个特殊指标,但是没有说明如果根据指标去设计和优化模型,这个又要挖几个坑,等待后续来填了。

文章目录

  • ROC和PR曲线
    • 直观感受:在正负样本极度不平衡时,关注PR曲线,ROC可能掩盖模型的差异
    • 公式推导:TPR/FPR/Precision三者之间的关系
  • 模型评估要同时结合应用场景和模型指标
    • Precision>=0.97的Recall中,选取max(Recall)
    • 分段覆盖率:0.4 * TPR1 + 0.3 * TPR2 + 0.3 * TPR3
    • 检测比率与拦截比率
  • 总结

ROC和PR曲线

直观感受:在正负样本极度不平衡时,关注PR曲线,ROC可能掩盖模型的差异

在基础篇中,抛出了一个结论在正负样本极不平衡的情况下(正样本是少数的那一类),PR曲线比ROC曲线更能反映模型的性能,而这个结论来源于论文The Relationship Between Precision-Recall and ROC Curves,深入地学习一下这篇文章,对于深刻理解指标还是挺有意义的。
首先,论文先比较了两个模型分别利用ROC和PR曲线进行评估的结果,如下图所示:

从图中我们可以得出两个相反的结论:

  • 从ROC曲线上,两个模型表现都很不错,在FPR比较低的情况,TPR能够快速地靠近左上角区域,这样对应的AUC会较高;
  • 从PRC曲线上,就会觉得模型性能比较差,远离了右上角区域,这意味着在召回率高的情况下,精确率差的一塌糊涂

有了上述比较直观的比较之后,我们心里会倾向于认为这两个模型都有很大的提升空间,同时我们也想弄清楚造成这一现象的原因。根据知乎网友的描点,图a中TPR=0.8时,FPR约为0.1, 由于TPR=Recall, 因此可以大约认为图b中,Recall=0.8, Precision=0.05, 同时假定数据集中仅有100个正样本, 有了上述假设,我们就可以根据公式,推导出混淆矩阵上的各个指标了:

  1. TPR=TP真实正样本数目=TP100=0.8,⇒TP=80TPR=\frac{TP}{真实正样本数目}= \frac{TP}{100} = 0.8, \Rightarrow TP=80TPR=真实正样本数目TP​=100TP​=0.8,⇒TP=80;
  2. Precision=TPTP+FP=8080+FP=0.05,⇒FP=1520Precision = \frac{TP}{TP + FP} = \frac{80}{80 + FP} = 0.05, \Rightarrow FP=1520Precision=TP+FPTP​=80+FP80​=0.05,⇒FP=1520;
  3. $FPR = \frac{FP}{真实负样本的个数} = 0.1, \Rightarrow 真实负样本的个数= 15200 $
  4. 正负样本比例可以得出:100/15200 = 0.00658

对于上述千6的正负样本比,还不是特别悬殊,我们可以再举另外一个例子(来源于Kaggle),假设真实样本中有100个正样本,(1000000-10)个负样本,设置不同的阈值,得到前100, 前2000个样本预测为正样本:

根据计算结果,我们可以发现:

  • 两个模型在TPR,FPR上相比差异不大,尤其是FPR上,由于负样本占主导地位,即使将预测正样本的个数从100调到2000,两者之间的差异也是很小的;
  • 而在Precision和Recall上, Precision显示出了明显的差异,0.9 VS 0.047;
  • 原因在于,Precision,Recall在计算时,是不会考虑真实负样本的个数的,而ROC曲线上,FPR在计算时考虑了真实负样本的, 当负样本占据主导时(FPR的分母很大), FPR上体现不出差异来;
  • 因此,在极度不平衡的情况下,优先要看PR曲线;

公式推导:TPR/FPR/Precision三者之间的关系

根据TPR(与Recall公式定义一致)和FPR的计算逻辑,可以很方便地从混淆矩阵中计算出各个值。假定模型为f(x)f(x)f(x),样本真实标签记为yyy,样本中的正样本占比为η\etaη,可以从概率的角度将其描述出来:
TPR=Recall=P(f(x)=1∣y=1)FPR=P(f(x)=1∣y=0)Precision=P(y=1∣f(x)=1)\begin{aligned} TPR&=Recall=P(f(x)=1| y=1) \\ FPR&=P(f(x)=1| y=0) \\ Precision &= P(y=1|f(x)=1) \end{aligned} TPRFPRPrecision​=Recall=P(f(x)=1∣y=1)=P(f(x)=1∣y=0)=P(y=1∣f(x)=1)​

利用贝叶斯公式,对Precision=P(y=1∣f(x)=1)Precision = P(y=1|f(x)=1)Precision=P(y=1∣f(x)=1) 进行变换:
Precision=P(y=1∣f(x)=1)=P(y=1,f(x)=1)P(f(x)=1))=P(f(x)=1∣y=1)P(y=1)P(f(x)=1,y=1)+P(f(x)=1,y=0)=TPR⋅ηTPR⋅η+FPR⋅(1−η)\begin{aligned} Precision &= P(y=1|f(x)=1) \\ &= \frac{P(y=1, f(x) = 1)}{P(f(x)=1))} \\ &= \frac{P(f(x)=1|y=1)P(y=1)}{P(f(x)=1,y=1) + P(f(x)=1,y=0) } \\ &= \frac{TPR \cdot \eta}{TPR \cdot \eta + FPR \cdot (1 -\eta) } \end{aligned} Precision​=P(y=1∣f(x)=1)=P(f(x)=1))P(y=1,f(x)=1)​=P(f(x)=1,y=1)+P(f(x)=1,y=0)P(f(x)=1∣y=1)P(y=1)​=TPR⋅η+FPR⋅(1−η)TPR⋅η​​
结合上述4个公式,可以发现:

  1. TPR和FPR跟样本比例无关,因为计算公式中不涉及$\eta $,这一点与直接使用混淆矩阵计算过程结论是一致的;
  2. Precision与正负样本比例有关,在固定了FPR/TPR之后,与η\etaη呈现正比例关系

根据混淆矩阵Precision=TPTP+FPPrecision=\frac{TP}{TP + FP}Precision=TP+FPTP​,结合上述Precision的计算公式,隐含的条件是:
P(y=1)=η=评估数据中正样本的比例=TP+FN评估数据中样本总数\begin{aligned} P(y=1) &= \eta \\ &= 评估数据中正样本的比例 \\ &= \frac{TP+FN}{评估数据中样本总数} \end{aligned} P(y=1)​=η=评估数据中正样本的比例=评估数据中样本总数TP+FN​​
根据大数定理,只有当评估的数据集样本足够多时,上述关系成立。

模型评估要同时结合应用场景和模型指标

不管是在基础篇还是上述ROC和PR曲线的对比,我们仅仅关心了模型指标,但是我们时刻要记住的一点,模型服务于业务,全局最优的模型,在实际使用时可能毫无价值而言,因为各种限制,模型影响的人群可能是小部分人群。

Precision>=0.97的Recall中,选取max(Recall)

如在客户流失预测场景中,提前挽回一个客户的成本要远低于去营销一个新用户,因此需要发现更多潜在的流失用户,对应在模型指标上,召回率Recall相比于准确率Precision更重要,我们可以通过几种做法来理解一下:

  • case1: 不使用模型,极端的情况下,我们可以不计时间和人工成本的情况下,直接对所有的存量客户预测为1,那么Recall=1,但Precision会低的离谱,因此不满足业务需求;
  • case2: 开始训练模型,得到一个AUC还不错的模型,但是受制于营销成本,仅能对部分用户进行促活,AUC太抽象,不能指导如何进行促活策略,但是我们知道需要在限定资源的情况下(仅可对部分用户进行挽回,设置的阈值不能太低),尽可能多的找到更多,因此可以设置在Precision>=0.97的Recall中,选取max(Recall)作为评估指标,这个指标在携程的一个比赛中使用,计算过程如下图所示:

分段覆盖率:0.4 * TPR1 + 0.3 * TPR2 + 0.3 * TPR3

在交易风控,打击黑产相关的模型中,经常使用的一种指标,表示在仅尽可能少的打扰下(误杀,误伤)尽可能地识别准确,计算逻辑为:
{TPR1,FPR=0.001TPR2,FPR=0.005TPR3,FPR=0.01\begin{cases} TPR1, & \text{FPR=0.001} \\ TPR2, & \text{FPR=0.005} \\ TPR3, & \text{FPR=0.01} \\ \end{cases} ⎩⎪⎨⎪⎧​TPR1,TPR2,TPR3,​FPR=0.001FPR=0.005FPR=0.01​
根据上述分段的TPR,在风控等领域,又可以叫做覆盖率,而FPR又叫做打扰率,这个很好理解,本来是一次正常的交易,却被识别为有风险,让用户交易中止,或者做二次验证,这样就打扰了用户,因此上述指标是在一定的打扰率的情况下,尽可能得到更高的覆盖率。

根据ROC曲线,这样的模型关注的是一小段曲线,而不是整体的AUC,因此可能存在一个AUC高的模型,上述分段覆盖率指标却不是最优的。
这个指标在蚂蚁支付风险识别比赛上出现:蚂蚁金服风险大脑:支付风险识别(https://dc.cloud.alipay.com/index#/topic/intro?id=12)

def tpr_weight_funtion(y_true,y_predict):"""y_true:真实的类别y_predict:预测的类别"""d = pd.DataFrame()d['prob'] = list(y_predict)d['y'] = list(y_true)d = d.sort_values(['prob'], ascending=[0])y = d.yPosAll = pd.Series(y).value_counts()[1]NegAll = pd.Series(y).value_counts()[0]pCumsum = d['y'].cumsum()nCumsum = np.arange(len(y)) - pCumsum + 1pCumsumPer = pCumsum / PosAllnCumsumPer = nCumsum / NegAllTR1 = pCumsumPer[abs(nCumsumPer-0.001).idxmin()]TR2 = pCumsumPer[abs(nCumsumPer-0.005).idxmin()]TR3 = pCumsumPer[abs(nCumsumPer-0.01).idxmin()]return 0.4 * TR1 + 0.3 * TR2 + 0.3 * TR3

检测比率与拦截比率

与上述分段覆盖率类似,这里检测比例理解为TPR(Recall), 拦截比例为预测为正样本的数量/所有样本量,这两个指标同时关注模型的性能和模型对于流量的影响,示意图如下图所示,在不同的阈值下,可以计算得到不同的检测比例和拦截比例,图中M1~M5表示5个不同的模型的比较:

总结

  • 本文首先对比了ROC和PR曲线在样本不平衡的数据集中可能带来错误结论结论,用于说明在不平衡的情形下,要去关注PR曲线;
  • 在公式推导部分,利用贝叶斯公式得到了TPR/FPR/Precision之间的关系,用于说明FPR,TPR跟正负样本比例无关的特性,而在给定了FPR和TPR下,Precision跟正样本的占比成正比例关系;
  • 在第三部分,介绍了几种特殊的模型评估指标,用于说明模型评估需要和具体的业务场景结合,而不单纯的看AUC等这样的抽象指标


模型评估指标-2-ROC与PR曲线对比,TPR/FPR/Precision关系,3种特殊的评估指标相关推荐

  1. ROC受试曲线AUC[TPR/ FPR/截断点/StratifiedKFold/KFold]

    概念 ROC和AUC定义 ROC全称是"受试者工作特征"(Receiver Operating Characteristic).ROC曲线的面积就是AUC(Area Under t ...

  2. 机器学习之类别不平衡问题 (2) —— ROC和PR曲线

    机器学习之类别不平衡问题 (1) -- 各种评估指标 机器学习之类别不平衡问题 (2) -- ROC和PR曲线 完整代码 ROC曲线和PR(Precision - Recall)曲线皆为类别不平衡问题 ...

  3. 【机器学习】scikitLearn分类任务以mnist为例,训练二分类器并衡量性能指标:ROC及PR曲线

    分类相关导航: [机器学习]分类任务以mnist为例,数据集准备及预处理 [机器学习]scikitLearn分类任务以mnist为例,训练二分类器并衡量性能指标:ROC及PR曲线 [机器学习]scik ...

  4. 【论文精读】ROC和PR曲线的关系(The relationship between Precision-Recall and ROC curves)

    近期复习机器学习的一些基本知识,专门精读了一篇关于讲 ROC曲线的PR曲线关系的文章. 文章的title为<The relationship between Precision-Recall a ...

  5. 机器学习模型性能评估(二):P-R曲线和ROC曲线

    上文简要介绍了机器学习模型性能评估的四种方法以及应用场景,并详细介绍了错误率与精度的性能评估方法.本文承接上文,继续介绍模型性能评估方法:P-R曲线和ROC曲线.                   ...

  6. 二分类及多分类ROC和PR曲线绘制

    目录 1.二分类曲线 1.1 二分类ROC曲线 1.2 二分类PR曲线 2.多分类曲线 2.1多分类ROC曲线 2.2 多分类PR曲线 前两天2022年第二届全国高校大数据竞赛已经落下帷幕,比赛中也用 ...

  7. sklearn决策树/随机森林多分类绘制ROC和PR曲线

    有篇讲解原理的博文/论文(可看可不看):<为什么Decision Tree可以绘制出ROC曲线?> 一.数据,并要先one-hot多分类标签 from sklearn.preprocess ...

  8. R语言应用实战系列(五)-朴素贝叶斯算法以及ROC和PR曲线

    前言 朴素贝叶斯(Naviebayes)的原理很简单:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为该代分项属于哪个类别? 以下是我为大家准备的几个精品专栏,喜欢的小伙 ...

  9. 百面机器学习 #2 模型评估:0102 精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线

    文章目录 1. P-R(Precision-Recall)曲线 F1 score 2. 平方根误差的局限性 3. ROC曲线 ROC曲线绘制 4. AUC predict Positive predi ...

最新文章

  1. java 8 parallelStream()
  2. python做方差分析和卡方检验
  3. mysql某月按小时统计数据_Mysql按周,按月,按日,按小时分组统计数据
  4. Hadoop权威指南 _03_第I部分Hadoop基础知识_第1章初识Hadoop.
  5. 信息学奥赛一本通 2022:【例4.7】最小n值
  6. 作为程序员,错过这次和以太坊V神的面基,你可能会痛失1个亿!
  7. matlab2c使用c++实现matlab函数系列教程-repmat函数
  8. ThinkPHP内核微信拼团购物商城小程序源码
  9. V4L2驱动的移植与应用(三)
  10. 建造者模式------C++实现游戏人物的设定
  11. 怎样在计算机查找应用程序,电脑打开IE浏览器显示找不到应用程序怎么解决
  12. 录简写与缩略语 问题解决工具及要点
  13. 什么是驱动?驱动程序的工作原理?
  14. 利用MSF打包加固APK对安卓手机进行控制
  15. TCO2017 Semifinal 部分题解
  16. 【雅思阅读】王希伟阅读P1(阅读判断题)
  17. 编程练习2--编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔型的格式打印字母:
  18. 怎么用Python计算地球上任意两个用经纬度表示的点的弧面距离?
  19. rosbag中--clock的使用
  20. 【考研政治】史纲总结

热门文章

  1. 《奔跑吧Ansible》
  2. 塞外风光,雁门雄关,古韵大同”塞北研学旅行团
  3. 网易博客fengqing888搬家至CSDN啦
  4. subDomainsBrute 安装 子域名查询
  5. 饿了么(elementUI)组件库如何在vue项目中使用?
  6. HTTP协议和资源下载
  7. 合作共赢!荷兰Swissflow成功入驻ISweek工采网!
  8. 日期函数(最近一周/一个月/半年/一年)
  9. 最好用的网易邮箱工具-网易邮箱助手
  10. [Unfinished] 28_α = β_Direct_Current_Non_Loop_Curren