1. Instalamos los paquetes necesarios para este laboratorio. Los nuevos son factorextra y dbscan

  2. Cargamos los paquetes necesarios y las base de datos

library(data.table)
library(factoextra)
library(dbscan)
library(ggplot2)
  1. Cargamos los datos de clientes disponibles en webcursos Mall_Costumers.csv
clientes<-fread("/Users/magdalena/Downloads/Mall_Customers.csv")
  1. Realizamos un inspección de la base de datos
head(clientes)
##    CustomerID  Genre Age Annual Income (k$) Spending Score (1-100)
## 1:          1   Male  19                 15                     39
## 2:          2   Male  21                 15                     81
## 3:          3 Female  20                 16                      6
## 4:          4 Female  23                 16                     77
## 5:          5 Female  31                 17                     40
## 6:          6 Female  22                 17                     76
summary(clientes)
##    CustomerID        Genre                Age        Annual Income (k$)
##  Min.   :  1.00   Length:200         Min.   :18.00   Min.   : 15.00    
##  1st Qu.: 50.75   Class :character   1st Qu.:28.75   1st Qu.: 41.50    
##  Median :100.50   Mode  :character   Median :36.00   Median : 61.50    
##  Mean   :100.50                      Mean   :38.85   Mean   : 60.56    
##  3rd Qu.:150.25                      3rd Qu.:49.00   3rd Qu.: 78.00    
##  Max.   :200.00                      Max.   :70.00   Max.   :137.00    
##  Spending Score (1-100)
##  Min.   : 1.00         
##  1st Qu.:34.75         
##  Median :50.00         
##  Mean   :50.20         
##  3rd Qu.:73.00         
##  Max.   :99.00
names(clientes)
## [1] "CustomerID"             "Genre"                  "Age"                   
## [4] "Annual Income (k$)"     "Spending Score (1-100)"
  1. Cambiamos los nombres de las variables para no tener problemas con el espaciado ni con carácteres no ASCII
names(clientes)<-c("ID","gender","age","income","SpSc")
  1. Necesitamos crear una variable dummy, ya que las funciones de cluster no aceptan variables factor ni character. Necesitamos variables numéricas o enteras.
clientes[gender=="Male",male:=1]
clientes[gender!="Male",male:=0]

K-MEANS

  1. Pensar, ¿Por qué variables tiene sentido segmentar?, crear una base de datos más pequeña con esas variables
data_cl<-clientes[,.(age,income)]
  1. Realicemos una inspección visual a través de un gráfico
ggplot(data = data_cl,aes(x=age,y=income))+
  geom_point()

  1. Utilicemos la función kmeans para obtener nuestros cluster
k1<-kmeans(x=data_cl,centers=5 ,nstart=25)

fviz_cluster(k1,data=data_cl,geom = "point")

  1. Agreguemos la subdivisión de los cluster a la base de datos
clientes$clkme<-k1$cluster

DBSCAN

  1. ¿Cómo se cuántos vecinos tiene cada observación cerca de esta? Para encontrar la distancia del radio eps “óptima”:
kNNdistplot(x=data_cl,k=3)

En este gráfico, debemos mirar en qué distancia comienza el incremento más acentuado para definir el radio. En este caso, podemos ver que para la distancia 5 comienza a crecer exponencialmente (para 3 vecinos). Consdierar que esto va a depender de la cantidad de vecinos que fijemos.

  1. No se nota un comportamiento pronunciado, pero si se muestra un incremento sustancial de la distancia desde la obs 140, por tanto eps=5
k2<-dbscan(x=data_cl,eps = 5,minPts = 3)

fviz_cluster(k2,data=data_cl,geom = "point")

  1. Agreguemos la subdivisión de los cluster a la base de datos
clientes$cldbscan<-k2$cluster