Introducción

El presente informe tiene como objetivo analizar las ventas de la marca Adidas a partir de un conjunto de datos que incluye información sobre precios, unidades vendidas, márgenes operativos y métodos de venta.

Este análisis permitirá obtener una visión integral sobre el comportamiento de las ventas, destacando variables clave como el precio promedio por unidad, el volumen de ventas, la utilidad total y los márgenes de operación, tanto a nivel general como desagregado por método de venta y retailer.

De esta manera, el estudio no solo facilita la comprensión del desempeño comercial de la compañía en diferentes contextos, sino que también ofrece una base sólida para la toma de decisiones estratégicas orientadas a optimizar la rentabilidad y la participación en el mercado.

Análisis exploratorio

A través de un análisis exploratorio de datos (EDA), se busca identificar patrones de consumo, niveles de rentabilidad y diferencias en el desempeño de los distintos canales de comercialización.

PASO 1. Instalar y cargar librerias

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

PASO 2: Filtar o seleccionar la información que necesito

El código siguiente carga un archivo de Excel con datos de ventas de Adidas (cifras expresadas en USD), asigna un ID único a cada fila y posteriormente organiza la información para agrupar y resumir las ventas según diferentes variables, como el método de venta y el retailer, lo que permite analizar patrones y comparar el desempeño entre categorías.

library(dplyr)
library(readxl)
datos<- read_excel("C:/Users/maruj/OneDrive/Escritorio/Maestria DYO/Analitica de negocio/Caso1/Adidas.xlsx")



id=1:dim(datos)[1]
datos=data.frame(id,datos)


# resumen
resumen <- datos %>%
  group_by(retailer , sales_method) %>%
  summarise(
    precio_promedio   = mean(price_per_unit, na.rm = TRUE),
    unidades_totales  = sum(units_sold, na.rm = TRUE),
    ventas_totales    = sum(total_sales, na.rm = TRUE),
    utilidad_total    = sum(operating_profit, na.rm = TRUE),
    margen_promedio   = mean(operating_margin, na.rm = TRUE)
  ) %>%
  arrange(sales_method, retailer)

# Mostrar primeras filas
head(resumen)
retailer sales_method precio_promedio unidades_totales ventas_totales utilidad_total margen_promedio
Amazon In-store 54.74576 40050 2236625 835908.8 0.3631356
Foot Locker In-store 44.92205 160745 7652500 2809200.0 0.3632517
Kohl’s In-store 45.69444 63370 2956625 1059706.2 0.3552083
Sports Direct In-store 48.02048 111370 5504850 2061463.8 0.3484642
Walmart In-store 76.48649 20700 1641125 493037.5 0.2986486
West Gear In-store 49.82833 293755 15672650 5499812.5 0.3567954

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

library(dplyr)
names(datos)
##  [1] "id"               "retailer"         "Region"           "State"           
##  [5] "City"             "Product"          "price_per_unit"   "units_sold"      
##  [9] "total_sales"      "operating_profit" "operating_margin" "sales_method"
# Registros totales 
nrow(datos)
## [1] 9648

Indicadores de centralidad

# Indicadores de centralidad para Adidas
# Se calculan los promedios de precio, margen, asi como los totales en ventas y en utilidades etc.

library(dplyr)

# Calcular promedios agrupados por retailer
resultado_centralidad_retailer <- datos %>%
  group_by(retailer) %>%
  summarise(
    cantidad_registros = n(),
    promedio_precio    = mean(price_per_unit, na.rm = TRUE),
    total_unidades     = sum(units_sold, na.rm = TRUE),
    total_ventas       = sum(total_sales, na.rm = TRUE),
    total_utilidad  = sum(operating_profit, na.rm = TRUE),
    promedio_margen    = mean(as.numeric(gsub("%", "", operating_margin)), na.rm = TRUE)
  )

# Mostrar resultados
resultado_centralidad_retailer
retailer cantidad_registros promedio_precio total_unidades total_ventas total_utilidad promedio_margen
Amazon 949 48.75975 197990 10096987 3984432 0.4178714
Foot Locker 2637 44.78498 604369 29024945 11317027 0.4179333
Kohl’s 1030 44.60874 287375 13512453 5182260 0.4192913
Sports Direct 2032 42.04675 557640 24616622 10641609 0.4448917
Walmart 626 47.18371 206225 10506085 3902749 0.4065335
West Gear 2374 46.73799 625262 32409558 12196891 0.4178559

A continuacion realizaremos un analisis general de las ventas por cada retailer

Precio promedio por unidad en cada retailer.

Amazon (US$48.76) tienen el precio promedio más altos, vende los productos de Adidas a un ticket promedio mayor que el resto de retailers.

Sports Direct (US$42.05) tiene el precio promedio más bajo, puede estar usando una estrategia más agresiva de precio para posicionarse en el mercado.

Total unidades vendidas

West Gear (625,262) y Foot Locker (604,369) son los que más unidades han vendido.

Amazon tiene solo 197,990 unidades vendidas, lo cual es bajo en comparación con los demas retailers, pero lo compensa con un precio promedio más alto.

Total ventas ($)

El retailer con mayor ventas es West Gear (US$32.4M), seguido de Foot Locker (US$29.0M) y Sports Direct ($24.6M).

Amazon cae bastante en ventas (US$10.1M), aunque tiene precios altos, el volumen de unidades es bajo.

Walmart también está relativamente bajo (US$10.5M), pese a que su precio promedio es alto, lo que puede sugerir menor cobertura o participación.

Total de utilidad

El retailer con mayor utilidad es west gear (US$12.2M), seguido de Foot Locker con (US$11.3M).

Podemos observar que a nivel general West Gear es lider en ventas y en utilidad, con una buena combinacion del P*Q, por otro lado Amazon y Walmart, a pesar de tener precios altos se están quedando muy atrás en ventas totales y utilidades esto puede ser una posible señal de que no tienen la misma penetración en este mercado (adidas)

Representación gráfica

Teniendo en cuenta el resumen anterior a continuación mostraremos la distribución de los precios de venta de cada uno de los retailer, lo cual nos permite identificar la dispersión, la mediana y posibles valores atípicos.

library(ggplot2)
library(plotly)

# Boxplot interactivo con cajas en escala de grises (fondo blanco, letras negras)
p <- ggplot(datos, aes(x = retailer, y = price_per_unit, fill = retailer)) +
  geom_boxplot(alpha = 0.8, outlier.color = "black", outlier.size = 2) +
  labs(
    title = "Fig 1. Distribución de Precios por Retailer",
    x = "Retailer",
    y = "Precio por unidad (USD)"
  ) +
  scale_fill_grey(start = 0.3, end = 0.9) +   # paleta en escala de grises
  theme_minimal(base_size = 14) +
  theme(
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA),
    panel.grid.major = element_line(color = "gray80"),
    panel.grid.minor = element_line(color = "gray90"),
    axis.text = element_text(color = "black"),
    axis.title = element_text(color = "black"),
    plot.title = element_text(color = "black", face = "bold", hjust = 0.5),
    legend.position = "none"
  )

# Convertir a interactivo
fig <- ggplotly(p) %>%
  layout(
    plot_bgcolor = "white",
    paper_bgcolor = "white",
    font = list(color = "black"),
    yaxis = list(
      tickformat = ".2f",      # fuerza dos decimales
      separatethousands = TRUE # separador de miles
    )
  )

fig

Interpretación Fgura 1-Boxplot

Tres de los seis retailers tienen una mediana de precio de US$45 (Foot Locker, Kohl`s y Walmart).

Foot Locker, presenta mas dispersion de precios y tiene valores atipicos hacia arriba.

Walmart, tiene una dispersion muy amplia, maneja precios muy bajos de U$8 pero tambien otros muy altos de US$110

Amazon como lo mencionamos anteriormente tiene el precio promedio mas alto.

Sport Direct presenta el precio promedio mas bajo US$41 y presenta datos outliers hacia abajo con precios de US$7

West Gear, similar a Walmart en amplitud de precios, aunque con una mediana algo más elevada US$46, Los outliers son frecuentes, lo que refleja gran variabilidad en su estrategia de precios.

#Ventas totales por método y retailer

library(ggplot2)
library(plotly)


ggplotly(
  ggplot(resumen, aes(x = retailer, y = ventas_totales, fill = sales_method)) +
    geom_col(position = "dodge") +
    scale_fill_manual(
      values = c(
        "In-store" = "black",     
        "Online"   = "darkgray",  
        "Outlet"   = "gray"    
      )
    ) +
    labs(
      title = "Fig 2. Ventas por Retailer y Método de Venta",
      x = "Retailer",
      y = "Ventas Totales (USD)",
      fill = "Método de Venta"
    ) +
   theme_minimal() +
    theme(
      plot.title = element_text(color = "black", face = "bold", size = 16, hjust = 0.5) 
    )
)

Interpretación Figura 2

El retailer con mayores ventas fisicas (In store), es West Gear, sus ventas totales asciende a ($15M) equivalente al 13% de las ventas totales de adidas.

Por otro lado el retailer con mejores ventas Online, es Foot Locker, cuyas ventas totales ascienden a ($12m), con una participación del 10% sobre las ventas totales. Foot Locker tambien es fuerte con las ventas Outlet bajo este metodo sus ventas ascienden ($9M) con una participación del 10% sobre las ventas totakes.

Curiosamente Amazon, aunque es un referente digital, en esta marca de ventas “adidas” no lidera las ventas online, en comparaciòn a Foot Locker y Sports Direct.

Los retailers muestran estrategias diferenciadas por canal, lo que puede indicar que su rentabilidad y margen operativo también variará según el método de venta.

grafico <- ggplot(resumen, aes(
  x = precio_promedio,
  y = unidades_totales,  
  color = margen_promedio,
  size = unidades_totales,
  text = paste(
    "Retailer: ", retailer,
    "<br>Método: ", sales_method,
    "<br>Precio Promedio: ", round(precio_promedio, 2),
    "<br>Unidades Totales: ", unidades_totales,
    "<br>Margen Operativo: ", round(margen_promedio, 2), "%"
  )
)) +
geom_point(alpha = 0.7) +
scale_color_gradient(low = "red", high = "darkgreen") +
labs(
  title = "Fig 3. Retailer por canal- Margen Operativo vs P y Q",
  x = "Precio Promedio por Unidad",
  y = "Unidades Totales",   
  color = "Margen (%)",
  size = "Unidades Totales"
) +
theme_minimal() +
    theme(
      plot.title = element_text(color = "black", face = "bold", size = 16, hjust = 0.5) 
    )



# Interactivo con etiquetas
ggplotly(grafico, tooltip = "text")

Interpretación Figura 3.

Rentabilidad

Tal como lo menciona la ley de demanda, en la medida que aumenta el precio el consumo tiende a disminuir. El gràfico de dispersiòn nos muestra la relaciòn existente entre el precio y el volumen de ventas, en donde se observa la relaciòn inversa entre estas dos variables. Adicionalmente, dentro del anàlisis se incluye el margen operativo, el cual aumenta en la medida que el volumen de ventas aumenta. Lo anterior, nos explica que el margen se acota cuando disminuye el precio y es necesario compensarlo vìa volumen — Ingreso = Precio * Cantidad.

El canal de ventas Online del retailer Sport Direct, financieramente es el que mayor margen promedio operativo presenta equivalente al 48%, con un precio promedio de US$44.25 precio bastante competitivo, se ubica en el ranking nº 4 en unidades totales vendidas, este retailr tambien es fuerte en ventas Oulet, con el menor precio promedio de venta de US$36.75 y un margen promedio operativo de 44%, se ubica en el ranking nº 3 en unidades totales vendidas.

Por otro lado West Gear, en el canal de venta Online presenta un margen promedio operativo del 47%, ubicandose en la posicion nº 2 a nivel de margen operativo entre los retailers, tiene un precio promedio de venta US$47.55 y aunque no presenta un nivel de ventas superior (volumen) a los anteriormente mencionados, si tiene un buen margen operativo quizas es mas eficiente en los costos. Por otro lado podemos observar que West Gear es el que mas volumen de ventas tiene en el canal In-store, sin embargo tiene un margen moderado de 36%, se podria inferir que tiene un nivel exigencia significativo en ventas apostando a compensar tal vez los costos, los cuales estan impactando el margen operativo, presenta un precio de venta de US$49.83 mas alto que las ventas online, con este retailer podemos observar que el volumen de ventas y el precio quizas no son los que impacten directamente el margen operativo, en las ventas in-store tenemos un volumen y un precio de ventas significativo pero es menos rentable.

El retailer Foot Locker con sus ventas online se ubica en la poscicion nº 3 a nivel de margen promedio operativo con un 46% y un precio promedio de ventas de US$45.21, se ubica en el ranking nº 2 en unidades totales vendidas.

Tenemos un dato outlier en rojo que nos muestra que el retailer Walmart en el canal de ventas In- Store es el que tiene mayor precio promedio de venta y un bajo margen, nos muestra una señal de ineficiencia o mal posicionamiento ya que tambien es el que menos unidades ha vendido.

El grafico de dispersion nos permite obervar que el canal de ventas Online es el que mejor margen operativo representa para adidas y el que mayor unidades ha vendido.

Eficiencia en ventas

La eficiencia en ventas depende de encontrar un balance entre precio y volumen (P*Q). El análisis muestra que la mayoría de los retailers concentran su estrategia en precios moderados, logrando altos volúmenes y márgenes operativos competitivos. Por el contrario, aquellos con precios elevados enfrentan caídas significativas en volumen y baja eficiencia en ganancias.”

Participaciòn de las ventas de Adidas por Retailer

En el siguiente grafico se mostrara la partipaciòn que tiene cada retailer sobre el total de las ventas:

library(dplyr)

# Calcular desempeño financiero
desempeno <- datos %>%
  group_by(retailer, sales_method) %>%
  summarise(
    total_ventas = sum(total_sales, na.rm = TRUE),
    total_utilidad = sum(operating_profit, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  mutate(
    contrib_ventas = total_ventas / sum(total_ventas),
    contrib_utilidad = total_utilidad / sum(total_utilidad)
  )

print(desempeno)
## # A tibble: 18 × 6
##    retailer      sales_method total_ventas total_utilidad contrib_ventas
##    <chr>         <chr>               <dbl>          <dbl>          <dbl>
##  1 Amazon        In-store          2236625        835909.         0.0186
##  2 Amazon        Online            4647981       2037450.         0.0387
##  3 Amazon        Outlet            3212381       1111073.         0.0267
##  4 Foot Locker   In-store          7652500       2809200          0.0637
##  5 Foot Locker   Online           12233565       5185757.         0.102 
##  6 Foot Locker   Outlet            9138880       3322070.         0.0761
##  7 Kohl's        In-store          2956625       1059706.         0.0246
##  8 Kohl's        Online            5396679       2207024.         0.0449
##  9 Kohl's        Outlet            5159149       1915530.         0.0429
## 10 Sports Direct In-store          5504850       2061464.         0.0458
## 11 Sports Direct Online           10013772       4519404.         0.0833
## 12 Sports Direct Outlet            9098000       4060741.         0.0757
## 13 Walmart       In-store          1641125        493038.         0.0137
## 14 Walmart       Online            3169694       1376958.         0.0264
## 15 Walmart       Outlet            5695266       2032754.         0.0474
## 16 West Gear     In-store         15672650       5499812.         0.130 
## 17 West Gear     Online            9503966       4225946.         0.0791
## 18 West Gear     Outlet            7232942       2471133.         0.0602
## # ℹ 1 more variable: contrib_utilidad <dbl>
resumen_metodo <- datos %>%
  group_by(retailer) %>%
  summarise(
    ventas_totales = sum(total_sales, na.rm = TRUE)
  )

# Gráfico de torta
fig <- plot_ly(
  resumen_metodo,
  labels = ~retailer,
  values = ~ventas_totales,
  type = 'pie',
  textinfo = 'label+percent',
  insidetextorientation = 'radial',
  marker = list(colors = c("black", "darkgray", "gray", "lightgray","white"))
) %>%
  layout(
    title = list(
      text = "<b>Fig 4. Participación Retailer sobre las Ventas </b>",
      x = 0.5,                 # centrado
      xanchor = "center",
      font = list(color = "black", size = 18)  
    ),
    legend = list(orientation = 'v', x = 1, y = 0.5)
  )

fig

Interpretación Figura 4.

Ventas totales

West Gear (27%)

Es el líder en ventas, representando más de un cuarto del mercado total, esto lo posiciona como el retailer más importante en términos de volumen de ventas.

Foot Locker (24.2%)

Muy cerca de West Gear, con una participación también bastante fuerte, entre ambos concentran más del 51% de las ventas, lo que indica un mercado altamente concentrado entre estos dos retailers.

Sports Direct (20.5%)

Es el tercer retailers relevante, aunque está por debajo de West Gear y Foot Locker, aún representa una quinta parte de las ventas.

Estos tres retailers juntos (West Gear, Foot Locker y Sports Direct) acumulan el 71.7% del total, es decir, controlan la mayor parte del mercado.

Kohl’s (11.2%)

Se ubica en un nivel medio, con presencia importante pero lejos del top 3, podría estar en una posición estratégica para crecer, dado que tiene un 10% del mercado.

Amazon (8.4%) y Walmart (8.7%)

Son los retailers con menor participación relativa, su peso es bastante reducido frente al resto.

Esto puede indicar que su modelo de ventas no está tan enfocado en los productos de adidas, o que tienen dificultades para competir en este mercado particular.

Conclusiones

Podemos concluir que aunque hay retailers que presentan unas ventas totales altas esto no significa que sea el que mejor margen operativo presente, como es el caso de West Gear que es el que mayores ventas tiene sin embargo a nivel de margen operativo se ubica en la posicion numero 2 y Sport Direct a nivel de ventas totales se ubica en la posicion numero 3 pero es el que mejor margen operativo presenta en comparaciòn con el resto de retailers.

Lo cual lo podemos observar en la siguiente grafica.

library(plotly)
library(dplyr)

# con columnas: retailer, total_sales, operating_margin

# Agrupamos por retailer
resumen <- datos %>%
  group_by(retailer) %>%
  summarise(
    total_sales = sum(total_sales, na.rm = TRUE),
    operating_margin = mean(operating_margin, na.rm = TRUE)
  )

# Gráfico combinado
fig <- plot_ly(resumen, 
               x = ~retailer, 
               y = ~total_sales, 
               type = "bar", 
               name = "Ventas Totales",
               marker = list(color = 'darkgray')
) %>%
  add_trace(
    y = ~operating_margin, 
    type = "scatter", 
    mode = "lines+markers", 
    name = "Margen Operativo (%)", 
    yaxis = "y2", 
    line = list(color = "black", width = 2),
    marker = list(color = "black", size = 8)   # Puntos negros
  ) %>%
  layout(
    title = list(
      text = "<b>Fig 5. Ventas Totales vs Margen Operativo por Retailer</b>",
      font = list(color = "black", size = 18),
      x = 0.5,
      xanchor = "center"
    ),
    xaxis = list(
      title = list(
        text = "<b>Retailer</b>",
        font = list(color = "black", size = 14)
      )
    ),
    yaxis = list(
      title = list(
        text = "<b>Ventas Totales (USD)</b>",
        font = list(color = "black", size = 14)
      ),
      rangemode = "tozero"
    ),
    yaxis2 = list(
      title = list(
        text = "<b>Margen Operativo (%)</b>",
        font = list(color = "black", size = 14)
      ),
      overlaying = "y",
      side = "right"
    ),
    legend = list(
      x = 0.5,
      y = -0.2,
      orientation = "h",
      xanchor = "center",
      font = list(color = "black", size = 12)
    ),
    autosize = FALSE,
    width = 700,
    height = 500,
    margin = list(t = 80, b = 120, l = 80, r = 80)
  )

fig

Interpretación Figura 5.

Sports Direct sobresale por su excelente rentabilidad a pesar de no ser el número 1 en ventas, nos muestra que tiene una muy buena estrategia lo que demuestra una estructura de costos eficiente y un modelo de negocio rentable, incluso sin liderar en ventas totales.

West Gear es el retailer más fuerte en términos de ventas: combina las ventas más altas con un margen sólido, aunque no es el mejor.

Foot Locker también se destaca por su alto volumen de ventas y margen estable, aunque menos rentable que Sports Direct.

Amazon y Kohl’s están en un rango medio-bajo tanto en ventas como en margen con posiciones menos competitivas.

Walmart tiene el peor balance: bajas ventas y bajo margen se podria inferir que es menos atractivo en el desempeño global.

Los resultados muestran que ventas altas no siempre implican mayor rentabilidad: West Gear lidera en ventas, pero Sports Direct obtiene mayor eficiencia.

Existe una clara diferenciación entre empresas enfocadas en volumen (West Gear, Foot Locker) y las que destacan por rentabilidad (Sports Direct).

Recomendaciones

De acuerdo al analisis realizado el comercio online es el mas rentable para adidas pues constituye una ventaja competitiva significativa, ya que contribuye a reducir los costos operativos asociados a las ventas y, por consiguiente, a incrementar la rentabilidad. Sin embargo, en el caso de Adidas, resulta estratégico mantener un equilibrio entre las ventas en línea y las realizadas en tiendas físicas. Dado que su actividad principal es la comercialización de prendas de vestir y calzado, la experiencia presencial en puntos de venta continúa siendo un canal indispensable para fortalecer la relación con el consumidor y atender de manera más amplia las demandas del mercado.

Algunas recomendaciones para los Retalaires:

  • Optimizar costos: Walmart debe revisar su estructura operativa y cadena de suministro para mejorar eficiencia y aumentar su margen.

  • Estrategias de crecimiento:Amazon y Kohl’s deben enfocarse en fortalecer su volumen de ventas, realizando mayores pautas publicitarias; por otro lado Sports Direct podría capitalizar su alto margen para invertir en expansión.

  • Sostenibilidad del liderazgo:West Gear y Foot Locker deben cuidar sus márgenes operativos, si bien lideran en ventas, un incremento de costos sin control podría reducir su rentabilidad a largo plazo.

Es recomendable implementar estrategias de fidelización de clientes y optimización en costos variables para mantener su ventaja.

Una empresa sostenible no solo busca ventas altas, sino un equilibrio entre volumen y rentabilidad, la clave está en maximizar la eficiencia operativa sin sacrificar participación de mercado.