异常值检测:精确召回曲线下的面积

机器算法验证 机器学习 实验设计 精确召回 奥克
2022-03-27 09:31:42

我想比较异常值检测算法。我不确定 roc 下的面积或精确召回曲线下的面积是否是要使用的度量。

matlab 中的快速测试给了我奇怪的结果。我尝试获取 ROC 和 PR 值以进行完美分类:

% true labels
outlier = 1;
normal  = 0;
% 99% normal data 1% outlier
label = normal*ones(1000,1); 
label(1:10) = outlier;  

% scores of the algorithm
% assume the prediction is perfect
score = label;

[~,~,~,AUC] = perfcurve(label,score,outlier)  % AUC = 1 
[~,~,~,PR] = perfcurve(label,score,outlier, 'xCrit', 'reca', 'yCrit', 'prec') % PR = 0

为什么PR下的面积= 0?不应该是1吗?

如果使用 0.5 的常数分类器进行评估,AUC ROC 也会给出预期结果:

label = real( rand(1000,1) > 0.99 );     % 99% normal data 1% outlier
score = zeros(1000,1);                   % always predicting zero
[~,~,~,AUC] = perfcurve(label,score,1)   % AUC = 0.5

那么为什么在比较异常值检测算法时考虑 PR 曲线下的面积更好呢?

编辑:我的目标不是针对我的问题的 matlab 特定答案。这只是适合您的 MWE。

我只是想知道为什么这么多出版物推荐 AUC PR 比 ROC 更适合不平衡数据集,因为它们是异常值检测的典型。我上面的快速概念证明似乎表明相反。

1个回答

问题在于您的示例可能有零和零,因此精度变得未定义,因为我们除以零。因此,PR 曲线仅包含一个值的点,因此对于您的示例,PR 曲线下的面积为零。tpfpprec=tp/(tp+fp)x

您可以通过绘制 PR 曲线看到这一点:

[X,Y,T,PR] = perfcurve(label,score,1, 'xCrit', 'reca', 'yCrit', 'prec') % PR = 0
figure
scatter(X,Y)
xlabel('recall')
ylabel('precision')

因此,当您的所有分数都相同时,绘制 PR 曲线并不能很好地工作。

为了更深入地了解 PR 曲线和 ROC 曲线的差异,请比较这两个预测列表。我们考虑预测全零并预测一个 1 的情况,但它应该为零(score1)。这个效果不太好,它在任何地方都预测为 0,除了一个对象,它预测 1 应该为零。我们考虑另一种情况,我们正确预测一个 1,其余的我们归类为 0。因此,在这里我们正确预测 1 个,其余的我们归类为 0。我们比较 PR 曲线下的面积和 ROC 下的面积.

outlier = 1;
normal  = 0;
% 99% normal data 1% outlier
label = normal*ones(1000,1); 
label(1:10) = outlier;  

%label = real( rand(1000,1) > 0.99 );     % 99% normal data 1% outlier
score1 = [zeros(999,1);1]; % predict everything as zero, and one mistake 
score2 = [1;zeros(999,1)]; % predict everything as zero, and one 1 correct 

[X,Y,T,AUC1] = perfcurve(label,score1,1)
% AUC1 = 0.5
[X,Y,T,AUC2] = perfcurve(label,score2,1)
% AUC2 = 0.55

[X,Y,T,PR1] = perfcurve(label,score1,1, 'xCrit', 'reca', 'yCrit', 'prec') 
% PR1 = 0.005 
[X,Y,T,PR2] = perfcurve(label,score2,1, 'xCrit', 'reca', 'yCrit', 'prec') 
% PR2 = 0.4545

观察到 score1 和 score2 之间的 AUC 变化很小。但是,PR 曲线下的面积明显不同。它奖励 score2 比 score1 多得多。这表明它更适合异常值检测:它比 AUC 更能奖励检测异常值。在异常值检测的情况下,您更喜欢 score2,因为它预测您想要正确检测的 1,而 score1 预测 1 表示零并且永远不会捕获任何异常值。

一般来说,AUC 提供的信息更丰富,可以让您了解您的预测对不同先验的效果如何。因此,AUC 表征了分类器对不同数量的 1 和 0 的工作情况。

PR 曲线更好地表明了它在考虑当前类别不平衡时的表现。因此,PR 曲线对您来说更有趣:它考虑到数据集中的 1 比 0 少。因为只有在对异常值检测感兴趣时才对这种情况感兴趣,所以 PR 曲线的信息量更大。

虽然 AUC 描述了如果还有更多的 1,您的预测将如何进行。

有关更多信息,另请参阅:

https://www.quora.com/What-is-Precision-Recall-PR-curve

ROC 与 Precision-and-recall 曲线

最后,您可能对如何计算 ROC / PR 曲线感兴趣,这里给出了 ROC 曲线的详细说明:

http://blogs.sas.com/content/iml/2011/07/29/computing-an-roc-curve-from-basic-principles.html