En este informe se analiza el desempeño comercial y financiero de Adidas en el mercado de Estados Unidos, a través de un análisis exploratorio de datos. La base de datos contiene información transaccional de ventas por distribuidor, región, ciudad, línea de producto y método de venta, incluyendo variables como precio por unidad, unidades vendidas, ventas totales, utilidad operativa y margen operativo.
El objetivo es aplicar técnicas de analítica descriptiva para interpretar los datos y extraer hallazgos relevantes que apoyen la toma de decisiones comerciales de la compañía.
knitr::include_graphics("adidas.jpg")
El análisis exploratorio de datos (EDA) es un paso clave para comprender la información de ventas de Adidas, identificar patrones y evaluar la distribución de las variables.
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)
library(readxl)
datos <- read_excel("~/Documents/DatosCaso1.xlsx")
class(datos)
## [1] "tbl_df" "tbl" "data.frame"
colnames(datos)
## [1] "distribuidor" "region" "estado"
## [4] "ciudad" "producto" "precio_unidad"
## [7] "unidades_vendidas" "ventas_total" "utilidad_operativa"
## [10] "margen_operativo" "metodo_venta"
head(datos)
| distribuidor | region | estado | ciudad | producto | precio_unidad | unidades_vendidas | ventas_total | utilidad_operativa | margen_operativo | metodo_venta |
|---|---|---|---|---|---|---|---|---|---|---|
| Foot Locker | Northeast | New York | New York | Men’s Street Footwear | 50 | 1200 | 60000 | 30000.0 | 0.50 | In-store |
| Foot Locker | Northeast | New York | New York | Men’s Athletic Footwear | 50 | 1000 | 50000 | 15000.0 | 0.30 | In-store |
| Foot Locker | Northeast | New York | New York | Women’s Street Footwear | 40 | 1000 | 40000 | 14000.0 | 0.35 | In-store |
| Foot Locker | Northeast | New York | New York | Women’s Athletic Footwear | 45 | 850 | 38250 | 13387.5 | 0.35 | In-store |
| Foot Locker | Northeast | New York | New York | Men’s Apparel | 60 | 900 | 54000 | 16200.0 | 0.30 | In-store |
| Foot Locker | Northeast | New York | New York | Women’s Apparel | 50 | 1000 | 50000 | 12500.0 | 0.25 | In-store |
str(datos)
## tibble [9,648 × 11] (S3: tbl_df/tbl/data.frame)
## $ distribuidor : chr [1:9648] "Foot Locker" "Foot Locker" "Foot Locker" "Foot Locker" ...
## $ region : chr [1:9648] "Northeast" "Northeast" "Northeast" "Northeast" ...
## $ estado : chr [1:9648] "New York" "New York" "New York" "New York" ...
## $ ciudad : chr [1:9648] "New York" "New York" "New York" "New York" ...
## $ producto : chr [1:9648] "Men's Street Footwear" "Men's Athletic Footwear" "Women's Street Footwear" "Women's Athletic Footwear" ...
## $ precio_unidad : num [1:9648] 50 50 40 45 60 50 50 50 40 45 ...
## $ unidades_vendidas : num [1:9648] 1200 1000 1000 850 900 1000 1250 900 950 825 ...
## $ ventas_total : num [1:9648] 60000 50000 40000 38250 54000 ...
## $ utilidad_operativa: num [1:9648] 30000 15000 14000 13388 16200 ...
## $ margen_operativo : num [1:9648] 0.5 0.3 0.35 0.35 0.3 0.25 0.5 0.3 0.35 0.35 ...
## $ metodo_venta : chr [1:9648] "In-store" "In-store" "In-store" "In-store" ...
## Registros totales en la base de datos
dim(datos)[1]
## [1] 9648
Indicadores de centralidad y dispersión
Se calcula un resumen estadístico de las principales variables numéricas: precio por unidad, unidades vendidas, ventas totales, utilidad operativa y margen operativo.
# Resumen estadístico de las variables comerciales y financieras
resumen <- datos %>%
select(precio_unidad, unidades_vendidas, ventas_total, utilidad_operativa, margen_operativo) %>%
summary()
resumen
## precio_unidad unidades_vendidas ventas_total utilidad_operativa
## Min. : 7.00 Min. : 0.0 Min. : 0 Min. : 0
## 1st Qu.: 35.00 1st Qu.: 106.0 1st Qu.: 4065 1st Qu.: 1753
## Median : 45.00 Median : 176.0 Median : 7804 Median : 3263
## Mean : 45.22 Mean : 256.9 Mean :12455 Mean : 4895
## 3rd Qu.: 55.00 3rd Qu.: 350.0 3rd Qu.:15864 3rd Qu.: 6192
## Max. :110.00 Max. :1275.0 Max. :82500 Max. :39000
## margen_operativo
## Min. :0.100
## 1st Qu.:0.350
## Median :0.410
## Mean :0.423
## 3rd Qu.:0.490
## Max. :0.800
### Indicadores de centralidad y variabilidad para la variable "ventas_total"
promedio_ventas = mean(datos$ventas_total, na.rm = TRUE)
mediana_ventas = median(datos$ventas_total, na.rm = TRUE)
minimo_ventas = min(datos$ventas_total, na.rm = TRUE)
maximo_ventas = max(datos$ventas_total, na.rm = TRUE)
desvest_ventas = sd(datos$ventas_total, na.rm = TRUE)
indic_ventas = data.frame(promedio_ventas, mediana_ventas, minimo_ventas, maximo_ventas, desvest_ventas)
indic_ventas
| promedio_ventas | mediana_ventas | minimo_ventas | maximo_ventas | desvest_ventas |
|---|---|---|---|---|
| 12455.08 | 7803.5 | 0 | 82500 | 12716.39 |
## Indicadores de centralidad y variabilidad para la variable "margen_operativo"
promedio_margen = mean(datos$margen_operativo, na.rm = TRUE)
mediana_margen = median(datos$margen_operativo, na.rm = TRUE)
minimo_margen = min(datos$margen_operativo, na.rm = TRUE)
maximo_margen = max(datos$margen_operativo, na.rm = TRUE)
desvest_margen = sd(datos$margen_operativo, na.rm = TRUE)
indic_margen = data.frame(promedio_margen, mediana_margen, minimo_margen, maximo_margen, desvest_margen)
indic_margen
| promedio_margen | mediana_margen | minimo_margen | maximo_margen | desvest_margen |
|---|---|---|---|---|
| 0.4229913 | 0.41 | 0.1 | 0.8 | 0.0971974 |
Gráfico de barras - Ventas por región
por_region <- datos %>%
group_by(region) %>%
summarise(ventas_totales = sum(ventas_total)) %>%
arrange(desc(ventas_totales))
grafico_barras_region <- por_region %>%
plot_ly(x = ~reorder(region, -ventas_totales), y = ~ventas_totales, type = 'bar',
marker = list(color = 'skyblue')) %>%
layout(title = "Figura 1. Ventas totales por región",
xaxis = list(title = "Región"),
yaxis = list(title = "Ventas totales (US$)"),
hovermode = "x")
grafico_barras_region
Interpretación Figura 1.
📌 La región West concentra las mayores ventas, con cerca de 36.4 millones de dólares, seguida por Northeast (25.1 millones) y Southeast (21.4 millones).
📊 South y Midwest son las regiones con menor participación en ventas totales (20.6 y 16.7 millones respectivamente), aunque South tiene el margen operativo promedio más alto de las cinco regiones (46.7%).
Gráfico de barras - Ventas por distribuidor
por_distribuidor <- datos %>%
group_by(distribuidor) %>%
summarise(ventas_totales = sum(ventas_total)) %>%
arrange(desc(ventas_totales))
grafico_barras_distribuidor <- por_distribuidor %>%
plot_ly(x = ~reorder(distribuidor, -ventas_totales), y = ~ventas_totales, type = 'bar',
marker = list(color = 'lightgreen')) %>%
layout(title = "Figura 2. Ventas totales por distribuidor",
xaxis = list(title = "Distribuidor"),
yaxis = list(title = "Ventas totales (US$)"),
hovermode = "x")
grafico_barras_distribuidor
Interpretación Figura 2.
📌 West Gear (32.4 millones) y Foot Locker (29.0 millones) son los distribuidores con mayores ventas, seguidos de Sports Direct (24.6 millones).
⚠️ Walmart y Amazon presentan las ventas más bajas del grupo (10.5 y 10.1 millones respectivamente), muy por debajo de los tres principales distribuidores.
Gráfico de barras - Ventas por línea de producto
por_producto <- datos %>%
group_by(producto) %>%
summarise(ventas_totales = sum(ventas_total), margen_prom = mean(margen_operativo)) %>%
arrange(desc(ventas_totales))
grafico_barras_producto <- por_producto %>%
plot_ly(x = ~reorder(producto, -ventas_totales), y = ~ventas_totales, type = 'bar',
marker = list(color = 'goldenrod')) %>%
layout(title = "Figura 3. Ventas totales por línea de producto",
xaxis = list(title = "Producto"),
yaxis = list(title = "Ventas totales (US$)"),
hovermode = "x")
grafico_barras_producto
Interpretación Figura 3.
📌 Men’s Street Footwear (27.7 millones) y Women’s Apparel (23.9 millones) son las líneas de producto más vendidas.
📈 En términos de rentabilidad, Men’s Street Footwear también tiene el margen operativo promedio más alto (44.6%), es decir, es la línea que mejor combina volumen de ventas y rentabilidad.
Boxplot - Ventas totales
ggplotly(
ggplot(datos, aes(y = ventas_total)) +
geom_boxplot(fill = "lightblue", color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
labs(title = "Figura 4. Boxplot de las ventas totales por transacción",
y = "Ventas totales (US$)") +
theme_minimal()
)
Interpretación Figura 4.
📌 Mediana (median: 7,803.5 US$): el 50% de las transacciones tiene ventas inferiores a 7,803.5 dólares y el otro 50% superiores.
📦 Rango intercuartílico (IQR): Q1 = 4,065.25 US$ y Q3 = 15,864.5 US$, es decir, el 50% central de las transacciones se ubica entre esos dos valores.
📊 Rango total: mínimo de 0 US$ y máximo de 82,500 US$.
⚠️ Valores atípicos: cualquier venta superior a 33,563 US$ (upper fence) se considera atípica; se identificaron 799 transacciones atípicas (cerca del 8.3% del total), lo que confirma una distribución con cola derecha larga: la mayoría de las transacciones son de tamaño moderado, pero conviven con un grupo no despreciable de ventas puntuales muy altas.
Boxplot - Margen operativo
ggplotly(
ggplot(datos, aes(y = margen_operativo)) +
geom_boxplot(fill = "lightgreen", color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
labs(title = "Figura 5. Boxplot del margen operativo",
y = "Margen operativo") +
theme_minimal()
)
Interpretación Figura 5.
📌 Mediana (median: 0.41): el margen operativo típico de una transacción es de 41%.
📦 Rango intercuartílico: Q1 = 0.35 y Q3 = 0.49; el 50% central de las transacciones tiene un margen entre 35% y 49%.
📊 Rango total: mínimo de 10% y máximo de 80%.
⚠️ No se observan valores extremos preocupantes por debajo del rango esperado (el límite inferior sería -0.14 y el margen mínimo real es 0.10, dentro del rango), lo que sugiere que Adidas mantiene una política de precios y costos relativamente disciplinada, sin operaciones que vendan por debajo de un margen mínimo aceptable.
Precio por unidad vs. unidades vendidas
ggplotly(
ggplot(datos, aes(x = precio_unidad, y = unidades_vendidas)) +
geom_point(color = "purple", alpha = 0.5, size = 1.5) +
geom_smooth(method = "lm", color = "grey", se = TRUE) +
labs(
title = paste("Figura 6. Relación entre precio por unidad y unidades vendidas\nCoef. de correlación: ",
round(cor(datos$precio_unidad, datos$unidades_vendidas, use = "complete.obs"), 2)),
x = "Precio por unidad (US$)",
y = "Unidades vendidas",
caption = "Fuente: Datos de ventas Adidas"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 13, face = "bold", hjust = 0.5),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10)
)
)
Interpretación Figura 6.
🔹 El coeficiente de correlación es de 0.27, es decir, una relación positiva pero débil entre el precio por unidad y las unidades vendidas.
🔹 No hay evidencia de que precios más altos frenen el volumen de ventas; el número de unidades vendidas depende más del producto, el canal y el distribuidor que del precio en sí mismo.
🔹 Una correlación de 0.27 NO implica una relación causal fuerte: solo una pequeña parte de la variación en unidades vendidas se explica por el precio.
Precio por unidad vs. margen operativo
ggplotly(
ggplot(datos, aes(x = precio_unidad, y = margen_operativo)) +
geom_point(color = "darkorange", alpha = 0.5, size = 1.5) +
geom_smooth(method = "lm", color = "grey", se = TRUE) +
labs(
title = paste("Figura 7. Relación entre precio por unidad y margen operativo\nCoef. de correlación: ",
round(cor(datos$precio_unidad, datos$margen_operativo, use = "complete.obs"), 2)),
x = "Precio por unidad (US$)",
y = "Margen operativo",
caption = "Fuente: Datos de ventas Adidas"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 13, face = "bold", hjust = 0.5),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10)
)
)
Interpretación Figura 7.
🔹 El coeficiente de correlación es de -0.14: una relación débil y negativa.
🔹 Un precio de venta más alto no garantiza un mejor margen operativo; de hecho, hay una leve tendencia a que los productos de precio más alto tengan un margen ligeramente menor, posiblemente por una estructura de costos distinta en esas líneas.
⚠️ Esto sugiere que la rentabilidad de Adidas depende más de la gestión de costos por línea de producto y canal que del nivel de precio de lista.
Ventas totales vs. utilidad operativa
ggplotly(
ggplot(datos, aes(x = ventas_total, y = utilidad_operativa)) +
geom_point(color = "steelblue", alpha = 0.5, size = 1.5) +
geom_smooth(method = "lm", color = "grey", se = TRUE) +
labs(
title = paste("Figura 8. Relación entre ventas totales y utilidad operativa\nCoef. de correlación: ",
round(cor(datos$ventas_total, datos$utilidad_operativa, use = "complete.obs"), 2)),
x = "Ventas totales (US$)",
y = "Utilidad operativa (US$)",
caption = "Fuente: Datos de ventas Adidas"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 13, face = "bold", hjust = 0.5),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10)
)
)
Interpretación Figura 8.
🔹 El coeficiente de correlación es de 0.94: una relación positiva muy fuerte entre ventas totales y utilidad operativa.
🔹 A medida que las ventas totales aumentan, la utilidad operativa crece casi en la misma proporción, lo cual es esperable ya que la utilidad se calcula directamente sobre las ventas mediante el margen operativo de cada transacción.
🔹 Una correlación alta NO significa que el volumen sea la única variable relevante: el margen de cada producto/canal determina qué tan empinada es esa relación, por lo que dos líneas con las mismas ventas pueden generar utilidades muy distintas si tienen márgenes diferentes.
Comparación Ventas vs. Utilidad por línea de producto
comparacion_producto <- datos %>%
group_by(producto) %>%
summarise(ventas_totales = sum(ventas_total), utilidad = sum(utilidad_operativa)) %>%
arrange(desc(ventas_totales))
grafico_lineas_producto <- plot_ly(comparacion_producto, x = ~reorder(producto, -ventas_totales)) %>%
add_lines(y = ~ventas_totales, name = "Ventas totales", line = list(color = 'green')) %>%
add_lines(y = ~utilidad, name = "Utilidad operativa", line = list(color = 'purple')) %>%
layout(title = "Figura 9. Comparación de ventas totales y utilidad operativa por producto",
xaxis = list(title = "Producto"),
yaxis = list(title = "Valor (US$)"),
hovermode = "x")
grafico_lineas_producto
Interpretación Figura 9.
📊 La brecha entre la línea de ventas y la línea de utilidad es más angosta en Men’s Street Footwear y Women’s Apparel, confirmando que son las líneas más rentables en términos relativos, no solo las de mayor volumen.
prod_region <- datos %>%
group_by(producto, region) %>%
summarise(ventas_totales = sum(ventas_total), .groups = "drop")
mapa_calor <- ggplot(prod_region, aes(x = region, y = producto, fill = ventas_totales)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "#EAF2F8", high = "#0067B1") +
labs(title = "Figura 10. Ventas totales por producto y región",
x = NULL, y = NULL, fill = "Ventas") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 30, hjust = 1))
ggplotly(mapa_calor)
Interpretación Figura 10.
📌 Las combinaciones más fuertes en ventas se concentran en la región West, especialmente para Men’s Street Footwear y Women’s Apparel, lo que las convierte en las combinaciones producto-región más estratégicas para priorizar inventario y campañas comerciales.
A partir de los hallazgos anteriores, el equipo directivo de Adidas podría considerar: