Precision-Recall (PR) 曲线(附代码)-金融风控模型核心指标

财富   科学   2024-09-18 10:01   重庆  

我是Toby,最近正在原创👉「python风控模型_评分卡」系列话题,欢迎订阅。最后给大家分享100G免费资料领取,包括python入门,数据分析,包括数据分析、统计学、数据挖掘、机器学习等知识。

在公众号「python风控模型」里回复关键字:学习资料,就可免费领取。

PR曲线概述

Precision-Recall (PR) 曲线是评估分类模型性能的一种工具,特别是在数据集不平衡的情况下。它显示了在不同阈值下模型的精确率(Precision)和召回率(Recall)之间的关系。


PR曲线应用场景

PR曲线适用于那些对正类预测准确性要求较高的场景,如医疗诊断、金融风控反欺诈检测等。


PR曲线原理

有多种方法可以评估分类器的性能。在本文中,我们介绍了 Precision-Recall 曲线,并进一步研究了两种流行的性能报告方法之间的区别:Precision-Recall (PR) 曲线和接收器操作特性 (ROC) 曲线。ROC 曲线已在文章中讨论过。让我们简单了解一下什么是 Precision-Recall 曲线。

在P-R曲线中,Precision为横坐标,Recall为纵坐标。在ROC曲线中曲线越凸向左上角约好,在P-R曲线中,曲线越凸向右上角越好。P-R曲线判断模型的好坏要根据具体情况具体分析,有的项目要求召回率较高、有的项目要求精确率较高。P-R曲线的绘制跟ROC曲线的绘制是一样的,在不同的阈值下得到不同的Precision、Recall,得到一系列的点,将它们在P-R图中绘制出来,并依次连接起来就得到了P-R图。两个分类器模型(算法)P-R曲线比较的一个例子如下图所示:

PR 曲线只是一个图形,y 轴上有 Precision 值,x 轴上有 Recall 值。换句话说,PR 曲线在 y 轴上包含 TP/(TP+FN),在 x 轴上包含 TP/(TP+FP)。

  • 需要注意的是,精度也称为正预测值 (PPV)。

  • 召回率也称为灵敏度、命中率或真阳性率 (TPR)。

下图显示了样本 PR 和 ROC 曲线的并列。

我们建模人员希望该算法既具有高精度,又具有高召回率。然而,大多数机器学习算法通常涉及两者之间的权衡。好的 PR 曲线具有更大的 AUC(曲线下面积)。上图中,蓝线对应的分类器比绿线对应的分类器性能更好。

需要注意的是,在 ROC 曲线上具有较高 AUC 的分类器在 PR 曲线上也总是具有较高的 AUC。

考虑一种对文档是否属于“体育”新闻类别进行分类的算法。假设有 12 个文档,具有以下基本事实(实际)和分类器输出类标签。

现在,让我们找出 TP、TN、FP 和 FN 值,具体计算公式如下图。

混淆矩阵图谱

通过设置不同的阈值,我们得到多个这样的精度、召回率对。通过绘制多个这样的 PR 对,其中任一值的范围从 0 到 1,我们得到了一条 PR 曲线。


有ROC曲线后还需要参考PR曲线吗?

实战:PR 曲线在报告信息检索结果时特别有用。

信息检索涉及搜索文档池以查找与特定用户查询相关的文档。例如,假设用户输入搜索查询“粉红大象”。搜索引擎浏览数以百万计的文档(使用一些优化算法)以检索少量相关文档。因此,我们可以放心地假设没有。与非相关文件的数量相比,相关文件的数量将非常少。


在这种情况下,
TP = 实际相关的检索文档数(良好的结果)。
FP = 检索到的实际上不相关的文档(虚假搜索结果)的数量。
TN = 实际上不相关的未检索文档的数量。
FN = 实际相关的未检索文档的数量(我们错过的好文档)。

ROC 曲线是包含 x 轴上的 Recall = TPR = TP/(TP+FN) 和 y 轴上的 FPR = FP/(FP+TN) 的图。由于没有。真阴性(即实际上不相关的未检索文档)数量如此之大,FPR 变得微不足道。此外,FPR 并不能真正帮助我们很好地评估检索系统,因为我们希望更多地关注检索到的文档,而不是未检索到的文档。

PR曲线有助于解决这个问题。PR 曲线在 x 轴上具有召回值 (TPR),在 y 轴上具有精度 = TP/(TP+FP)。精度有助于突出检索结果的相关性,这在判断 IR 系统时更为重要。


PRC 和 ROC比较另一个例子

再说PRC, precision recall curve。和ROC一样,先看平滑不平滑(蓝线明显好些),在看谁上谁下(同一测试集上),一般来说,上面的比下面的好(绿线比红线好)。F1(计算公式略)当P和R接近就也越大,一般会画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好象AUC对于ROC一样。一个数字比一条线更方便调模型。
以上两个指标用来判断模型好坏,图有些不恰当。但是有时候模型没有单纯的谁比谁好(比如图二的蓝线和青线),那么选择模型还是要结合具体的使用场景。

下面是两个场景:
1. 地震的预测
对于地震的预测,我们希望的是RECALL非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲PRECISION。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。
2. 嫌疑人定罪基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。及时有时候放过了一些罪犯(recall低),但也是值得的。

对于分类器来说,本质上是给一个概率,此时,我们再选择一个CUTOFF点(阀值),高于这个点的判正,低于的判负。那么这个点的选择就需要结合你的具体场景去选择。反过来,场景会决定训练模型时的标准,比如第一个场景中,我们就只看RECALL=99.9999%(地震全中)时的PRECISION,其他指标就变得没有了意义


PR曲线Python复现代码

要在Python中绘制Precision-Recall (PR) 曲线,你可以使用scikit-learn库中的相关函数。以下是一个示例代码,展示了如何使用scikit-learn来计算精确率和召回率,并使用matplotlib库来绘制PR曲线:

首先,确保你已经安装了scikit-learnmatplotlib库,如果尚未安装,可以使用以下命令进行安装:

pip install scikit-learn matplotlib


然后,你可以使用以下代码来绘制PR曲线:

在这段代码中,我们首先创建了一个合成的二分类数据集,然后使用逻辑回归模型进行训练。接着,我们使用模型预测测试集的概率,并计算精确率、召回率和阈值。最后,我们使用matplotlib库来绘制PR曲线,并计算平均精确率。

import numpy as npfrom sklearn.metrics import precision_recall_curvefrom sklearn.metrics import average_precision_scorefrom sklearn.model_selection import train_test_splitfrom sklearn.datasets import make_classificationfrom sklearn.linear_model import LogisticRegressionimport matplotlib.pyplot as plt
# 创建一个合成的二分类数据集X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建一个逻辑回归模型model = LogisticRegression()
# 训练模型model.fit(X_train, y_train)
# 预测测试集的概率y_scores = model.predict_proba(X_test)[:, 1]
# 计算精确率-召回率曲线precision, recall, thresholds = precision_recall_curve(y_test, y_scores)
# 计算平均精确率average_precision = average_precision_score(y_test, y_scores)
# 绘制PR曲线plt.figure(figsize=(10, 6))plt.step(recall, precision, where='post', label=f'Average precision score: {average_precision:.2f}')plt.xlabel('Recall')plt.ylabel('Precision')plt.ylim([0.0, 1.05])plt.xlim([0.0, 1.0])plt.title('Precision-Recall curve')plt.legend(loc="best")plt.show()

下图是根据上述代码显示绘图结果


PR曲线总结

不同场景对ROC和PRC偏好不一样,要根据实际情况区别对待。

1.PR曲线是评估分类模型性能的重要工具,在正负样本数量差异较大的数据集中,PR曲线比ROC曲线更能反映模型对少数类的分类能力。

2.在PR曲线上,横轴表示召回率,纵轴表示精确率。随着阈值的降低(更宽松的分类标准),召回率通常会增加,而精确率会减少。

3.PR曲线下面积(AUC):PR曲线下的面积(Area Under the Curve, AUC)是模型性能的一个指标,AUC越高,表示模型的性能越好。


金融风控相关课程

如果大家感兴趣,欢迎关注《python金融风控评分卡模型和数据分析(加强版)》,学习更多系统化风控建模内容。扫一扫下面二维码点击收藏,以备之后工作和学习使用。



专利_论文建模定制服务


重庆未来之智信息技术咨询服务有限公司专业从事AI机器学习建模,为国内外多家金融公司建立模型。公司客户包括国内诸多金融机构,银行,证券公司,科研所。

同时我们也为科研高端人群提供专利,论文定制服务,例如研究生,博士生,导师涉及的毕业论文,申博论文,中文核心期刊,CCF,EI会议。

专利,论文定制服务项目提供发票,合同,流程全齐。

如果你有专利,论文定制服务需求,请商务联系QQ:231469242,微信:drug666123,或扫描下面二维码加微信咨询。


python风控模型
金融风控领域企业科研,论文核心期刊,专利,毕业设计建模定制服务,商务联系QQ:231469242
 最新文章