viernes, 19 de septiembre de 2014

Segmentar Clientes con KMeans

Si se tienen datos de clientes, y se quiere agrupar los individuos más parecidos según sus atributos o variables, teniendo algo como:

















Para esto puede usarse el algoritmo KMEANS, el cual agrupa usando variables numéricas.

KMEANS sigue estos pasos:
1. Se eligen puntos en el espacio ó Centroides para cada K-Grupo (para este ejemplo K=3)
2. Se asigna cada individuo al Centroide mas cercano usando la "Distancia Euclidiana".
3. Se redefine cada Centroide con el valor medio de los individuos que ahora lo componen.
4. Con los nuevos Centroides, se vuelve a reasignar cada individuo al Centroide mas cercano.
5. Se repite el paso 3 y 4 hasta que ninguno de los individuos cambie de grupo (convergencia).

NOTAS:
• Las variables usadas para segmentar NO deben estar significativamente correlacionadas.
• Las variables deben tener misma escala para una mejor segmentacion. Ver nota "Normalizar de cero a uno un data frame" publicada AQUI
• Para saber la cantidad ideal de K ó Grupos, ver nota publicada AQUI
• Para graficar k-means con mas de 2 dimensiones, ver nota publicada AQUI



El resultado es un archivo cvs de la tabla Clientes que contiene el grupo asignado, quedando así:



















#---------------------------------------------------------------------------------
# Crea data.frame con datos de ejemplo
Clientes <- data.frame(
  Nombre=c("Juan", "Pedro", "Maria", "Isabel", "Diego", "Luis", 
           "Lucia", "Francisca", "Alejandro", "Fernando"),
  Edad=c(19, 51, 33, 30, 23, 26, 45, 43, 38, 60),
  MontoConsumo= c(971, 271, 614, 521, 585, 898, 310, 848, 979, 189)
  )
 
 
#---------------------------------------------------------------------------------
# Crea 3 Cluster o grupos usando algoritmo KMEANS
#Luego asigna grupo a cada cliente en tabla Cliente
ModeloKMEANS <- kmeans(Clientes[-1],3)
Clientes$Grupo <- ModeloKMEANS$cluster
 
#---------------------------------------------------------------------------------
#Grafica los puntos de dispersión y luego le asigna etiquetas
plot(Clientes$Edad,Clientes$MontoConsumo,
     col=Clientes$Grupo,cex.axis=.7,cex.lab=.7)
 
text(Clientes$Edad,Clientes$MontoConsumo,
     labels=Clientes$Nombre,pos=1,col=Clientes$Grupo,cex=.7)
 
#---------------------------------------------------------------------------------
# Guarda csv de Clientes con segmento de cada cliente
write.csv(Clientes,"C:/ArchivosKMEANS/Clientes_Grupos.csv")



Referencia:
http://people.revoledu.com/kardi/tutorial/kMean/EjemploNumerico.htm


1 comentario:

  1. y una vez que tengo a cada cliente asociado su cluster, cómo puedo obtener las reglas que utiliza el k-means para realizar esta clasificación? con un árbol que explique mi variable cluster a través del resto de vbles?

    ResponderEliminar