我是Toby,最近正在原创👉「python风控模型_评分卡」系列话题,欢迎订阅。最后给大家分享100G免费资料领取,包括python入门,数据分析,包括数据分析、统计学、数据挖掘、机器学习等知识。
在公众号「python风控模型」里回复关键字:学习资料,就可免费领取。
Precision-Recall (PR) 曲线是评估分类模型性能的一种工具,特别是在数据集不平衡的情况下。它显示了在不同阈值下模型的精确率(Precision)和召回率(Recall)之间的关系。
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,其他指标就变得没有了意义
pip install scikit-learn matplotlib
然后,你可以使用以下代码来绘制PR曲线:
在这段代码中,我们首先创建了一个合成的二分类数据集,然后使用逻辑回归模型进行训练。接着,我们使用模型预测测试集的概率,并计算精确率、召回率和阈值。最后,我们使用matplotlib
库来绘制PR曲线,并计算平均精确率。
import numpy as np
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import average_precision_score
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
import 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()
下图是根据上述代码显示绘图结果
不同场景对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,或扫描下面二维码加微信咨询。