Guía básica de clusters

Segmentación o clusters es un conjunto de técnicas cuyo propósito es formar grupos a partir de un conjunto de elementos.

Contexto

Estos datos son el resultado de un análisis químico de vinos cultivados en la misma región de italia pero derivados de tres cultivares diferentes.

El análisis determinó las cantidad de 13 componentes que se encuentran en cada uno de los tres tipos de vinos.

Team Members - David Dominguez (5) - David Heredia (4) - Valeria Cantu (6) - Arturo Silva (3)

Paso 1 Librerías

library(ggplot2)
library(data.table)
library(cluster)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(readr)

Paso 2 Obtener los datos

df <- read_csv("/Users/david3/Desktop/wine.csv")

Paso 3 Entender los datos

summary(df)
##     Alcohol        Malic_Acid         Ash         Ash_Alcanity  
##  Min.   :11.03   Min.   :0.740   Min.   :1.360   Min.   :10.60  
##  1st Qu.:12.36   1st Qu.:1.603   1st Qu.:2.210   1st Qu.:17.20  
##  Median :13.05   Median :1.865   Median :2.360   Median :19.50  
##  Mean   :13.00   Mean   :2.336   Mean   :2.367   Mean   :19.49  
##  3rd Qu.:13.68   3rd Qu.:3.083   3rd Qu.:2.558   3rd Qu.:21.50  
##  Max.   :14.83   Max.   :5.800   Max.   :3.230   Max.   :30.00  
##    Magnesium      Total_Phenols     Flavanoids    Nonflavanoid_Phenols
##  Min.   : 70.00   Min.   :0.980   Min.   :0.340   Min.   :0.1300      
##  1st Qu.: 88.00   1st Qu.:1.742   1st Qu.:1.205   1st Qu.:0.2700      
##  Median : 98.00   Median :2.355   Median :2.135   Median :0.3400      
##  Mean   : 99.74   Mean   :2.295   Mean   :2.029   Mean   :0.3619      
##  3rd Qu.:107.00   3rd Qu.:2.800   3rd Qu.:2.875   3rd Qu.:0.4375      
##  Max.   :162.00   Max.   :3.880   Max.   :5.080   Max.   :0.6600      
##  Proanthocyanins Color_Intensity       Hue             OD280      
##  Min.   :0.410   Min.   : 1.280   Min.   :0.4800   Min.   :1.270  
##  1st Qu.:1.250   1st Qu.: 3.220   1st Qu.:0.7825   1st Qu.:1.938  
##  Median :1.555   Median : 4.690   Median :0.9650   Median :2.780  
##  Mean   :1.591   Mean   : 5.058   Mean   :0.9574   Mean   :2.612  
##  3rd Qu.:1.950   3rd Qu.: 6.200   3rd Qu.:1.1200   3rd Qu.:3.170  
##  Max.   :3.580   Max.   :13.000   Max.   :1.7100   Max.   :4.000  
##     Proline      
##  Min.   : 278.0  
##  1st Qu.: 500.5  
##  Median : 673.5  
##  Mean   : 746.9  
##  3rd Qu.: 985.0  
##  Max.   :1680.0

Paso 4 Escalar los datos

df <- as.data.frame(scale(df))

Paso 5 Número de Clusters

groups <- 4

Paso 6 Generar Clusters

segments <- kmeans(df,groups)
segments
## K-means clustering with 4 clusters of sizes 56, 33, 62, 27
## 
## Cluster means:
##      Alcohol Malic_Acid         Ash Ash_Alcanity   Magnesium Total_Phenols
## 1 -0.9492397 -0.4292747 -0.56530588    0.1806435 -0.52577902    0.05374704
## 2 -0.2579441  0.4877283 -0.03148626    0.2229184 -0.22590059   -1.05498565
## 3  0.8328826 -0.3029551  0.36368014   -0.6084749  0.57596208    0.88274724
## 4  0.3715132  0.9899098  0.37585211    0.7501148  0.04402577   -0.84909765
##   Flavanoids Nonflavanoid_Phenols Proanthocyanins Color_Intensity        Hue
## 1  0.1079965           -0.2487766       0.1924886      -0.9057880  0.5158459
## 2 -1.0574462            0.9420155      -1.0657471      -0.2021735 -0.5740303
## 3  0.9750690           -0.5605085       0.5786543       0.1705823  0.4726504
## 4 -1.1706057            0.6517224      -0.4254175       1.7340649 -1.4536552
##        OD280   Proline
## 1  0.3816857 -0.791050
## 2 -0.9959852 -0.498990
## 3  0.7770551  1.122020
## 4 -1.3586780 -0.325918
## 
## Clustering vector:
##   [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
##  [38] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 2 2 1 1 1 1 1 1 2 1 2 1 1 3
##  [75] 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 3 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1
## [112] 1 2 1 1 1 1 1 2 1 1 3 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2 4
## [149] 4 4 4 4 4 4 2 4 4 4 4 4 4 2 2 2 4 4 4 4 4 4 2 4 4 4 4 4 4 4
## 
## Within cluster sum of squares by cluster:
## [1] 460.9289 206.2348 385.6983 142.6987
##  (between_SS / total_SS =  48.0 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 7 Asignación de datos a los Clusters

assignation <- cbind(df, cluster = segments$cluster)
#assignation

Paso 8 Grafica de Clusters

fviz_cluster(segments, data = df)

Paso 9 Optimización de clusters

set.seed(123)
optimization = clusGap(df, FUN=kmeans, nstart=1, K.max = 12)
plot(optimization, xlab="Number of k clusters: ")

Paso 10 Ajuste del número de clusters

# ------------ RUN IT BACK WITH OPTIMIZED CLUSTER NUMBER -----------------
# Step 3 Number of Clusters
groups <- 3 #Changed to optimized number of clusters

# Step 4 Generate Clusters
segments <- kmeans(df,groups)
segments
## K-means clustering with 3 clusters of sizes 51, 62, 65
## 
## Cluster means:
##      Alcohol Malic_Acid        Ash Ash_Alcanity   Magnesium Total_Phenols
## 1  0.1644436  0.8690954  0.1863726    0.5228924 -0.07526047   -0.97657548
## 2  0.8328826 -0.3029551  0.3636801   -0.6084749  0.57596208    0.88274724
## 3 -0.9234669 -0.3929331 -0.4931257    0.1701220 -0.49032869   -0.07576891
##    Flavanoids Nonflavanoid_Phenols Proanthocyanins Color_Intensity        Hue
## 1 -1.21182921           0.72402116     -0.77751312       0.9388902 -1.1615122
## 2  0.97506900          -0.56050853      0.57865427       0.1705823  0.4726504
## 3  0.02075402          -0.03343924      0.05810161      -0.8993770  0.4605046
##        OD280    Proline
## 1 -1.2887761 -0.4059428
## 2  0.7770551  1.1220202
## 3  0.2700025 -0.7517257
## 
## Clustering vector:
##   [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##  [38] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 1 3 3 3 3 3 3 3 3 3 3 3 2
##  [75] 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [112] 3 3 3 3 3 3 3 1 3 3 2 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 
## Within cluster sum of squares by cluster:
## [1] 326.3537 385.6983 558.6971
##  (between_SS / total_SS =  44.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
# Step 5 Assign data to Clusters
assignation <- cbind(df, cluster = segments$cluster)
#assignation

# Step 6 Graph Clusters
fviz_cluster(segments, data = df)

Paso 11 Análisis de clusters

analisis <- aggregate(assignation, by=list(assignation$cluster), FUN=mean)
analisis
##   Group.1    Alcohol Malic_Acid        Ash Ash_Alcanity   Magnesium
## 1       1  0.1644436  0.8690954  0.1863726    0.5228924 -0.07526047
## 2       2  0.8328826 -0.3029551  0.3636801   -0.6084749  0.57596208
## 3       3 -0.9234669 -0.3929331 -0.4931257    0.1701220 -0.49032869
##   Total_Phenols  Flavanoids Nonflavanoid_Phenols Proanthocyanins
## 1   -0.97657548 -1.21182921           0.72402116     -0.77751312
## 2    0.88274724  0.97506900          -0.56050853      0.57865427
## 3   -0.07576891  0.02075402          -0.03343924      0.05810161
##   Color_Intensity        Hue      OD280    Proline cluster
## 1       0.9388902 -1.1615122 -1.2887761 -0.4059428       1
## 2       0.1705823  0.4726504  0.7770551  1.1220202       2
## 3      -0.8993770  0.4605046  0.2700025 -0.7517257       3

Observaciones

Los algoritmos de segmentación o agrupamiento son una herramienta valiosa para las empresas que desean categorizar a sus clientes y dirigir campañas de marketing más enfocadas y especializadas.

Además de eso, las técnicas de segmentación de clientes pueden ayudar a las empresas a identificar patrones de comportamiento entre grupos específicos de clientes, lo que les permite adaptar sus estrategias de marketing de manera más efectiva.

La segmentación de clientes también puede ser útil para personalizar la experiencia del cliente, ofreciendo productos o servicios específicos que se ajusten a las necesidades y preferencias de cada segmento identificado.

LS0tCnRpdGxlOiAiQ2x1c3RlcnMiCmF1dGhvcjogIkRhdmlkIEhlcmVkaWEgU8OhbmNoZXoiCmRhdGU6ICIyMDI0LTAyLTE5IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKLS0tCgohW10oL1VzZXJzL2RhdmlkMy9EZXNrdG9wL3Zpbm8uZ2lmKQoKIyBHdcOtYSBiw6FzaWNhIGRlIGNsdXN0ZXJzClNlZ21lbnRhY2nDs24gbyBjbHVzdGVycyBlcyB1biBjb25qdW50byBkZSB0w6ljbmljYXMgY3V5byBwcm9ww7NzaXRvIGVzIGZvcm1hciBncnVwb3MgYSBwYXJ0aXIgZGUgdW4gY29uanVudG8gZGUgZWxlbWVudG9zLgoKIyBDb250ZXh0bwpFc3RvcyBkYXRvcyBzb24gZWwgcmVzdWx0YWRvIGRlIHVuIGFuw6FsaXNpcyBxdcOtbWljbyBkZSB2aW5vcyBjdWx0aXZhZG9zIGVuIGxhIG1pc21hIHJlZ2nDs24gZGUgaXRhbGlhIHBlcm8gZGVyaXZhZG9zIGRlIHRyZXMgY3VsdGl2YXJlcyBkaWZlcmVudGVzLgoKRWwgYW7DoWxpc2lzIGRldGVybWluw7MgbGFzIGNhbnRpZGFkIGRlIDEzIGNvbXBvbmVudGVzIHF1ZSBzZSBlbmN1ZW50cmFuIGVuIGNhZGEgdW5vIGRlIGxvcyB0cmVzIHRpcG9zIGRlIHZpbm9zLgoKKipUZWFtIE1lbWJlcnMqKgotIERhdmlkIERvbWluZ3VleiAoNSkKLSBEYXZpZCBIZXJlZGlhICg0KQotIFZhbGVyaWEgQ2FudHUgKDYpCi0gQXJ0dXJvIFNpbHZhICgzKQoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOm1hZ2VudGEiPiBQYXNvIDEgTGlicmVyw61hczwvc3Bhbj4KYGBge3Igd2FybmluZz1GQUxTRX0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoY2x1c3RlcikKbGlicmFyeShmYWN0b2V4dHJhKQpsaWJyYXJ5KHJlYWRyKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjptYWdlbnRhIj4gUGFzbyAyIE9idGVuZXIgbG9zIGRhdG9zPC9zcGFuPgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpkZiA8LSByZWFkX2NzdigiL1VzZXJzL2RhdmlkMy9EZXNrdG9wL3dpbmUuY3N2IikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6bWFnZW50YTsiPiBQYXNvIDMgRW50ZW5kZXIgbG9zIGRhdG9zPC9zcGFuPgpgYGB7cn0Kc3VtbWFyeShkZikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6bWFnZW50YTsiPiBQYXNvIDQgRXNjYWxhciBsb3MgZGF0b3M8L3NwYW4+CmBgYHtyfQpkZiA8LSBhcy5kYXRhLmZyYW1lKHNjYWxlKGRmKSkKYGBgCgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOm1hZ2VudGE7Ij4gUGFzbyA1IE7Dum1lcm8gZGUgQ2x1c3RlcnM8L3NwYW4+CmBgYHtyfQpncm91cHMgPC0gNApgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjptYWdlbnRhOyI+IFBhc28gNiBHZW5lcmFyIENsdXN0ZXJzPC9zcGFuPgpgYGB7cn0Kc2VnbWVudHMgPC0ga21lYW5zKGRmLGdyb3VwcykKc2VnbWVudHMKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6bWFnZW50YTsiPiBQYXNvIDcgQXNpZ25hY2nDs24gZGUgZGF0b3MgYSBsb3MgQ2x1c3RlcnM8L3NwYW4+CmBgYHtyfQphc3NpZ25hdGlvbiA8LSBjYmluZChkZiwgY2x1c3RlciA9IHNlZ21lbnRzJGNsdXN0ZXIpCiNhc3NpZ25hdGlvbgpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjptYWdlbnRhOyI+IFBhc28gOCBHcmFmaWNhIGRlIENsdXN0ZXJzPC9zcGFuPgpgYGB7cn0KZnZpel9jbHVzdGVyKHNlZ21lbnRzLCBkYXRhID0gZGYpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOm1hZ2VudGE7Ij4gUGFzbyA5IE9wdGltaXphY2nDs24gZGUgY2x1c3RlcnM8L3NwYW4+CmBgYHtyfQpzZXQuc2VlZCgxMjMpCm9wdGltaXphdGlvbiA9IGNsdXNHYXAoZGYsIEZVTj1rbWVhbnMsIG5zdGFydD0xLCBLLm1heCA9IDEyKQpwbG90KG9wdGltaXphdGlvbiwgeGxhYj0iTnVtYmVyIG9mIGsgY2x1c3RlcnM6ICIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOm1hZ2VudGE7Ij4gUGFzbyAxMCBBanVzdGUgZGVsIG7Dum1lcm8gZGUgY2x1c3RlcnM8L3NwYW4+CmBgYHtyfQojIC0tLS0tLS0tLS0tLSBSVU4gSVQgQkFDSyBXSVRIIE9QVElNSVpFRCBDTFVTVEVSIE5VTUJFUiAtLS0tLS0tLS0tLS0tLS0tLQojIFN0ZXAgMyBOdW1iZXIgb2YgQ2x1c3RlcnMKZ3JvdXBzIDwtIDMgI0NoYW5nZWQgdG8gb3B0aW1pemVkIG51bWJlciBvZiBjbHVzdGVycwoKIyBTdGVwIDQgR2VuZXJhdGUgQ2x1c3RlcnMKc2VnbWVudHMgPC0ga21lYW5zKGRmLGdyb3VwcykKc2VnbWVudHMKCiMgU3RlcCA1IEFzc2lnbiBkYXRhIHRvIENsdXN0ZXJzCmFzc2lnbmF0aW9uIDwtIGNiaW5kKGRmLCBjbHVzdGVyID0gc2VnbWVudHMkY2x1c3RlcikKI2Fzc2lnbmF0aW9uCgojIFN0ZXAgNiBHcmFwaCBDbHVzdGVycwpmdml6X2NsdXN0ZXIoc2VnbWVudHMsIGRhdGEgPSBkZikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6bWFnZW50YTsiPiBQYXNvIDExIEFuw6FsaXNpcyBkZSBjbHVzdGVyczwvc3Bhbj4KYGBge3J9CmFuYWxpc2lzIDwtIGFnZ3JlZ2F0ZShhc3NpZ25hdGlvbiwgYnk9bGlzdChhc3NpZ25hdGlvbiRjbHVzdGVyKSwgRlVOPW1lYW4pCmFuYWxpc2lzCmBgYAoKIyMgT2JzZXJ2YWNpb25lcwpMb3MgYWxnb3JpdG1vcyBkZSBzZWdtZW50YWNpw7NuIG8gYWdydXBhbWllbnRvIHNvbiB1bmEgaGVycmFtaWVudGEgdmFsaW9zYSBwYXJhIGxhcyBlbXByZXNhcyBxdWUgZGVzZWFuIGNhdGVnb3JpemFyIGEgc3VzIGNsaWVudGVzIHkgZGlyaWdpciBjYW1wYcOxYXMgZGUgbWFya2V0aW5nIG3DoXMgZW5mb2NhZGFzIHkgZXNwZWNpYWxpemFkYXMuCgpBZGVtw6FzIGRlIGVzbywgbGFzIHTDqWNuaWNhcyBkZSBzZWdtZW50YWNpw7NuIGRlIGNsaWVudGVzIHB1ZWRlbiBheXVkYXIgYSBsYXMgZW1wcmVzYXMgYSBpZGVudGlmaWNhciBwYXRyb25lcyBkZSBjb21wb3J0YW1pZW50byBlbnRyZSBncnVwb3MgZXNwZWPDrWZpY29zIGRlIGNsaWVudGVzLCBsbyBxdWUgbGVzIHBlcm1pdGUgYWRhcHRhciBzdXMgZXN0cmF0ZWdpYXMgZGUgbWFya2V0aW5nIGRlIG1hbmVyYSBtw6FzIGVmZWN0aXZhLgoKTGEgc2VnbWVudGFjacOzbiBkZSBjbGllbnRlcyB0YW1iacOpbiBwdWVkZSBzZXIgw7p0aWwgcGFyYSBwZXJzb25hbGl6YXIgbGEgZXhwZXJpZW5jaWEgZGVsIGNsaWVudGUsIG9mcmVjaWVuZG8gcHJvZHVjdG9zIG8gc2VydmljaW9zIGVzcGVjw61maWNvcyBxdWUgc2UgYWp1c3RlbiBhIGxhcyBuZWNlc2lkYWRlcyB5IHByZWZlcmVuY2lhcyBkZSBjYWRhIHNlZ21lbnRvIGlkZW50aWZpY2Fkby4KCgoKCg==