Interpretación de modelos predictivos (en LUCA)
Ayer salió publicada una entrada de blog mía en LUCA, i.e., allí. Pero vamos, como si la hubiese escrito aquí.
Ayer salió publicada una entrada de blog mía en LUCA, i.e., allí. Pero vamos, como si la hubiese escrito aquí.
El próximo 29 de noviembre (de 2018) de febrero daré una charla dentro del ciclo de Data Konferences de Kschool.
Para la mía han creado el siguiente cartelito:
El resumen que preparé es:
Se hace ciencia de datos para tomar decisiones. Las predicciones, mejores o peores, alimentan procesos de decisión (p.e., ¿se concede este préstamo?). Sin embargo, existe una brecha enorme (en términos de equipos responsables y de comunicación entre ambos) entre quienes construyen los procesos predictivos y quienes toman las decisiones finales. A falta de mejor criterio, los científicos de datos utilizan funciones de pérdida genéricas (p.e., el RMSE) y prestan una atención excesiva a la estimación puntual. Ambas son decisiones subóptimas. Integrar el proceso predictivo en el de toma de decisiones conduciría de forma natural a la adopción de funciones de pérdida distintas y a prestar mucha menos atención al hecho de acertar con las predicciones y más a la idoneidad de las decisiones.
En esta entrada voy a crear un conjunto de datos donde dos variables tienen una correlación muy alta, ajustar un modelo de regresión y obtener la siguiente representación de la distribución a posteriori de los coeficientes,
donde se aprecia el efecto de la correlación entre x1
y x2
.
El código,
library(mvtnorm)
library(rstan)
library(psych)
n <- 100
corr_coef <- .9
x <- rmvnorm(n, c(0, 0),
sigma = matrix(c(1, corr_coef, corr_coef, 1), 2, 2))
plot(x)
x1 <- x[,1]
x2 <- x[,2]
x3 <- runif(n) - 0.5
y <- 1 + .4 * x1 - .2 * x2 + .1 * x3 + rnorm(n, 0, .1)
summary(lm(y ~ x1 + x2 + x3))
stan_code <- "
data {
int N;
vector[N] y;
vector[N] x1;
vector[N] x2;
vector[N] x3;
}
parameters {
real a;
real a1;
real a2;
real a3;
real sigma;
}
model {
a ~ cauchy(0,10);
a1 ~ cauchy(0,2.5);
a2 ~ cauchy(0,2.5);
a3 ~ cauchy(0,2.5);
y ~ normal(a + a1 * x1 + a2 * x2 + a3 * x3, sigma);
}"
datos_stan <- list(
N = n,
y = y,
x1 = x1,
x2 = x2,
x3 = x3
)
fit2 <- stan(model_code = stan_code,
data = datos_stan,
iter = 10000, warmup = 2000,
chains = 2, thin = 4)
res <- as.data.frame(fit2)
pairs.panels(res[, c("a", "a1", "a2", "a3", "sigma")])
Ayer salió publicada una entrada de blog mía en LUCA, i.e., aquí. Pero vamos, como si la hubiese escrito aquí.
Nota: La ortotipografía (particularmente del título de la entrada) no fue cosa mía.
Tenía tan bien guardados en el disco duro una serie de enlaces de interés parasociológico que no había forma humana de dar con ellos.
Para que no me vuelva a pasar y por su potencial interés para otros, los cuelgo aquí.
El primero de ellos (que no sé por qué lo guardé) son las diapositivas de una charla acerca de cómo transformar porcentajes de votos en escaños en España.
Los otros tres se refieren a la metodología que utiliza la gente de electionforecast.co.uk:
Más sobre lo de ayer. O más bien, una justificación por analogía.
Con monedas.
Tiras una moneda 100 veces y obtienes 60 caras. Tienes una priori $latex B(a,b)$ (beta). Tomas una muestra de valores $latex p_i$ con esa distribución y para cada una de ellas repites el experimento, es decir, obtienes lo que en R se expresaría de la forma
rbinom(1, 100, p[i])
Si te quedas los valores $p_i$ tales que esa simulación es 60, enhorabuena, tienes una muestra de la distribución a posteriori.
Que quiere decir approximate Bayesian computation. Es un truco para pobres y desafortunados que no pueden quitarle la A a BC y usar directamente cosas como Stan o similares. El que no quiera prioris, además, puede usar el ABC para estimar la forma de la verosimilitud alrededor de una estimación puntual.
Por supuesto, el objetivo es obtener una estimación de la posteriori para poder medir la incertidumbre de parámetros, etc. La idea es que se dispone de unos datos, $latex X$ y un mecanismo de generación de datos $latex X^\prime = f(\theta)$, donde $latex \theta$ es un vector de parámetros.
Según Gelman son:
Dos de ellos, el primero y el tercero, son del máximo interés para el CIS, pero ¡ea, ea, ea, Tezanos no se entera!
En España estamos acostumbrados a que los programas sociales se implementan y ya. Se convierten, como la semana santa o las navidades, en fenómenos culturales que, simplemente, están ahí (p.e., el PER) y tienen que estarlo necesariamente.
En otros países se evalúan, se miden y cabe preguntarse: ¿funcionan?
Pues en otros sitios donde se miden esas cosas, se han obtenido números como estos (que es de donde traduzco):
Lo anterior tiene, no obstante, una lectura positiva: ¡el ~20% funcionan! Es decir, que si este tipo de proyectos se evaluasen tempranamente y pudiesen ser cancelados de no funcionar, aplicando una especie de metáfora del reinforcement learning, en unos años casi todos serían buenos.
Lo buscaba (véase el último párrafo) y aquí está:
The results show that levels of education have hardly any impact on the mortality rate.