外れ値の検出:精度再現率曲線の下の領域


7

外れ値検出アルゴリズムを比較したいと思います。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にすべきではありませんか?

AUC ROCは、0.5の定数分類器で評価した場合にも期待される結果を提供します。

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よりも適していることを推奨しているのでしょうか。上記の私の概念実証は、反対のことを示しているようです。


コードの言語を指定できますか?それはMATLABですか?
Alex R.

はい、MATLABです
Manuel Schmidt

回答:


4

問題はあなたの例にあり、とがゼロになる可能性があるため、ゼロで除算するため、精度が未定義になります。このため、PRカーブには1つの値のポイントしか含まれていないため、例では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曲線の違いをさらに理解するには、これら2つの予測リストを比較します。すべてゼロを予測し、1を1と予測する場合を考えますが、ゼロ(score1)でなければなりません。これはうまく機能せず、ゼロになるはずの1を予測する1つのオブジェクトを除いて、どこでも0を予測します。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

AUCがスコア1とスコア2の間でほとんど変化しないことを確認します。ただし、PR曲線の下の領域は大きく異なります。それはscore1よりscore2にはるかに多く報酬を与えます。これは、異常値の検出により適していることを示しています。異常値の検出は、AUCよりもはるかに効果的です。外れ値の検出の場合、score2はより正確に検出したい1を予測するので、score1は0の1を予測し、外れ値をキャッチしないため、はるかに優先します。

一般に、AUCは、さまざまな事前分布に対して予測がどの程度うまく機能するかについてのアイデアを提供するためにより有益です。したがって、AUCは、さまざまな数の1と0に対して分類子がどの程度うまく機能するかを特徴付けます。

PR曲線は、考慮されている現在のクラスの不均衡に対してそれがどのように機能するかをよりよく示しています。したがって、PR曲線の方が興味深いです。データセットには0よりも1が少ないことが考慮されます。外れ値の検出に関心がある場合にのみこのケースに関心があるので、PRカーブはより有益です。

AUCは、1がさらに多い場合に予測がどのように行われるかを特徴付けます。

詳細については、次も参照してください。

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

ROC対精度および再現率曲線

最後に、ROC / PR曲線を計算する方法に興味があるかもしれません。ROC曲線の詳細な説明は次のとおりです。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.