En este trabajo se realiza un análisis descriptivo de una base de datos de ventas de ADIDAS, con el propósito de identificar diferencias en el desempeño comercial y la rentabilidad según producto, región y método de venta. Para ello, se analizan las ventas, unidades vendidas, utilidad operativa y margen operativo mediante estadísticas descriptivas, tablas y visualizaciones. Además, se exploran las relaciones entre las principales variables cuantitativas para identificar patrones que puedan ser relevantes para la toma de decisiones.
Primero se cargan las librerías necesarias y posteriormente se importa el archivo de Excel que contiene la información del caso.
library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(knitr)
datos <- read_excel("C:/Users/sammu/OneDrive/Desktop/U/DatosCaso1.xlsx",
col_types = c("text", "text", "text",
"text", "text", "numeric", "numeric",
"numeric", "numeric", "numeric",
"text"))
# Revisamos el tamaño de la base y sus variables
dim(datos)
## [1] 9648 11
summary(datos)
## distribuidor region estado ciudad
## Length :9648 Length :9648 Length :9648 Length :9648
## N.unique : 6 N.unique : 5 N.unique : 50 N.unique : 52
## N.blank : 0 N.blank : 0 N.blank : 0 N.blank : 0
## Min.nchar: 6 Min.nchar: 4 Min.nchar: 4 Min.nchar: 5
## Max.nchar: 13 Max.nchar: 9 Max.nchar: 14 Max.nchar: 14
##
## producto precio_unidad unidades_vendidas ventas_total
## Length :9648 Min. : 7.00 Min. : 0.0 Min. : 0
## N.unique : 6 1st Qu.: 35.00 1st Qu.: 106.0 1st Qu.: 4065
## N.blank : 0 Median : 45.00 Median : 176.0 Median : 7804
## Min.nchar: 13 Mean : 45.22 Mean : 256.9 Mean :12455
## Max.nchar: 25 3rd Qu.: 55.00 3rd Qu.: 350.0 3rd Qu.:15864
## Max. :110.00 Max. :1275.0 Max. :82500
## utilidad_operativa margen_operativo metodo_venta
## Min. : 0 Min. :0.100 Length :9648
## 1st Qu.: 1753 1st Qu.:0.350 N.unique : 3
## Median : 3263 Median :0.410 N.blank : 0
## Mean : 4895 Mean :0.423 Min.nchar: 6
## 3rd Qu.: 6192 3rd Qu.:0.490 Max.nchar: 8
## Max. :39000 Max. :0.800
La base contiene 9648 registros y 11 variables. Entre las variables más importantes se encuentran el precio por unidad, las unidades vendidas, las ventas totales, la utilidad operativa, el margen operativo, el producto, la región y el método de venta.
Para comenzar se calcularon algunas medidas que permiten tener una idea general del comportamiento de los datos.
resumen <- datos %>%
summarise(
ventas_totales = sum(ventas_total, na.rm = TRUE),
unidades_totales = sum(unidades_vendidas, na.rm = TRUE),
utilidad_total = sum(utilidad_operativa, na.rm = TRUE),
precio_promedio = mean(precio_unidad, na.rm = TRUE),
ventas_promedio = mean(ventas_total, na.rm = TRUE),
ventas_mediana = median(ventas_total, na.rm = TRUE),
desviacion_ventas = sd(ventas_total, na.rm = TRUE),
utilidad_promedio = mean(utilidad_operativa, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE)
)
kable(resumen, digits = 2)
| ventas_totales | unidades_totales | utilidad_total | precio_promedio | ventas_promedio | ventas_mediana | desviacion_ventas | utilidad_promedio | margen_promedio |
|---|---|---|---|---|---|---|---|---|
| 120166650 | 2478861 | 47224968 | 45.22 | 12455.08 | 7803.5 | 12716.39 | 4894.79 | 0.42 |
Al comparar la media y la mediana de las ventas se observa que no tienen exactamente el mismo valor. Además, la desviación estándar es relativamente alta. Esto indica que existen diferencias importantes entre las ventas registradas y que algunas observaciones tienen valores bastante mayores que otras.
Para observar mejor esta situación se realizó un diagrama de caja.
ggplot(datos, aes(y = ventas_total)) +
geom_boxplot() +
scale_y_continuous(labels = comma) +
labs(title = "Distribución de las ventas totales",
y = "Ventas totales", x = "") +
theme_minimal()
El gráfico muestra la presencia de varios valores alejados del comportamiento central. Estos valores pueden considerarse atípicos desde el punto de vista estadístico, aunque no necesariamente representan errores en la información.
Se agruparon los datos por producto para conocer cuáles presentan mayores ventas, unidades vendidas y utilidad operativa.
por_producto <- datos %>%
group_by(producto) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
unidades = sum(unidades_vendidas, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(desc(ventas))
kable(por_producto, digits = 2)
| producto | ventas | unidades | utilidad |
|---|---|---|---|
| Men’s Street Footwear | 27680769 | 593320 | 11629046 |
| Women’s Apparel | 23870985 | 433827 | 9685221 |
| Men’s Athletic Footwear | 20577180 | 435526 | 7437457 |
| Women’s Street Footwear | 17201563 | 392269 | 6494017 |
| Men’s Apparel | 16520632 | 306683 | 6381405 |
| Women’s Athletic Footwear | 14315521 | 317236 | 5597822 |
ggplot(por_producto, aes(x = reorder(producto, ventas), y = ventas)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = dollar_format(scale = 1e-6, suffix = " M")) +
labs(title = "Ventas totales por producto",
x = "Producto", y = "Ventas") +
theme_minimal()
Men’s Street Footwear presenta el mayor nivel de ventas de la base, con aproximadamente 27,7 millones, y una utilidad operativa cercana a 11,6 millones. Women’s Apparel ocupa el segundo lugar en ventas, con aproximadamente 23,9 millones. Estos resultados muestran que la contribución a las ventas y a la utilidad varía entre las categorías de producto, por lo que resulta relevante analizar ambas variables y no únicamente el volumen de ventas.
Posteriormente se revisaron las ventas y la utilidad según la región.
por_region <- datos %>%
group_by(region) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
unidades = sum(unidades_vendidas, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
margen = utilidad / ventas,
.groups = "drop"
) %>%
arrange(desc(ventas))
kable(por_region, digits = 2)
| region | ventas | unidades | utilidad | margen |
|---|---|---|---|---|
| West | 36436157 | 686985 | 13017584 | 0.36 |
| Northeast | 25078267 | 501279 | 9732774 | 0.39 |
| Southeast | 21374436 | 407000 | 8393059 | 0.39 |
| South | 20603356 | 492260 | 9221605 | 0.45 |
| Midwest | 16674434 | 391337 | 6859945 | 0.41 |
ggplot(por_region, aes(x = reorder(region, ventas), y = ventas)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = dollar_format(scale = 1e-6, suffix = " M")) +
labs(title = "Ventas por región",
x = "Región", y = "Ventas") +
theme_minimal()
La región West concentra el mayor nivel de ventas, con aproximadamente 36,4 millones, mientras que Northeast alcanza cerca de 25,1 millones. Sin embargo, el análisis del margen muestra que un mayor volumen de ventas no necesariamente implica el mayor margen operativo. Esta diferencia permite observar que el desempeño regional debe analizarse considerando simultáneamente ventas, utilidad y margen.
También se compararon las ventas de los diferentes distribuidores presentes en la base.
por_distribuidor <- datos %>%
group_by(distribuidor) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
margen = utilidad / ventas,
.groups = "drop"
) %>%
arrange(desc(ventas))
kable(por_distribuidor, digits = 2)
| distribuidor | ventas | utilidad | margen |
|---|---|---|---|
| West Gear | 32409558 | 12196891 | 0.38 |
| Foot Locker | 29024945 | 11317027 | 0.39 |
| Sports Direct | 24616622 | 10641609 | 0.43 |
| Kohl’s | 13512453 | 5182260 | 0.38 |
| Walmart | 10506085 | 3902749 | 0.37 |
| Amazon | 10096987 | 3984432 | 0.39 |
De acuerdo con los resultados, West Gear y Foot Locker se encuentran entre los distribuidores con mayores ventas. Al mismo tiempo, existen diferencias entre los márgenes obtenidos por cada distribuidor, por lo que es útil revisar tanto las ventas como la utilidad.
Para complementar el análisis de ventas se calculó el margen de cada producto como la utilidad dividida entre las ventas.
margen_producto <- datos %>%
group_by(producto) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
margen = utilidad / ventas,
.groups = "drop"
)
kable(margen_producto, digits = 3)
| producto | ventas | utilidad | margen |
|---|---|---|---|
| Men’s Apparel | 16520632 | 6381405 | 0.386 |
| Men’s Athletic Footwear | 20577180 | 7437457 | 0.361 |
| Men’s Street Footwear | 27680769 | 11629046 | 0.420 |
| Women’s Apparel | 23870985 | 9685221 | 0.406 |
| Women’s Athletic Footwear | 14315521 | 5597822 | 0.391 |
| Women’s Street Footwear | 17201563 | 6494017 | 0.378 |
ggplot(margen_producto,
aes(x = reorder(producto, margen), y = margen)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title = "Margen operativo por producto",
x = "Producto", y = "Margen") +
theme_minimal()
El análisis del margen permite complementar la información de ventas, ya que un producto puede vender bastante pero tener un margen diferente al de otros productos.
Se analizaron los tres métodos de venta registrados en la base para observar cuál tiene mayor participación.
por_metodo <- datos %>%
group_by(metodo_venta) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
unidades = sum(unidades_vendidas, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
margen = utilidad / ventas,
.groups = "drop"
) %>%
arrange(desc(ventas))
kable(por_metodo, digits = 2)
| metodo_venta | ventas | unidades | utilidad | margen |
|---|---|---|---|---|
| Online | 44965657 | 939093 | 19552538 | 0.43 |
| Outlet | 39536618 | 849778 | 14913301 | 0.38 |
| In-store | 35664375 | 689990 | 12759129 | 0.36 |
ggplot(por_metodo, aes(x = metodo_venta, y = ventas)) +
geom_col() +
scale_y_continuous(labels = dollar_format(scale = 1e-6, suffix = " M")) +
labs(title = "Ventas por método de venta",
x = "Método de venta", y = "Ventas") +
theme_minimal()
El método Online registra aproximadamente 45,0 millones en ventas, 19,6 millones de utilidad operativa y un margen de 43%, mientras que Outlet e In-store presentan márgenes de 38% y 36%, respectivamente. Esto muestra diferencias tanto en volumen de ventas como en rentabilidad entre los métodos de venta. Por ello, evaluar únicamente las ventas no sería suficiente para comparar el desempeño de cada método.
Para conocer si algunas variables se mueven de manera similar se calculó una matriz de correlaciones.
variables <- datos %>%
select(precio_unidad, unidades_vendidas, ventas_total,
utilidad_operativa, margen_operativo)
correlaciones <- cor(variables, use = "complete.obs")
kable(round(correlaciones, 3))
| precio_unidad | unidades_vendidas | ventas_total | utilidad_operativa | margen_operativo | |
|---|---|---|---|---|---|
| precio_unidad | 1.000 | 0.266 | 0.540 | 0.504 | -0.137 |
| unidades_vendidas | 0.266 | 1.000 | 0.919 | 0.872 | -0.305 |
| ventas_total | 0.540 | 0.919 | 1.000 | 0.935 | -0.302 |
| utilidad_operativa | 0.504 | 0.872 | 0.935 | 1.000 | -0.047 |
| margen_operativo | -0.137 | -0.305 | -0.302 | -0.047 | 1.000 |
Una de las relaciones más claras es la que existe entre ventas totales y utilidad operativa, ya que la correlación es positiva y alta. Esto significa que, dentro de esta base, cuando las ventas son mayores generalmente también se presenta una utilidad operativa mayor.
Por otro lado, la relación entre precio por unidad y unidades vendidas no es lo suficientemente fuerte como para afirmar que un precio más alto produzca necesariamente una disminución en las unidades vendidas.
ggplot(datos, aes(x = ventas_total, y = utilidad_operativa)) +
geom_point(alpha = 0.3) +
geom_smooth(method = "lm", se = FALSE) +
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(title = "Relación entre ventas y utilidad operativa",
x = "Ventas totales", y = "Utilidad operativa") +
theme_minimal()
En el gráfico se puede observar una tendencia creciente. A medida que aumentan las ventas, normalmente también aumenta la utilidad operativa.
Se utilizó el rango intercuartílico para identificar observaciones que se encuentran por encima del comportamiento habitual de las ventas.
q1 <- quantile(datos$ventas_total, 0.25, na.rm = TRUE)
q3 <- quantile(datos$ventas_total, 0.75, na.rm = TRUE)
rango_iq <- IQR(datos$ventas_total, na.rm = TRUE)
limite_superior <- q3 + 1.5 * rango_iq
atipicos <- datos %>%
filter(ventas_total > limite_superior)
nrow(atipicos)
## [1] 799
Se encontraron observaciones por encima del límite superior. Sin embargo, en este caso no se eliminaron, porque pueden corresponder a ventas reales de mayor tamaño. Antes de eliminar un dato sería necesario comprobar si se trata de un error o de una operación válida.
También se revisaron algunas combinaciones entre producto y región para identificar dónde se encuentran las mayores ventas.
producto_region <- datos %>%
group_by(producto, region) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(desc(ventas))
kable(head(producto_region, 10), digits = 2)
| producto | region | ventas | utilidad |
|---|---|---|---|
| Men’s Street Footwear | West | 7389988 | 2907503 |
| Women’s Apparel | West | 7038046 | 2096258 |
| Men’s Street Footwear | Northeast | 6841324 | 3030663 |
| Men’s Athletic Footwear | West | 6761339 | 2154211 |
| Women’s Street Footwear | West | 5748586 | 2142439 |
| Women’s Apparel | Northeast | 5045208 | 1917008 |
| Men’s Apparel | West | 4827378 | 2009555 |
| Men’s Street Footwear | Midwest | 4707360 | 1948621 |
| Men’s Street Footwear | Southeast | 4693836 | 2003886 |
| Women’s Athletic Footwear | West | 4670820 | 1707618 |
Este análisis ayuda a entender que el comportamiento de un producto puede cambiar dependiendo de la región en la cual se vende.
A partir de los análisis realizados se identificaron los siguientes aspectos:
Con los resultados obtenidos se puede concluir que existen diferencias importantes entre productos, regiones y métodos de venta. Por esta razón, no es suficiente analizar solamente el total de ventas de la empresa.
Men’s Street Footwear tiene una participación importante en las ventas, por lo cual sería conveniente continuar haciendo seguimiento a este producto. De igual manera, el método Online presenta buenos resultados y puede seguir siendo un canal relevante para la empresa.
La región West se destaca por sus ventas, mientras que South presenta un margen mayor. Esto puede ser útil para revisar qué diferencias existen entre ambas regiones y qué factores pueden estar relacionados con esos resultados.
Finalmente, se recomienda que ADIDAS tenga en cuenta tanto las ventas como la utilidad y el margen al momento de comparar productos, regiones o métodos de venta. También sería útil analizar con mayor detalle las observaciones atípicas antes de tomar decisiones sobre ellas.
Este ejercicio permitió aplicar herramientas de analítica descriptiva para conocer mejor el comportamiento de una base de datos comercial. Las tablas, los gráficos y las correlaciones ayudaron a identificar diferencias entre los grupos y a obtener conclusiones básicas que pueden servir como apoyo para la toma de decisiones.