Précision vs aire sous la courbe ROC

16

J'ai construit une courbe ROC pour un système de diagnostic. L'aire sous la courbe a ensuite été estimée de manière non paramétrique à AUC = 0,89. Lorsque j'ai essayé de calculer la précision au réglage de seuil optimal (le point le plus proche du point (0, 1)), j'ai obtenu la précision du système de diagnostic à 0,8, ce qui est inférieur à l'ASC! Lorsque j'ai vérifié la précision à un autre paramètre de seuil qui est bien loin du seuil optimal, j'ai obtenu une précision égale à 0,92. Est-il possible d'obtenir la précision d'un système de diagnostic au meilleur réglage de seuil inférieure à la précision à un autre seuil et également inférieure à la zone sous la courbe? Voir l'image ci-jointe s'il vous plaît.

entrez la description de l'image ici

Ali Sultan
la source
1
Pourriez-vous s'il vous plaît indiquer combien d'échantillons il y avait dans votre analyse? Je parie que c'était fortement déséquilibré. En outre, l'ASC et la précision ne se traduisent pas comme ça (lorsque vous dites que la précision est inférieure à l'ASC), du tout.
Firebug
1
269469 sont négatifs et 37731 sont positifs; cela pourrait être le problème ici selon les réponses ci-dessous (le déséquilibre de classe).
Ali Sultan
gardez à l'esprit que le problème n'est pas le déséquilibre des classes en soi, c'est le choix de la mesure d'évaluation. Dans l'ensemble, est plus raisonnable dans ce scénario, ou vous pouvez implémenter une précision équilibrée. UNEUC
Firebug
Une dernière chose, si vous sentez qu'une réponse a répondu à votre question, vous pourriez envisager «d'accepter» la réponse (la coche verte). Ce n'est pas obligatoire, mais cela aide la personne qui a répondu et aide également l'organisation du site (la question compte comme sans réponse jusqu'à ce que vous le fassiez), et peut-être les personnes qui poseraient la même question à l'avenir.
Firebug

Réponses:

8

C'est en effet possible. La clé est de se rappeler que la précision est fortement affectée par le déséquilibre de classe. Par exemple, dans votre cas, vous avez plus d'échantillons négatifs que d'échantillons positifs, car lorsque le FPR (=FPFP+TNTPTP+FN=TP+TNTP+FN+FP+TN

Autrement dit, puisque vous avez beaucoup plus d'échantillons négatifs, si le classificateur prédit 0 tout le temps, il obtiendra toujours une grande précision avec FPR et TPR proches de 0.

Ce que vous appelez le réglage optimal du seuil (le point le plus proche du point (0, 1)) n'est qu'une des nombreuses définitions du seuil optimal: il n'optimise pas nécessairement la précision.

entrez la description de l'image ici

Franck Dernoncourt
la source
10

FPRTPRUNECC (précision):

TPR=Vrai positifCas positifs

FPR=Faux positifCas négatifs

UNECC=TPRCas positifs+(1-FPR)Cas négatifsCas positifs+Cas négatifs

UNECCTPRFPR . Si le nombre de négatifs et de positifs est le même:

UNECC=TPR+1-FPR2

N-N+

UNECC(N-N+)1-FPR
UNECCFPR

Voir cet exemple, les négatifs sont plus nombreux que les positifs 1000: 1.

data = c(rnorm(10L), rnorm(10000L)+1)
lab = c(rep(1, 10L), rep(-1, 10000L))
plot(data, lab, col = lab + 3)
tresh = c(-10, data[lab == 1], 10)
do.call(function(x) abline(v = x, col = "gray"), list(tresh))

pred = lapply(tresh, function (x) ifelse(data <= x, 1, -1))
res = data.frame(
  acc = sapply(pred, function(x) sum(x == lab)/length(lab)),
  tpr = sapply(pred, function(x) sum(lab == x & x == 1)/sum(lab == 1)),
  fpr = sapply(pred, function(x) sum(lab != x & x == 1)/sum(lab != 1))
)

res[order(res$acc),]

#> res[order(res$acc),]
#           acc tpr    fpr
#12 0.000999001 1.0 1.0000
#11 0.189110889 1.0 0.8117
#9  0.500099900 0.9 0.5003
#2  0.757742258 0.8 0.2423
#5  0.763136863 0.7 0.2368
#4  0.792007992 0.6 0.2078
#10 0.807292707 0.5 0.1924
#3  0.884215784 0.4 0.1153
#7  0.890709291 0.3 0.1087
#6  0.903096903 0.2 0.0962
#8  0.971428571 0.1 0.0277
#1  0.999000999 0.0 0.0000

Voir, quand fprest 0 accest maximum.

Et voici le ROC, avec une précision annotée.

plot(sort(res$fpr), sort(res$tpr), type = "S", ylab = "TPR", xlab = "FPR")
text(sort(res$fpr), sort(res$tpr), pos = 4L, lab = round(res$acc[order(res$fpr)], 3L))
abline(a = 0, b = 1)
abline(a = 1, b = -1)

entrez la description de l'image ici


UNEUC

1-sum(res$fpr[-12]*0.1)
#[1] 0.74608

L'essentiel est que vous pouvez optimiser la précision d'une manière résultant en un faux modèle ( tpr= 0 dans mon exemple). En effet, la précision n'est pas une bonne métrique, la dichotomisation du résultat devrait être laissée au décideur.

TPR=1-FPR car de cette façon les deux erreurs ont le même poids, même si la précision n'est pas optimale.

Lorsque vous avez des classes déséquilibrées, l'optimisation de la précision peut être triviale (par exemple, prédisez tout le monde comme la classe majoritaire).


UNEUC

Et le plus important de tous: pourquoi l'AUC est-elle plus élevée pour un classificateur moins précis que pour un classificateur plus précis?

Pyromane
la source