viernes, 2 de septiembre de 2011

Clustering...segmentar?

El proceso de segmentar implica varias cosas, una de ellas (la principal creo yo) es saber que queremos segmentar.
Imaginar cual sería el resultado final de la segmentación sería una práctica, lamentablemente no es común.
Dejando de lado a la imaginación, quisiera mencionar dentro de las técnicas de Data Mining particularmente a las técnicas de clustering, las cuales nos pueden dar una mano al momento de segmentar un set de datos.
Quiero abarcar este tema, pero sepan que la segmentación no depende solo de estas técnicas, depende del tipo de segmentación que queramos hacer (tema aparte).
Dentro de las técnicas de clustering los algoritmos más usados podrían ser:
 - K-means
 - Kohonen
 - Redes Bayesianas
 - Y otros más.
He llegado a usar las 2 primeras, la tercera opción aún no ha sido explorada personalmente, leí un poco a cerca de segmentación con estos algoritmos, más de ahí no pasé.
K-means es un algoritmo que busca similitudes y diferencias entre los individuos pertenecientes a un dataset (con individuos no solo me refiero a personas), la búsqueda la realiza de acuerdo a la distancia que hay entre uno y otro (generalmente se usa la distancia euclidiana). El objetivo de este algoritmo es encontrar los individuos mas parecidos entre si (de cierto modo los podemos llamar cercanos, pero no se confundan con el algoritmo del vecino más cercano, que no viene al caso) y a la vez separarlos de aquellos diferentes a los mismos.
Como como como? (aquí se me pita la sonrisa en la cara porque no se como ponerlo en palabras sencillas)
Es decir el algoritmo a agrupa individuos que se parecen mucho y los separa de los otros grupos que a su vez se parecen mucho entre si pero son distintos de los otros grupos.
Graficamente....
KOHONEN (SOM) también busca el mismo objetivo, pero toma un camino diferente, su técnica es la de redes neuronales no supervisadas (no voy a tocar este tema hasta tenerlo más claro).
En si podríamos llamar al clustering como el arte de saber donde poner que...
Que recomendaciones pueden surgir a partir de este tema:
  • Es conveniente usar variables continuas, las variables discretas o nominales no son muy útiles al momento de hacer cálculos, además estos algoritmos cuando están configurados para trabajar con estas variables suelen crear n-1 variables dummies cuyo valor es 0 o 1, valor que permite calcular una distancia mentirosa que podría afectar al modelo (igualmente todo es relativo siempre hay una ocasión donde recomendar lo in-recomendable).
  • Si tenemos de antemano una clasificación manual, esta nos puede servir como parámetro inicial, resulta más fácil encontrar similitudes y diferencias entre personas del mismo rango de edad...por ejemplo.
  • Usar variables de comportamiento (transaccionales) para realizar la clasificación y variables demográficas para explicar el resultado.
  • Verificar que el dataset no tenga demasiados valores perdidos, eso introduce un toque de irrealidad al modelo, en su defecto podemos reemplazar los valores perdidos con algo significativo, pero cuidado con esto no siempre es una buena idea, muchas veces será preferible descartar las variables.
Imaginemos que en nuestro dataset tenemos sets de variables correspondientes a 2 productos para cada individuo, el 95% de los individuos tiene el producto 1 (por ende valores en el set de variables correspondiente a este) y solamente el 11% tiene el producto 2 (es decir no tendríamos valores en el 89% de los individuos en el set de variables del producto 2). Algo así como el gráfico que viene a continuación:
 Valores perdidos
Los espacios en blanco son variables sin valores, como en cualquier técnica de Data Mining, si una variable tiene un porcentaje de valores perdidos superior a un rango definido se la elimina, pero en este caso sería un set de variables (podrían ser cientos), quizás queremos algo representativo de estas variables.