← 15 · ¿Se pueden segmentar los clientes? H8 · H13

Sin escalar, el importe en euros domina a las otras dos variables

La pregunta de esta página

¿Por qué hay que tipificar antes de agrupar y con qué escalador?

1 El problema

Las tres variables RFM se miden en unidades muy distintas. La recencia va en días, la frecuencia en compras y el valor en euros.

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 qué hace la escala con un agrupamiento.

Sus recorridos tampoco se parecen. La recencia abarca 2.700 días, la frecuencia 6 compras y el valor 39.655 €. El de euros es 6.609 veces más largo que el de compras.

2 Por qué engaña

k-means no tiene en cuenta las unidades: suma diferencias al cuadrado. Un punto que gastó mil euros más queda, en esa cuenta, muy lejos. Uno que compró una vez más queda casi en el mismo sitio.

Por eso el algoritmo acaba agrupando por euros y las otras dos variables apenas cuentan. El código funciona y devuelve sus grupos, pero no se ve que dos de las tres variables no han influido.

3 El principio

Todo algoritmo que mida distancias necesita variables comparables
Vale para k-means, para los vecinos más cercanos y para cualquier cosa que calcule una distancia. No vale para los árboles, que miran cada variable por separado y no les afecta la escala.

4 La solución

Tipificar: restar la media y dividir por la desviación, de forma que las tres queden en la misma escala. Es una línea de código y cambia todo el resultado.

Cuando unos pocos valores son mucho más grandes que el resto, lo que se llama cola larga, hay una segunda opción, el escalador robusto, que usa la mediana y el rango intercuartílico en lugar de la media y la desviación. Como no le afectan los extremos, no deja al resto de valores amontonados.

5 Qué pasa con estos datos

Los mismos correos, el mismo k, el mismo generador. Lo único que cambia es la tipificación.

Sin escalar
8.030 · 3.472 · 932 · 519
un grupo se lleva 62 % del total
Tipificado
4.313 · 3.754 · 3.703 · 1.183
el mayor se queda en 33 %

Sin escalar sale un grupo gigante con 8.030 correos y tres grupos pequeños, el patrón típico de agrupar por una sola variable. Tipificando, los cuatro grupos quedan repartidos.

Cuál de los dos escaladores usar

El valor acumulado tiene asimetría 2,37, así que la pregunta es pertinente. Con el estándar, el 88,6 % de los correos cae dentro de más menos uno y el mayor llega a 7,9. Con el robusto, dentro queda el 81,2 % y el mayor sube hasta 9,8.

Los dos cambian el peso, no la forma
Los dos restan un centro y dividen por una escala, así que dentro del importe no cambian ni el orden ni las distancias relativas. Lo que cambia es el tamaño que toma el importe frente a la recencia y la frecuencia: con el robusto, los que más gastan quedan más lejos y pesan más al agrupar. Aquí no se comprobó cuál de los dos agrupa mejor, y las páginas de este bloque usan el estándar.

6 Para qué sirve

Es una comprobación rápida antes de cualquier agrupamiento: mirar los rangos de las variables que entran y ver si alguna domina a las demás.

Cuando un k-means devuelve un grupo enorme y varios diminutos, lo primero que hay que descartar es la escala. El número de grupos se mira después.

El detalle técnico

k=4 con 10 arranques y semilla 42 en las dos ramas. Los centros de la rama tipificada se devuelven a unidades originales con la transformación inversa, para que se puedan leer. El escalador robusto usa mediana y rango intercuartílico.

Ver las dos llamadas
# La misma llamada, cambiando solo si las variables van tipificadas
KMeans(n_clusters=4, random_state=42).fit(rfm[["R", "F", "M"]])           # crudas
KMeans(n_clusters=4, random_state=42).fit(StandardScaler().fit_transform(rfm))  # tipificadas

Fuente: segmentacion.json, campos h8_escalado y h13_escalado_robusto.