Segmentación o clusters es un conjunto de técnicas cuyo propósito es formar grupos a partir de un conjunto de elementos.
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)
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)
df <- read_csv("/Users/david3/Desktop/wine.csv")
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
df <- as.data.frame(scale(df))
groups <- 4
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"
assignation <- cbind(df, cluster = segments$cluster)
#assignation
fviz_cluster(segments, data = df)
set.seed(123)
optimization = clusGap(df, FUN=kmeans, nstart=1, K.max = 12)
plot(optimization, xlab="Number of k 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)
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
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.