roc曲线的意义,到底这个曲线图有什么用和重要性

在最近的项目实践中,我们遇到了一个颇具探讨价值的议题,具体情况如下所示:

在展示的PR曲线图中,其形态显得颇为异常,特别是在左侧部分,预测值从1骤然降至0。

为了深入探究这一现象的根源,我们对相关源代码进行了细致的剖析。以下为与上述图表相对应的代码片段:

在代码实现中,我们采用了sklearn.metrics.precision_recall_curve函数来计算precision(精确率)和recall(召回率),其核心代码逻辑如下所示:

通过对代码的深入分析,我们归纳出计算PR曲线的关键步骤主要有以下几项:

  1. 首先,需要对模型的预测概率(score)进行降序排列,确保从最高分到最低分依次处理。
  2. 其次,以预测概率(score)作为动态阈值,统计满足条件的目标_true_positive_count(简称tps)和目标_false_positive_count(简称fps)。
  3. 最后,基于tps和fps计算精确率和召回率,并对结果进行逆序排列。

在此过程中,需要特别关注以下几点特性:

  1. 由于阈值是基于测试数据的预测概率(score)确定的,因此阈值的取值范围仅限于测试数据的预测概率集合,无法实现连续变化。
  2. 在统计tps和fps时,我们关注的是大于等于当前阈值的数据点数量,理想状态下,tps和fps都应大于或等于1。需要强调的是,这是在理想条件下的表现,实际应用中可能存在偏差。
  3. 在某些情况下,测试数据的预测概率(score)可能无法达到1,这种情况下会导致recall=0。为了使PR曲线能够从0开始绘制,我们人为添加了一个点,即recall=0, precision=1。
  4. 通过对结果进行倒序排列,确保阈值从小到大递增,从而使PR曲线呈现从左向右的绘制顺序,这与我们的直观理解相符。

在透彻理解了PR曲线的原理和计算方法后,我们就能更加清晰地分析上述异常现象产生的原因了。

根据前面的原理分析,我们知道在PR曲线的最左侧添加了recall=0, precision=1的数据点,这对应于图中最左侧的1,由此可以明确1的来源。

精确率的计算公式为precision=TP/(TP+FP),在正常情况下(即预测概率(score)值越大,正例的可能性也越大),随着阈值的升高,TP和FP都会逐渐减少,因此精确率应该是单调递增的,不可能出现为0的情况。只有当TP=0时,精确率才会等于0,这种情况通常发生在预测概率(score)值与实际类别标签之间存在不一致的情况。

接下来,我们分析tps的计算方法。tps统计的是大于等于当前阈值thres的数据中实际为Positive的样本数量,只有当Positive样本数量为0时,tps才会为0,这意味着对应阈值thres的数据点不是Positive类,而是Negative类。

让我们仔细审视上述案例中的数据:

从数据表中可以看出,score值最大的0.9对应的标签为0,这与图中precision=0的情况相吻合,由此可以得出结论:数据集中确实存在预测概率最高但实际标签为Negative的样本。

这里可以进一步探讨,在理想情况下,PR曲线应该呈现从右向左递增的趋势,即精确率随召回率的提高而增加。如果实际曲线出现下降或精确率变为0,则需要检查对应阈值下的数据是否存在标签错误或难以分类的样本。

最有效的解决方法是通过PR曲线分析来识别标签错误或难以分类的样本,并对测试数据进行相应的调整。

针对上述问题,我们可以考虑以下两种折中的解决方案,以消除曲线的突变现象:

第一种方法是限制PR曲线的显示范围,只展示特定阈值区间内的数据。

第二种方法是移除曲线末尾的数据点,即最后一个数据点。

有研究表明,PR曲线和ROC曲线之间存在一定的数学关系,它们可以相互转换:

Theorem 3.1. For a given dataset of positive and negative examples, there exists a one-to-one correspondence between a curve in ROC space and a curve in PR space, such that the curves contain exactly the same confusion matrices, if Recall != 0

关于这一理论的详细说明,可以参考相关文献:《The Relationship Between Precision-Recall and ROC Curves》,网上也有许多资源提供了深入的解释。下图为PR曲线和ROC曲线的变化趋势对比:

PR曲线和ROC曲线的主要区别在于它们对数据不平衡性的敏感度不同:PR曲线对数据不平衡性较为敏感,正负样本比例的变化会导致PR曲线发生显著变化;而ROC曲线则相对不敏感,即使正负样本比例发生变化,ROC曲线的变化也较小。如下图所示,展示了在不同正负样本比例下PR曲线和ROC曲线的变化情况:

ROC曲线变化较小的原因在于其计算公式中涉及的是类别内部的统计量,只要类别内部的比例保持不变,ROC曲线就不会发生变化。

参考资料:

  1. 分类模型评估之ROC-AUC曲线和PRC曲线皮皮blog-CSDN博客auc曲线
  1. 精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么? – 知乎 (zhihu.com)