Predictores con varianza casi nula, inflación, loterías y línea de comandos

Hoy viernes vuelvo a traer a mis páginas cuatro enlaces interesantes. El primero de ellos es como las malas películas: un arranque espléndido, un planteamiento prometedor y, al final, humo. Pero no trata de chico-conoce-chica sino de qué hacer con esas variables que tienen una varianza casi nula (a la hora de crear modelos estadísticos, se entiende). Me llegó tan oportunamente que pensé que alguien que vela por mí desde lo alto me lo enviaba para sacarme de mi semanal atolladero. Pero no fue el caso.

Mapas: cosas casi increíbles que pueden hacerse con R

Nunca pude ser un erizo. Lo intenté durante años y acabé en el sicólogo. Si el cuerpo me hubiese dado, ahora, tal vez, como algunos compañeros de promoción, sería un experto en un área diminuta del conocimiento y corregiría exámenes los fines de semana. Descubrí con tiempo y muchas sesiones de a 60 euros la hora que había nacido para ser un zorro, un merodeador que olisquea aquí y allá.

Una lectura superficial de estas páginas que escribo puede dar la impresión de que contienen conocimientos profundos (¡ojalá!). Una lectura profunda, que contiene superficialidades (¡convengo!). Son obra de un zorro.

ykmeans, ¿broma, ironía o triste realidad?

Estar suscrito a las actualizaciones de CRAN le permite a uno estar al tanto de las novedades de R de otra manera. De vez en cuando uno encuentra pequeños paquetes que le solucionan un problema puntual. Mucho más frecuentemente, la verdad, uno se topa con aplicaciones muy específicas en áreas que le resultan remotas.

Pero uno no espera nunca tropiezar con paquetes que no sabe si clasificar como una broma, una ironía bromas o como algo mucho peor: la constatación de una triste realidad. Es el caso de ykmeans.

Totales agregados por bloques en tablas

R

En ocasiones uno quiere añadir un total calculado en ciertos bloques a una tabla. Por ejemplo, en la tabla

set.seed(1234)
ventas.orig <- data.frame(
    cliente = rep(1:10, each = 5),
    producto = rep(letters[1:5], times = 10),
    importe = rlnorm(50))

tenemos clientes, productos e importes. Y nos preguntamos por el porcentaje en términos de importe que cada producto supone para cada cliente.

Una manera natural pero torpe de realizar este cálculo consiste en usar un objeto intermedio y merge:

library(plyr)
tmp <- ddply(ventas.orig, .(cliente),
    summarize, total = sum(importe))
ventas <- merge(ventas.orig, tmp)
ventas$pct.producto <- 100 * ventas$importe /
    ventas$total

No os asustéis, se puede hacer aún peor (p.e., usando sqldf). Pero existen dos maneras, cuando menos, de hacerlo mejor. La primera es usando data.table.

Finalmente, se ha inaugurado Martina Cocina

Esta entrada tiene un notable contenido publicitario: el pasado viernes se inauguró Martina Cocina (nota: la página es provisional), una cafetería-restaurante en el que ostento una participación del 50%.

martina_cocina

Se trata de un lugar al que, por supuesto, mis lectores están invitados a descubrir en número 11 de la castiza plaza de Cascorro de Madrid.

Pero como estoy en un foro al que me obligo a no traer temas extemporáneos, confesaré a mis lectores que tengo dos proyectos en mente que guardan relación tanto con Martina Cocina como con los asuntos que esperan encontrar en estas páginas. El primero es que (si me dejan) trataré de aplicar lo que Dan Arieli nos enseña en Predictably Irrational a, principalmente aunque no exclusivamente, el diseño de la carta y los precios de los productos para ayudaros a vosotros, los clientes a elegir, ejem, más convenientemente (¿para quién?).

Los sospechosos habituales y Python

Llamo sospechosos habituales a esos programas y lenguajes para el análisis de datos distintos de R cuya decreciente popularidad nos parece tan natural a los partidarios de este último. Abundan los análisis de cuotas de mercado tales como What Analytic Software are People Discussing?

¿Cuáles son estos sospechosos habituales? Pues SAS, SPSS y algún otro: Stata, Statistica, Minitab,…

Sin embargo, R tiene competidores más serios a medio plazo. Uno de ellos, el más importante, es Python. Lo veo a mi alrededor: son muchos los físicos, los ingenieros, los informáticos que tienen experiencia en ese lenguaje y, sintiéndose cómodos en él —y les alabo el gusto— quieren utilizarlo para analizar datos cuando les toca.

Científicos de datos, aprended de los actuarios

Los actuarios fueron tal vez los primeros científicos de datos. Aparentemente, la primera tabla de mortalidad fue creada por John Graunt en 1662.

Los actuarios hablan de la esperanza de vida. Pero no son tan pendejos como los científicos de datos de hoy en día en eso de pretender que la esperanza de vida es la vida. Los actuarios saben que en una cohorte con una esperanza de vida de 78 años habrá quien muera a los tres, a los quince, a los cincuenta y a los noventa. Nadie les exige que acierten cuándo va a morir cada cual. En lugar de eso, estudian la distribución de los fallecimientos a lo largo del tiempo y calculan indicadores útiles para sus clientes.

Sobre el artículo de Domingos

Leí el otro día A Few Useful Things to Know about Machine Learning de Pedro Domingos, que me dejó ojiplático. Os cuento por qué.

El artículo yuxtapone una serie de temas (debidamente organizados en secciones independientes) tales como:

  • Lo que cuenta es la generalización
  • Que, por eso, los datos no son suficientes y hacen falta modelos testables
  • Que el overfitting es un problema serio
  • Que en dimensiones elevadas pasan cosas raras
  • Que hay que tener cuidado con la teoría (en particular, los resultados asintóticos)
  • Que hay que elegir muy bien las variables (las llama features) de los modelos
  • Que es bueno combinar modelos
  • Que la correlación no implica causalidad
  • Etc.

Cosas todas, como se puede apreciar, muy razonables. Por lo que el artículo no habría estado mal hace treinta o cuarenta años. Pero, desafortunadamente, es del 2012.