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
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?
ResponderEliminarBuenas noches, respecto a la data a utilizar, como acotarlo? es decir, si tengo disponibilidad de datos de varios años, y una cantidad de clientes en el orden de 10 millones, se trabaja con todos los clientes y por ejemplo 1 año de comportamiento? o cual sería el criterio para acotarlo?, gracias
ResponderEliminarHola EdsonQB. El escenario ideal es hacer cluster con todos los datos. Si esto no es posible por problemas de volumen, podrías entrenar con un conjunto de datos representativos y luego predecir el resto de los clientes.
ResponderEliminarBuenos días,
ResponderEliminarEstoy ejecutando mi dataset para clasificar mis clientes con kmeans y qlikview, pero quisiera ejecutar con otro algoritmo para validar que la clasificación obtenida es buena y cual es la mejor opción. ¿Qué otro tipo de algoritmo me recomiendas y como lo llamo desde qlikview?
Hola Beatriz
EliminarPara integrar R y qlikview no conozco una forma nativa de hacerlo. Hay varias tecncias usando script de qlik, aqui te dejo una opcion:
http://qlikviewapuntes.blogspot.com/2015/03/qlikview-r-para-kmeans.html
Para evaluar la eficiencia del cluster, tambien existen varias tecnicas, aqui te dejo algunas:
http://apuntes-r.blogspot.com/2014/09/determinar-numero-de-cluster.html
http://www.sthda.com/english/wiki/wiki.php?id_contents=7952
espero te sirva
suerte!
Muchas gracias, estoy aprendiendo mucho y viendo diferentes opciones. Explicas muy bien, se agradece mucho.
EliminarEn R también puedes usar otro paquete estadístico como factoextra, el cual se baja y se aplica como librería con el mismo nombre, una vez lo das de alta, utilizas la función nbclust para verificar el número óptimo de clústeres.
EliminarPor ejemplo:
Codo de Jambú
fviz_nbclust(your_data_normalized, kmeans, method = "wss", k.max = 30)
Coeficiente Silhouette
fviz_nbclust(your_data_normalized, kmeans, method = "silhouette", k.max = 30)
Análisis de brecha estadística de clústeres o gap statistic
fviz_nbclust(your_data_normalized, kmeans, method = "gap_stat", k.max = 30)