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.
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)
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.
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.
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.
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).
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.