Introducción

Adidas es una de las empresas líderes del sector deportivo a nivel mundial, destacándose por la comercialización de calzado, ropa y accesorios. En un mercado altamente competitivo, resulta fundamental analizar el comportamiento de las ventas y la rentabilidad para identificar oportunidades de crecimiento y fortalecer la toma de decisiones estratégicas.

En este informe se evalúa el desempeño comercial de la compañía a partir de variables clave como producto, región, método de venta, ventas totales y utilidad operativa. El objetivo es identificar cuáles son los productos, mercados y canales que generan mayor valor para la organización, proporcionando información que sirva de apoyo para la formulación de estrategias orientadas a maximizar las ventas y la rentabilidad de Adidas.

Análisis exploratorio

El análisis exploratorio de datos (EDA) nos permite conocer y entender mejor la información de Adidas, revisando los productos, las regiones y los canales de venta para encontrar patrones, tendencias y datos que puedan ser importantes para la marca.

PASO 1. Instalar y cargar librerias

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

PASO 2: Actualizar ruta o codigo del excel Tabla resumen: Ventas y Utilidad por Producto

Se filtra la base de datos teniendo en cuenta sólo apartamentos y el barrio Santa teresita:

El código siguiente carga un archivo de Excel con datos de viviendas, les asigna un ID único a cada fila, y luego filtra los apartamentos que están en el barrio “Santa Teresita”, permitiendo pequeñas diferencias en la escritura del nombre.

library(readxl)
datos<- read_excel("C:/Users/jerly.cortes/Downloads/2026-2/lunes/CORTE 1/CASO 1/DatosCaso1.xlsx")



# Generar una secuencia de números desde 1 hasta el número total de filas
id = 1:dim(datos)[1]
datos = data.frame(id, datos)

# Asignar a datos_sub para conservar el esquema de análisis
datos_sub = datos
head(datos_sub)
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

library(dplyr)
names(datos_sub)
##  [1] "id"                 "distribuidor"       "region"            
##  [4] "estado"             "ciudad"             "producto"          
##  [7] "precio_unidad"      "unidades_vendidas"  "ventas_total"      
## [10] "utilidad_operativa" "margen_operativo"   "metodo_venta"
length(datos_sub$id)
## [1] 9648

Indicadores de centralidad

# Indicadores para la variable Ventas Totales
promedio_ventas = mean(datos_sub$ventas_total, na.rm = TRUE)
mediana_ventas = median(datos_sub$ventas_total, na.rm = TRUE)
minimo_ventas = min(datos_sub$ventas_total, na.rm = TRUE)
maximo_ventas = max(datos_sub$ventas_total, na.rm = TRUE)
desvest_ventas = sd(datos_sub$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 para la variable Utilidad Operativa
promedio_utilidad = mean(datos_sub$utilidad_operativa, na.rm = TRUE)
mediana_utilidad = median(datos_sub$utilidad_operativa, na.rm = TRUE)
minimo_utilidad = min(datos_sub$utilidad_operativa, na.rm = TRUE)
maximo_utilidad = max(datos_sub$utilidad_operativa, na.rm = TRUE)
desvest_utilidad = sd(datos_sub$utilidad_operativa, na.rm = TRUE)

indic_utilidad = data.frame(promedio_utilidad, mediana_utilidad, minimo_utilidad, maximo_utilidad, desvest_utilidad)
indic_utilidad
promedio_utilidad mediana_utilidad minimo_utilidad maximo_utilidad desvest_utilidad
4894.794 3262.98 0 39000 4866.464

Representación gráfica

Grafico de Barras

Producto

Ahora creamos del gráfico de barras interactivo para analizar las ventas acumuladas por categoría de producto:

colnames(datos_sub)  # Muestra los nombres de las columnas
##  [1] "id"                 "distribuidor"       "region"            
##  [4] "estado"             "ciudad"             "producto"          
##  [7] "precio_unidad"      "unidades_vendidas"  "ventas_total"      
## [10] "utilidad_operativa" "margen_operativo"   "metodo_venta"
str(datos_sub)       # Muestra la estructura del dataframe
## '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" ...
grafico_producto <- datos_sub %>% 
  group_by(producto) %>% 
  summarise(Ventas = sum(ventas_total)/1e6) %>% 
  plot_ly(x = ~reorder(producto, -Ventas), y = ~Ventas, type = 'bar',
          marker = list(color = 'skyblue', line = list(color = 'black', width = 1))) %>% 
  layout(
    title = list(text = "<b>Figura 1. Ventas Totales por Línea de Producto (Millones USD)</b>", font = list(size = 14)),
    xaxis = list(title = "Línea de Producto"),
    yaxis = list(title = "Ventas Totales (Millones USD)"),
    margin = list(b = 150),
    annotations = list(
      list(
        x = 0, y = -0.35, 
        text = "<b>Fuente:</b> Base de datos de Ventas Adidas (Caso 1)", 
        showarrow = FALSE, 
        xref = 'paper', yref = 'paper', 
        xanchor = 'left', yanchor = 'top', 
        font = list(size = 10, color = "gray")
      )
    ),
    hovermode = "x"
  )

grafico_producto

Interpretación Figura 1:

La Figura 1. muestra las ventas totales por producto en millones de dolares.

Punto de partida: La categoría Men’s Street Footwear lidera la facturación total de la compañía con $27.68M USD, seguida por Women’s Apparel con $23.87M USD.

Segmento inferior: La categoría con menor volumen de ventas brutas es Women’s Athletic Footwear con $14.32M USD.

Distribución: El calzado casual/urbano supera significativamente en ventas al calzado especializado deportivo en ambos géneros.

Existe una brecha comercial de $13.36M USD entre la línea más vendida y la menos vendida.

El calzado urbano masculino (Men’s Street Footwear) representa el motor principal de ingresos de Adidas, lo que indica que la marca ha logrado una adopción masiva en la moda de calle (lifestyle / streetwear) por encima del uso puramente atlético.

Boxplot

Método de Venta

Ahora realizamos una representación visual por medio de un boxplot interactivo para evaluar la dispersión de las ventas por cada canal:

g_boxplot <- ggplot(datos_sub, aes(x = metodo_venta, y = ventas_total, fill = metodo_venta)) +
  geom_boxplot(color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
  scale_fill_manual(values = c("lightblue", "lightgreen", "coral")) +
  labs(
    title = "Figura 2. Boxplot de Ventas por Método de Venta",
    x = "Método de Venta",
    y = "Ventas Totales (USD)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

ggplotly(g_boxplot) %>% 
  layout(
    margin = list(b = 150),
    annotations = list(
      list(
        x = 0, y = -0.25, 
        text = "<b>Fuente:</b> Base de datos de Ventas Adidas (Caso 1)", 
        showarrow = FALSE, 
        xref = 'paper', yref = 'paper', 
        xanchor = 'left', yanchor = 'top', 
        font = list(size = 10, color = "gray")
      )
    )
  )

Interpretación Figura 2:

En la figuera 2. muestra la Distribución de Ventas por Método de Venta.

Medianas por transacción: Las tiendas físicas (In-store) presentan el valor mediano por venta más alto ($16,875 USD), seguidas por los Outlets ($7,785 USD) y el canal Online ($6,000 USD).

Atípicos y rangos: El canal In-store llega a registrar transacciones máximas de $82,500 USD, mostrando un rango intercuartílico mucho más amplio que los demás canales.

Acumulado total: A pesar de tener transacciones individuales más pequeñas, el canal Online es el que más dinero genera en total ($44.97M USD con 4,889 registros).

Las tiendas físicas funcionan bajo un modelo de compras de mayor volumen por transacción (compras mayoristas o de inventario grande).

El canal digital (Online) opera bajo un modelo de transacciones pequeñas pero de alta frecuencia y masividad, además de ofrecer el margen operativo promedio más alto de la empresa (46.42% vs 35.61% de In-store).

Grafico de Barras Horizontales

Región

Visualización de la utilidad operativa generada según la región geográfica:

grafico_region <- datos_sub %>% 
  group_by(region) %>% 
  summarise(Utilidad = sum(utilidad_operativa)/1e6) %>% 
  plot_ly(x = ~Utilidad, y = ~reorder(region, Utilidad), type = 'bar', orientation = 'h',
          marker = list(color = 'lightgreen', line = list(color = 'black', width = 1))) %>% 
  layout(
    title = list(text = "<b>Figura 3. Utilidad Operativa por Región (Millones USD)</b>", font = list(size = 14)),
    xaxis = list(title = "Utilidad Operativa (Millones USD)"),
    yaxis = list(title = "Región"),
    margin = list(b = 150),
    annotations = list(
      list(
        x = 0, y = -0.25, 
        text = "<b>Fuente:</b> Base de datos de Ventas Adidas (Caso 1)", 
        showarrow = FALSE, 
        xref = 'paper', yref = 'paper', 
        xanchor = 'left', yanchor = 'top', 
        font = list(size = 10, color = "gray")
      )
    )
  )

grafico_region

Interpretación Fgura 3:

La figura 3. Muestra la utilidad operativa por Región

Región líder: La región West encabeza la generación de utilidad operativa con $13.02M USD (provenientes de $36.44M USD en ventas).

Región con menor desempeño: La región Midwest aporta la menor utilidad operativa acumulada con solo $6.86M USD.

Zona intermedia: Las regiones Northeast ($9.73M USD), South ($9.22M USD) y Southeast ($8.39M USD) mantienen niveles de utilidad cercanos entre sí.

Existe una concentración geográfica del negocio: la región West genera casi el doble de utilidades que la región Midwest.

Cabe resaltar que aunque Midwest vende menos volumen, su margen operativo promedio es del 43.53%, lo cual indica que la plaza es rentable unitariamente pero le falta volumen de ventas.

Gráfico de dispersión

Relación Ventas vs. Utilidad Operativa

Exploración bivariada entre las ventas totales y la utilidad operativa obtenida.

# Calcular el coeficiente de correlación
correlacion <- round(cor(datos_sub$ventas_total, datos_sub$utilidad_operativa, use = "complete.obs"), 2)

grafico_dispersion <- ggplot(datos_sub, aes(x = ventas_total, y = utilidad_operativa)) +
  geom_point(color = "purple", alpha = 0.5, size = 1.8) +
  geom_smooth(method = "lm", color = "black", se = TRUE) +
  labs(
    title = paste("Figura 4. Relación Ventas Totales vs. Utilidad Operativa - Correlación:", correlacion),
    x = "Ventas Totales (USD)",
    y = "Utilidad Operativa (USD)"
  ) +
  theme_minimal()

ggplotly(grafico_dispersion) %>% 
  layout(
    margin = list(b = 150),
    annotations = list(
      list(
        x = 0, y = -0.25, 
        text = "<b>Fuente:</b> Base de datos de Ventas Adidas (Caso 1)", 
        showarrow = FALSE, 
        xref = 'paper', yref = 'paper', 
        xanchor = 'left', yanchor = 'top', 
        font = list(size = 10, color = "gray")
      )
    )
  )

Interpretación Figura 4:

En la figura 4. se muestra la relación Ventas vs. Utilidad Operativa.

Dirección de los puntos: Todos los puntos morados muestran una trayectoria ascendente continua de izquierda a derecha.

Línea de tendencia: La recta de regresión negra asciende de forma pronunciada y constante. Métrica clave: El coeficiente de correlación de Pearson es de 0.94.

Un coeficiente de \(r = 0.94\) indica una correlación positiva muy fuerte y casi perfecta.

Esto demuestra que la estructura de costos operativos de Adidas es estable y proporcional: por cada incremento en el volumen de ventas brutas, la utilidad operativa crece en una proporción predecible sin que los costos fijos destruyan el beneficio neto.

Hallazgos Relevantes

Liderazgo Urbano: El segmento Street Footwear es el pilar comercial de la marca. Eficiencia Digital: El canal Online aporta la mayor rentabilidad acumulada total gracias a sus reducidos costos operativos fijos. Potencial Geográfico: La región West concentra la mayor contribución a las utilidades globales.

Conclusiones y Recomendaciones para ADIDAS

Fortalecer la presencia Digital (E-commerce): Incrementar la inversión publicitaria digital, pues el canal Online es el más rentable. Expansion de la línea Streetwear: Expandir el portafolio de calzado urbano femenino aprovechando el éxito de la línea masculina. Estrategia en la Región Midwest: Reorganizar la fuerza de ventas en la región Midwest para equiparar su rendimiento con la región West.