Sobremuestreando x (y no y)

Construyo unos datos (artificiales, para conocer la verdad):

n <- 10000
x1 <- rnorm(n)
x2 <- rnorm(n)
probs <- -2 + x1 + x2
probs <- 1 / (1 + exp(-probs))
y <- sapply(probs, function(p) rbinom(1, 1, p))
dat <- data.frame(y = y, x1 = x1, x2 = x2)

Construyo un modelo de clasificación (logístico, que hoy no hace falta inventar, aunque podría ser cualquier otro):

summary(glm(y ~ x1 + x2, data = dat, family = binomial))
#Call:
#glm(formula = y ~ x1 + x2, family = binomial, data = dat)
#
#Deviance Residuals:
#    Min       1Q   Median       3Q      Max
#-2.2547  -0.5967  -0.3632  -0.1753   3.3528
#
#Coefficients:
#            Estimate Std. Error z value Pr(>|z|)
#(Intercept) -2.05753    0.03812  -53.97   <2e-16 ***
#x1           1.01918    0.03386   30.10   <2e-16 ***
#x2           1.00629    0.03405   29.55   <2e-16 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#(Dispersion parameter for binomial family taken to be 1)
#
#    Null deviance: 9485.2  on 9999  degrees of freedom
#Residual deviance: 7373.4  on 9997  degrees of freedom
#AIC: 7379.4
#
#Number of Fisher Scoring iterations: 5

Correcto.

¿Criptobayesianismo?

Titulo así a cuenta de un proceso mental de varios saltos producidos a partir de la lectura del muy recomendable Five ways to ensure that models serve society: a manifesto. En particular del parrafito

Quantification can backfire. Excessive regard for producing numbers can push a discipline away from being roughly right towards being precisely wrong. Undiscriminating use of statistical tests can substitute for sound judgement. By helping to make risky financial products seem safe, models contributed to derailing the global economy in 2007–08.

Sobre predicciones puntuales

Como tan a menudo se nos olvida, Taleb nos recuerda, breve y conciso, un par de cositas sobre las predicciones puntuales aquí. Además, casi todo lo que tiene que decir se resume en:

La regresión logística como el modelo más simple posible (que...)

Problema de regresión. Queremos $y = f(\mathbf{x})$. Lo más simple que podemos hacer: fiarlo todo a Taylor y escribir $ y = a_0 + \sum_i a_i x_i$.

Problema de clasificación. Lo más simple que podemos hacer, de nuevo: linealizar. Pero la expresión lineal tiene rango en $latex (-\infty, \infty)$. Solución, buscar la función $latex f$ más sencilla que se nos pueda ocurrir de $latex (-\infty, \infty)$ en $latex [0, 1]$. Entonces, $latex y = f(a_0 + \sum_i a_i x_i)$.

¿Cuándo falla lasso?

Una de las consecuencias funestas —tal vez inesperadas e imprevistas— de la actual arquitectura del mundo en que vivimos es que hay mucha gente (e instituciones, y libros, y artículos, y…) empeñada en enseñarte las cosas buenas y provechosas y muy especialmente en sus facetas que lo son más mientras que para aprender las malas dependes de la calle, la suerte y las pésimas compañías.

Así, te enseñan lasso y todo son parabienes.

Escalabilidad (y estructuras cooperativas)

Esta entrada es una breve nota (en parte, para mí) sobre On the Scalability of Cooperative Structures, un artículo sobre lo que el título indica (sí, que existen estructuras cooperativas como, p.e., las cooperativas o determinados sistemas políticos defendidos desde ciertas posiciones ideológicas, que tienen muy serios problemas de escalabilidad) y que a pesar de su interés no cabría en estas páginas si no fuese por este parrafito:

What I would like to do, instead, is introduce a concept to the discussion that I believe has the potential to elucidate several aspects in an extremely helpful way. The concept is that of “scalability.” It is drawn from the computer science literature, and it refers rather generally to the capacity of a system to take on increased workload by integrating additional resources (i.e. to “scale up”) without suffering degradation of performance.

RuleFit

El otro día me sentí culpable porque me preguntaron sobre RuleFit y tuve que hacer un Simón (aka, me lo estudio para mañana). Y como mañana fue antier, lo que sigue.

Hay descripciones estándar de RuleFit (p.e., esta o la del artículo original) pero me voy a atrever con una original de mi propio cuño.

Comenzamos con lasso. Lasso está bien, pero tiene una limitación sustancial: se le escapan las iteracciones (vale, admito que lo anterior no es universalmente exacto, pero lo es casi y eso me vale). Entonces, la pregunta es: ¿cómo introducir interacciones en lasso?

Bagging y boosting, hermanados

Ambas son heurísticas para construir modelos buenos a partir de la combinación de modelos malos. Con la diferencia —¿recordáis los condensadores de la física de bachillerato?— de que en un caso se colocan en paralelo y en el otro, en serie.

Entran Friedman y Popescu (algoritmo 1):

Y, tachán:

  • Bagging, si $latex \nu = 0$
  • Boosting otherwise.

Un mecanismo para fomentar la provisión privada de bienes púbicos

Tienes un proyecto que cuesta 1000 euros pero solo dispones de 100. Puede ser el típico proyecto de Patreon o Verkami; o ya puestos, proyectos como el de NadaEsGratis. O, ya puestos, un curso de ciencia de datos (cuya realización es contingente en que se alcance un volumen de alumnos mínimo).

Podrías, simplemente pedir 900 euros a voluntarios (como en los enlaces de más arriba). Pero podrías hacer algo mejor: ofrecer un contrato condicional en el que a los potenciales patrones:

Coronavirus: prevalencia, sensibilidad y especificidad

El otro día, por motivos que no vienen al caso, dibujé

que es una gráfica que muestra la posibilidad de tener aquello que quiera Dios que midan los tests del estudio ENECOVID-19 para aquellos a los que el test correspondiente ha dado positivo habida cuenta de su sensibilidad (85%) y especificidad (98%, que uso en lugar del menos creíble 99% que usa el estudio).

Efectivamente, cuando la prevalencia es baja, casi todos los tests positivos son falsos: corresponden a ese 2% de error que tiene el test sobre la población sana.