FPRTPRA CC (précision):
TPR = ∑ Vrai positif∑ Cas positifs
FPR = ∑ Faux positif∑ Cas négatifs
A CC= TPR ⋅ ∑ Cas positifs + ( 1 - FPR ) ⋅ ∑ Cas négatifs∑ Cas positifs + ∑ Cas négatifs
A CCTPRFPR . Si le nombre de négatifs et de positifs est le même:
A CC= TPR + 1 - FPR2
N-≫ N+
A CC( N-≫ N+) ≈ 1 - FPR
A CCFPR
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 fpr
est 0 acc
est 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)
A UC
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).
A UC
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?