Um exemplo de um modelo calibrado que não está totalmente calibrado

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[This article was first published on R – Win Vector LLC, and kindly contributed to R-bloggers]. (Você pode relatar problemas sobre o conteúdo desta página aqui)


Quer compartilhar seu conteúdo em R-bloggers? clique aqui se você tiver um blog, ou aqui se não tiver.

Em nossa última nota, mencionamos a possibilidade de “modelos totalmente calibrados”. Esta nota é um exemplo de modelo de probabilidade que é calibrado no sentido tradicional, mas não totalmente calibrado em um sentido mais refinado.

Primeiro, vamos anexar nossos pacotes e gerar nossos dados de exemplo em R.

1 1 VERDADE
1 FALSO
1 VERDADE
1 1 FALSO
VERDADE
1 VERDADE
1 FALSO
FALSO
VERDADE

Agora, ajustamos nosso modelo de regressão logística.

## 
## Call:
## glm(formula = y ~ x1 + x2, family = binomial(), data = d)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.4213  -1.2572   0.9517   1.0996   1.2572  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept)   0.5572     1.0784   0.517    0.605
## x1           -0.3715     1.3644  -0.272    0.785
## x2           -0.3715     1.3644  -0.272    0.785
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 12.365  on 8  degrees of freedom
## Residual deviance: 12.201  on 6  degrees of freedom
## AIC: 18.201
## 
## Number of Fisher Scoring iterations: 4

Aterramos nossas previsões de modelo como uma nova coluna.

1 1 VERDADE 0,4537010
1 FALSO 0,5462990
1 VERDADE 0,5462990
1 1 FALSO 0,4537010
VERDADE 0,6358007
1 VERDADE 0,5462990
1 FALSO 0,5462990
FALSO 0,6358007
VERDADE 0,6358007

Podemos ver que este modelo é calibrado ou imparcial no sentido E[prediction] = E[outcome].

colMeans(d[, qc(y, prediction)]) %.>%
  knitr::kable(.)
Y 0,5555556
predição 0,5555556

E é até calibrado no sentido que esperamos para regressão logística, E[prediction * x] = E[outcome * x] (Onde x é qualquer variável explicativa).

Leia Também  Plataformas de mineração Zigmabit oferecem o ROI mais rápido do mercado
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
for(v in qc(x1, x2)) {
  print(paste0(
    v, ' diff: ', 
    mean(d[[v]] * d$prediction) - mean(d[[v]] * d$y)))
}
## [1] "x1 diff: 2.77555756156289e-17"
## [1] "x2 diff: 5.55111512312578e-17"

No entanto, podemos ver que este modelo não está “totalmente calibrado” em um sentido adicional, exigindo que E[outcome | prediction] = prediction para todos os valores observados de prediction.

0,4537010 0,5000000
0,5462990 0,5000000
0,6358007 0,66666667

Podemos recalibrar esse modelo (na prática, você gostaria de fazer isso em dados de amostra usando regressão isotônica ou usando métodos de quadro cruzado para evitar viés de modelo aninhado).

1 1 VERDADE 0,4537010 0,5000000
1 FALSO 0,5462990 0,5000000
1 VERDADE 0,5462990 0,5000000
1 1 FALSO 0,4537010 0,5000000
VERDADE 0,6358007 0,66666667
1 VERDADE 0,5462990 0,5000000
1 FALSO 0,5462990 0,5000000
FALSO 0,6358007 0,66666667
VERDADE 0,6358007 0,66666667

Esta nova previsão calibrada também é calibrada no sentido padrão.

colMeans(d[, qc(y, prediction, calibrated)]) %.>%
  knitr::kable(.)
Y 0,5555556
predição 0,5555556
calibrado 0,5555556

E, pelo menos neste caso, ainda obedece às condições explicativas de roll-up.

for(v in qc(x1, x2)) {
  print(paste0(
    v, ' diff: ', 
    mean(d[[v]] * d$calibrated) - mean(d[[v]] * d$y)))
}
## [1] "x1 diff: 0"
## [1] "x2 diff: 0"

As novas previsões calibradas apresentam desvios ainda menores do que as previsões originais.

deviance(prediction = d$prediction, truth = d$y)
## [1] 12.20102
deviance(prediction = d$calibrated, truth = d$y)
## [1] 12.13685

A razão pela qual o modelo logístico original não pôde fazer as previsões calibradas é: as previsões calibradas não são uma função linear das variáveis ​​explicativas no espaço do link.



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br