## “El generador de valor de datos”

K-MEANS CLUSTERING

Importar la base de datos

Se escoge la base de datos que se trabajara.

file.choose()

bd12 <- read.csv("C:\\Users\\sofia\\OneDrive\\Documentos\\datos_clientes.csv")

Agregar el CustomerID como nombre de los renglones

bd13 <- bd12
rownames(bd13)<- bd13$CustomerID

Eliminar la columna de CustomerID

bd14 <- bd13
bd14 <- subset (bd14, select = -c (CustomerID))

Revisar presencia de datos anormales

summary(bd14)
##      Total             Visitas       
##  Min.   :    3.45   Min.   :  1.000  
##  1st Qu.:  178.30   1st Qu.:  1.000  
##  Median :  292.00   Median :  2.000  
##  Mean   :  415.62   Mean   :  4.227  
##  3rd Qu.:  426.63   3rd Qu.:  5.000  
##  Max.   :84236.25   Max.   :209.000
plot(bd14$Total,bd14$Visitas)

Los datos fuera de lo normal están fuera de los siguientes límites:
Límite Inferior = Q1 - 1.5IQR
Límite Superior = Q3 + 1.5
IQR
Q1: Cuartil 1, Q3: Cuartil 3, IQR: Rango Intercuartil = Q3 - Q1

Calcular el Límite Superior del Total

iqr_total <- IQR(bd14$Total)
limite_superior_total <- 426.63 + 1.5*iqr_total
limite_superior_total
## [1] 799.1277

Conservar sólo los Tickets Promedios menores a 800

bd15 <- bd14
bd15 <- bd15[bd15$Total < 800, ]
summary(bd15)
##      Total           Visitas       
##  Min.   :  3.45   Min.   :  1.000  
##  1st Qu.:172.96   1st Qu.:  1.000  
##  Median :272.23   Median :  2.000  
##  Mean   :298.21   Mean   :  4.125  
##  3rd Qu.:390.24   3rd Qu.:  5.000  
##  Max.   :799.62   Max.   :209.000

Calcular el Límite Superior de las Visitas

iqr_visitas <- IQR(bd14$Visitas)
limite_superior_visitas <- 5 + 1.5*iqr_visitas
limite_superior_visitas
## [1] 11

Conservar sólo las Visitas menores a 12

bd16<-bd15
bd16 <- bd16[bd16$Visitas < 12, ]

summary(bd16)
##      Total           Visitas      
##  Min.   :  3.45   Min.   : 1.000  
##  1st Qu.:168.67   1st Qu.: 1.000  
##  Median :267.13   Median : 2.000  
##  Mean   :293.99   Mean   : 2.971  
##  3rd Qu.:384.80   3rd Qu.: 4.000  
##  Max.   :799.62   Max.   :11.000
plot(bd16$Total,bd16$Visitas)

k-means Clustering

Paso 1. Normalizar variables

bd17 <- bd16
bd17 <- as.data.frame(scale(bd17))

plot(bd17$Total,bd17$Visitas)

Paso 2. k-means Clustering

segmentos <- kmeans(bd17, 3)

segmentos

asignacion <- cbind(bd16, cluster = segmentos$cluster)
head(asignacion,10)
##          Total Visitas cluster
## 12347 615.7143       7       3
## 12350 334.4000       1       2
## 12352 313.2550       8       3
## 12353  89.0000       1       2
## 12355 459.4000       1       1
## 12358 584.0300       2       1
## 12361 189.9000       1       2
## 12362 522.6230      10       3
## 12363 276.0000       2       2
## 12364 328.2750       4       2

Exportar csv

write.csv(asignacion,"clientes_segmentados.csv")

Visualizar Segmentos

install.packages(“factoextra”)

library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(segmentos, data = bd17,
             palette=c("red", "blue", "black", "darkgreen"),
             ellipse.type = "euclid",
             star.plot = T,
             repel = T,
             ggtheme = theme())
## Warning: ggrepel: 3734 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

Optimizar k

library(cluster)
library(data.table)

set.seed(123)
optimizacion <- clusGap(bd17, FUN = kmeans, nstart = 25, K.max = 10, B = 50)
## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations

## Warning: did not converge in 10 iterations
plot(optimizacion, xlab = "Numero de clusters k")

Conclusiones

En la base de datos se realizó una segmentación de mercado en base a la frecuencia de clientes al supermercado, asi como tambien la cantidad total por cada ticket, en este caso obtuvimos 3 clusters. Las recomendaciones para realizar un K-means Clustering, es revisar los datos y eliminar, agregar o modificar de la base de datos para que se pueda correr el programa. Tambien es muy importante el despues de realizar el Clustring, optomizar la K y realizar el plot.
La estrategia propuesta para el supermercado es realizar una campaña de marketing digital por medio de correos en los que a cada segmento de cliente en específico, hacerles promociones por los productos que mas compran cada uno y adaptados también a los precios que normalmente compran. Además de mandar cupones cada semana con cierto tiempo limitado.

LS0tDQp0aXRsZTogPHNwYW4gc3R5bGU9IkNvbG9yOkdyYXkiPiJTVVBFUk1FUkNBRE8tS01FQU5TQ0xVU1RFUklORyINCmF1dGhvcjogIkFuYSBBcnZpenUtIEEwMTQxMjIyMCINCmRhdGU6ICIyMDIyLTA5LTA4Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KIVtdKGh0dHBzOi8vd3d3LnVuaXIubmV0L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIxLzAyL01hcmtldDItMS5wbmcpDQojIyAiRWwgZ2VuZXJhZG9yIGRlIHZhbG9yIGRlIGRhdG9zIg0KPGltZyBzcmM9IkM6XFxVc2Vyc1xcc29maWFcXERvd25sb2Fkc1xcTWluZCBNYXBwaW5nIENyZWF0aXZlIFRoaW5raW5nIFRpcHMgSW5mb2dyYXBoaWMgR3JhcGggKDMpLnBuZyI+DQoNCiMjIEstTUVBTlMgQ0xVU1RFUklORw0KDQojIyMgSW1wb3J0YXIgbGEgYmFzZSBkZSBkYXRvcw0KDQo+IFNlIGVzY29nZSBsYSBiYXNlIGRlIGRhdG9zIHF1ZSBzZSB0cmFiYWphcmEuDQoNCmZpbGUuY2hvb3NlKCkNCmBgYHtyfQ0KYmQxMiA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxzb2ZpYVxcT25lRHJpdmVcXERvY3VtZW50b3NcXGRhdG9zX2NsaWVudGVzLmNzdiIpDQpgYGANCg0KIyMjIEFncmVnYXIgZWwgQ3VzdG9tZXJJRCBjb21vIG5vbWJyZSBkZSBsb3MgcmVuZ2xvbmVzDQpgYGB7cn0NCmJkMTMgPC0gYmQxMg0Kcm93bmFtZXMoYmQxMyk8LSBiZDEzJEN1c3RvbWVySUQNCmBgYA0KDQojIyMgRWxpbWluYXIgbGEgY29sdW1uYSBkZSBDdXN0b21lcklEDQpgYGB7cn0NCmJkMTQgPC0gYmQxMw0KYmQxNCA8LSBzdWJzZXQgKGJkMTQsIHNlbGVjdCA9IC1jIChDdXN0b21lcklEKSkNCmBgYA0KDQojIyMgUmV2aXNhciBwcmVzZW5jaWEgZGUgZGF0b3MgYW5vcm1hbGVzDQpgYGB7cn0NCnN1bW1hcnkoYmQxNCkNCnBsb3QoYmQxNCRUb3RhbCxiZDE0JFZpc2l0YXMpDQpgYGANCg0KTG9zIGRhdG9zIGZ1ZXJhIGRlIGxvIG5vcm1hbCBlc3TDoW4gZnVlcmEgZGUgbG9zIHNpZ3VpZW50ZXMgbMOtbWl0ZXM6ICANCkzDrW1pdGUgSW5mZXJpb3IgPSBRMSAtIDEuNSpJUVIgIA0KTMOtbWl0ZSBTdXBlcmlvciA9IFEzICsgMS41KklRUiAgDQpRMTogQ3VhcnRpbCAxLCBRMzogQ3VhcnRpbCAzLCBJUVI6IFJhbmdvIEludGVyY3VhcnRpbCA9IFEzIC0gUTEgIA0KDQojIyMgQ2FsY3VsYXIgZWwgTMOtbWl0ZSBTdXBlcmlvciBkZWwgVG90YWwNCmBgYHtyfQ0KaXFyX3RvdGFsIDwtIElRUihiZDE0JFRvdGFsKQ0KbGltaXRlX3N1cGVyaW9yX3RvdGFsIDwtIDQyNi42MyArIDEuNSppcXJfdG90YWwNCmxpbWl0ZV9zdXBlcmlvcl90b3RhbA0KYGBgDQoNCiMjIyBDb25zZXJ2YXIgc8OzbG8gbG9zIFRpY2tldHMgUHJvbWVkaW9zIG1lbm9yZXMgYSA4MDANCmBgYHtyfQ0KYmQxNSA8LSBiZDE0DQpiZDE1IDwtIGJkMTVbYmQxNSRUb3RhbCA8IDgwMCwgXQ0Kc3VtbWFyeShiZDE1KQ0KYGBgDQoNCiMjIyBDYWxjdWxhciBlbCBMw61taXRlIFN1cGVyaW9yIGRlIGxhcyBWaXNpdGFzDQpgYGB7cn0NCmlxcl92aXNpdGFzIDwtIElRUihiZDE0JFZpc2l0YXMpDQpsaW1pdGVfc3VwZXJpb3JfdmlzaXRhcyA8LSA1ICsgMS41Kmlxcl92aXNpdGFzDQpsaW1pdGVfc3VwZXJpb3JfdmlzaXRhcw0KYGBgDQoNCiMjIyBDb25zZXJ2YXIgc8OzbG8gbGFzIFZpc2l0YXMgbWVub3JlcyBhIDEyDQpgYGB7cn0NCmJkMTY8LWJkMTUNCmJkMTYgPC0gYmQxNltiZDE2JFZpc2l0YXMgPCAxMiwgXQ0KDQpzdW1tYXJ5KGJkMTYpDQpwbG90KGJkMTYkVG90YWwsYmQxNiRWaXNpdGFzKQ0KYGBgDQoNCiMjIyBrLW1lYW5zIENsdXN0ZXJpbmcNCg0KIyMjIFBhc28gMS4gTm9ybWFsaXphciB2YXJpYWJsZXMNCg0KYGBge3J9DQpiZDE3IDwtIGJkMTYNCmJkMTcgPC0gYXMuZGF0YS5mcmFtZShzY2FsZShiZDE3KSkNCg0KcGxvdChiZDE3JFRvdGFsLGJkMTckVmlzaXRhcykNCmBgYA0KDQojIyMgUGFzbyAyLiBrLW1lYW5zIENsdXN0ZXJpbmcNCmBgYHtyfQ0Kc2VnbWVudG9zIDwtIGttZWFucyhiZDE3LCAzKQ0KYGBgDQpzZWdtZW50b3MNCmBgYHtyfQ0KYXNpZ25hY2lvbiA8LSBjYmluZChiZDE2LCBjbHVzdGVyID0gc2VnbWVudG9zJGNsdXN0ZXIpDQpoZWFkKGFzaWduYWNpb24sMTApDQpgYGANCg0KIyMjIEV4cG9ydGFyIGNzdg0KYGBge3J9DQp3cml0ZS5jc3YoYXNpZ25hY2lvbiwiY2xpZW50ZXNfc2VnbWVudGFkb3MuY3N2IikNCmBgYA0KDQojIyMgVmlzdWFsaXphciBTZWdtZW50b3MNCmluc3RhbGwucGFja2FnZXMoImZhY3RvZXh0cmEiKQ0KYGBge3J9DQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQpmdml6X2NsdXN0ZXIoc2VnbWVudG9zLCBkYXRhID0gYmQxNywNCiAgICAgICAgICAgICBwYWxldHRlPWMoInJlZCIsICJibHVlIiwgImJsYWNrIiwgImRhcmtncmVlbiIpLA0KICAgICAgICAgICAgIGVsbGlwc2UudHlwZSA9ICJldWNsaWQiLA0KICAgICAgICAgICAgIHN0YXIucGxvdCA9IFQsDQogICAgICAgICAgICAgcmVwZWwgPSBULA0KICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZSgpKQ0KYGBgDQoNCiMjIyBPcHRpbWl6YXIgaw0KDQpgYGB7cn0NCmxpYnJhcnkoY2x1c3RlcikNCmxpYnJhcnkoZGF0YS50YWJsZSkNCg0Kc2V0LnNlZWQoMTIzKQ0Kb3B0aW1pemFjaW9uIDwtIGNsdXNHYXAoYmQxNywgRlVOID0ga21lYW5zLCBuc3RhcnQgPSAyNSwgSy5tYXggPSAxMCwgQiA9IDUwKQ0KcGxvdChvcHRpbWl6YWNpb24sIHhsYWIgPSAiTnVtZXJvIGRlIGNsdXN0ZXJzIGsiKQ0KYGBgDQoNCiMjIyBDb25jbHVzaW9uZXMNCkVuIGxhIGJhc2UgZGUgZGF0b3Mgc2UgcmVhbGl6w7MgdW5hIHNlZ21lbnRhY2nDs24gZGUgbWVyY2FkbyBlbiBiYXNlIGEgbGEgZnJlY3VlbmNpYSBkZSBjbGllbnRlcyBhbCBzdXBlcm1lcmNhZG8sIGFzaSBjb21vIHRhbWJpZW4gbGEgY2FudGlkYWQgdG90YWwgcG9yIGNhZGEgdGlja2V0LCBlbiBlc3RlIGNhc28gb2J0dXZpbW9zIDMgY2x1c3RlcnMuDQpMYXMgcmVjb21lbmRhY2lvbmVzIHBhcmEgcmVhbGl6YXIgdW4gSy1tZWFucyBDbHVzdGVyaW5nLCBlcyByZXZpc2FyIGxvcyBkYXRvcyB5IGVsaW1pbmFyLCBhZ3JlZ2FyIG8gbW9kaWZpY2FyIGRlIGxhIGJhc2UgZGUgZGF0b3MgcGFyYSBxdWUgc2UgcHVlZGEgY29ycmVyIGVsIHByb2dyYW1hLiBUYW1iaWVuIGVzIG11eSBpbXBvcnRhbnRlIGVsIGRlc3B1ZXMgZGUgcmVhbGl6YXIgZWwgQ2x1c3RyaW5nLCBvcHRvbWl6YXIgbGEgSyB5IHJlYWxpemFyIGVsIHBsb3QuICANCkxhIGVzdHJhdGVnaWEgcHJvcHVlc3RhIHBhcmEgZWwgc3VwZXJtZXJjYWRvIGVzIHJlYWxpemFyIHVuYSBjYW1wYcOxYSBkZSBtYXJrZXRpbmcgZGlnaXRhbCBwb3IgbWVkaW8gZGUgY29ycmVvcyBlbiBsb3MgcXVlIGEgY2FkYSBzZWdtZW50byBkZSBjbGllbnRlIGVuIGVzcGVjw61maWNvLCBoYWNlcmxlcyBwcm9tb2Npb25lcyBwb3IgbG9zIHByb2R1Y3RvcyBxdWUgbWFzIGNvbXByYW4gY2FkYSB1bm8geSBhZGFwdGFkb3MgdGFtYmnDqW4gYSBsb3MgcHJlY2lvcyBxdWUgbm9ybWFsbWVudGUgY29tcHJhbi4gQWRlbcOhcyBkZSBtYW5kYXIgY3Vwb25lcyBjYWRhIHNlbWFuYSBjb24gY2llcnRvIHRpZW1wbyBsaW1pdGFkby4NCg==