Ausreißererkennung: Bereich unter der Präzisionsrückrufkurve


7

Ich möchte Ausreißererkennungsalgorithmen vergleichen. Ich bin nicht sicher, ob der Bereich unter dem ROC oder unter der Präzisionsrückrufkurve das zu verwendende Maß ist.

Ein schneller Test in Matlab bringt mir seltsame Ergebnisse. Ich versuche, die ROC- und PR-Werte für eine perfekte Klassifizierung zu erhalten:

% 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

Warum ist die Fläche unter PR = 0? Sollte es nicht 1 sein?

Der AUC ROC liefert auch das erwartete Ergebnis, wenn er mit einem konstanten Klassifikator von 0,5 bewertet wird:

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

Warum wird der Bereich unter der PR-Kurve als besser angesehen, um Ausreißererkennungsalgorithmen zu vergleichen?

Bearbeiten: Ich strebe keine matlab-spezifische Antwort auf meine Frage an. Dies ist nur eine MWE für Sie.

Ich frage mich nur, warum so viele Veröffentlichungen empfehlen, dass die AUC PR für unausgeglichene Datensätze besser geeignet ist als ROC, da sie für die Erkennung von Ausreißern typisch sind. Mein schneller Proof of Concept oben scheint das Gegenteil anzuzeigen.


Können Sie angeben, in welcher Sprache sich Ihr Code befindet? Ist es MATLAB?
Alex R.

Ja, es ist MATLAB
Manuel Schmidt

Antworten:


4

Das Problem ist bei Ihrem Beispiel, dass es möglich ist, Null und Null , daher wird die Genauigkeit undefiniert, weil wir durch Null teilen. Aus diesem Grund enthält die PR-Kurve nur Punkte für einen Wert, und daher wird die Fläche unter der PR-Kurve für Ihr Beispiel Null.tpfpprec=tp/(tp+fp)x

Sie können dies sehen, indem Sie die PR-Kurve zeichnen:

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

Das Zeichnen einer PR-Kurve funktioniert also nicht wirklich gut, wenn alle Ihre Ergebnisse gleich sind.

Vergleichen Sie diese beiden Vorhersagelisten, um mehr Einblicke zwischen der Differenz der PR-Kurve und der ROC-Kurve zu erhalten. Wir betrachten den Fall, in dem wir alle Nullen vorhersagen und eine 1 vorhersagen, aber es sollte Null sein (Punktzahl1). Dieser funktioniert nicht sehr gut, er sagt überall 0 voraus, außer bei einem Objekt, bei dem er 1 vorhersagt, wo er Null sein sollte. Wir betrachten einen anderen Fall, in dem wir eine 1 korrekt vorhersagen und den Rest als 0 klassifizieren. Hier prognostizieren wir also 1 richtig und den Rest als 0. Wir vergleichen die Fläche unter der PR-Kurve und die Fläche unter dem 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

Beachten Sie, dass die AUC zwischen Score1 und Score2 kaum variiert. Die Fläche unter der PR-Kurve unterscheidet sich jedoch erheblich. Es belohnt Score2 viel mehr als Score1. Dies zeigt an, dass es besser für die Erkennung von Ausreißern geeignet ist: Es belohnt die Erkennung des Ausreißers viel mehr als die AUC. Im Falle einer Ausreißererkennung würden Sie Score2 viel mehr bevorzugen, da er die 1 vorhersagt, die Sie korrekt erkennen möchten, während Score1 eine 1 für eine Null vorhersagt und niemals Ausreißer fängt.

Im Allgemeinen ist die AUC informativer, um eine Vorstellung davon zu geben, wie gut Ihre Vorhersagen für verschiedene Prioritäten funktionieren. Somit charakterisiert die AUC, wie gut der Klassifikator für die variierende Anzahl von Einsen und Nullen funktioniert.

Die PR-Kurven zeigen besser an, wie sie sich für das aktuell betrachtete Klassenungleichgewicht verhalten. Daher ist die PR-Kurve für Sie interessanter: Sie berücksichtigt, dass Ihr Datensatz nur kleine Einsen als Nullen enthält. Da Sie an diesem Fall nur interessiert sind, wenn Sie an der Erkennung von Ausreißern interessiert sind, ist die PR-Kurve informativer.

Während die AUC charakterisiert, wie Ihre Vorhersagen funktionieren würden, wenn es auch viel mehr Einsen gibt.

Weitere Informationen finden Sie auch unter:

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

ROC vs. Präzisions- und Rückrufkurven

Schließlich könnte Sie interessieren, wie eine ROC / PR-Kurve berechnet wird. Eine ausführliche Erläuterung der ROC-Kurven finden Sie hier:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.