← 15 · ¿Se pueden segmentar los clientes? H2 · H3

La inercia baja siempre, así que por sí sola no dice cuántos grupos elegir

La pregunta de esta página

¿Cuántos grupos pedirle a k-means, si ese número es justo lo que no se sabe?

1 El problema

Con una tabla descrita por recencia, frecuencia y valor, agrupar es una línea de código. El problema es el número: k-means exige indicar cuántos grupos se quieren antes de empezar. Ese número es justo lo que no se sabe.

La respuesta habitual es mirar la inercia, que mide lo compactos que quedan los grupos, y buscar el codo de la curva.

Estos datos sirven para ver el método
La tabla no tiene clave de cliente, como explica la página del RFM. Esta página agrupa por correo, que lo comparten personas distintas, así que cada punto es un correo y no un cliente. Lo que la página enseña es cómo se elige k.

2 Por qué engaña

La inercia siempre baja al subir k. Con tantos grupos como puntos vale cero, porque cada uno es su propio grupo y es totalmente compacto. Por eso la curva no tiene mínimo y el codo se elige a simple vista.

Aquí cae un 62,8 % de k=2 a k=6 sin ningún escalón claro. Dos personas que miran la misma curva pueden elegir números distintos.

3 El principio

La silueta
Por cada punto compara lo cerca que está de su grupo con lo cerca que está del grupo vecino. Va de -1 a 1. Cerca de 1, el punto está bien asignado. Cerca de 0, está en la frontera y podría pertenecer a cualquiera de los dos grupos.

A diferencia de la inercia, la silueta puede empeorar al subir k. Por eso sí sirve para elegir.

4 La solución

Calcular las dos para cada k y mirarlas juntas. La inercia indica lo compactos que son los grupos y la silueta indica si son grupos separados o trozos de una nube continua.

5 Qué pasa con estos datos

k Inercia   Silueta Tamaños
2 25.176 0,3874 8.687 · 4.266
3 17.655 0,3721 5.602 · 4.873 · 2.478
4 13.141 0,3966 4.313 · 3.754 · 3.703 · 1.183
5 10.767 0,4043 4.178 · 3.728 · 2.670 · 1.293 · 1.084
6 9.375 0,4136 4.139 · 3.724 · 2.654 · 1.210 · 902 · 324

La mejor silueta sale en k = 6, con 0,4136. Lo importante es ese valor: ninguna de las cinco llega a 0,5.

Lo que dice una silueta de 0,41
Por convención, de 0,7 arriba los grupos están bien separados y por debajo de 0,5 la estructura es débil. Aquí no aparecen grupos bien separados. Además, la frecuencia solo toma unos pocos valores enteros, y eso crea escalones que el algoritmo puede recortar sin que sean grupos de clientes.

Que la silueta mejore al subir k también es una señal de alerta. Cuando el mejor k es el mayor de los probados, puede que el algoritmo esté recortando trozos de la nube en lugar de encontrar grupos.

6 Para qué sirve

Para no presentar como hallazgo un corte arbitrario. Con una cartera real, los grupos se pueden usar igualmente, porque cortarla en tramos de valor es útil aunque los tramos no sean naturales. Lo que no se puede afirmar es que esos grupos estaban en los datos.

La página de mezclas gaussianas mira lo mismo por otro camino, con probabilidades en lugar de fronteras.

El detalle técnico

k-means con 10 arranques y semilla 42 sobre las tres variables RFM calculadas por correo y tipificadas. Tipificar es obligatorio, por lo que pasa si no se hace. La silueta se calcula sobre una muestra de 4.000 correos de los 12.953, porque exige todas las distancias contra todas.

Ver las dos medidas
for k in [2, 3, 4, 5, 6]:
    km = KMeans(n_clusters=k, n_init=10, random_state=42).fit(X)
    inercia = km.inertia_                       # siempre baja al subir k
    sil = silhouette_score(X[muestra], km.labels_[muestra])   # esta si opina

Fuente: segmentacion.json, campo h2_h3_kmeans.