Segmentar sin parametrizar

¿Cómo busco segmentos en mi data, si mis variables no son sólo numéricas?

Por lo general, los segmentos creados por la mayoría de los Data Scientist provienen de data continua, tales como lo es el peso, la estatura, la edad o el ingreso.

Puestas en dimensiones, por cercanía/lejanía entre los puntos se eligen los segmentos, tal como lo hace el algoritmo K-Means. Sin embargo, en el mundo real, cuando intentamos crear segmentos a partir de nuestra data, esta por lo general no está limpia ni en el formato que queremos. También puede ser el caso de que la naturaleza de nuestra data no sea la adecuada.

Los datos pueden ser continuos, categóricos, o binarios. La data categórica, como lo dice su nombre, presenta distintas categorías dentro de una dimensión, por ejemplo: la nacionalidad. Dentro de la dimensión nacionalidad, podemos ser chilenos, alemanes o nepalíes. Algunos Data Scientists convierten esta data categórica a numérica parametrizándola con la distancia, idioma, o algún otro método alternativo que pueden o no tener sentido según las conclusiones que queramos obtener. Sin embargo, hay veces que simplemente no tiene ningún sentido convertir data categórica a continua ¿Cuál es la distancia gráfica entre oso y búfalo? ¿Su peso? ¿Su altura? ¿Sus coordenadas? ¿Cómo lo parametrizo?

Por otro lado, tenemos la data binaria. Esta es representada por números, pero exclusivamente 0 o 1. Se ocupa para ver si algo cumple o no con una característica, variable o método. Por ejemplo, ¿Es o no nepalí? 0 si no lo es, 1 si lo es. Esta forma de guardar la data, conocida como modo dummie, no necesariamente es la más eficiente para su almacenamiento. Para el ejemplo anterior, en vez de tener una columna llamada Nacionalidad, tendríamos una columna para alemán, otra para chileno, y otra para nepalí, con 0 o 1 dependiendo si cumple o no, teniendo que, lógicamente, sumar 1 por cada fila entre todas las columnas.

Entonces, ¿Cómo busco segmentos en mi data, si mis variables no son numéricas, y no tiene sentido parametrizarlas?

K-Modes es un algoritmo que utiliza el mismo procedimiento que el K-Means, reemplazando la distancia euclideana (en 2, 3 o 10 dimensiones) por la distancia de Hamming. Esta distancia mide la diferencia entre dos filas contando la cantidad de veces que dos variables (columnas) difieren entre sí.

En este caso, la distancia de Hamming entre Juan y Pamela es de 2, debido a que no tienen la misma categoría en las variables R3 y R4. El algoritmo K-Modes itera para cierto número de segmentos en los que cada variable que describe cada uno de estos segmentos, se define por la variable que más se repite en las filas que conformen tal segmento. Hoy no entraremos en el cómo itera, pero pueden encontrar información aquí. Entendiendo claramente cómo funciona el K-Modes, podemos darnos cuenta de que este funciona bien para data categórica o incluso binaria (dos posibles respuestas por cada variable binaria).

Una vez implementado ¿Cuántos segmentos tendrá mi data? Para esto, se proponen dos caminos, ambos utilizados frecuentemente en K-Means, pero poco desarrollados para K-Modes. Estos son el Elbow Method que minimiza la diferencia entre las filas que pertenecen al mismo cluster, y el Silhouette Method, que maximiza la diferencia entre los distintos clusters. Desarrollando ambos métodos, el Data Scientist podrá tomar decisiones tomando en cuenta este trade-off existente entre estos dos métodos, la semejanza entre los elementos pertenecientes a un segmento, y la diferencia entre segmentos. Ahora, ¿Cómo se ve esto en la práctica?

Elbow Method

Lo primero sería exportar un DataFrame con una columna adicional que muestra a qué segmento pertenece cada fila. Luego se calcula el costo. Este se calcula tomando todas las filas pertenecientes a un segmento, y se ve en cuántas variables una fila difiere con respecto a la descripción del segmento (en K-Means, el centroide de cada segmento) al que pertenece. Para la tabla anterior, si Pamela es la descripción del segmento, y Juan pertenece a este, el costo es dos. Luego, pasa a la siguiente persona que pertenece al segmento que su “centroide” se describe por las variables de Pamela.

Una vez que se tiene calculado el costo total para cada segmento, se suman los costos de todos los segmentos, para cierto número de clusters. Por ejemplo, para 3 clusters, toma el costo del segmento 1, luego del segmento 2 y finalmente del segmento 3 y suma estos. Luego, se hace lo mismo para 4 clusters, 5 clusters, y así sucesivamente. De este modo, puedo comparar los costos para cada número de segmentos.

Así vemos una tendencia en la disminución de costos a medida que aumenta el número de segmentos. Lo cual es lógico, debido a que, para el mismo número de segmentos y filas, nuestro costo sería cero (cada fila es un segmento, por lo que no hay diferencia entre la fila y el segmento).

Silhouette Method

Primero se debe definir el segmento más cercano. Para esto se calcula la distancia de Hamming entre el segmento en que nos estamos “parando” y cada uno de los demás, buscando cuál es la mínima. Por ejemplo, para el segmento 1 el segmento 4 es el más similar, mientras que para el segmento 4 es el segmento 8. Una vez definido cuál es el segmento más cercano a cada uno, se comparan los datos al interior de estos.

La forma de compararlos consiste en buscar la distancia de Hamming entre las filas pertenecientes a un cluster, tal como lo es Juan y la descripción de este dada por Pamela, que es el segmento 1. Normalizamos esta distancia por el número de variables existentes, y obtenemos un promedio A. Luego hacemos lo mismo, pero con respecto al cluster más cercano, que sería el segmento 4, representado por Domingo, normalizamos y promediamos obteniendo B. Este proceso lo realizamos para todos los clusters.

Luego realizamos la siguiente operación:

Claramente, B>A dado que B representa la distancia de los datos al cluster más cercano, mientras que A representa la distancia al mismo cluster.

Al acercarse a 1, significa que este cluster es muy distinto a su cluster más cercano (B>>A). Por otro lado, al acercarse a 0, significa que tenemos clusters muy parecidos (B==A). Podemos promediar los ‘C’ para todos los clusters, y luego iterar según el número de segmentos que queremos. A continuación se muestra el C promediado desde 2 a 14 clusters.

Con estos dos gráficos presentados, podemos comenzar a tomar decisiones informadas con respecto al número de clusters óptimo que necesitamos, minimizando la diferencia al interior de estos, y maximizando la diferencia entre ellos. Tomando en cuenta esto, y viendo que la descripción de los clusters haga sentido, podemos sacarle mayor provecho a nuestra data categórica/binaria.

Consejos útiles
  • Agrupar en pocas categorías cada variable. Por ejemplo, si alguna incluye Walmart, Amazon, Facebook, Twitter, Instagram, Microsoft, Google, Adobe. Agruparlas como red social, e-commerce y saas (o como haga más sentido para su segmentación).
  • Disminuir al máximo la cantidad de variables, eliminando las que otorgan más costo a la segmentación. Se puede iterar con Elbow Method y Silhouette Method probando distintas variables y evaluando la performance.
  • Implementar procedimientos intermedios que calculen costos por cluster, de manera de conocer qué cluster es más sólido que los otros, permitiendo así estrategias comerciales bien definidas.
  • Cualquier medida para disminuir la combinatoria entre las variables.
Cierre

Gracias a K-Modes podemos segmentar a nuestros clientes, asegurándonos con Elbow Method que los elementos pertenecientes a el segmento sean lo más parecidos posibles entre sí, y comprobando que entre cada agrupación de segmentos existan la mayor cantidad de diferencias gracias a el Silhouette Method. Evaluar este trade-off no siempre es fácil, pero con un código eficiente sí se puede probar e iterar en el resultado para llegar a un óptimo número de segmentos en la data.

Con implementaciones como esta se logra una segmentación limpia y óptima, que permite tener una alta interpretabilidad del resultado, lo cual equivale a iniciativas claras y potentes para tus clientes, productos y/o proveedores.