Posts

Modelos y sesgos (discriminatorios): unas preguntas

A raíz de mi entrada del otro día he tenido una serie de intercambios de ideas. Que han sido infructuosos porque no han dejado medianamente asentadas las respuestas a una serie de preguntas relevantes.

Primero, contexto: tenemos un algoritmo que decide sobre personas (p.e., si se les concede hipotecas) usando las fuentes de información habitual. El algoritmo ha sido construido con un único objetivo: ser lo más eficiente (y cometer el mínimo número de errores) posible. Usa además datos históricos reales. Lo habitual.

Goodhart, Lucas y márketing

Abundo sobre lo de ayer.

Una empresa clasifica a sus clientes y los asigna a grupos: malotes, estrella, psepsé, etc. Examina las características de los clientes estrella y entonces reorienta su política comercial en la siguiente dirección:

Tratemos de que nuestros clientes infraóptimos asuman formalmente las características formales de aquellos que más nos gustan.

En gran medida, según lo discutido ayer, el principal logro de ese tipo de políticas es la de debilitar el vínculo entre esas características identificadas por los modelos y la rentabilidad de los clientes.

Goodhart, Lucas y todas esas cosas

Como me da vergüenza que una búsqueda de Goodhart en mi blog no dé resultados, allá voy. Lo de Goodhart, independientemente de lo que os hayan contado, tiene que ver con

es decir, un gráfico causal hiperbásico. Si la variable de interés y es difícil de medir, resulta tentador prestar atención a la variable observable x y usarla como proxy. Todo bien.

Pero también puede interesar operar sobre y y a cierta gente le puede sobrevenir la ocurrencia de operar sobre x con la esperanza de que eso influya sobre y.

¿Siguen votando igual los diputados?

Hace seis años escribí esto. Hoy actualizo aquella entrada para crear

Y, por supuesto, el código (que he tenido que reescribir en gran medida):

library(xml2)
library(reshape2)
library(plyr)

# descarga y manipulación de datos

dia_votacion <- function(n.votacion){
  dir.create("tmp")
  url <- paste("https://app.congreso.es/votacionesWeb/OpenData?sesion=",
                n.votacion, "&completa;=1&legislatura;=12", sep = "")
  download.file( url, destfile = "./tmp/votos.zip")
  try(unzip("./tmp/votos.zip", exdir = "./tmp"), TRUE)

  ficheros <- dir("./tmp", pattern = ".*xml", full.names = T)

  if (length(ficheros) == 0)
    return(NULL)

  res <- lapply(ficheros, function(fichero){

    print(fichero)

    datos <- as_list(read_xml(fichero))

    sesion <- datos$Resultado$Informacion$Sesion
    numero <- datos$Resultado$Informacion$NumeroVotacion

    try(datos <- ldply(datos$Resultado$Votaciones, unlist), TRUE)

    if (class(datos) == "try-error")
      return(NULL)

    if (class(datos) != "data.frame")
      return(NULL)

    if(nrow(datos) == 0)
      return(NULL)

    datos$sesion <- sesion
    datos$numero <- numero

    datos
  })

  unlink("./tmp", recursive = T)      # borra el directorio temporal

  res
}

tmp <- lapply(1:156, dia_votacion)

datos <- tmp[!sapply(tmp, is.null)]
datos <- lapply(datos, function(x) do.call(rbind, x))
datos <- do.call(rbind, datos)

datos$numero <- as.numeric(unlist(datos$numero))
datos$sesion <- as.numeric(unlist(datos$sesion))

datos$asunto <- as.character(1000000 + 1000 * datos$sesion + datos$numero)

datos$ind <- 0
datos$ind[datos$Voto == "No"] <- -1
datos$ind[datos$Voto == "Sí"] <- 1

tmp <- dcast(datos, asunto ~ Diputado, value.var = "ind", fill = 0)
matriz_votos <- as.matrix(tmp[, -1])

rownames(matriz_votos) <- NULL
colnames(matriz_votos) <- NULL

heatmap(matriz_votos, xlab = "Diputados", ylab = "Asuntos", scale = "none")

No sé si alguien querrá sacarle más punta a la no historia de hoy.

Cuando oigáis que los algoritmos discriminan, acordaos de esto que cuento hoy

Generalmente, cuando construyes uno de esos modelos para clasificar gente entre merecedores de una hipoteca o no; de un descuento o no; de… vamos, lo que hacen cientos de científicos de datos a diario, se utilizan dos tipos de fuentes de datos: individuales y grupales.

La información grupal es la que se atribuye a un individuo por el hecho de pertenecer a un sexo, a un grupo de edad, a un código postal, etc. Típicamente tiene una estructura seccional (invariante en el tiempo).

¿Qué hay de malo en gorronear investigación básica?

El artículo Endogenous Technological Change de Paul Romer (nóbel de economia de este año) ofrece algunas pistas sobre la relación entre investigación (o I+D o como quiera llamarse) y desarrollo económico. En él se lee (con mi subrayado):

Rivalry and excludability are closely linked because most rival goods are excludable. (A parking space in a shopping center parking lot is an example of a good that is effectively nonexcludable because the cost of enforcing excludability is too high relative to the value of the good.) The interesting case for growth theory is the set of goods that are nonrival yet excludable. The third premise cited in the Introduction implies that technology is a nonrival input. The second premise implies that technological change takes place because of the actions of self-interested individuals, so improvements in the technology must confer benefits that are at least partially excludable. The first premise therefore implies that growth is driven fundamentally by the accumulation of a partially excludable, nonrival input.

Cuatro paquetes interesantes de R

R

Son paquetes que marcado como potencialmente relevantes pero que aún no he revisado como debiera. Tal vez alguien tenga algo más que decir sobre ellos. Tiene los comentarios, por supuesto, abiertos.

longRPart2: Particionamiento recursivo para modelos longitudinales. Extiende ctree y, por supuesto, mob del paquete party a datos de tipo longitudinal.

radiant: Más que un paquete, es un conjunto de paquetes para business analytics usando R y Shiny. Ni idea de para qué parte de ese amplio campo del business analytics puede resultar útil, pero si resulta que es precisamente el tuyo, ¡enhorabuena!

Las tres culturas (en LUCA)

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.

Encuesta Social Europea: un cociente

Leo (fuente):

[…] en su comparecencia del año pasado comentó algo sobre un pago al exterior de 174 000 euros, correspondiente a la cuota del consorcio de infraestructuras científicas, ERIC, que, como bien sabe, es el consorcio internacional que se encarga de realizar la encuesta social europea. El año pasado dijo que le preocupaba que 2017 fuese el último año en el que España formase parte de esa encuesta social europea porque teníamos cuota de país invitado y no de socio de la infraestructura, algo que nos parece preocupante. Veo que este año en los presupuestos hay un pago al exterior, pero de menor importe, de 139 000 euros. En este sentido, le quería preguntar si nos han hecho un descuento, una tarjeta de socios, una de país pobre…