domingo, 16 de noviembre de 2014

Asignar un Cluster a Datos Nuevos

Si se tiene una segmentacion realizada con kmean que divide a los clientes en tres gurpos, y se quiere identificar a qué grupo pertenecen los clientes nuevos, sin ejecutar nuevamente el algoritmo (es decir, sin reentrenar) puede usarse el package flexclust que permite identificar a qué grupo o cluster son mas parecidos los cliente nuevo.

El resultado conceptual seria el siguiente:


















#-----------------------------------------------------------------------
#Carga package y datos necesarios
suppressWarnings(library(C50));
library(flexclust);
data(churn);
 
#-----------------------------------------------------------------------
# fija secuencia aleatoria y carga datos historicos y nuevos
set.seed(6)
Clientes_Hisoricos <- churnTrain[,c(9,11,12)]
Clientes_Nuevos    <- churnTest[1:5,c(9,11,12)]
 
#----------------------------------------------------------------------- 
# Crea Modelo Kmeans
Modelo <-kcca(Clientes_Hisoricos,
              k         = 3,
              family    = kccaFamily("kmeans"),
              save.data = TRUE)
 
 
#----------------------------------------------------------------------- 
# Asigna el campo Grupo a la tabla de clientes Historicos y Nuevos
Clientes_Hisoricos$Grupo    <- clusters(Modelo)
Clientes_Nuevos$Grupo       <- clusters(Modelo,Clientes_Nuevos)
 
 
#----------------------------------------------------------------------- 
# Crea componentes principales para graficar
ACP_Historico <-prcomp(Clientes_Hisoricos)
ACP_Nuevos    <-prcomp(Clientes_Nuevos)
 
 
#----------------------------------------------------------------------- 
#Grafica kmeans de clientes Historico
plot(ACP_Historico$x[,1:2],col=Clientes_Hisoricos$Grupo )
 
 
#----------------------------------------------------------------------- 
# Grafica clientes nuevos
points(ACP_Nuevos$x[,1],ACP_Nuevos$x[,2],
       col=Clientes_Nuevos$Grupo,
       pch = 19,
       cex=3.1)


Referencia:

1 comentario:

  1. Hola Enmanuel,

    Muy ilustrativo tu ejemplo, gran trabajo!

    Un apunte que no doy a que se deberá, ejecutando el código en R, el plot resultante difiere al que muestras en la imagen. de manera que ACP_Nuevos no corresponden a los de la imagen y los clasifica mal, una forma artesanal que me he dado cuenta que lo corrige es multiplicando por -1 las compnentes que obtiene de los clientes nuevos ya que los devuelve por alguna razón invertidos...

    si tienes alguna pista de porqué entrega los puntos de clientes nuevos del plot invertido estaría bien que lo comentases, ya que la finalidad es clasificar los nuevos clientes sin ejecutar el codigo otra vez y de este modo no lo consigue..

    Gracias

    ResponderEliminar