Se hizo el split 80% / 20% balanceado, por lo tanto tenemos 5 splits disjuntos, cada uno entrenado con ~24794 SI debito y ~24794 NO debito. Por lo tanto cada modelo, tiene 24794 NAs.

El valor que presenta cada modelo es el porcentaje de votos (sobre 500) de que un objeto pertenezca a la clase SI debito.

Las métricas que tome fueron media, min, max, simes, y simes invertido (1-simes(1-pvals)), de los resultados de los 5 modelos (para cada objeto).

Inmob

# leemos la base de datos
inmob_res <- read.csv("~/mytmp/RentasIA/en_server/inmob_salida.csv")
# vemos cuantos NA hay para cada uno de los modelos
colSums(is.na(inmob_res[, grep("modelo_", colnames(inmob_res))]))
modelo_1 modelo_2 modelo_3 modelo_4 modelo_5 
   24794    24793    24793    24793    24794 
# summary de los modelos
summary(inmob_res[, grep("modelo_", colnames(inmob_res))])
    modelo_1        modelo_2        modelo_3        modelo_4        modelo_5    
 Min.   :0.000   Min.   :0.000   Min.   :0.000   Min.   :0.000   Min.   :0.000  
 1st Qu.:0.004   1st Qu.:0.004   1st Qu.:0.004   1st Qu.:0.004   1st Qu.:0.004  
 Median :0.030   Median :0.030   Median :0.030   Median :0.032   Median :0.030  
 Mean   :0.110   Mean   :0.109   Mean   :0.110   Mean   :0.111   Mean   :0.111  
 3rd Qu.:0.096   3rd Qu.:0.094   3rd Qu.:0.094   3rd Qu.:0.096   3rd Qu.:0.094  
 Max.   :1.000   Max.   :1.000   Max.   :1.000   Max.   :0.998   Max.   :1.000  
 NA's   :24794   NA's   :24793   NA's   :24793   NA's   :24793   NA's   :24794  
# summary de las metricas resumen
metricas_res <- inmob_res[, -grep("ID|modelo_", colnames(inmob_res))]
summary(metricas_res)
     media             min               max             simes          inv_simes      
 Min.   :0.0000   Min.   :0.00000   Min.   :0.0000   Min.   :0.0000   Min.   :0.00000  
 1st Qu.:0.0056   1st Qu.:0.00000   1st Qu.:0.0120   1st Qu.:0.0000   1st Qu.:0.00000  
 Median :0.0344   Median :0.01400   Median :0.0580   Median :0.0400   Median :0.01400  
 Mean   :0.1102   Mean   :0.08491   Mean   :0.1401   Mean   :0.1273   Mean   :0.08549  
 3rd Qu.:0.0892   3rd Qu.:0.05400   3rd Qu.:0.1380   3rd Qu.:0.1150   3rd Qu.:0.05400  
 Max.   :0.9972   Max.   :0.99200   Max.   :1.0000   Max.   :1.0000   Max.   :1.00000  
# gráficos de densidad de las métricas
library("ggplot2")
library("reshape2")

res_metricas_melt <- melt(metricas_res)
No id variables; using all as measure variables
ggplot(res_metricas_melt) +
  geom_density(aes(x = value, color = variable))

# boxplot de las métricas
ggplot(res_metricas_melt) +
  geom_boxplot(aes(x = variable, y = value, color = variable))

# vemos en cuanto se agrupan dependiendo de los decimales de corte
do.call(rbind, lapply(2:5, function(dec) {
  en_dec <- round(metricas_res, dec)
  apply(en_dec, 2, function(x) length(unique(x)))
}))
     media min max simes inv_simes
[1,]   101 100 101   101       101
[2,]   994 496 501   800       828
[3,]  3875 496 501  1033      1076
[4,]  3875 496 501  1033      1076
# vemos intersecciones de objetos dados distintos cortes
cuarts <- rev(seq(0, 1, 0.1))
inters <- do.call(rbind, lapply(cuarts, function(cuartil) {
  cuartiles <- apply(metricas_res, 2, function(x) quantile(x, cuartil))
  act_res <- t(t(metricas_res) >= cuartiles)
  res <- rep(0, ncol(metricas_res) + 1)
  names(res) <- 0:ncol(metricas_res)
  prop_tb <- prop.table(table(rowSums(act_res)))
  res[names(prop_tb)] <- prop_tb
  round(res, 3)
}))
rownames(inters) <- cuarts
inters
        0     1     2     3     4     5
1   1.000 0.000 0.000 0.000 0.000 0.000
0.9 0.888 0.003 0.009 0.009 0.003 0.089
0.8 0.779 0.011 0.012 0.008 0.006 0.184
0.7 0.646 0.028 0.031 0.021 0.020 0.255
0.6 0.533 0.033 0.038 0.027 0.026 0.342
0.5 0.423 0.030 0.039 0.032 0.026 0.450
0.4 0.328 0.021 0.029 0.038 0.026 0.559
0.3 0.252 0.011 0.028 0.023 0.018 0.667
0.2 0.000 0.000 0.000 0.180 0.018 0.802
0.1 0.000 0.000 0.000 0.000 0.000 1.000
0   0.000 0.000 0.000 0.000 0.000 1.000
# aplicando cada cuartil, vemos cuantos objetos son clasificados como SI debito
cuarts <- rev(seq(0, 1, 0.1))
medias_col <- do.call(rbind, lapply(cuarts, function(cuartil) {
  cuartiles <- apply(metricas_res, 2, function(x) quantile(x, cuartil))
  act_res <- t(t(metricas_res) >= cuartiles)
  round(colMeans(act_res), 3)
}))
rownames(medias_col) <- cuarts
medias_col
    media   min   max simes inv_simes
1   0.000 0.000 0.000 0.000     0.000
0.9 0.100 0.101 0.100 0.100     0.101
0.8 0.200 0.201 0.201 0.200     0.201
0.7 0.301 0.301 0.301 0.301     0.301
0.6 0.400 0.401 0.402 0.402     0.401
0.5 0.501 0.519 0.508 0.512     0.519
0.4 0.600 0.631 0.601 0.626     0.631
0.3 0.700 0.721 0.701 0.704     0.721
0.2 0.806 1.000 0.817 1.000     1.000
0.1 1.000 1.000 1.000 1.000     1.000
0   1.000 1.000 1.000 1.000     1.000
LS0tCnRpdGxlOiAiRXhwbG9yYWNpw7NuIHJlc3VsdGFkb3MgZGUgZW50cmVnYWJsZXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KClNlIGhpem8gZWwgc3BsaXQgODAlIC8gMjAlIGJhbGFuY2VhZG8sIHBvciBsbyB0YW50byB0ZW5lbW9zIDUgc3BsaXRzIGRpc2p1bnRvcywgY2FkYSB1bm8gZW50cmVuYWRvIGNvbiB+MjQ3OTQgU0kgZGViaXRvIHkgfjI0Nzk0IE5PIGRlYml0by4gUG9yIGxvIHRhbnRvIGNhZGEgbW9kZWxvLCB0aWVuZSAyNDc5NCBOQXMuCgpFbCB2YWxvciBxdWUgcHJlc2VudGEgY2FkYSBtb2RlbG8gZXMgZWwgcG9yY2VudGFqZSBkZSB2b3RvcyAoc29icmUgNTAwKSBkZSBxdWUgdW4gb2JqZXRvIHBlcnRlbmV6Y2EgYSBsYSBjbGFzZSBTSSBkZWJpdG8uCgpMYXMgbcOpdHJpY2FzIHF1ZSB0b21lIGZ1ZXJvbiBtZWRpYSwgbWluLCBtYXgsIHNpbWVzLCB5IHNpbWVzIGludmVydGlkbyAoYDEtc2ltZXMoMS1wdmFscylgKSwgZGUgbG9zIHJlc3VsdGFkb3MgZGUgbG9zIDUgbW9kZWxvcyAocGFyYSBjYWRhIG9iamV0bykuCgojIElubW9iCgpgYGB7cn0KIyBsZWVtb3MgbGEgYmFzZSBkZSBkYXRvcwppbm1vYl9yZXMgPC0gcmVhZC5jc3YoIn4vbXl0bXAvUmVudGFzSUEvZW5fc2VydmVyL2lubW9iX3NhbGlkYS5jc3YiKQpgYGAKCmBgYHtyfQojIHZlbW9zIGN1YW50b3MgTkEgaGF5IHBhcmEgY2FkYSB1bm8gZGUgbG9zIG1vZGVsb3MKY29sU3Vtcyhpcy5uYShpbm1vYl9yZXNbLCBncmVwKCJtb2RlbG9fIiwgY29sbmFtZXMoaW5tb2JfcmVzKSldKSkKYGBgCgpgYGB7cn0KIyBzdW1tYXJ5IGRlIGxvcyBtb2RlbG9zCnN1bW1hcnkoaW5tb2JfcmVzWywgZ3JlcCgibW9kZWxvXyIsIGNvbG5hbWVzKGlubW9iX3JlcykpXSkKYGBgCgpgYGB7cn0KIyBzdW1tYXJ5IGRlIGxhcyBtZXRyaWNhcyByZXN1bWVuCm1ldHJpY2FzX3JlcyA8LSBpbm1vYl9yZXNbLCAtZ3JlcCgiSUR8bW9kZWxvXyIsIGNvbG5hbWVzKGlubW9iX3JlcykpXQpzdW1tYXJ5KG1ldHJpY2FzX3JlcykKYGBgCgpgYGB7cn0KIyBncsOhZmljb3MgZGUgZGVuc2lkYWQgZGUgbGFzIG3DqXRyaWNhcwpsaWJyYXJ5KCJnZ3Bsb3QyIikKbGlicmFyeSgicmVzaGFwZTIiKQoKcmVzX21ldHJpY2FzX21lbHQgPC0gbWVsdChtZXRyaWNhc19yZXMpCmdncGxvdChyZXNfbWV0cmljYXNfbWVsdCkgKwogIGdlb21fZGVuc2l0eShhZXMoeCA9IHZhbHVlLCBjb2xvciA9IHZhcmlhYmxlKSkKYGBgCgpgYGB7cn0KIyBib3hwbG90IGRlIGxhcyBtw6l0cmljYXMKZ2dwbG90KHJlc19tZXRyaWNhc19tZWx0KSArCiAgZ2VvbV9ib3hwbG90KGFlcyh4ID0gdmFyaWFibGUsIHkgPSB2YWx1ZSwgY29sb3IgPSB2YXJpYWJsZSkpCmBgYAoKYGBge3J9CiMgdmVtb3MgZW4gY3VhbnRvIHNlIGFncnVwYW4gZGVwZW5kaWVuZG8gZGUgbG9zIGRlY2ltYWxlcyBkZSBjb3J0ZQpkby5jYWxsKHJiaW5kLCBsYXBwbHkoMjo1LCBmdW5jdGlvbihkZWMpIHsKICBlbl9kZWMgPC0gcm91bmQobWV0cmljYXNfcmVzLCBkZWMpCiAgYXBwbHkoZW5fZGVjLCAyLCBmdW5jdGlvbih4KSBsZW5ndGgodW5pcXVlKHgpKSkKfSkpCmBgYAoKYGBge3J9CiMgdmVtb3MgaW50ZXJzZWNjaW9uZXMgZGUgb2JqZXRvcyBkYWRvcyBkaXN0aW50b3MgY29ydGVzCmN1YXJ0cyA8LSByZXYoc2VxKDAsIDEsIDAuMSkpCmludGVycyA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoY3VhcnRzLCBmdW5jdGlvbihjdWFydGlsKSB7CiAgY3VhcnRpbGVzIDwtIGFwcGx5KG1ldHJpY2FzX3JlcywgMiwgZnVuY3Rpb24oeCkgcXVhbnRpbGUoeCwgY3VhcnRpbCkpCiAgYWN0X3JlcyA8LSB0KHQobWV0cmljYXNfcmVzKSA+PSBjdWFydGlsZXMpCiAgcmVzIDwtIHJlcCgwLCBuY29sKG1ldHJpY2FzX3JlcykgKyAxKQogIG5hbWVzKHJlcykgPC0gMDpuY29sKG1ldHJpY2FzX3JlcykKICBwcm9wX3RiIDwtIHByb3AudGFibGUodGFibGUocm93U3VtcyhhY3RfcmVzKSkpCiAgcmVzW25hbWVzKHByb3BfdGIpXSA8LSBwcm9wX3RiCiAgcm91bmQocmVzLCAzKQp9KSkKcm93bmFtZXMoaW50ZXJzKSA8LSBjdWFydHMKaW50ZXJzCmBgYAoKYGBge3J9CiMgYXBsaWNhbmRvIGNhZGEgY3VhcnRpbCwgdmVtb3MgY3VhbnRvcyBvYmpldG9zIHNvbiBjbGFzaWZpY2Fkb3MgY29tbyBTSSBkZWJpdG8KY3VhcnRzIDwtIHJldihzZXEoMCwgMSwgMC4xKSkKbWVkaWFzX2NvbCA8LSBkby5jYWxsKHJiaW5kLCBsYXBwbHkoY3VhcnRzLCBmdW5jdGlvbihjdWFydGlsKSB7CiAgY3VhcnRpbGVzIDwtIGFwcGx5KG1ldHJpY2FzX3JlcywgMiwgZnVuY3Rpb24oeCkgcXVhbnRpbGUoeCwgY3VhcnRpbCkpCiAgYWN0X3JlcyA8LSB0KHQobWV0cmljYXNfcmVzKSA+PSBjdWFydGlsZXMpCiAgcm91bmQoY29sTWVhbnMoYWN0X3JlcyksIDMpCn0pKQpyb3duYW1lcyhtZWRpYXNfY29sKSA8LSBjdWFydHMKbWVkaWFzX2NvbApgYGAK