← 15 · ¿Se pueden segmentar los clientes? H8 · H13
Sin escalar, el importe en euros domina a las otras dos variables
¿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.
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
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 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.
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.