Un ejemplo de "importance sampling" (que no sé cómo traducir)

Imaginemos que queremos muestrear una variable aleatoria cuya función de densidad es (proporcional a) el producto de otras dos (no necesariamente propias). Por ejemplo, la gamma, cuya función de densidad es $K x^{k-1} \exp(-\lambda x)$, el producto de una exponencial y una distribución impropia con densidad $x^{k-1}$. Supongamos que no sabemos hacer set.seed(1234) shape <- 3 rate <- 3 m0 <- rgamma(1000, shape = shape, rate = rate) Pero supongamos que sí que sabemos muestrear la distribución exponencial, lo que permite escribir: ...

28 de marzo de 2016 · Carlos J. Gil Bellosta

Caret y rejillas: ¿es necesario utilizar fuerza bruta?

Durante la charla de Carlos Ortega del pasado jueves sobre el paquete caret y sus concomitancias, se planteó el asunto de la optimización de los parámetros de un modelo usando rejillas (grids) de búsqueda. Cuando un determinado algoritmo depende de, p.e., cuatro parámetros, se puede definir una rejilla como en gbmGrid <- expand.grid(interaction.depth = c(1, 5, 9), n.trees = (1:30)*50, shrinkage = 0.1, n.minobsinnode = 20) y caret se encarga de ajustar el modelo bajo todas esas combinaciones de parámetros (90 en el ejemplo) para ver cuál de ellas es, con las debidas salvedades, óptima. ...

21 de marzo de 2016 · Carlos J. Gil Bellosta

Modelos mixtos para preprocesar datos en un sistema de recomendación de drogas

Sí, de drogas de las que mantienen despierto al lumpenazgo. Porque he encontrado (aquí) un conjunto datos muy interesante sobre la valoración que una serie de personas, unas 900, da a una serie de drogas más o menos legales que se llaman —me acabo de enterar— nootrópicos. El gráfico extraído de la página enlazada más arriba resume parte de los resultados. No obstante, es sabido entre los que se dedican a los sistemas de recomendación que hay usuarios que tienden a valorar sistemáticamente por encima de la media y otros, por debajo. En los manuales de la cosa suelen recogerse mecanismos más o menos sofisticados para mitigar ese efecto y normalizar las valoraciones entre usuarios. Generalmente, solo exigen matemáticas de bachillerato. Y son meras aproximaciones que no tienen en cuenta circunstancias tales como que puede que un usuario da valoraciones bajas solo porque evalúa productos malos, etc. ...

18 de marzo de 2016 · Carlos J. Gil Bellosta

¿Jupyter? Me quedo con Rodeo, creo

Ayer, después de mucho tiempo, perdí horas de sueño enredando con Jupyter. Y mi sensación fue la misma que hace un año: está bien para presentaciones, cursos y en definitiva, contenido cerrado y estructurado que para el cacharreo diario. ¡Echo en falta un lugar en el que equivocarme reiteradamente! En RStudio, al menos, dispongo de la consola y de algún programa que uso como espacio de borrador. En Jupyter me siento como obligado a comportarme como esos niños repelentes que tomaban apuntes directamente a limpio. ...

17 de marzo de 2016 · Carlos J. Gil Bellosta

¿Cómo era el regulador en 1973?

Estos días he estado haciendo de campaña promoviendo el uso de nuevas técnicas de análisis de datos en ámbitos como, p.e., el riesgo de crédito, uno de esos campos sujetos al parecer de un regulador (el Banco de España, en este caso). La gente con la que he debatido al respecto tiende a aplicar esa forma cuasiperfecta de censura que es la autocensura previa. La autocensura previa ni siquiera requiere la acción explícita del censor: es el potencial censurado el que la aplica de mejor o peor gana automáticamente… por si las moscas. ...

16 de marzo de 2016 · Carlos J. Gil Bellosta

¿Se puede explicar la predicción de un modelo de caja negra?

Imaginemos un banco que construye modelos para determinar si se concede o no un crédito. Este banco tiene varias opciones para crear el modelo. Sin embargo, en algunos países el regulador exige que el banco pueda explicar el motivo de la denegación de un crédito cuando un cliente lo solicite. Esa restricción impediría potencialmente usar modelos de caja negra como el que construyo a continuación: library(randomForest) raw <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data", sep = ",", na.strings = "?") dat <- raw dat$V14 <- dat$V6 <- NULL # me da igual dat <- na.omit(dat) # ídem modelo <- randomForest(V16 ~ ., data = dat) Fijémonos en el sujeto 100, a quien se le deniega el crédito (suponiendo, ¡mal hecho!, que el punto de corte de la probabilidad para concederlo es el 50%), y la variable $V8$. Podemos ver cuál sería el score del cliente modificando esa variable entre su valor real y el máximo del rango dejando las demás tal cual: ...

15 de marzo de 2016 · Carlos J. Gil Bellosta

Dime qué muestreas y te diré cuál es tu sesgo

El telón de Aquiles del big data es el sesgo. Me gustaría hablar más de ello, pero me agarra de la pluma uno de esos NDAs. Así que hablaré de otra cosa. Si le preguntas a la gente cuántos hermanos son en la familia, el promedio del resultado tenderá a ser superior al número medio de hijos por familia. Esencialmente, porque no estás muestreando familias sino hijos. El tautológico hecho de que las familias con más hijos tengan más hijos hace que estén sobrerrepresentadas en la muestra. ...

14 de marzo de 2016 · Carlos J. Gil Bellosta

GBM sintetizado en una línea

Es $$ \sum_i \Phi(y_i, f_1(x_i)) > \sum_i \Phi(y_i, f_1(x_i) - \lambda \nabla \Phi(y_i, f_1(x_i)) \sim$$ $$ \sim \sum_i \Phi(y_i, f_1(x_i) - \lambda f_2(x_i))$$ Por supuesto, el lector se preguntará muchas cosas, entre las que destaco: ¿Qué representa cada uno de los elementos que aparecen en la línea anterior? ¿Qué parte de ella es solo casi siempre cierta? ¿Qué tiene todo eso que ver con GBM?

11 de marzo de 2016 · Carlos J. Gil Bellosta

Hoy que me he puesto traje y corbata...

… (por motivos que importan pero no debo revelar a mis lectores) aprovecho para criticar a esos tipos que, vistiendo como yo, insisten reiteradamente a sus analistas en que les proporcionen un número. Un número que tiene que ser cerrado, indiscutible, pivotal. A esos que gastan traje y corbata como yo hoy les horroriza la varianza. Le espantan, seguro, esos punticos que tan opotunamente coloca Kiko Llaneras alrededor de las medias de este estupendo ...

10 de marzo de 2016 · Carlos J. Gil Bellosta

Lenguajes de programación probabilísticos

Son lenguajes de programación diseñados para describir modelos probabilísticos y realizar inferencias ellos. El resto de la entrada de la Wikipedia sobre este apasionante (y lo uso sin retintín) tema, aquí (y puede que también quieras visitar esto).

9 de marzo de 2016 · Carlos J. Gil Bellosta