sábado, 20 de septiembre de 2014

Determinar numero de Cluster con SSE

Si se quiere segmentar clientes, es necesario identificar previamente cuál es la cantidad ideal de grupos, teniendo algo como:



















Una técnica es usar el algoritmo de KMeans de forma repetida (iterada), aumentando la cantidad de grupos (cluster) en cada ejecución y obteniendo el error intracluster en cada iteración, donde este error calcula la distancia entre cada observación y el cluster al cual pertenece. (Para detalle ver referencia)

Para detalles de KMeans, ver nota publicada AQUI

Con esta técnica (conocida como SSE ó Sum of Squares Error) se puede obtener la siguiente gráfica que permite identificar la cantidad ideal de cluster o grupos:




El set de datos de clientes, puede descargarse aquí


Para lograr este gráfico en R, puede usarse el siguiente script:

#------------------------------------------------------------------------------------
# Fija semilla inicial de numeros pseudoaleatorios
# para obtener misma serie aleatoria en ejecuciones.
set.seed(123)
 
#------------------------------------------------------------------------------------
#Carga el archivo de datos de Clientes
Clientes <- read.csv("C:/Archivos/Clientes.csv")
 
#------------------------------------------------------------------------------------
# Crea vector "Errores", sin datos
# Crea variable "K_Max" con la cant. maxima de k a analizar
Errores <-NULL
K_Max   <-9
 
#------------------------------------------------------------------------------------
# Ejecuta kmeans con diferentes cluster, desde 1 hasta 9
# Luego guarda el error de cada ejecucion en el vector "Errores"
for (i in 1:K_Max)
  {
  Errores[i] <- sum(kmeans(Clientes[-1], centers=i)$withinss)
  }
 
#------------------------------------------------------------------------------------
# Grafica el vector "Errores"
plot(1:K_Max, Errores, type="b", 
              xlab="Cantidad de Cluster", 
              ylab="Suma de error")




Referencia:
http://stackoverflow.com/questions/15376075/cluster-analysis-in-r-determine-the-optimal-number-of-clusters



1 comentario:

  1. Excelente publicación, como utilizo el algoritmo para segmentar clientes de datos financieros.

    ResponderEliminar