Introducción

En este informe se analiza el desempeño comercial y financiero de Adidas a partir de una base de datos de ventas que incluye información de precio por unidad, unidades vendidas, ventas totales, utilidad operativa, margen operativo, método de venta, distribuidor y ubicación geográfica (región, estado, ciudad). El objetivo es realizar un análisis descriptivo y exploratorio (EDA) que permita comprender el comportamiento de las ventas y la rentabilidad, identificar patrones relevantes y proponer recomendaciones basadas en evidencia para la toma de decisiones.

Es importante aclarar que la base de datos no contiene una variable de fecha o periodo, por lo que no es posible calcular tasas de crecimiento en este análisis, el enfoque se centra en estadísticas descriptivas, medidas de variabilidad, correlación y comparación entre segmentos.

Análisis exploratorio

PASO 1. Instalar y cargar librerías

# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)

PASO 2: Cargar la base de datos

IMPORTANTE: el objeto que se crea aquí se llama datos. Todo el resto del informe hace referencia a ese mismo nombre — si lo cambias, debes cambiarlo en TODOS los chunks siguientes también.

El archivo DatosCaso1.xlsx debe estar ubicado en la misma carpeta que este .Rmd (o se debe actualizar la ruta según corresponda).

library(readxl)
datos <- read_excel("DatosCaso1.xlsx", sheet = "Data Sales Adidas")

# Se asigna un identificador único a cada fila
id <- 1:dim(datos)[1]
datos <- data.frame(id, datos)

head(datos)
id distribuidor region estado ciudad producto precio_unidad unidades_vendidas ventas_total utilidad_operativa margen_operativo metodo_venta
1 Foot Locker Northeast New York New York Men’s Street Footwear 50 1200 60000 30000.0 0.50 In-store
2 Foot Locker Northeast New York New York Men’s Athletic Footwear 50 1000 50000 15000.0 0.30 In-store
3 Foot Locker Northeast New York New York Women’s Street Footwear 40 1000 40000 14000.0 0.35 In-store
4 Foot Locker Northeast New York New York Women’s Athletic Footwear 45 850 38250 13387.5 0.35 In-store
5 Foot Locker Northeast New York New York Men’s Apparel 60 900 54000 16200.0 0.30 In-store
6 Foot Locker Northeast New York New York Women’s Apparel 50 1000 50000 12500.0 0.25 In-store

Ahora obtenemos los nombres exactos de las variables que tenemos en la base de datos:

names(datos)
##  [1] "id"                 "distribuidor"       "region"            
##  [4] "estado"             "ciudad"             "producto"          
##  [7] "precio_unidad"      "unidades_vendidas"  "ventas_total"      
## [10] "utilidad_operativa" "margen_operativo"   "metodo_venta"
## Estructura de los datos y número total de registros
str(datos)
## 'data.frame':    9648 obs. of  12 variables:
##  $ id                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ distribuidor      : chr  "Foot Locker" "Foot Locker" "Foot Locker" "Foot Locker" ...
##  $ region            : chr  "Northeast" "Northeast" "Northeast" "Northeast" ...
##  $ estado            : chr  "New York" "New York" "New York" "New York" ...
##  $ ciudad            : chr  "New York" "New York" "New York" "New York" ...
##  $ producto          : chr  "Men's Street Footwear" "Men's Athletic Footwear" "Women's Street Footwear" "Women's Athletic Footwear" ...
##  $ precio_unidad     : num  50 50 40 45 60 50 50 50 40 45 ...
##  $ unidades_vendidas : num  1200 1000 1000 850 900 1000 1250 900 950 825 ...
##  $ ventas_total      : num  60000 50000 40000 38250 54000 ...
##  $ utilidad_operativa: num  30000 15000 14000 13388 16200 ...
##  $ margen_operativo  : num  0.5 0.3 0.35 0.35 0.3 0.25 0.5 0.3 0.35 0.35 ...
##  $ metodo_venta      : chr  "In-store" "In-store" "In-store" "In-store" ...
dim(datos)
## [1] 9648   12

No se encuentran valores faltantes en las variables numéricas principales, por lo que se trabaja con la base de datos completa (9648 registros).

colSums(is.na(datos))
##                 id       distribuidor             region             estado 
##                  0                  0                  0                  0 
##             ciudad           producto      precio_unidad  unidades_vendidas 
##                  0                  0                  0                  0 
##       ventas_total utilidad_operativa   margen_operativo       metodo_venta 
##                  0                  0                  0                  0

Análisis descriptivo y diagnóstico

Indicadores de centralidad y variabilidad

Ventas totales, unidades vendidas, utilidad operativa y margen operativo

## Se calculan los indicadores de centralidad y variabilidad para las variables clave del negocio

indicadores <- data.frame(
  Variable = c("Ventas totales", "Unidades vendidas", "Utilidad operativa", "Margen operativo"),
  Promedio = c(mean(datos$ventas_total, na.rm = TRUE),
               mean(datos$unidades_vendidas, na.rm = TRUE),
               mean(datos$utilidad_operativa, na.rm = TRUE),
               mean(datos$margen_operativo, na.rm = TRUE)),
  Mediana = c(median(datos$ventas_total, na.rm = TRUE),
              median(datos$unidades_vendidas, na.rm = TRUE),
              median(datos$utilidad_operativa, na.rm = TRUE),
              median(datos$margen_operativo, na.rm = TRUE)),
  Minimo = c(min(datos$ventas_total, na.rm = TRUE),
             min(datos$unidades_vendidas, na.rm = TRUE),
             min(datos$utilidad_operativa, na.rm = TRUE),
             min(datos$margen_operativo, na.rm = TRUE)),
  Maximo = c(max(datos$ventas_total, na.rm = TRUE),
             max(datos$unidades_vendidas, na.rm = TRUE),
             max(datos$utilidad_operativa, na.rm = TRUE),
             max(datos$margen_operativo, na.rm = TRUE)),
  Desv_estandar = c(sd(datos$ventas_total, na.rm = TRUE),
                     sd(datos$unidades_vendidas, na.rm = TRUE),
                     sd(datos$utilidad_operativa, na.rm = TRUE),
                     sd(datos$margen_operativo, na.rm = TRUE))
)

indicadores
Variable Promedio Mediana Minimo Maximo Desv_estandar
Ventas totales 1.245508e+04 7803.50 0.0 82500.0 1.271639e+04
Unidades vendidas 2.569300e+02 176.00 0.0 1275.0 2.142520e+02
Utilidad operativa 4.894794e+03 3262.98 0.0 39000.0 4.866464e+03
Margen operativo 4.229913e-01 0.41 0.1 0.8 9.719740e-02

Interpretación

Ventas totales: el promedio de ventas por transacción/registro es considerablemente mayor que la mediana, lo que indica una distribución sesgada a la derecha: hay un número reducido de ventas muy altas que elevan el promedio.

Unidades vendidas: ocurre el mismo patrón, con una alta desviación estándar respecto a la mediana, lo que sugiere alta variabilidad entre transacciones pequeñas y grandes pedidos.

Margen operativo: el promedio y la mediana son muy cercanos (~0.41-0.42), lo que indica una distribución más simétrica y estable que las variables de venta.


Ventas por segmento

Ventas totales por producto

ventas_producto <- datos %>%
  group_by(producto) %>%
  summarise(Ventas_totales = sum(ventas_total, na.rm = TRUE)) %>%
  arrange(desc(Ventas_totales))

ventas_producto
producto Ventas_totales
Men’s Street Footwear 27680769
Women’s Apparel 23870985
Men’s Athletic Footwear 20577180
Women’s Street Footwear 17201563
Men’s Apparel 16520632
Women’s Athletic Footwear 14315521
ggplotly(
  ggplot(ventas_producto, aes(x = reorder(producto, Ventas_totales), y = Ventas_totales)) +
    geom_bar(stat = "identity", fill = "steelblue", color = "black", alpha = 0.7) +
    coord_flip() +
    labs(title = "Figura 1. Ventas totales por línea de producto",
         x = "Producto", y = "Ventas totales (USD)") +
    theme_minimal()
)

Interpretación Figura 1.

Men’s Street Footwear es la línea con mayores ventas totales, seguida de Women’s Apparel.

Las categorías de calzado (“Footwear”) en conjunto concentran una parte importante de las ventas, especialmente en la línea masculina de calzado urbano.

Women’s Athletic Footwear es la línea con menor participación en ventas totales dentro del portafolio analizado.

Ventas totales por región

ventas_region <- datos %>%
  group_by(region) %>%
  summarise(Ventas_totales = sum(ventas_total, na.rm = TRUE)) %>%
  arrange(desc(Ventas_totales))

ventas_region
region Ventas_totales
West 36436157
Northeast 25078267
Southeast 21374436
South 20603356
Midwest 16674434
ggplotly(
  ggplot(ventas_region, aes(x = reorder(region, Ventas_totales), y = Ventas_totales)) +
    geom_bar(stat = "identity", fill = "darkorange", color = "black", alpha = 0.7) +
    coord_flip() +
    labs(title = "Figura 2. Ventas totales por región",
         x = "Región", y = "Ventas totales (USD)") +
    theme_minimal()
)

Interpretación Figura 2.

La región West concentra el mayor volumen de ventas totales, muy por encima de las demás regiones.

La región Midwest presenta el menor nivel de ventas, lo que podría indicar menor penetración de mercado o menor densidad de puntos de venta.

Ventas totales por distribuidor (retailer)

ventas_distribuidor <- datos %>%
  group_by(distribuidor) %>%
  summarise(Ventas_totales = sum(ventas_total, na.rm = TRUE)) %>%
  arrange(desc(Ventas_totales))

ventas_distribuidor
distribuidor Ventas_totales
West Gear 32409558
Foot Locker 29024945
Sports Direct 24616622
Kohl’s 13512453
Walmart 10506085
Amazon 10096987
ggplotly(
  ggplot(ventas_distribuidor, aes(x = reorder(distribuidor, Ventas_totales), y = Ventas_totales)) +
    geom_bar(stat = "identity", fill = "seagreen", color = "black", alpha = 0.7) +
    coord_flip() +
    labs(title = "Figura 3. Ventas totales por distribuidor",
         x = "Distribuidor", y = "Ventas totales (USD)") +
    theme_minimal()
)

Interpretación Figura 3.

West Gear y Foot Locker son los distribuidores con mayor volumen de ventas totales.

Amazon y Walmart presentan el menor volumen de ventas dentro de los canales analizados, lo que podría sugerir oportunidades de crecimiento en canal digital/masivo.


Rentabilidad: utilidad y margen operativo

Distribución de la utilidad operativa

ggplotly(
  ggplot(datos, aes(x = utilidad_operativa)) +
    geom_histogram(binwidth = 2000, fill = "purple", color = "black", alpha = 0.6) +
    labs(title = "Figura 4. Histograma de la utilidad operativa",
         x = "Utilidad operativa (USD)", y = "Frecuencia") +
    theme_minimal()
)

Interpretación Figura 4.

La mayoría de los registros presenta utilidades operativas relativamente bajas, concentradas por debajo del promedio (4895 USD).

La distribución tiene una cola larga hacia la derecha: existen transacciones con utilidades muy altas (hasta USD 3.9^{4}), pero son poco frecuentes.

Margen operativo por producto

margen_producto <- datos %>%
  group_by(producto) %>%
  summarise(Margen_promedio = mean(margen_operativo, na.rm = TRUE)) %>%
  arrange(desc(Margen_promedio))

margen_producto
producto Margen_promedio
Men’s Street Footwear 0.4461304
Women’s Apparel 0.4413184
Women’s Athletic Footwear 0.4243587
Men’s Apparel 0.4132254
Women’s Street Footwear 0.4101990
Men’s Athletic Footwear 0.4027019
ggplotly(
  ggplot(margen_producto, aes(x = reorder(producto, Margen_promedio), y = Margen_promedio)) +
    geom_bar(stat = "identity", fill = "tomato", color = "black", alpha = 0.7) +
    coord_flip() +
    labs(title = "Figura 5. Margen operativo promedio por producto",
         x = "Producto", y = "Margen operativo promedio") +
    theme_minimal()
)

Interpretación Figura 5.

Men’s Street Footwear no solo lidera en ventas totales, sino que también tiene uno de los márgenes operativos promedio más altos, lo que lo convierte en la línea más estratégica del portafolio.

Men’s Athletic Footwear presenta el margen operativo promedio más bajo entre las seis líneas de producto.

Margen operativo por método de venta

margen_metodo <- datos %>%
  group_by(metodo_venta) %>%
  summarise(Margen_promedio = mean(margen_operativo, na.rm = TRUE),
            Ventas_totales = sum(ventas_total, na.rm = TRUE)) %>%
  arrange(desc(Margen_promedio))

margen_metodo
metodo_venta Margen_promedio Ventas_totales
Online 0.4641522 44965657
Outlet 0.3948758 39536618
In-store 0.3561207 35664375
ggplotly(
  ggplot(datos, aes(x = metodo_venta, y = margen_operativo)) +
    geom_boxplot(fill = "lightblue", color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
    labs(title = "Figura 6. Boxplot del margen operativo por método de venta",
         x = "Método de venta", y = "Margen operativo") +
    theme_minimal()
)

Interpretación Figura 6.

El canal Online presenta el margen operativo promedio más alto (0.464), seguido de Outlet e In-store.

Aunque el canal Online es el más rentable en términos de margen, conviene revisar el volumen de ventas de cada canal para evaluar su aporte total al negocio, no solo su rentabilidad relativa.

Se observan algunos valores atípicos (outliers) en el margen operativo dentro de cada canal, marcados en rojo, que podrían corresponder a promociones puntuales o descuentos agresivos.


Detección de valores atípicos

Boxplot de ventas totales por región

ggplotly(
  ggplot(datos, aes(x = region, y = ventas_total)) +
    geom_boxplot(fill = "khaki", color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
    labs(title = "Figura 7. Boxplot de ventas totales por región",
         x = "Región", y = "Ventas totales (USD)") +
    theme_minimal()
)

Interpretación Figura 7.

Todas las regiones presentan una alta cantidad de valores atípicos por encima del bigote superior, lo que confirma que existen transacciones o combinaciones producto-tienda con ventas excepcionalmente altas en todas las zonas del país.

La región West no solo tiene la mediana más alta, sino también la mayor dispersión, coherente con ser la región de mayores ventas totales.


Relación entre variables clave

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 = "loess", color = "grey30", se = TRUE) +
    labs(
      title = paste("Figura 8. 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 (USD)",
      y = "Unidades vendidas"
    ) +
    theme_minimal() +
    theme(plot.title = element_text(size = 12, face = "bold", hjust = 0.5))
)

Interpretación Figura 8.

El coeficiente de correlación entre el precio por unidad y las unidades vendidas es de aproximadamente 0.27, una relación positiva mucho más débil que fuerte.

Esto sugiere que, a diferencia de lo que se esperaría en un mercado sensible al precio, el precio no es el principal determinante del volumen de unidades vendidas; probablemente el producto, la región o el canal de venta influyen más en el volumen.

Es un hallazgo relevante: subir el precio no necesariamente reduce las unidades vendidas de forma proporcional, lo que podría dar espacio para estrategias de precio en ciertas líneas.

Ventas totales vs. utilidad operativa

ggplotly(
  ggplot(datos, aes(x = ventas_total, y = utilidad_operativa)) +
    geom_point(color = "seagreen", alpha = 0.5, size = 1.5) +
    geom_smooth(method = "lm", color = "black", se = TRUE) +
    labs(
      title = paste("Figura 9. 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 (USD)",
      y = "Utilidad operativa (USD)"
    ) +
    theme_minimal() +
    theme(plot.title = element_text(size = 12, face = "bold", hjust = 0.5))
)

Interpretación Figura 9.

La correlación entre ventas totales y utilidad operativa es muy alta (~0.94), lo que indica una relación fuerte y directa: a mayor venta, mayor utilidad operativa en términos absolutos.

Esto es esperable dado que la utilidad operativa se deriva directamente de las ventas, pero confirma que el crecimiento en ventas es el principal impulsor de la utilidad, más que el margen en sí mismo.

Una correlación alta NO significa causalidad directa automática, pero en este caso es coherente con la definición contable de las variables (la utilidad depende matemáticamente de las ventas y el margen).


Análisis cruzado: producto + región y producto + método de venta

Ventas totales por producto y región

tabla_cruzada <- datos %>%
  group_by(producto, region) %>%
  summarise(Ventas_totales = sum(ventas_total, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(Ventas_totales))

head(tabla_cruzada, 10)
producto region Ventas_totales
Men’s Street Footwear West 7389988
Women’s Apparel West 7038046
Men’s Street Footwear Northeast 6841324
Men’s Athletic Footwear West 6761339
Women’s Street Footwear West 5748586
Women’s Apparel Northeast 5045208
Men’s Apparel West 4827378
Men’s Street Footwear Midwest 4707360
Men’s Street Footwear Southeast 4693836
Women’s Athletic Footwear West 4670820
ggplotly(
  ggplot(tabla_cruzada, aes(x = region, y = Ventas_totales, fill = producto)) +
    geom_bar(stat = "identity", position = "dodge") +
    labs(title = "Figura 10. Ventas totales por producto y región",
         x = "Región", y = "Ventas totales (USD)", fill = "Producto") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 30, hjust = 1))
)

Interpretación Figura 10.

La combinación Men’s Street Footwear + West es la que genera mayores ventas totales, seguida de Women’s Apparel + West y Men’s Street Footwear + Northeast.

La región West aparece de forma recurrente entre las combinaciones más fuertes para casi todas las líneas de producto, confirmando su relevancia estratégica para Adidas.

Margen operativo promedio por producto y método de venta

tabla_margen_cruzada <- datos %>%
  group_by(producto, metodo_venta) %>%
  summarise(Margen_promedio = mean(margen_operativo, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(Margen_promedio))

head(tabla_margen_cruzada, 10)
producto metodo_venta Margen_promedio
Women’s Apparel Online 0.4879509
Men’s Street Footwear Online 0.4851716
Women’s Athletic Footwear Online 0.4644349
Men’s Apparel Online 0.4517220
Women’s Street Footwear Online 0.4513865
Men’s Athletic Footwear Online 0.4442157
Men’s Street Footwear Outlet 0.4188889
Women’s Athletic Footwear Outlet 0.4065139
Women’s Apparel Outlet 0.4030020
Women’s Street Footwear Outlet 0.3882107

Interpretación

Las combinaciones con mayor margen operativo promedio corresponden, en su mayoría, al canal Online combinado con las líneas Women’s Apparel y Men’s Street Footwear, reforzando que el canal digital es el más rentable independientemente del producto.


Participación de los productos en las ventas totales

participacion <- datos %>%
  group_by(producto) %>%
  summarise(Ventas_totales = sum(ventas_total, na.rm = TRUE)) %>%
  mutate(Participacion_pct = round(Ventas_totales / sum(Ventas_totales) * 100, 1)) %>%
  arrange(desc(Participacion_pct))

participacion
producto Ventas_totales Participacion_pct
Men’s Street Footwear 27680769 23.0
Women’s Apparel 23870985 19.9
Men’s Athletic Footwear 20577180 17.1
Women’s Street Footwear 17201563 14.3
Men’s Apparel 16520632 13.7
Women’s Athletic Footwear 14315521 11.9
ggplot(participacion, aes(x = "", y = Participacion_pct, fill = producto)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y", start = 0) +
  labs(title = "Figura 11. Participación de cada producto en las ventas totales", fill = "Producto") +
  theme_void()

Interpretación Figura 11.

Men’s Street Footwear representa cerca del 23% de las ventas totales, siendo la línea con mayor participación dentro del portafolio.

Las tres primeras líneas de producto (Men’s Street Footwear, Women’s Apparel y Men’s Athletic Footwear) concentran más de la mitad de las ventas totales de la compañía.


Principales hallazgos

  1. Concentración de ventas: la línea Men’s Street Footwear es la más vendida y una de las más rentables, concentrando cerca de una cuarta parte de las ventas totales.
  2. Liderazgo regional: la región West concentra el mayor volumen de ventas, mientras que Midwest es la de menor desempeño comercial.
  3. Distribuidores clave: West Gear y Foot Locker son los distribuidores con mayor volumen de ventas; Amazon y Walmart tienen el menor volumen dentro de los canales analizados.
  4. Rentabilidad por canal: el canal Online presenta el margen operativo promedio más alto (~0.46), por encima de Outlet (~0.39) e In-store (~0.36), aunque su participación en ventas totales no es la mayor.
  5. Precio vs. volumen: la correlación entre precio por unidad y unidades vendidas es débil (~0.27), lo que sugiere que el precio no es el principal factor que explica el volumen de ventas.
  6. Ventas vs. utilidad: existe una relación fuerte (~0.94) entre ventas totales y utilidad operativa, confirmando que el crecimiento en ventas impulsa directamente la utilidad.
  7. Valores atípicos: se identifican múltiples outliers de ventas totales en todas las regiones, lo que indica la existencia de transacciones o combinaciones producto-tienda con desempeño excepcional que merecen un análisis puntual.
  8. Combinaciones estratégicas: Men’s Street Footwear + West y Women’s Apparel + West son las combinaciones producto-región con mayores ventas; Women’s Apparel + Online y Men’s Street Footwear + Online son las combinaciones producto-método con mayor margen.

Conclusiones y recomendaciones (Analítica Prescriptiva)

Conclusiones

  • El negocio de Adidas está fuertemente concentrado en pocas líneas de producto (calzado urbano masculino y ropa femenina) y en la región West, lo que representa tanto una fortaleza (líneas ganadoras identificadas) como un riesgo de concentración.
  • La rentabilidad (margen operativo) no está distribuida de forma homogénea entre canales: el canal Online es el más eficiente en términos de margen, aunque no es el de mayor volumen.
  • El precio por unidad tiene una influencia limitada sobre el volumen de unidades vendidas, lo que indica que otros factores (marca, canal, región, producto) explican mejor las ventas que el precio en sí mismo.

Recomendaciones para ADIDAS

  • Impulsar el canal Online: dado que presenta el mayor margen operativo promedio, se recomienda aumentar la inversión en marketing digital y capacidad logística para este canal, buscando incrementar su participación en las ventas totales sin sacrificar margen.
  • Fortalecer la línea Men’s Street Footwear: al ser la línea con mayor participación en ventas y uno de los mejores márgenes, debería priorizarse en la asignación de inventario y en campañas promocionales, especialmente en la región West.
  • Revisar la estrategia en Midwest: dado su bajo desempeño relativo en ventas totales, se recomienda evaluar la cobertura de distribuidores y la oferta de producto en esta región para identificar oportunidades de crecimiento.
  • Explorar ajustes de precio de forma controlada: dado que la correlación entre precio y unidades vendidas es baja, Adidas podría evaluar incrementos de precio selectivos en líneas de alto desempeño (como Men’s Street Footwear) sin afectar significativamente el volumen, mejorando así la utilidad operativa.
  • Investigar los valores atípicos de ventas altas: analizar en detalle las transacciones o tiendas con ventas excepcionalmente altas (outliers) para identificar buenas prácticas replicables (promociones, mix de producto, ubicación) en otras tiendas o regiones.
  • Fortalecer alianzas con distribuidores de bajo desempeño: evaluar acuerdos comerciales, visibilidad de producto o condiciones de venta con Amazon y Walmart, dado su menor volumen de ventas frente a otros distribuidores.