[PYTHON] Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve

Einführung

Bei der Klassifizierungsaufgabe des maschinellen Lernens wird der untere Bereich (im Folgenden AUC) der "ROC-Kurve" und der "Precision-Recall-Kurve (im Folgenden PR-Kurve)" verwendet, um die Leistung des Algorithmus zu messen. Um ehrlich zu sein, habe ich es nicht wirklich unterschieden, aber der Artikel von @ ogamiki hier enthält Hinweise zur richtigen Verwendung. ..

Die PR-Kurve ist im Allgemeinen geeignet, wenn der TN-Wert wahrscheinlich groß ist oder wenn viele negative Fälle vorliegen. In diesem Fall kann die PR-Kurve den Unterschied deutlicher ausdrücken.

Ich war ein wenig neugierig, was für ein Grund das sein würde, also dachte ich darüber nach.

Was sind ROC-Kurve und PR-Kurve?

Informationen zur ROC-Kurve und PR-Kurve finden Sie zuerst im Artikel hier.

Die ROC-Kurve und die PR-Kurve können als Index angesehen werden, der die Genauigkeit der Rangfolge zeigt, z. B. "Wenn die Testproben in der Reihenfolge eingestuft wurden, in der sie als positiv vorhergesagt wurden, haben sich die positiven Proben tatsächlich oben verfestigt?"

Rangfolge Wahrheit
1 1=positiv
2 0=Negativ
3 1
4 1
5 0
6 0
7 0

Beispielsweise gibt es in einer solchen Rangfolge eine falsche Vorhersage, dass die ursprünglich negative Stichprobe an zweiter Stelle steht und höher ist als die anderen positiven Stichproben. Wenn diese Rangfolge erreicht ist, werden TPR und FPR, Präzision und Rückruf bis zu jeder Rangfolge berechnet.

Rangfolge Wahrheit TPR=Recall FPR Precision
1 1=positiv 1/3=0.333 0/4=0.000 1/1=1.000
2 0=Negativ 1/3=0.333 1/4=0.250 1/2=0.500
3 1 0.666 0.250 0.666
4 1 1.000 0.250 0.750
5 0 1.000 0.250 0.600
6 0 1.000 0.250 0.500
7 0 1.000 0.250 0.286

Bei ROC-Kurven befindet sich FPR auf der horizontalen Achse, TPR auf der vertikalen Achse, bei PR-Kurven auf der horizontalen Achse, bei Precision auf der vertikalen Achse und die Linien werden in der Reihenfolge vom oberen Rand der Rangfolge gezeichnet.

sample_roc.png

sample_pr.png

Mein Fazit zum Unterschied zwischen ROC- und PR-Kurven

In Bezug auf den Unterschied zwischen der ROC-Kurve und der PR-Kurve lautet meine Schlussfolgerung wie folgt.

Intuitiv hat die AUC der PR-Kurve das Bild von __, das die Genauigkeit des Top-Rankings mit einer Lupe vergrößert. Daraus können die folgenden Vorschläge erhalten werden.

Qualitativer Kommentar

Ein Hinweis, um den Unterschied zwischen der ROC-Kurve und der PR-Kurve zu berücksichtigen, ist, dass sowohl die ROC-Kurve als auch die PR-Kurve die Achse von TPR = Recall teilen. Die TPR = Recall-Achse befindet sich jedoch auf der vertikalen Achse in der ROC-Kurve und auf der horizontalen Achse in der PR-Kurve. Ich denke das ist das Miso.

Berücksichtigen Sie im vorherigen Beispiel beispielsweise die Zeit, zu der der TPR 0,666 erreicht (Rang 3).

Rangfolge Wahrheit TPR=Recall FPR Precision
1 1=positiv 1/3=0.333 0/4=0.000 1/1=1.000
2 0=Negativ 1/3=0.333 1/4=0.250 1/2=0.500
3 1 0.666 0.250 0.666
4 1 1.000 0.250 0.750
5 0 1.000 0.250 0.600
6 0 1.000 0.250 0.500
7 0 1.000 0.250 0.286

Wenn der TPR 0,666 erreicht, befindet er sich an der Koordinate (0,250,0,666) auf der ROC-Kurve und ist bis zu diesem Punkt für höchstens 1/4 der Gesamtfläche verantwortlich. Unabhängig davon, wie schlecht die Vorhersage vor Erreichen von (0,250, 0,666) ist, ist der Effekt auf die AUC gering. Andererseits befindet es sich in der PR-Kurve an den Koordinaten (0,666, 0,666) und ist bis zu dieser Koordinate für 2/3 der gesamten AUC verantwortlich. Wenn Sie also vor Erreichen von (0,666, 0,666) etwas falsch machen, ist es 8/3 mal einflussreicher als die ROC-Kurve.

Tatsächlich ist die AUC der ROC-Kurve und der PR-Kurve beim Austausch der 1. und 2. Position wie folgt.

sample_roc_2.png

sample_pr_2.png

Experimentelle Überprüfung

Ich habe versucht, es durch Beweise zu zeigen und aus der Theorie zu experimentieren. Das experimentelle Verfahren ist wie folgt.

  1. Das verwendete Programm war Python, und ich habe den "Boston House-Prices-Datensatz" verwendet, der standardmäßig in scikit-learn als Testdaten enthalten ist.
  1. Dieser Datensatz enthält insgesamt 506 Stichproben, von denen 84 Stichproben (17%) für Immobilien über 30 USD und der Rest für weniger als 30 USD bestimmt sind und jeweils als positiv oder negativ gekennzeichnet sind.
  2. Wir haben ein Modell erstellt, um dieses Positiv / Negativ nur anhand der erklärenden Variablen vorherzusagen (das Modell ist ein logistisches Regressionsmodell), und Ranglisten in der Reihenfolge der vorhergesagten Punktzahl erstellt. ――Die AUC der aus diesem Ranking erstellten ROC-Kurve beträgt 0,985 und die PR-Kurve 0,928 (dies ist eine recht hohe Leistung, da die für das Training selbst verwendeten Daten zur Vorhersage verwendet werden).
  3. Erstellen Sie hier ein neues Ranking, das nur einen Teil des vorhergesagten Score-Rankings zufällig von 0 auf 100 mischt, und berechnen Sie die AUC der ROC- und PR-Kurve auf dieselbe Weise. ――In der neuen Rangliste sind die Ranglisten von 0 bis 100 völlig zufällig, sodass sich die AUC von Anfang an verschlechtern sollte. ――Um die stochastische Fluktuation zu unterdrücken, wird die AUC tatsächlich berechnet, indem 10-mal gemischt und der Durchschnitt ermittelt wird.
  4. Ebenso vom 5. bis 105., 10. bis 110. in der ursprünglichen Rangliste ,. .. .. Wir berechnen also die AUC (Durchschnitt) für das Ranking, das einige der Rankings neu gemischt hat.

Wenn die Hypothese richtig ist, sollte PR-AUC beim Mischen höherer Rankings stärker beeinträchtigt werden als ROC-AUC. Das Überprüfungsergebnis ist in der folgenden Abbildung dargestellt.

result.png

Die horizontale Achse zeigt, ab welchem Rang in der Rangfolge das Mischen gestartet wurde, und die vertikale Achse zeigt, wie viel Prozent des ursprünglichen AUC-Werts sich verschlechtert haben. Wie angenommen, verschlechtert sich die PR-AUC signifikant (dh auf der linken Seite des Diagramms), wenn sie in einem höheren Rang als die ROC-AUC gemischt wird (bis zu 3% Verschlechterung). Es ist. Umgekehrt deutet dies darauf hin, dass sich die PR-AUC gegenüber der ROC-AUC dramatisch verbessern wird, wenn sie in den höheren Rankings genau vorhergesagt werden kann.

Fazit und Eindruck

Wenn wir die Schlussfolgerung aus den obigen Überprüfungsergebnissen wiederholen,

Mit einer solchen Schlussfolgerung konnte ich ein Gefühl der Überzeugung bekommen. Auf der anderen Seite sind die ROC-Kurve und die PR-Kurve praktisch, wie ich im Kommentar von @ ogamikis hier Artikel geschrieben habe. Es gibt auch verschiedene Vor- und Nachteile.

(Im Folgenden zitiert)

1. Interpretierbarkeit der Achse

Erstens ist Precision-Recall ein Kompromiss zwischen den Interpretationen der Achsen, und es ist für Leute, die mit __Statistiken nicht vertraut sind, leicht zu verstehen __.

Wenn es beispielsweise darum geht, die besten Kunden zu ermitteln, die von allen Kunden mit Priorität angesprochen werden sollen, "Die Präzision ist hoch, aber der Rückruf ist gering." = "Es gibt wenig Verschwendung, aber es ist ein Urteil mit vielen Auslassungen = Opportunitätsverlust ist aufgetreten." "Die Präzision ist gering, aber der Rückruf ist hoch." = "Es gibt nur wenige Auslassungen, aber es wird beurteilt, dass viele Schüsse verschwendet werden. = Es besteht eine hohe Wahrscheinlichkeit, dass das Anflugbudget verschwendet wird." Sie können also geschäftlich sprechen, während Sie die PR-Kurve umgeben.

Im Gegenteil, im Fall von ROC ist FPR besonders schwer zu verstehen, und es gibt viele Erfahrungen, dass es für Menschen schwierig ist, es zu verstehen, egal wie viel sie erklären. Letztendlich denke ich, dass der Grad der Überzeugung des Entscheidungsträgers die PR-Kurve nicht erreicht, weil er sich mit dem Verständnis beruhigt, dass "es sich vorerst um ein Diagramm zur Messung der Genauigkeit handelt, und bitte denken Sie daran, dass es ein glückliches Diagramm ist, wenn Sie nach links oben gehen". ..

2. Absolute Interpretierbarkeit

Andererseits hat ROC den Vorteil, dass es einfacher ist, dem absoluten Niveau von __AUC im Vergleich zur PR-Kurve eine klare Bedeutung zu geben. Für jedes Vorhersageproblem hat ROC-AUC einen Maximalwert von 1 und 0,5 für die zufällige Vorhersage. Andererseits ist der Maximalwert der PR-Kurve immer noch 1, aber der Wert der Zufallsvorhersage hängt vom Verhältnis der positiven und negativen Beispiele des Problems ab.

Wenn Sie sagen "ROC-AUC hat 0,9!", Können Sie sagen "Es war eine gute Vorhersage" für jedes Problem, aber "PR-AUC hat 0,4!" Ich denke, es ist schwierig zu beurteilen, wie großartig es ist, wenn man gefragt wird, ohne ein bisschen mehr Informationen.

In diesem Sinne denke ich, dass die ROC-Kurve als gemeinsame Sprache in dem Bereich besser geeignet ist, in dem beurteilt werden muss, ob diese Vorhersage in kurzer Zeit ausreichend genau ist.

(Zitat bisher)

Was als gemeinsame Sprache für die Genauigkeit der Klassifizierung verwendet wird, ist wichtiger als der verwendete Algorithmus. Ich hoffe, dieser Artikel gibt Ihnen ein Gefühl der Überzeugung für diejenigen, die auf dem Gebiet der Analyse kämpfen.

Recommended Posts

Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Ich untersuchte das Verhalten bezüglich des Unterschieds zwischen Hard Link und Symbolic Link
Was ist der Unterschied zwischen "pip" und "conda"?
Zusammenfassung der Unterschiede zwischen PHP und Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Über den Unterschied zwischen "==" und "is" in Python
Bayes Modellierung-Schätzung des Unterschieds zwischen den beiden Gruppen-
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
Visualisierung der Verbindung zwischen Malware und dem Callback-Server
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen Regression und Klassifikation
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Was ist der Unterschied zwischen symbolischen und harten Links?
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Eine grobe Zusammenfassung der Unterschiede zwischen Windows und Linux
ROC-Kurve und PR-Kurve - Verstehen, wie die Klassifizierungsleistung bewertet wird ②-
Unterschied zwischen Vordergrundprozess und Hintergrundprozess, prinzipiell verstanden
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Die Geschichte von Python und die Geschichte von NaN
Unterschied zwischen list () und [] in Python
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen == und ist in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Unterschied zwischen SQLAlchemy flush () und commit ()
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Python> Extrahieren Sie den Wert von list (entpacken)> Hinzufügen *> Sie haben mir den Unterschied zwischen Python 2 und Python 3 in Bezug auf print (* mylist) / print () beigebracht.
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
Dies und das der Einschlussnotation.
[Xg Boost] Unterschied zwischen Softmax und Softprob
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
[Scikit-learn] Ich habe mit der ROC-Kurve gespielt
Überprüfen Sie das Konzept und die Terminologie der Regression
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
[Python] Unterschied zwischen Klassenmethode und statischer Methode
Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
Die subtile Beziehung zwischen Gentoo und Pip
Über die Beziehung zwischen Git und GitHub
Die Geschichte, deep3d auszuprobieren und zu verlieren