[PYTHON] Prise en compte de la différence entre la courbe ROC et la courbe PR

introduction

Dans la tâche de classification de l'apprentissage automatique, la zone inférieure (ci-après, AUC) de la "courbe ROC" et de la "courbe de rappel de précision (ci-après, courbe PR)" est utilisée pour mesurer les performances de l'algorithme. Personnellement, honnêtement, je n'ai pas vraiment fait la distinction entre eux, mais l'article de @ ogamiki ici a fourni des conseils sur la façon de les utiliser correctement. ..

La courbe PR convient généralement lorsque la valeur TN est susceptible d'être élevée ou lorsqu'il existe de nombreux cas négatifs. Dans ce cas, la courbe PR peut exprimer plus clairement la différence.

J'étais un peu curieux de savoir quel genre de raison ce serait, alors j'ai réfléchi.

Que sont la courbe ROC et la courbe PR?

Pour la courbe ROC et la courbe PR, consultez d'abord l'article ici.

La courbe ROC et la courbe PR peuvent être considérées comme des indicateurs de l'exactitude du classement, par exemple "lorsque les échantillons de test ont été classés dans l'ordre dans lequel ils étaient censés être positifs, les échantillons positifs se sont-ils réellement solidifiés en haut?"

Classement vérité
1 1=positif
2 0=Négatif
3 1
4 1
5 0
6 0
7 0

Par exemple, dans un tel classement, il y a une erreur de prédiction que l'échantillon initialement négatif est situé à la deuxième place et est classé plus haut que les autres échantillons positifs. Lorsque ce classement est obtenu, le TPR et le FPR, la précision et le rappel jusqu'à chaque classement sont calculés.

Classement vérité TPR=Recall FPR Precision
1 1=positif 1/3=0.333 0/4=0.000 1/1=1.000
2 0=Négatif 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

Pour les courbes ROC, FPR est sur l'axe horizontal, TPR est sur l'axe vertical, pour les courbes PR, Recall est sur l'axe horizontal et Precision est sur l'axe vertical.

sample_roc.png

sample_pr.png

Ma conclusion sur la différence entre les courbes ROC et PR

En ce qui concerne la différence entre la courbe ROC et la courbe PR, ma conclusion est la suivante.

Intuitivement, l'AUC de la courbe PR a l'image de __ grossissant la précision du classement supérieur avec une loupe. À partir de là, les suggestions suivantes peuvent être obtenues.

Commentaire qualitatif

Un indice pour considérer la différence entre la courbe ROC et la courbe PR est que la courbe ROC et la courbe PR partagent l'axe de TPR = Rappel. Cependant, l'axe TPR = Rappel est placé sur l'axe vertical dans la courbe ROC et sur l'axe horizontal dans la courbe PR. Je pense que c'est le miso.

Par exemple, dans l'exemple précédent, considérez le moment où le TPR atteint 0,666 (3e rang).

Classement vérité TPR=Recall FPR Precision
1 1=positif 1/3=0.333 0/4=0.000 1/1=1.000
2 0=Négatif 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

Lorsque le TPR atteint 0,666, il est situé à la coordonnée (0,250,0,666) sur la courbe ROC, et jusqu'à ce point, il est en charge d'au plus 1/4 de la surface totale. Par conséquent, quelle que soit la gravité de la prédiction avant d'atteindre (0,250, 0,666), l'effet sur l'ASC sera faible. Par contre, dans la courbe PR, il est situé aux coordonnées (0,666, 0,666), et jusqu'à cette coordonnée, il est en charge des 2/3 de l'AUC totale. Par conséquent, si vous faites quelque chose de mal avant d'atteindre (0,666, 0,666), ce sera 8/3 fois plus influent que la courbe ROC.

En fait, l'ASC de la courbe ROC et de la courbe PR lorsque les 1ère et 2ème positions sont échangées est la suivante.

sample_roc_2.png

sample_pr_2.png

Vérification expérimentale

J'ai essayé de le montrer par la preuve et l'expérience de la théorie. La procédure expérimentale est la suivante.

  1. Le programme utilisé était Python, et j'ai utilisé "boston house-pricing dataset" qui est inclus par défaut dans scikit-learn comme données de test.
  1. Cet ensemble de données comprend un total de 506 échantillons, dont 84 (17%) concernent des propriétés de plus de 30 $ et le reste coûte moins de 30 $, chacun étant étiqueté positif ou négatif.
  2. Nous avons mis en place un modèle pour prédire ce positif / négatif uniquement à partir des variables explicatives (le modèle est un modèle de régression logistique), et avons effectué des classements par ordre de score de prédiction. ―― L'AUC de la courbe ROC créée à partir de ce classement est de 0,985 et la courbe de PR est de 0,928 (c'est assez performant car les données utilisées pour l'entraînement elles-mêmes sont utilisées pour la prédiction).
  3. Ici, créez un nouveau classement qui ne mélange aléatoirement qu'une partie du classement de score prévu de 0 à 100, et calculez l'AUC de la courbe ROC et PR de la même manière. --Dans le nouveau classement, les classements de 0 à 100 sont complètement aléatoires, donc l'AUC devrait se détériorer dès le début. ――En fait, afin de supprimer la fluctuation stochastique, la moyenne de l'ASC calculée en mélangeant 10 fois est prise.
  4. De même, du 5e au 105e, du 10e au 110e au classement d'origine,. .. .. Nous allons donc calculer l'AUC (moyenne) du classement qui a remanié certains classements.

Si l'hypothèse est correcte, la PR-AUC devrait avoir une détérioration plus sévère de l'ASC lors du brassage de classements plus élevés que la ROC-AUC. Le résultat de la vérification est illustré dans la figure suivante.

result.png

L'axe horizontal montre à partir de quel rang dans le classement le mélange a été commencé, et l'axe vertical montre quel pourcentage de la valeur AUC d'origine s'est détérioré. Comme supposé, le PR-AUC se détériore de manière significative (c'est-à-dire sur le côté gauche du graphique) lorsqu'il est mélangé dans un classement plus élevé que le ROC-AUC (jusqu'à 3% de détérioration). Il est. Inversement, cela suggère que PR-AUC s'améliorera considérablement par rapport à ROC-AUC s'il peut être prédit avec précision dans les classements supérieurs.

Conclusion et impression

Si nous répétons la conclusion des résultats de vérification ci-dessus,

Avec une telle conclusion, j'ai pu avoir un sentiment de conviction. D'un autre côté, comme je l'ai écrit dans le commentaire de l'article de @ ogamiki ici, la courbe ROC et la courbe PR sont pratiques. Il existe également différents avantages et inconvénients.

(Ci-après, cité)

1. Interprétabilité de l'axe

Tout d'abord, Precision-Recall est un compromis entre les interprétations des axes, et il est facile pour les personnes qui ne sont pas familiarisées avec __statistics de comprendre __.

Par exemple, lorsqu'il s'agit de déterminer les meilleurs clients à approcher de tous les clients en priorité, "La précision est élevée mais le rappel est faible" = "Il y a peu de gaspillage, mais c'est un jugement avec de nombreuses omissions = une perte d'opportunité s'est produite" "La précision est faible mais le rappel est élevé" = "Il y a peu d'omissions, mais on estime qu'il y a beaucoup de coups perdus = Il y a une forte possibilité que le budget d'approche soit gaspillé" Ainsi, vous pouvez parler en termes commerciaux tout en entourant la courbe des relations publiques.

Au contraire, dans le cas de ROC, FPR est particulièrement difficile à comprendre, et il existe de nombreuses expériences qu'il est difficile de comprendre, peu importe ce que vous expliquez. Au final, je pense que le degré de conviction du décideur n'atteint pas la courbe PR car il s'installe avec un niveau de compréhension que "c'est un diagramme pour mesurer la précision pour le moment, et rappelez-vous que c'est un diagramme heureux si vous vous déplacez vers le haut à gauche". ..

2. Niveau absolu d'interprétabilité

D'autre part, ROC a l'avantage qu'il est plus facile de donner une signification claire au niveau absolu de __AUC par rapport à la courbe PR. Pour tout problème de prédiction, ROC-AUC a une valeur maximale de 1 et 0,5 pour la prédiction aléatoire. Par contre, la valeur maximale de la courbe PR est toujours de 1, mais la valeur de la prédiction aléatoire dépend du rapport des exemples positifs et négatifs du problème.

Si vous dites "ROC-AUC a obtenu 0,9!", Vous pouvez dire "C'était une bonne prédiction" pour n'importe quel problème, mais "PR-AUC a obtenu 0,4!" Je pense qu'il est difficile de juger à quel point c'est génial lorsqu'on vous le demande, sans un peu plus d'informations.

En ce sens, je pense que la courbe ROC est plus appropriée comme langage courant dans le domaine où il est nécessaire de juger «si cette prédiction est suffisamment précise» en peu de temps.

(Citation jusqu'à présent)

Ce qui est adopté comme langage commun pour l'exactitude de la classification est plus important que l'algorithme utilisé. J'espère que cet article vous donnera un sentiment de conviction pour ceux qui se battent dans le domaine de l'analyse.

Recommended Posts

Prise en compte de la différence entre la courbe ROC et la courbe PR
J'ai étudié le comportement de la différence entre lien dur et lien symbolique
Quelle est la différence entre «pip» et «conda»?
Résumé des différences entre PHP et Python
La réponse de "1/2" est différente entre python2 et 3
À propos de la différence entre "==" et "is" en python
Modélisation-estimation de Bayes de la différence entre les deux groupes-
À propos de la différence entre PostgreSQL su et sudo
Quelle est la différence entre Unix et Linux?
Différence approximative entre Unicode et UTF-8 (et ses compagnons)
BERT peut-il comprendre la différence entre «Ame (bonbons)» et «Ame (pluie)»?
Différence entre Ruby et Python en termes de variables
Quelle est la différence entre usleep, nanosleep et clock_nanosleep?
Visualisation de la connexion entre le malware et le serveur de rappel
Comment utiliser argparse et la différence entre optparse
Différence entre processus et travail
Différence entre "categorical_crossentropy" et "sparse_categorical_crossentropy"
Différence entre régression et classification
Différence entre np.array et np.arange
Différence entre MicroPython et CPython
Différence entre ps a et ps -a
Différence entre return et print-Python
Quelle est la différence entre les liens symboliques et les liens durs?
Comprendre la différence entre l'affectation cumulative aux variables et l'affectation cumulative aux objets
Un résumé approximatif des différences entre Windows et Linux
Courbe ROC et courbe PR-Comprendre comment évaluer les performances de classification ②-
Différence entre le processus de premier plan et le processus d'arrière-plan compris par principe
Différence entre Ruby et Python Split
Différence entre java et python (mémo)
L'histoire de Python et l'histoire de NaN
Différence entre list () et [] en Python
Différence entre SQLAlchemy filter () et filter_by ()
Différence entre == et est en python
Mémorandum (différence entre csv.reader et csv.dictreader)
(Remarque) Différence entre la passerelle et la passerelle par défaut
Différence entre le randint de Numpy et le randint de Random
Différence entre tri et tri (mémorial)
Différence entre la série python2 et la série python3 dict.keys ()
[Python] Différence entre fonction et méthode
Différence entre SQLAlchemy flush () et commit ()
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)
Python> Extraire la valeur de list (unpack)> Add *> Vous m'avez appris la différence entre Python 2 et Python 3 concernant print (* mylist) / print ().
[Introduction à Python] Quelle est la différence entre une liste et un taple?
Ceci et celui de la notation d'inclusion.
[Xg boost] Différence entre softmax et softprob
différence entre les instructions (instructions) et les expressions (expressions) en Python
[Django ORM] Différence entre values () et only ()
Différences dans la relation entre PHP et Python enfin et quitter
[Scikit-learn] J'ai joué avec la courbe ROC
Revoir le concept et la terminologie de la régression
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
Différence entre la régression linéaire, la régression Ridge et la régression Lasso
[Python] Différence entre la méthode de classe et la méthode statique
Différence entre le fichier env_file docker-compose et le fichier .env
La relation subtile entre Gentoo et pip
À propos de la relation entre Git et GitHub
L'histoire d'essayer deep3d et de perdre