Clústering (II): ¿es replicable?

Sólo conozco un estudio ?y lo digo bona fide; si alguno de mis lectores conoce otro, le ruego que me lo indique? en el que las técnicas de clústering hayan sido rectamente aplicadas. Se trata del artículo Molecular Classification of Cancer: Class Discovery and Class Prediction by Gene Expression Monitoring de cuyo resumen extraigo y traduzco lo siguiente:

Un procedimiento de detección de clases automáticamente descubrió la distinción entre la leucemia mieloide aguda (AML) y la leucemia linfoblástica aguda (ALL) sin conocimiento previo de las clases. Después se construyó un predictor de clases…

En esencia, los autores tomaron (dicen) unos datos, aplicaron técnicas de clústering y encontraron dos clases. Supongo que validarían el experimento fehacientemente hasta tener cierta seguridad de que, efectivamente, había motivos para creer que los datos estaban escindidos en dos partes claramente diferenciadas. Y, posteriormente, fueron capaces de sustentar dichas diferencias utilizando información externa: efectivamente, los miembros de los grupos respondían a cuadros clínicos distintos.

Incluso en este caso, si los autores no sabían que en sus datos existían dos clases muy distintas, fue por que no preguntaron: la etiqueta se conocía desde el momento de la recopilación de los datos y las diferencias entre la leucemia mieloide y la linfoblástica son tan notorias (para un experto) como las que distinguen el día de la noche.

En todas las demás situaciones en las que he visto utilizar este tipo de métodos la situación ha sido muy distinta. (Salvo en los libros, claro. En los libros hacen trampa. En los libros plantean problemas de laboratorio absolutamente irreales: bidimensionales, con variables sin ningún tipo de problema, con grupos que se ven perfectamente a ojo, etc. ¡Ni los mencionaré en esta serie!)

En todas las demás situaciones de las que tengo noticia, incluso en las que he participado y llevan mi firma, por las que, en algunos casos, y por las que se han pagado decenas de miles de euros, el análisis no ha sido en absoluto riguroso. Quiero subrayar en esta serie de entradas tres características sospechosas que definen este tipo de estudios:

  1. No replicabilidad
  2. Dependencia de las hipótesis de partida y del preprocesamiento de los datos
  3. Falta de rigor a la hora de analizar la validez de las clases obtenidas

En la entrada de hoy trataré la primera de ellas. Las dos preguntas que me sugiere el problema son las que dan título a las dos secciones siguientes de esta entrada.

Si los datos no tienen clases definidas, ¿las encontramos aun así?

Mala será la replicabilidad del método cuando uno es capaz de encontrar clases aun cuando no existen. Tomemos el siguiente pedazo de código, que crea un conjunto de datos con n.obs observaciones en un espacio de dimensión n.dim y busca n.clus clases en él:

library( cluster )

n.dim  <- 5
n.obs  <- 200
n.clus <- 4

my.dat <- matrix( rnorm( n.dim * n.obs ), n.obs )

res <- pam( my.dat, n.clus )

¿Encuentra clases? ¿Se parecen a las que se obtienen al crear otro conjunto de datos con exactamente la misma distribución de partida?

Cierto que el paquete cluster proporciona herramientas para verificar hasta qué punto son buenas las clases obtenidas. Pero si habéis trabajado en el negocio, ¿las habéis utilizado alguna vez? ¿Habéis advertido a vuestros superiores (o clientes) de que vuestro clústering es sospechoso? En caso afirmativo, ¿qué os han respondido?

Si los datos tienen clases definidas, ¿las encuentra el algoritmo?

De nuevo, podemos hacer otro experimento con el siguiente trozo de código, que es una versión del anterior.

library( cluster )

n.dim  <- 5
n.obs  <- 200
n.clus <- 4

sigma <- 0.3

centers <- matrix( rnorm( n.dim * n.clus, 0, sigma ), n.clus )

cluster.index <- sample( n.clus, n.obs, replace = T )

my.dat <- matrix( rnorm( n.dim * n.obs ), n.obs )
my.dat <- my.dat + centers[ cluster.index, ]

res <- pam( my.dat, n.clus )

Esta vez hemos fabricado n.clus clases distintas que serán más o menos distintas en función del parámetro sigma. Aun conociendo de antemano el número de clases en vuestro conjunto de datos, ¿sois capaces de recuperar las clases iniciales? ¿Se parecen en algo los centros de las clases obtenidas a los preespecificados? ¿Cómo de grande tiene que ser sigma para obtener resultados razonables y consistentes? ¿Seríais capaces de deducir el valor del parámetro crítico n.clus si no supiéseis su valor al crear los datos?

Resumen

Los dos experimentos propuestos en esta entrada hacen referencia a dos elemenos de sospecha que me obligan a replantearme ?y entiendo que muchos otros compañeros de faena les ocurrirá igual? la validez de los métodos de clústering tal cual se usan en muchas aplicaciones: los resultados no son repetibles, incluso con los mismos (o una muestra de los mismos) datos.

Los resultados de un estudio de clústering tienen que ser (y temo repetirme):

  • Replicables bajo condiciones, submuestras e hipótesis diferentes.
  • Tiene que ser posible encontrar una causa extra-algorítmica del motivo por el que los sujetos se arraciman de esa manera y no de otra.

Y si no hay replicabilidad, si no se cumplen las dos condiciones anteriores, no hay ciencia. A lo más, charlatanismo.

8 comentarios sobre “Clústering (II): ¿es replicable?

  1. jbm 19 julio, 2011 11:54

    El que use clusters en producción, en vez de en exploración, tendrá su merecido y acabará en una consultora.

    La mayor parte de las consultoras, cuanto más prestigiosas peor, no tienen vergüenza ni la han conocido. Una vez, una de esas consultoras de campanillas nos hizo un scoring. Al tiempo descubrimos que más del 80% de los clientes sacaban el mismo puntaje. Nos quejamos. Mandaron al socio charletas que mareó al Gerente, en la mejor tradición de El Golpe. Y no nos devolvieron los buenos dineros que costó la gracieta, claro.

  2. datanalytics 21 julio, 2011 21:40

    Bueno, tú sabes lo que suele pasar: el superjefe de la empresa, A, delega en un gerente B el seleccionar una consultora para una determinada tarea. B selecciona la consultora X. Y con eso se convierte en rehén de ella: si el trabajo que realiza X es basura, es en el supremo interés de B que parezca una maravilla a los ojos de A.

    Quedando A satisfecho, a nadie le importa lo que opine JBM. Salvo en esta bitácora, claro, en la que entendemos su malhumor y frustración.

  3. JBM 1 agosto, 2011 9:55

    @datanalytics
    Gracias por tu comprensión. 😉 Cuando se lo digo a mi Gerente, me mira como si fuera un perturbado y se encoge de hombros. Parece decirme: «pero si es lo que hacen todas las empresas» Lo peor es que tiene razón.

  4. José Luis 16 febrero, 2012 20:03

    Bueno Carlos. Si el clustering es tan «inestable» , qué se puede hacer?. ¿Qué opinas del algoritmo CLARA, o de usar el k-medias mejorándolo de alguna forma? ¿Y como podríamos aproximar un número óptimo de clusters cuando tenemos BD grandes? ..
    Yo estaba pensando en utilizar el algoritmo CLARA tomando bastantes muestras y con un tamaño mayor que el que viene por defecto que es el mín(n,40+2*k) siendo n el número de individuos y k el número de «clústeres» a obtener. Y luego compararlo con los resultados de un k medias, en el que se haga similar..

  5. datanalytics 16 febrero, 2012 20:20

    @José Luis Bueno, si el análisis es no estable eso puede indicar que, realmente, no existen «clústers» en los datos, es decir, este tipo de análisis no sería aplicable.

    Hay estadísticos que permiten analizar hasta qué punto existen grupos bien definidos. La repetibilidad es otro indicio de que existen.

    El que uno sospeche que tal vez puedan existir grupos notables en los datos no significa que realmente los haya, ¿no?

  6. José Luis 16 febrero, 2012 20:26

    @datanalytics
    Cierto , no tienen por qué existir realmente. Otra cosa es convencer a quien paga de que realmente no existen,jeje, a veces les cuesta tanto creer en verdades como dejar de creer en mentiras. Puedes indicarme alguno de esos estadísticos que permitan analizar si los grupos están bien definidos?. Un saludo.

  7. datanalytics 16 febrero, 2012 20:31

    @José Luis Pues cito de memoria, pero en el paquete cluster de R existen algunas funciones que ayudan a analizar la calidad de los grupos: los llamados gráficos de bandera, etc., que permiten analizar el grado de solapamiento que existe entre ellos.

    Creo que hay también índices que compendian esa información en números…

  8. José Luis 16 febrero, 2012 20:35

    @datanalytics
    ok. Gracias. Le hecho un vistazo al paquete cluster, que ya tenía pensado usar para obtner el clara. Voy a leerme el p*** manual.

Los comentarios están desabilitados.