Depois de ter as probabilidades previstas, cabe a você qual limite você gostaria de usar. Você pode escolher o limite para otimizar a sensibilidade, a especificidade ou qualquer outra medida que seja mais importante no contexto do aplicativo (algumas informações adicionais seriam úteis aqui para obter uma resposta mais específica). Você pode examinar as curvas ROC e outras medidas relacionadas à classificação ideal.
Edit: Para esclarecer um pouco esta resposta, vou dar um exemplo. A resposta real é que o ponto de corte ideal depende de quais propriedades do classificador são importantes no contexto do aplicativo. Deixe- ser o verdadeiro valor de observação I , e Y i ser a classe previsto. Algumas medidas comuns de desempenho sãoYEuEuY^Eu
(1) Sensibilidade: - a proporção de '1 do que estejam correctamente identificados como tal.P( Y^Eu= 1 | YEu= 1 )
P( Y^Eu= 0 | YEu= 0 )
P(Yi=Y^i)
(1) também é chamado de Taxa Positiva Verdadeira, (2) também é chamado de Taxa Negativa Verdadeira.
(1,1)
δ=[P(Yi=1|Y^i=1)−1]2+[P(Yi=0|Y^i=0)−1]2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
δ(1,1)
Abaixo está um exemplo simulado usando previsão de um modelo de regressão logística para classificar. O ponto de corte é variado para ver qual ponto de corte fornece o "melhor" classificador em cada uma dessas três medidas. Neste exemplo, os dados vêm de um modelo de regressão logística com três preditores (consulte o código R abaixo da plotagem). Como você pode ver neste exemplo, o ponto de corte "ideal" depende de qual dessas medidas é mais importante - isso depende totalmente da aplicação.
P(Yi=1|Y^i=1)P(Yi=0|Y^i=0)
# data y simulated from a logistic regression model
# with with three predictors, n=10000
x = matrix(rnorm(30000),10000,3)
lp = 0 + x[,1] - 1.42*x[2] + .67*x[,3] + 1.1*x[,1]*x[,2] - 1.5*x[,1]*x[,3] +2.2*x[,2]*x[,3] + x[,1]*x[,2]*x[,3]
p = 1/(1+exp(-lp))
y = runif(10000)<p
# fit a logistic regression model
mod = glm(y~x[,1]*x[,2]*x[,3],family="binomial")
# using a cutoff of cut, calculate sensitivity, specificity, and classification rate
perf = function(cut, mod, y)
{
yhat = (mod$fit>cut)
w = which(y==1)
sensitivity = mean( yhat[w] == 1 )
specificity = mean( yhat[-w] == 0 )
c.rate = mean( y==yhat )
d = cbind(sensitivity,specificity)-c(1,1)
d = sqrt( d[1]^2 + d[2]^2 )
out = t(as.matrix(c(sensitivity, specificity, c.rate,d)))
colnames(out) = c("sensitivity", "specificity", "c.rate", "distance")
return(out)
}
s = seq(.01,.99,length=1000)
OUT = matrix(0,1000,4)
for(i in 1:1000) OUT[i,]=perf(s[i],mod,y)
plot(s,OUT[,1],xlab="Cutoff",ylab="Value",cex.lab=1.5,cex.axis=1.5,ylim=c(0,1),type="l",lwd=2,axes=FALSE,col=2)
axis(1,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
axis(2,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
lines(s,OUT[,2],col="darkgreen",lwd=2)
lines(s,OUT[,3],col=4,lwd=2)
lines(s,OUT[,4],col="darkred",lwd=2)
box()
legend(0,.25,col=c(2,"darkgreen",4,"darkred"),lwd=c(2,2,2,2),c("Sensitivity","Specificity","Classification Rate","Distance"))