Se presenta un análisis sobre los K-Means para los datos de Zara trabajados durante todo el módulo. El objetivo que se toma principal para el segmentar el análisis son las variables Price y Sales Volume y se busca generar al final estrategias empresariales.
Para este análisis y el informe se va a realizar usando la plataforma RStudio.
El análisis se estructura en varias secciones, comenzando con la preparación de los datos, seguido por la evaluación de la tendencia de agrupación, la determinación del número óptimo de grupos, la creación de clústeres con K-means, y finalmente, la interpretación de los resultados y propuestas de decisiones empresariales basadas en los clústeres identificados.
Para realizar el análisis de clúster, se siguieron los siguientes pasos:
Se cargaron las siguientes librerías que fueron las ultilizadas para
realizar el Script: cluster,
factoextra, flexclust,
FeatureImpCluster, tidyverse, y
gtsummary. Luego, se importa el archivo CSV que contiene la
base de datos zara
library(cluster)
library(factoextra)
library(flexclust)
library(FeatureImpCluster)
library(tidyverse)
library(gtsummary)
zara <- read.csv("C:/Users/juan_/Downloads/zara(2).csv", sep=";")
head(zara)
## Product.ID Product.Position Promotion Product.Category Seasonal Sales.Volume
## 1 185102 Aisle No Clothing No 2823
## 2 188771 Aisle No Clothing No 654
## 3 180176 End-cap Yes Clothing Yes 2220
## 4 112917 Aisle Yes Clothing Yes 1568
## 5 192936 End-cap No Clothing Yes 2942
## 6 117590 End-cap No Clothing No 2968
## brand url
## 1 Zara https://www.zara.com/us/en/basic-puffer-jacket-p06985450.html
## 2 Zara https://www.zara.com/us/en/tuxedo-jacket-p08896675.html
## 3 Zara https://www.zara.com/us/en/slim-fit-suit-jacket-p01564520.html
## 4 Zara https://www.zara.com/us/en/stretch-suit-jacket-p01564300.html
## 5 Zara https://www.zara.com/us/en/double-faced-jacket-p08281477.html
## 6 Zara https://www.zara.com/us/en/contrasting-collar-jacket-p06987331.html
## sku name
## 1 272145190-250-2 BASIC PUFFER JACKET
## 2 324052738-800-46 TUXEDO JACKET
## 3 335342680-800-44 SLIM FIT SUIT JACKET
## 4 328303236-420-44 STRETCH SUIT JACKET
## 5 312368260-800-2 DOUBLE FACED JACKET
## 6 320298385-807-2 CONTRASTING COLLAR JACKET
## description
## 1 Puffer jacket made of tear-resistant ripstop fabric. High collar and adjustable long sleeves with adhesive straps. Welt pockets at hip. Adjustable hem with side elastics. Front zip closure.
## 2 Straight fit blazer. Pointed lapel collar and long sleeves with buttoned cuffs. Welt pockets at hip and interior pocket. Central back vent at hem. Front button closure.
## 3 Slim fit jacket. Notched lapel collar. Long sleeves with buttoned cuffs. Welt pocket at chest and flap pockets at hip. Interior pocket. Back vents. Front button closure.
## 4 Slim fit jacket made of viscose blend fabric. Notched lapel collar. Long sleeves with buttoned cuffs. Welt pocket at chest and flap pockets at hip. Interior pocket. Back vents. Front button closure.
## 5 Jacket made of faux leather faux shearling with fleece interior. Tabbed lapel collar. Long sleeves. Zip pockets at hip. Front zip closure.
## 6 Relaxed fit jacket. Contrasting lapel collar and long sleeves with buttoned cuffs. Front pouch pockets. Interior pocket. Washed effect. Front zip closure.
## price currency scraped_at terms section
## 1 19.99 USD 2024-02-19T08:50:05.654618 jackets MAN
## 2 169.00 USD 2024-02-19T08:50:06.590930 jackets MAN
## 3 129.00 USD 2024-02-19T08:50:07.301419 jackets MAN
## 4 129.00 USD 2024-02-19T08:50:07.882922 jackets MAN
## 5 139.00 USD 2024-02-19T08:50:08.453847 jackets MAN
## 6 79.90 USD 2024-02-19T08:50:09.140497 jackets MAN
Una vez cargado los datos se seleccionaron las variables
price y Sales.Volume para el analisis cluster
y donde se reflejo que los rangos y escalas son muy diferentes, por este
motivo se aplica una estandarización (scale()) para
asegurar que tengan una media de cero y evitar tener picos.
zaraparacluster <- zara %>%
select("price","Sales.Volume")
summary(zaraparacluster)
## price Sales.Volume
## Min. : 7.99 Min. : 529
## 1st Qu.: 49.90 1st Qu.:1243
## Median : 79.90 Median :1840
## Mean : 86.25 Mean :1824
## 3rd Qu.:109.00 3rd Qu.:2399
## Max. :439.00 Max. :2989
zara_std <- scale(zaraparacluster)
summary(zara_std)
## price Sales.Volume
## Min. :-1.5026 Min. :-1.85566
## 1st Qu.:-0.6980 1st Qu.:-0.83231
## Median :-0.1220 Median : 0.02264
## Mean : 0.0000 Mean : 0.00000
## 3rd Qu.: 0.4368 3rd Qu.: 0.82420
## Max. : 6.7728 Max. : 1.67019
Antes de aplicar los K-means, se evalúa si los datos tienden a generar Clusters.
get_clust_tendency(zara_std, n = 50, graph = FALSE)$hopkins_stat
## [1] 0.8356497
Al generar el codigo de Hopkins, este nos da un valor de
0.8356, lo que nos indica que los datos tienen una
tendencia fuerte a la agrupacion, debido que para considerar esto los
valores deben estar lejos del 0.5 y cerca al 1.
dist_matrix <- dist(zara_std)
fviz_dist(dist_matrix, show_labels = FALSE) +
labs(title = "Gráfico VAT - Tendencia de Agrupación")
El gráfico VAT lo que nos muestra es la tendencia fuerte a la
agrupacion de parte de los clusters, debido a que la diagonal tiene
reflejado los puntos bien oscuros y nuestro estadistico de Hopkins nos
otorgo un 0.8656.
Para encontrar el numero de clusters se utilizó el método “gap
statistic” mediante fviz_nbclust
fviz_nbclust(zara_std, kmeans, method = "gap_stat")
fviz_nbclust(zara_std, kmeans) # Para ver el gráfico sin el método específico
Al realizar el grafico se encuentra que el numero optimo utilizando el gap_stat viene siendo en el punto 1 que es el mas alto, pero al correr nuevamente la funcion sin el Gap logran encontrar que el numero optimo de clusters es igual a 3.
Se aplica el algoritmo K-means a los datos estandarizados, fijando el número de clústeres en 3 y la semilla aleatoria para reproducibilidad de los resultados.
set.seed(123)
zara_km <- kmeans(zara_std, centers = 3)
zara_km
## K-means clustering with 3 clusters of sizes 113, 102, 37
##
## Cluster means:
## price Sales.Volume
## 1 -0.176978 -0.8809730
## 2 -0.389661 0.8573553
## 3 1.614701 0.3270191
##
## Clustering vector:
## [1] 2 1 3 3 3 2 1 3 3 1 3 3 3 3 2 2 2 3 3 1 1 1 3 2 3 1 1 2 2 3 3 3 3 2 2 1 1
## [38] 1 3 1 2 1 3 1 2 1 2 1 1 2 1 1 3 1 1 2 3 1 2 2 3 1 1 1 1 1 2 3 2 2 1 1 3 2
## [75] 1 1 1 2 2 2 2 2 1 2 1 1 2 3 3 1 2 1 1 1 1 1 2 2 2 3 3 1 1 3 3 2 1 2 1 2 1
## [112] 2 2 1 2 1 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 1 2 2 2 2 2 1 1 2 2
## [149] 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 2 3 1 1 1 2 2 1 1 2 2 2 1 2 1 2 2
## [186] 2 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 2 2 2 1 1 1 2 2 1 1 2
## [223] 1 1 2 1 2 2 1 2 2 3 3 2 1 3 2 2 1 1 1 2 1 3 1 2 2 3 3 2 1 2
##
## Within cluster sum of squares by cluster:
## [1] 79.99610 54.77731 85.09787
## (between_SS / total_SS = 56.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Ahora haremos un analisis de la informacion que tenemos sobre los 3
Cluster en cuanto a las variables de
Precio y Sales.Volume
Clúster 1 (113 productos): Porductos de baja demanda y un precio medio o o moderado
Características: price: -0.176978
esta un poco mas abajo de la mediana de precios,
Sales.Volume: -0.8809730 Entre los 3 clusters es el que
tiene el peor rendimiento.
Análisis: Este Cluster agrupa un grupo de productos que tiene un precio levemente inferior a la media de precios pero nos muestra que sus ventas no son las optimas y termina siendo la de peor rendimiento entre nuestros 3 clusters, estoe puede estar con productos de temporadas anteriores ques eha quedado a traves del tiempo y tiene ya una rotaion baja.
Clúster 2 (102 productos): Productos Estrellas o de alto rendimiento y Precio Accesible o economico
Características: price: -0.389661
Esta muy por debajo de la mediana de precios,
Sales.Volume: 0.8573553 Ventas muy superiores en cuanto a
la mediana de ventas.
Análisis: Este grupo nos muestra que son los productos de mas alto rendimiento en cuanto a al volumen de ventas y un precio muy economico, por otro lado pueden ser productos de lanzamientos y al ser Zara una tienda de moda rapida, estos son los de mayor venta por temporada.
Clúster 3 (37 productos): “Productos Premium / Alto Precio y Ventas Moderadas”
Características: price: 1.614701
(significativamente por encima del promedio),
Sales.Volume: 0.3270191 (ligeramente por encima del
promedio).
Análisis: Estte grupo lo podemos ver como el grupo que tiene mayor precio o considerar como productos premium aunque sea el grupo mas pequeño entre los 3 en cuanto a unidades, pero tiene una buena proporcion en ventas.
El porcentaje de la varianza indica que el 56.2% de la varianza total en los datos para los 3 clústeres. Esto sugiere que los clústeres están razonablemente bien separados y que la segmentación es efectiva para capturar la estructura subyacente de los datos.
En este punto presentamos los graficos del analisis realizado en el
punto 4 sobre los clusters, el primer Barplots que se muestra, se
muestra por separada los 3 clusters y sus variables Price y
Sales.Volume.
El segundo Barplots se muestra por separado las variables
Price y Sales.Volume. En la cual se ve el mayor precio lo
tiene el Cluster 3 y mayor voumen de ventas el Cluster 2
flexclust)set.seed(123)
cl_kcca <- as.kcca(zara_km, zara_std)
barplot(cl_kcca)
barplot(cl_kcca, bycluster=FALSE)
.
factoextra)fviz_cluster(zara_km, data = zara_std,
geom = "point",
ellipse.type = "convex",
ggtheme = theme_bw(),
main = "Visualización de Clústeres K-Means")
Este grafico de dispercion nos muestra como quedan acomodados los 3 clusters, donde se muestra que el mas disperso y con menos untegrante es el el cluster 3 de color azul, por el lado del cluster 2 quien tiene el color verde, muestra qye es el mas integrante stiene con un mayor volumen de ventas y con menor precio, y por el lado del cluster 1 que tiene el color rojo, podemos observar que tiene la mayoria de sus ventas por debajo de cero aunque tenga mejor precio que losconsiderados premium del cluster 3
importance <- FeatureImpCluster(cl_kcca, as.data.table(zara_std))
plot(importance)
El gráfico muestra que Sales.Volume es la variable más
importante; es la que más contribuye a diferenciar y formar los tres
clústeres identificados en el análisis. debido a que es el la variable
que se encuentra mas al lado derecho.
Se hace la asignacion de cluesteres a los datos originales.
zara$cluster <- zara_km$cluster
head(zaraparacluster) # Muestra el subset, pero la asignación es a 'zara'
## price Sales.Volume
## 1 19.99 2823
## 2 169.00 654
## 3 129.00 2220
## 4 129.00 1568
## 5 139.00 2942
## 6 79.90 2968
Parah acer el analisis de las ccaracteristicas de los clústeres, se
utilizan las variables originales del dataframe zara
(terms, Product.Position,
Promotion, Seasonal,
Section).
gtsummary)tbl_summary(data = zara,
include = c("terms", "Product.Position", "Promotion", "Seasonal", "section"),
by = cluster,
percent = "column") %>%
add_overall()
| Characteristic | Overall N = 2521 |
1 N = 1131 |
2 N = 1021 |
3 N = 371 |
|---|---|---|---|---|
| terms | ||||
| jackets | 140 (56%) | 57 (50%) | 51 (50%) | 32 (86%) |
| jeans | 8 (3.2%) | 6 (5.3%) | 2 (2.0%) | 0 (0%) |
| shoes | 31 (12%) | 14 (12%) | 17 (17%) | 0 (0%) |
| sweaters | 41 (16%) | 21 (19%) | 18 (18%) | 2 (5.4%) |
| t-shirts | 32 (13%) | 15 (13%) | 14 (14%) | 3 (8.1%) |
| Product.Position | ||||
| Aisle | 97 (38%) | 43 (38%) | 35 (34%) | 19 (51%) |
| End-cap | 86 (34%) | 44 (39%) | 34 (33%) | 8 (22%) |
| Front of Store | 69 (27%) | 26 (23%) | 33 (32%) | 10 (27%) |
| Promotion | 120 (48%) | 49 (43%) | 45 (44%) | 26 (70%) |
| Seasonal | 128 (51%) | 61 (54%) | 45 (44%) | 22 (59%) |
| section | ||||
| MAN | 218 (87%) | 96 (85%) | 86 (84%) | 36 (97%) |
| WOMAN | 34 (13%) | 17 (15%) | 16 (16%) | 1 (2.7%) |
| 1 n (%) | ||||
Segun la tabla podemos analisis los 3 clusteres:
Cluster 1 que es el que peor volumen de ventas maneja se puede deber a que la el porcentaje mas alto de sus productos estan en la parte de atras de la tienda y por otro lado los cluesters 2 y 3 su mayoria de productos s e encuentran en el pasillo.
Como podemos observar a pesar de que el cluster 3 tenga los precios mas alto es el cluster con mas porcentaje de participacion de sus productos en promocion, lo que genera que sus productos sean mas llamativos al ser de una linea premium.
ggplot2)ggplot(zara, aes(x = factor(cluster), fill = terms)) +
geom_bar(position = "dodge") +
labs(title = "Distribución de Tipos de Producto (Terms) por Clúster",
x = "Clúster",
y = "Conteo de Productos",
fill = "Tipo de Producto") +
theme_minimal()
Al tener la base de datos, es razonable que la mayoria de productos por cluster correspondan a las Jackets y al no tener casi unidades de Jeans no tengamos ninguna referencia de precio alto, por lo tal no tenemos ninguno presente en el cluster 3.
La segmentacion de datos realziada para estos 3 clusteres nos permite ofrecer y tomar las siguientes decisiones empresariales:
Clúster 1 (Baja Demanda - Precios medios) :
Marketing: Las campañas deben enfocarse en la liquidación del stock existente. Utilizar tácticas de urgencia (últimas unidades, ventas flash). Evaluar la posibilidad de bundles (paquetes o ventas cruzadas) con productos más atractivos. Investigar el por qué de su bajo rendimiento (diseño, calidad percibida, falta de relevancia).
Precios: Realizar descuentos agresivos en los precios (ej., descuentos del 50% o más) para poder liberar el inventario siempre y cuando sean de colecciones anterioreres y necesitemos liberar el cpaital.
Clúster 2 (Productos Estrella - precios economicos):
Marketing: Mantener las campañas y estrategias de marketing BTL o digital que nos ofrecen rendimientos altos, en este caso asumimos que son producots de temporada y debemos utilizar alguno de estos productos como ganchos para atraer mayores ventas tanto en tienda fisica como venta digitall en otros productos de poca rotacion.
Precios: Mantener el nivel de precios que se tiene en esta categoria de productos, sin exceder los descuentos otorgaods y no afectar la persepcion del consumidor en caso de ser productos de ultima coleccion, por otor lado se puede ofreer descuentos en el segundo item comprado de colecciones anteriores para mover el inventario.
Clúster 3 (Productos Premium - precios altos):
Marketing: Las campañas deben ser exclusivas y enfocadas en la calidad, el diseño, o la edición limitada al ser productos considerados premium. Dirigirse a un nicho de mercado dispuesto a pagar más. Utilizar canales aspiracionales y de estilo de vida, como colaboraciones con diseñadores o influencers de moda de alta gama.
Precios: Mantener precios premium. Las promociones deben ser de valor añadido (ej., envío express gratuito, servicios de personalización, acceso a eventos VIP) en lugar de descuentos directos que puedan devaluar la percepción de la marca y nos permita seguir vendiendo un estilo .
Clúster 1 (Baja Demanda): Productos de alata prioridad para generar promociones agresivas en la cual se oferten descuentos altos o estrategias de 2x1. 3x2 Si son estacionales y su temporada pasó, se debe priorizar terminar el stock lo mas pronto posible.
Clúster 2 (Productos Estrella): Promociones moderadas que no afecten el margen y promociones de lanzamiento si son de nueva temporada (ej. compra uno y el segundo a mitad de precio). Si son estacionales, asegurar que las promociones coincidan en el momento de lanzamiento que deberia generar su pico de ventas.
Clúster 3 (Productos Premium): Promociones muy selectivas, basadas en valor añadido, no en descuentos directos. Si son estacionales, el lanzamiento y retiro de colecciones deben ser cuidadosamente planificada para maximizar las ventas durante su perioro de comercializacion, generrando un perspeccion de oportunidad de compra de parte del nicho que tiene la capacidad de compra
Clúster 1 (Baja Demanda): Reducir drasticamente y de manera apresurada el inventario presente de productos de temporadas anteriores, tener en cuenta que Zara es una tienda de moda rapida, y losinventarios anteriores se debe liquidar rapido con descuentos altos. incluso si se tiene perdidas.
Clúster 2 (Productos Estrella): Al ser productos de alta rotacion en este caso de temporada o puede que sea de temporada, la planificacion del inventario es vital, se debe garantizar durante su temporada el suministro de estos productos en las tiendas tanto para venta fidica como para venta virtual.
Clúster 3 (Productos Premium): Tener bajos inventarios al ser productos premium la rotacion no sera la mas alta, pero se debe garantizar su sumistros en las tiendas.
Variables cconsideradas: El análisis se centró exclusivamente en price y Sales.Volume. Aunque estas son variables fundamentales para la rentabilidad y el rendimiento, no nos muestra la realidad de la venta d elos productos, un producto puede ser potencial estrella pero su ubicacion en la tienda le pueed estar perjudicando.
Determinación del Número de Clústeres (K): La elección de K=3 se basó principalmente en el método de la silueta. al seleccionar los cluster nos podemos basar en que es la seleccion adecuada aunque , en el caso de tener un error en esta seleccion nos puede distorsionar los analisis y estrategias de negocios erroneas que se pueden presentar.
Geolocalizacion Tenemos los clusteres, pero no podemos saber que nos esta afectando a estos, es decir sin tener la ubicacion de las tiendas, no podemos identificar como los consumidores reaccionan frente los tipos de estrategias comerciales enfocadas en su lugar de origien, se debe logra obtener la ubicacion de la tienda la vairable cultural es vital para poder aterrizar bien las estrategias de marketing o para la coleccion de productos que se van a tener.
Variable de temporada o tiempo A pesar de tener de tener una variable seasonal, no tenemos una que nos explique tipo de temporada es, esto puede afectarnos a la generacion de la estrategia, debido a que cada region en el mismo periodo de tiempo puede tener una temporada diferente y esto afectar el comportamiento de nuestras ventas, o un mismo inviernos se puede considerar diferente el impacto en un pais a otro.
Determinación Robusta de K: En lugar de depender de un solo indicador, se podría emplear un enfoque de consenso utilizando el paquete NbClust de R, que evalúa múltiples índices de validación de clústeres simultáneamente para recomendar el número de grupos más estable.
Ampliar la ubicacion del estudio Evaluar la aplicación del modelo en distintas geolocalizacion, lo cual puede llevarnos a optneer diferetentes clusters, y diversos metodos de afrontar lo mercados por temas culturales.
Ampliar el dataset Ampliaria la seleccion de los datos, en los cuales podamos indentificar que tipo de tieneda es o si es un o varias, ciudad, fecha de las ventas, esto no spermitira evaluar como reaciona la ventas por semana,meses o dias y hacer comparaciones entre diferentes tiendas
Exploración de Algoritmos Alternativos:
DBSCAN: Sería interesante aplicar este algoritmo basado en densidad para identificar clústeres de formas no esféricas y, crucialmente, para aislar los productos que no pertenecen a ningún grupo claro (outlers), lo cual podría ser de gran valor para la gestión de inventario.
Clustering Jerárquico: Este método permitiría visualizar la estructura de relaciones entre los clústeres a través de un dendrograma, ayudando a entender si ciertos segmentos son, en realidad, sub-segmentos de otros más grandes.
Validación Externa: Si se dispone de datos de clientes o de encuestas, validar los clústeres con características externas para confirmar su utilidad empresarial.
Tras completar el trabajo analítico, que incluyó la generación de gráficos, la identificación de limitaciones y la propuesta de mejoras, puedo concluir que para realizar un ejercicio de análisis de clústeres o de datos sobre cualquier tema, es fundamental aspirar a conseguir una base de datos lo más clara y completa posible.
Contar con un conjunto de datos robusto nos permite generar una segmentación adecuada, identificar tanto las áreas de oportunidad como las fortalezas, y diferenciar entre sucesos únicos y patrones recurrentes. Esto es clave para poder ofrecer mejoras pertinentes y basadas en evidencia.
El objetivo de estos trabajos es diagnosticar la situación de la empresa o tienda, buscando siempre un beneficio tanto económico como de optimización en sus procesos.
Para finalizar, quisiera agradecer a este módulo por las enseñanzas que me ha brindado y por permitirme experimentar y sacar provecho a herramientas como RStudio. y las IA , que fueron de gran ayuda al momento de codificar y encontrar soluciones a los errores que surgían. Finalmente, extiendo mi gratitud a la profesora por permitirnos descubrir este campo y por demostrarnos la gran funcionalidad que tiene R para desarrollar estudios e informes analíticos.