El presente análisis tiene como propósito comprender el comportamiento de las ventas y la rentabilidad de Adidas a partir de la información disponible en la base de datos. Para ello, se desarrolla un análisis descriptivo y diagnóstico de variables relacionadas con el desempeño comercial y financiero de la empresa, considerando aspectos como el precio por unidad, las unidades vendidas, las ventas totales, la utilidad operativa y el margen operativo.
El análisis también contempla la comparación del desempeño entre diferentes segmentos de la operación, con el fin de identificar patrones, diferencias y relaciones relevantes que permitan comprender el comportamiento observado en las ventas y la rentabilidad.
El análisis exploratorio de datos (EDA) busca comprender el comportamiento de las ventas y la rentabilidad de Adidas a partir de la información disponible en la base de datos. Para ello, se examinan las principales variables financieras y comerciales, con el propósito de identificar patrones, diferencias y comportamientos relevantes entre las distintas dimensiones de la información. Estos hallazgos servirán como base para profundizar posteriormente en las posibles causas de los resultados observados.
Instalar y cargar librerias
# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)
Cargue, Revisión y preparación de los datos
# Cargar datos desde el archivo Excel
datos_col <- read_excel("C:/Users/Pcs/Desktop/Maestria Finanzas/Analitica de negocios/Modulo I/Actividad caso 1/DatosCaso1.xlsx",
col_types = c("text", "text", "text",
"text", "text", "numeric", "numeric",
"numeric", "numeric", "numeric",
"text"))
# Ver las primeras filas de los datos
head(datos_col)
| 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 |
# Revisar estructura y tipos de variables
class(datos_col)
## [1] "tbl_df" "tbl" "data.frame"
colnames(datos_col)
## [1] "distribuidor" "region" "estado"
## [4] "ciudad" "producto" "precio_unidad"
## [7] "unidades_vendidas" "ventas_total" "utilidad_operativa"
## [10] "margen_operativo" "metodo_venta"
# Revisar dimensiones de la base
dim(datos_col)
## [1] 9648 11
# Revisar valores faltantes
colSums(is.na(datos_col))
## distribuidor region estado ciudad
## 0 0 0 0
## producto precio_unidad unidades_vendidas ventas_total
## 0 0 0 0
## utilidad_operativa margen_operativo metodo_venta
## 0 0 0
# Revisar registros duplicados
sum(duplicated(datos_col))
## [1] 262
# Identificar registros inconsistentes
registros_inconsistentes <- datos_col %>%
filter(
unidades_vendidas == 0 &
ventas_total == 0 &
utilidad_operativa == 0 &
margen_operativo > 0
)
# Cantidad de registros inconsistentes
nrow(registros_inconsistentes)
## [1] 4
# Revisar los registros inconsistentes
registros_inconsistentes %>%
select(
distribuidor,
region,
estado,
ciudad,
producto,
precio_unidad,
unidades_vendidas,
ventas_total,
utilidad_operativa,
margen_operativo,
metodo_venta
)
| distribuidor | region | estado | ciudad | producto | precio_unidad | unidades_vendidas | ventas_total | utilidad_operativa | margen_operativo | metodo_venta |
|---|---|---|---|---|---|---|---|---|---|---|
| Foot Locker | Midwest | Nebraska | Omaha | Women’s Athletic Footwear | 35 | 0 | 0 | 0 | 0.40 | Outlet |
| Foot Locker | Midwest | Nebraska | Omaha | Women’s Athletic Footwear | 30 | 0 | 0 | 0 | 0.40 | Outlet |
| Foot Locker | Midwest | Nebraska | Omaha | Women’s Athletic Footwear | 33 | 0 | 0 | 0 | 0.55 | Online |
| Foot Locker | Midwest | Nebraska | Omaha | Women’s Athletic Footwear | 27 | 0 | 0 | 0 | 0.53 | Online |
# Eliminar únicamente los registros inconsistentes
datos_col <- datos_col %>%
filter(
!(unidades_vendidas == 0 &
ventas_total == 0 &
utilidad_operativa == 0 &
margen_operativo > 0)
)
# Verificar las dimensiones después de la limpieza
dim(datos_col)
## [1] 9644 11
Indicadores de centralidad y dispersión
# Resumen estadístico de las variables financieras
resumen <- datos_col %>%
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. : 6 Min. : 160 Min. : 75.2
## 1st Qu.: 35.00 1st Qu.: 106 1st Qu.: 4068 1st Qu.: 1754.0
## Median : 45.00 Median : 176 Median : 7812 Median : 3264.0
## Mean : 45.22 Mean : 257 Mean :12460 Mean : 4896.8
## 3rd Qu.: 55.00 3rd Qu.: 350 3rd Qu.:15872 3rd Qu.: 6193.8
## Max. :110.00 Max. :1275 Max. :82500 Max. :39000.0
## margen_operativo
## Min. :0.100
## 1st Qu.:0.350
## Median :0.410
## Mean :0.423
## 3rd Qu.:0.490
## Max. :0.800
# Desviación estándar de las variables financieras
desviacion_estandar <- datos_col %>%
summarise(
desviacion_precio = sd(precio_unidad, na.rm = TRUE),
desviacion_unidades = sd(unidades_vendidas, na.rm = TRUE),
desviacion_ventas = sd(ventas_total, na.rm = TRUE),
desviacion_utilidad = sd(utilidad_operativa, na.rm = TRUE),
desviacion_margen = sd(margen_operativo, na.rm = TRUE)
)
desviacion_estandar
| desviacion_precio | desviacion_unidades | desviacion_ventas | desviacion_utilidad | desviacion_margen |
|---|---|---|---|---|
| 14.70557 | 214.2325 | 12716.5 | 4866.452 | 0.0972023 |
Interpretación de los indicadores
Los indicadores de centralidad muestran que las ventas totales y la utilidad operativa presentan una diferencia considerable entre la media y la mediana. Esto indica que existen registros con valores elevados que incrementan el promedio. En contraste, el precio por unidad y el margen operativo presentan valores de media y mediana relativamente cercanos, lo que indica una menor diferencia entre sus medidas de tendencia central.
La desviación estándar permite complementar este análisis al mostrar una mayor variabilidad en las ventas y la utilidad operativa, mientras que el precio por unidad presenta una dispersión menor. En consecuencia, estas variables constituyen elementos relevantes para profundizar el análisis del comportamiento comercial y de la rentabilidad de Adidas.
Gráfico de barras - Ventas y unidades vendidas por región
# Crear gráfico combinado: Resumen de ventas y unidades vendidas por región
resumen_region <- datos_col %>%
group_by(region) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
unidades_vendidas = sum(unidades_vendidas, na.rm = TRUE)
)
resumen_region
| region | ventas | unidades_vendidas |
|---|---|---|
| Midwest | 16674434 | 391337 |
| Northeast | 25078267 | 501279 |
| South | 20603356 | 492260 |
| Southeast | 21374436 | 407000 |
| West | 36436157 | 686985 |
# Gráfico combinado: ventas y unidades vendidas por región
grafico_ventas_unidades <- resumen_region %>%
plot_ly(
x = ~region,
y = ~ventas,
type = "bar",
name = "Ventas",
hovertemplate = paste(
"<b>%{x}</b><br>",
"Ventas: %{y:,.0f}<extra></extra>"
),
marker = list(
color = "#9FBFD3"
)
) %>%
add_trace(
y = ~unidades_vendidas,
type = "scatter",
mode = "lines+markers",
name = "Unidades vendidas",
yaxis = "y2",
hovertemplate = paste(
"<b>%{x}</b><br>",
"Unidades vendidas: %{y:,.0f}<extra></extra>"
),
line = list(
color = "#2F5D7E"
),
marker = list(
color = "#2F5D7E"
)
) %>%
layout(
# Título
title = list(
text = "<b>Figura 1. Ventas totales y unidades vendidas por región</b>",
x = 0.5,
xanchor = "center"
),
# Eje X
xaxis = list(
title = "Región"
),
# Eje Y principal
yaxis = list(
title = "Ventas totales (USD)",
separatethousands = TRUE
),
# Eje Y secundario
yaxis2 = list(
title = "Unidades vendidas",
overlaying = "y",
side = "right",
separatethousands = TRUE
),
# Leyenda
legend = list(
orientation = "h",
x = 0.5,
xanchor = "center",
y = 1.05
),
# Márgenes
margin = list(
t = 90,
b = 120,
l = 80,
r = 80
),
# Fuente
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.28,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(
size = 10
)
)
),
# Interacción al pasar el cursor
hovermode = "x unified"
)
# Mostrar el gráfico
grafico_ventas_unidades
El análisis de las ventas totales y las unidades vendidas por región muestra diferencias importantes entre las regiones. West concentra el mayor volumen comercial, tanto en ventas como en unidades vendidas, mientras que Midwest presenta los niveles más bajos en ambos indicadores. Northeast y South presentan niveles intermedios, mientras que Southeast registra un menor volumen de unidades vendidas frente a South, aunque sus ventas totales son ligeramente superiores.
Gráfico de torat-%Participación utilidad operacional
# Crear el resumen de utilidad operativa por región
utilidad_region <- datos_col %>%
group_by(region) %>%
summarise(
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE)
) %>%
mutate(
participacion = utilidad_operativa / sum(utilidad_operativa) * 100
) %>%
arrange(desc(participacion))
# Crear gráfico de anillo: Participación de la utilidad operativa por región
grafico_anillo_utilidad <- utilidad_region %>%
plot_ly(
labels = ~region,
values = ~participacion,
type = "pie",
hole = 0.5,
textinfo = "label+percent",
textposition = "outside",
hoverinfo = "label+value+percent",
marker = list(
colors = c(
"#2F5D7E",
"#5B88A9",
"#86ACC5",
"#B0C8D8",
"#D4E2EB"
)
)
) %>%
layout(
title = "Figura 2. Participación de la utilidad operativa por región",
showlegend = FALSE,
margin = list(
t = 80,
b = 100,
l = 60,
r = 60
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1.Adidas",
x = 0,
y = -0.25,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_anillo_utilidad
La participación de la utilidad operativa muestra que West concentra la mayor proporción de la utilidad operativa total, con un 27,6%, seguida de Northeast con un 20,6% y South con un 19,5%. Southeast representa el 17,8%, mientras que Midwest presenta la menor participación, con un 14,5%.
Estos resultados muestran que West no solo concentra el mayor volumen de ventas y unidades vendidas, sino que también representa la mayor participación de la utilidad operativa total. Sin embargo, este resultado refleja el aporte absoluto de cada región a la utilidad y no necesariamente su eficiencia o rentabilidad relativa. Por esta razón, el análisis del margen de utilidad operativa permite complementar esta conclusión.
Gráfico de barras-Margen operativo por región (%)
# Calcular el margen operativo por región (%)
margen_region <- datos_col %>%
group_by(region) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE)
) %>%
mutate(
margen_utilidad = (utilidad_operativa / ventas) * 100
) %>%
arrange(desc(margen_utilidad))
margen_region
| region | ventas | utilidad_operativa | margen_utilidad |
|---|---|---|---|
| South | 20603356 | 9221605 | 44.75778 |
| Midwest | 16674434 | 6859945 | 41.14050 |
| Southeast | 21374436 | 8393059 | 39.26681 |
| Northeast | 25078267 | 9732774 | 38.80960 |
| West | 36436157 | 13017584 | 35.72710 |
# Crear gráfico de margen operativo por región (%)
grafico_margen_utilidad <- margen_region %>%
plot_ly(
x = ~margen_utilidad,
y = ~reorder(region, margen_utilidad),
type = "bar",
orientation = "h",
marker = list(
color = ~margen_utilidad,
colorscale = list(
c(0, "#D4E2EB"),
c(0.5, "#86ACC5"),
c(1, "#2F5D7E")
)
),
text = ~paste0(round(margen_utilidad, 1), "%"),
textposition = "outside",
hovertemplate = paste(
"<b>%{y}</b><br>",
"Margen de utilidad operativa: %{x:.1f}%",
"<extra></extra>"
)
) %>%
layout(
title = "Figura 3. Margen operativo por región (%)",
xaxis = list(
title = "Margen operativo por región (%)",
ticksuffix = "%"
),
yaxis = list(
title = ""
),
showlegend = FALSE,
margin = list(
t = 80,
b = 120,
l = 80,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.25,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_margen_utilidad
El análisis del margen operativo evidencia un comportamiento diferente al observado en el volumen de ventas y en la participación de la utilidad. South presenta el mayor margen operativo, con 44,8%, seguida de Midwest con 41,1%. Por su parte, West registra el menor margen, con 35,7%, a pesar de ser la región con mayor volumen de ventas, unidades vendidas y participación en la utilidad operativa.
Este resultado muestra que un mayor volumen de ventas no necesariamente se traduce en una mayor rentabilidad relativa. Mientras West se destaca por su escala comercial y su aporte a la utilidad total, South presenta una mayor eficiencia en la generación de utilidad respecto a sus ventas. Esta diferencia constituye un hallazgo relevante que requiere profundizar en el comportamiento de otras variables para identificar posibles factores asociados.
Gráfico de histograma - Distribución del precio por unidad
# Histograma de la distribución del precio por unidad
grafico_precio <- plot_ly(
datos_col,
x = ~precio_unidad,
type = "histogram",
xbins = list(
size = 5
),
marker = list(
color = "#B0C8D8"
),
hovertemplate = paste(
"<b>Precio: %{x}</b><br>",
"Frecuencia: %{y}<extra></extra>"
)
) %>%
layout(
title = "Figura 4. Distribución del precio por unidad",
xaxis = list(
title = "Precio por unidad (USD)"
),
yaxis = list(
title = "Frecuencia"
),
bargap = 0.05,
margin = list(
t = 80,
b = 100,
l = 80,
r = 60
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.25,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_precio
El histograma muestra que los precios por unidad se concentran principalmente entre USD 35 y USD 55, con una mayor frecuencia alrededor de USD 40–45. A medida que el precio supera los USD 55, la frecuencia de los registros disminuye, aunque se presentan algunos valores de hasta aproximadamente USD 110, evidenciando una cola hacia precios superiores. En general, la concentración de los registros alrededor de USD 45 es consistente con una media de USD 45,22 y una mediana de USD 45.
Grafico Boxplot - Ventas totales
# Crear boxplot de las ventas totales
grafico_boxplot_ventas <- plot_ly(
datos_col,
y = ~ventas_total,
type = "box",
marker = list(
color = "#9FBFD3"
),
hovertemplate = paste(
"Ventas: %{y:$,.0f} USD<extra></extra>"
)
) %>%
layout(
title = "Figura 5. Distribución de las ventas totales",
yaxis = list(
title = "Ventas totales (USD)",
separatethousands = TRUE
),
xaxis = list(
title = "",
showticklabels = FALSE
),
showlegend = FALSE,
margin = list(
t = 80,
b = 100,
l = 80,
r = 60
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.20,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_boxplot_ventas
Las ventas totales evidencia una alta dispersión de los registros y la presencia de numerosos valores atípicos por encima del límite superior. La mediana se ubica alrededor de USD 7.812, mientras que algunos registros alcanzan valores superiores a USD 80.000. Estos valores elevados ayudan a explicar la diferencia entre la media y la mediana observada anteriormente, indicando que el promedio de ventas está influenciado por registros con valores excepcionalmente altos.
Grafico Boxplot - utilidad operativa
# Crear boxplot de la utilidad operativa
grafico_boxplot_utilidad <- plot_ly(
datos_col,
y = ~utilidad_operativa,
type = "box",
marker = list(
color = "#9FBFD3"
),
hovertemplate = paste(
"Utilidad operativa: %{y:$,.0f} USD<extra></extra>"
)
) %>%
layout(
title = "Figura 6. Distribución de la utilidad operativa",
yaxis = list(
title = "Utilidad operativa (USD)",
separatethousands = TRUE
),
xaxis = list(
title = "",
showticklabels = FALSE
),
showlegend = FALSE,
margin = list(
t = 80,
b = 100,
l = 80,
r = 60
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.25,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_boxplot_utilidad
La utilidad operativa presenta una alta dispersión y una distribución sesgada hacia la derecha, evidenciada por la presencia de numerosos valores atípicos por encima del límite superior. La mediana se ubica alrededor de USD 3.264, mientras que algunos registros alcanzan valores cercanos a USD 39.000. Estos valores elevados contribuyen a que la media (USD 4.896,8) sea superior a la mediana, indicando que el promedio de utilidad está influenciado por registros con resultados excepcionalmente altos.
Gráfico de calor - Correlación entre variables financieras
# Crear gráfico interactivo con correlación
# Seleccionar las variables numéricas para el análisis
datos_correlacion <- datos_col %>%
select(
precio_unidad,
unidades_vendidas,
ventas_total,
utilidad_operativa,
margen_operativo
)
# Calcular la matriz de correlación
matriz_correlacion <- cor(
datos_correlacion,
use = "complete.obs"
)
# Mostrar la matriz de correlación
round(matriz_correlacion, 2)
## precio_unidad unidades_vendidas ventas_total
## precio_unidad 1.00 0.27 0.54
## unidades_vendidas 0.27 1.00 0.92
## ventas_total 0.54 0.92 1.00
## utilidad_operativa 0.50 0.87 0.94
## margen_operativo -0.14 -0.31 -0.30
## utilidad_operativa margen_operativo
## precio_unidad 0.50 -0.14
## unidades_vendidas 0.87 -0.31
## ventas_total 0.94 -0.30
## utilidad_operativa 1.00 -0.05
## margen_operativo -0.05 1.00
# Crear gráfico de calor
grafico_calor <- plot_ly(
x = colnames(matriz_correlacion),
y = rownames(matriz_correlacion),
z = matriz_correlacion,
type = "heatmap",
colorscale = list(
c(0, "#D4E2EB"),
c(0.5, "#86ACC5"),
c(1, "#2F5D7E")
),
text = round(matriz_correlacion, 2),
texttemplate = "%{text}",
hovertemplate = paste(
"<b>%{y}</b> vs <b>%{x}</b><br>",
"Correlación: %{z:.2f}",
"<extra></extra>"
)
) %>%
layout(
title = "Figura 7. Correlación entre variables financieras",
xaxis = list(
title = ""
),
yaxis = list(
title = ""
),
margin = list(
t = 80,
b = 100,
l = 120,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.32,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_calor
El análisis de correlación evidencia una relación positiva muy fuerte entre las ventas totales y la utilidad operativa (0,94), lo que indica que los registros con mayores niveles de ventas tienden a presentar también mayores niveles de utilidad. Asimismo, las unidades vendidas presentan una fuerte relación positiva con las ventas totales (0,92) y con la utilidad operativa (0,87), evidenciando una estrecha asociación entre el volumen de unidades y el desempeño comercial y operativo. Por otra parte, el precio por unidad presenta una relación positiva moderada con las ventas totales (0,54) y con la utilidad operativa (0,50), mientras que su relación con las unidades vendidas es positiva pero débil (0,27), por lo que en esta base no se observa evidencia de que precios más altos estén asociados con un menor volumen de ventas. Sin embargo, esta relación débil no permite establecer una relación causal. Finalmente, el margen operativo presenta relaciones negativas débiles con las unidades vendidas (-0,31) y las ventas totales (-0,30), lo que sugiere que un mayor volumen comercial no necesariamente se traduce en un mayor margen porcentual.
Análisis del desempeño por producto
# Resumen de ventas, utilidad y margen por producto
resumen_producto <- datos_col %>%
group_by(producto) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
unidades = sum(unidades_vendidas, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE)
) %>%
mutate(
margen = (utilidad / ventas) * 100
) %>%
arrange(desc(utilidad))
resumen_producto
| producto | ventas | unidades | utilidad | margen |
|---|---|---|---|---|
| Men’s Street Footwear | 27680769 | 593320 | 11629046 | 42.01128 |
| Women’s Apparel | 23870985 | 433827 | 9685221 | 40.57319 |
| Men’s Athletic Footwear | 20577180 | 435526 | 7437457 | 36.14420 |
| Women’s Street Footwear | 17201563 | 392269 | 6494017 | 37.75248 |
| Men’s Apparel | 16520632 | 306683 | 6381405 | 38.62688 |
| Women’s Athletic Footwear | 14315521 | 317236 | 5597822 | 39.10317 |
Gráfico combinado - utilidad y margen operativo por producto
# Resumen de utilidad y margen operativo por producto
producto_resumen <- datos_col %>%
group_by(producto) %>%
summarise(
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
ventas = sum(ventas_total, na.rm = TRUE)
) %>%
mutate(
margen_operativo = (utilidad_operativa / ventas) * 100
) %>%
arrange(desc(utilidad_operativa))
producto_resumen
| producto | utilidad_operativa | ventas | margen_operativo |
|---|---|---|---|
| Men’s Street Footwear | 11629046 | 27680769 | 42.01128 |
| Women’s Apparel | 9685221 | 23870985 | 40.57319 |
| Men’s Athletic Footwear | 7437457 | 20577180 | 36.14420 |
| Women’s Street Footwear | 6494017 | 17201563 | 37.75248 |
| Men’s Apparel | 6381405 | 16520632 | 38.62688 |
| Women’s Athletic Footwear | 5597822 | 14315521 | 39.10317 |
# Gráfico combinado: utilidad operativa y margen operativo
grafico_producto <- producto_resumen %>%
plot_ly(
x = ~reorder(producto, utilidad_operativa),
y = ~utilidad_operativa,
type = "bar",
name = "Utilidad operativa",
marker = list(
color = "#9FBFD3"
),
hovertemplate = paste(
"<b>%{x}</b><br>",
"Utilidad operativa: USD %{y:,.0f}",
"<extra></extra>"
)
) %>%
add_trace(
x = ~reorder(producto, utilidad_operativa),
y = ~margen_operativo,
type = "scatter",
mode = "lines+markers",
name = "Margen operativo",
yaxis = "y2",
line = list(
color = "#2F5D7E"
),
marker = list(
color = "#2F5D7E"
),
hovertemplate = paste(
"<b>%{x}</b><br>",
"Margen operativo: %{y:.1f}%",
"<extra></extra>"
)
) %>%
layout(
title = list(
text = "<b>Figura 8. Utilidad y margen operativo por producto</b>",
x = 0.5,
xanchor = "center"
),
xaxis = list(
title = "Producto",
tickangle = -25
),
yaxis = list(
title = "Utilidad operativa (USD)",
separatethousands = TRUE
),
yaxis2 = list(
title = "Margen operativo (%)",
overlaying = "y",
side = "right",
ticksuffix = "%"
),
legend = list(
orientation = "h",
x = 0.5,
xanchor = "center",
y = 1.05
),
margin = list(
t = 90,
b = 150,
l = 80,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.45,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
),
hovermode = "x unified"
)
# Mostrar el gráfico
grafico_producto
Al analizar conjuntamente la utilidad y el margen operativo por producto, se observa que Men’s Street Footwear presenta el desempeño más favorable en estas dos dimensiones, al registrar la mayor utilidad operativa y el margen más alto, cercano al 42%. También destaca Women’s Apparel, con una utilidad elevada y un margen aproximado de 40,6%. En contraste, Men’s Athletic Footwear presenta el margen más bajo, con 36,1%, pese a generar una utilidad operativa superior a la de algunos productos. Estos resultados muestran que un mayor nivel de utilidad no necesariamente implica un mayor margen operativo y que el desempeño debe evaluarse considerando conjuntamente la escala y la rentabilidad relativa.
Análisis del desempeño por método de venta
# Resumen de ventas, utilidad y margen por método de venta
resumen_metodo <- datos_col %>%
group_by(metodo_venta) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
unidades = sum(unidades_vendidas, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE)
) %>%
mutate(
margen = (utilidad / ventas) * 100
) %>%
arrange(desc(utilidad))
resumen_metodo
| metodo_venta | ventas | unidades | utilidad | margen |
|---|---|---|---|---|
| Online | 44965657 | 939093 | 19552538 | 43.48327 |
| Outlet | 39536618 | 849778 | 14913301 | 37.72022 |
| In-store | 35664375 | 689990 | 12759129 | 35.77556 |
## **Gráfico combinado: utilidad y margen por método de venta**
metodo_venta_resumen <- datos_col %>%
group_by(metodo_venta) %>%
summarise(
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
ventas = sum(ventas_total, na.rm = TRUE)
) %>%
mutate(
margen_operativo = (utilidad_operativa / ventas) * 100
) %>%
arrange(desc(utilidad_operativa))
metodo_venta_resumen
| metodo_venta | utilidad_operativa | ventas | margen_operativo |
|---|---|---|---|
| Online | 19552538 | 44965657 | 43.48327 |
| Outlet | 14913301 | 39536618 | 37.72022 |
| In-store | 12759129 | 35664375 | 35.77556 |
grafico_metodo_venta <- metodo_venta_resumen %>%
plot_ly(
x = ~metodo_venta,
y = ~utilidad_operativa,
type = "bar",
name = "Utilidad operativa",
marker = list(
color = "#9FBFD3"
),
hovertemplate = paste(
"<b>%{x}</b><br>",
"Utilidad operativa: USD %{y:,.0f}",
"<extra></extra>"
)
) %>%
add_trace(
x = ~metodo_venta,
y = ~margen_operativo,
type = "scatter",
mode = "lines+markers",
name = "Margen operativo",
yaxis = "y2",
line = list(
color = "#2F5D7E"
),
marker = list(
color = "#2F5D7E"
),
hovertemplate = paste(
"<b>%{x}</b><br>",
"Margen operativo: %{y:.1f}%",
"<extra></extra>"
)
) %>%
layout(
title = list(
text = "<b>Figura 9. Utilidad y margen operativo por método de venta</b>",
x = 0.5,
xanchor = "center"
),
xaxis = list(
title = "Método de venta"
),
yaxis = list(
title = "Utilidad operativa (USD)",
separatethousands = TRUE
),
yaxis2 = list(
title = "Margen operativo (%)",
overlaying = "y",
side = "right",
ticksuffix = "%"
),
legend = list(
orientation = "h",
x = 0.5,
xanchor = "center",
y = 1.05
),
margin = list(
t = 90,
b = 120,
l = 80,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.30,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
),
hovermode = "x unified"
)
# Mostrar el gráfico
grafico_metodo_venta
Al analizar conjuntamente la utilidad y el margen operativo por método de venta, se observa que Online presenta el desempeño más favorable, con una utilidad operativa de aproximadamente USD 19,6 millones y un margen del 43,5%. Outlet presenta resultados intermedios, mientras que In-store registra la menor utilidad operativa (USD 12,8 millones) y el menor margen (35,8%). En esta base de datos, el canal Online concentra el mayor volumen de ventas y, simultáneamente, presenta los mayores niveles de utilidad y margen operativo, lo que lo posiciona como el método de venta de mejor desempeño.
Margen operativo por región y producto
# Calcular el margen operativo por región y producto
diagnostico_region_producto <- datos_col %>%
group_by(region, producto) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(
margen_operativo = (utilidad_operativa / ventas) * 100
)
diagnostico_region_producto
| region | producto | ventas | utilidad_operativa | margen_operativo |
|---|---|---|---|---|
| Midwest | Men’s Apparel | 2223786 | 937479.3 | 42.15690 |
| Midwest | Men’s Athletic Footwear | 2619289 | 970070.7 | 37.03565 |
| Midwest | Men’s Street Footwear | 4707360 | 1948621.5 | 41.39521 |
| Midwest | Women’s Apparel | 3453008 | 1585771.9 | 45.92436 |
| Midwest | Women’s Athletic Footwear | 1673543 | 659186.7 | 39.38869 |
| Midwest | Women’s Street Footwear | 1997448 | 758815.2 | 37.98923 |
| Northeast | Men’s Apparel | 3475037 | 1183786.1 | 34.06542 |
| Northeast | Men’s Athletic Footwear | 3895862 | 1474713.4 | 37.85333 |
| Northeast | Men’s Street Footwear | 6841324 | 3030663.5 | 44.29937 |
| Northeast | Women’s Apparel | 5045208 | 1917008.3 | 37.99662 |
| Northeast | Women’s Athletic Footwear | 2668013 | 976505.5 | 36.60048 |
| Northeast | Women’s Street Footwear | 3152823 | 1150097.2 | 36.47833 |
| South | Men’s Apparel | 2811194 | 1102713.3 | 39.22580 |
| South | Men’s Athletic Footwear | 3647045 | 1504995.5 | 41.26616 |
| South | Men’s Street Footwear | 4048261 | 1738371.9 | 42.94120 |
| South | Women’s Apparel | 4224937 | 2199137.0 | 52.05136 |
| South | Women’s Athletic Footwear | 2629097 | 1277839.1 | 48.60373 |
| South | Women’s Street Footwear | 3242822 | 1398548.5 | 43.12751 |
| Southeast | Men’s Apparel | 3183237 | 1147871.7 | 36.05989 |
| Southeast | Men’s Athletic Footwear | 3653645 | 1333466.5 | 36.49688 |
| Southeast | Men’s Street Footwear | 4693836 | 2003885.7 | 42.69186 |
| Southeast | Women’s Apparel | 4109786 | 1887044.9 | 45.91589 |
| Southeast | Women’s Athletic Footwear | 2674048 | 976673.4 | 36.52415 |
| Southeast | Women’s Street Footwear | 3059884 | 1044116.8 | 34.12276 |
| West | Men’s Apparel | 4827378 | 2009554.9 | 41.62829 |
| West | Men’s Athletic Footwear | 6761339 | 2154210.9 | 31.86071 |
| West | Men’s Street Footwear | 7389988 | 2907503.0 | 39.34381 |
| West | Women’s Apparel | 7038046 | 2096258.4 | 29.78466 |
| West | Women’s Athletic Footwear | 4670820 | 1707617.8 | 36.55927 |
| West | Women’s Street Footwear | 5748586 | 2142439.1 | 37.26898 |
Grafico de calor: margen operativo por región y producto
# Crear grafico de calor del margen operativo por región y producto
grafico_calor_region_producto <- diagnostico_region_producto %>%
plot_ly(
x = ~producto,
y = ~region,
z = ~margen_operativo,
type = "heatmap",
text = ~paste(
"<b>Región:</b>", region,
"<br><b>Producto:</b>", producto,
"<br><b>Margen operativo:</b>", round(margen_operativo, 1), "%"
),
hoverinfo = "text",
colorscale = list(
c(0, "#D4E2EB"),
c(0.5, "#86ACC5"),
c(1, "#2F5D7E")
)
) %>%
layout(
title = list(
text = "<b>Figura 10. Margen operativo por región y producto</b>",
x = 0.5,
xanchor = "center"
),
xaxis = list(
title = "Producto"
),
yaxis = list(
title = "Región"
),
margin = list(
t = 90,
b = 150,
l = 90,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.55,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_calor_region_producto
El análisis del margen operativo por región y producto evidencia diferencias en la rentabilidad según la combinación de ambas variables. South presenta, en general, los márgenes más altos, destacándose especialmente en Women’s Apparel, mientras que West presenta niveles relativamente menores en varios productos. Esto indica que el desempeño de un mismo producto varía entre regiones, por lo que la rentabilidad debe analizarse considerando conjuntamente el producto y la región.
Grafico combinado - margen operativo por región y método de venta
## **Margen operativo (%) según región y método de venta**
diagnostico_region_metodo <- datos_col %>%
group_by(region, metodo_venta) %>%
summarise(
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_operativo = (utilidad_operativa / ventas_total) * 100,
.groups = "drop"
)
# Crear gráfico de calor
grafico_calor_region_metodo <- diagnostico_region_metodo %>%
plot_ly(
x = ~metodo_venta,
y = ~region,
z = ~margen_operativo,
type = "heatmap",
text = ~paste(
"<b>Región:</b> ", region,
"<br><b>Método de venta:</b> ", metodo_venta,
"<br><b>Margen operativo:</b> ",
round(margen_operativo, 1), "%"
),
hoverinfo = "text",
colorscale = list(
c(0, "#D4E2EB"),
c(0.5, "#86ACC5"),
c(1, "#2F5D7E")
),
showscale = TRUE,
colorbar = list(
title = "Margen (%)"
)
) %>%
layout(
title = "Figura 11. Margen operativo (%) según región y método de venta",
xaxis = list(
title = "Método de venta"
),
yaxis = list(
title = "Región"
),
margin = list(
t = 80,
b = 100,
l = 80,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.25,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
# Mostrar el gráfico
grafico_calor_region_metodo
El análisis del margen operativo según región y método de venta evidencia que el canal Online presenta el mayor margen operativo en las cinco regiones analizadas. El resultado más destacado corresponde a Northeast, donde el canal Online alcanza un margen de 48,6%. Este comportamiento consistente evidencia un mejor desempeño relativo del canal Online frente a los demás métodos de venta en términos de margen operativo, aunque la magnitud del margen varía según la región.
Grafico de dispersión - relación entre precio y margen operativo
# Crear gráfico de dispersión entre precio y margen operativo
grafico_precio_margen <- datos_col %>%
plot_ly(
x = ~precio_unidad,
y = ~margen_operativo,
type = "scatter",
mode = "markers",
text = ~paste(
"<b>Producto:</b> ", producto,
"<br><b>Precio:</b> USD ", precio_unidad,
"<br><b>Margen operativo:</b> ",
round(margen_operativo * 100, 1), "%"
),
hoverinfo = "text"
) %>%
layout(
title = "Figura 12. Relación entre precio por unidad y margen operativo",
xaxis = list(
title = "Precio por unidad (USD)"
),
yaxis = list(
title = "Margen operativo (%)",
tickformat = ".0%"
),
margin = list(
t = 80,
b = 100,
l = 80,
r = 80
),
annotations = list(
list(
text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
x = 0,
y = -0.25,
xref = "paper",
yref = "paper",
xanchor = "left",
showarrow = FALSE,
font = list(size = 10)
)
)
)
grafico_precio_margen
La relación entre el precio por unidad y el margen operativo es negativa y débil (r = -0,14). Esto indica que, en esta base de datos, los precios más altos presentan una ligera asociación con menores márgenes operativos; sin embargo, La baja intensidad de la relación indica que el precio por sí solo tiene una asociación limitada con las variaciones observadas en el margen. Por tanto, no se puede establecer una relación causal entre el precio y la rentabilidad a partir de esta correlación.
1. El volumen comercial no necesariamente se traduce en mayor rentabilidad relativa
West concentra el mayor volumen de ventas y la mayor participación de la utilidad operativa, pero presenta el menor margen relativo entre las regiones analizadas. Esto muestra que un mayor volumen comercial no necesariamente se traduce en una mayor eficiencia relativa, por lo que el desempeño debe evaluarse considerando conjuntamente los resultados absolutos y el margen operativo.
2. El canal Online presenta el desempeño más favorable
Online presenta el desempeño más favorable entre los métodos de venta. Registra las mayores ventas, unidades vendidas y utilidad operativa, además del mayor margen general (43,5%). Adicionalmente, presenta el mayor margen operativo dentro de las cinco regiones analizadas, mostrando un comportamiento consistente de este canal.
3. La rentabilidad varía según la combinación producto-región
La rentabilidad varía según la combinación producto-región. Los márgenes presentan diferencias importantes para un mismo producto entre las regiones analizadas. Por ejemplo, Women’s Apparel alcanza un margen de 52,1% en South, mientras que en West registra 29,8%. Esto muestra que el desempeño de un producto no es uniforme entre mercados y que la rentabilidad debe analizarse considerando conjuntamente el producto y la región.
4. La generación de utilidad y el margen no siempre evolucionan de la misma manera
Los productos presentan diferencias tanto en generación de utilidad como en margen operativo. Men’s Street Footwear registra simultáneamente la mayor utilidad operativa (USD 11,6 millones) y el mayor margen (42,0%), mientras que Men’s Athletic Footwear presenta una utilidad operativa superior a la de algunos productos, pero el menor margen del grupo (36,1%). Esto evidencia que la evaluación del desempeño de los productos debe considerar tanto la utilidad absoluta como la eficiencia relativa.
5. El precio presenta una relación débil con el margen operativo
La relación entre el precio por unidad y el margen operativo es negativa y débil (r = -0,14). Esto indica que, en esta base de datos, los precios más altos presentan una ligera asociación con menores márgenes operativos; sin embargo, la baja intensidad de la relación indica que el precio, considerado de manera aislada, tiene una asociación limitada con la variación del margen. Por tanto, esta correlación no permite establecer una relación causal entre precio y rentabilidad.
El análisis realizado muestra que el desempeño comercial y operativo de Adidas presenta diferencias relevantes según la región, el producto y el método de venta. West concentra el mayor volumen comercial y la mayor participación de la utilidad operativa, pero presenta el menor margen relativo, mientras que Online combina los mayores niveles de ventas, utilidad y margen. Asimismo, las diferencias observadas entre las combinaciones producto-región muestran que la rentabilidad no es uniforme entre los mercados. Finalmente, la débil relación entre precio y margen indica que la rentabilidad no puede analizarse a partir del precio de manera aislada. En conjunto, los resultados sugieren que la evaluación del desempeño debe considerar simultáneamente volumen, utilidad y margen, incorporando las dimensiones de producto, región y método de venta.
1. Priorizar el análisis de rentabilidad relativa de West:
Se recomienda complementar el seguimiento de ventas, unidades y utilidad con el margen operativo para evaluar integralmente el desempeño de West. Aunque esta región concentra el mayor volumen comercial y la mayor participación de la utilidad operativa, presenta el menor margen relativo (35,7%). Por ello, se recomienda profundizar en los factores asociados a este margen relativo, como la composición de productos, los métodos de venta y las condiciones particulares del mercado, con el objetivo de identificar oportunidades de mejora en rentabilidad preservando su fortaleza comercial.
2. Aprovechar el desempeño del canal Online.
Se recomienda fortalecer el canal Online como una alternativa prioritaria de crecimiento rentable, considerando que presenta el mayor margen operativo general (43,5%) y el mayor margen dentro de cada una de las regiones analizadas. La estrategia debería orientarse a identificar las características de las operaciones Online de mayor desempeño y replicar las prácticas que puedan ser aplicables a otros mercados y segmentos.
3. Gestianar la oferta de acuerdo con la conbinación producto-Región:
Se recomienda utilizar la combinación producto–región como criterio para orientar las decisiones comerciales. Las diferencias observadas en los márgenes sugieren que un mismo producto puede presentar desempeños distintos según el mercado. Por ello, las decisiones de promoción, disponibilidad y priorización comercial deberían considerar la rentabilidad específica de cada combinación, prestando especial atención a aquellas que presentan márgenes elevados, como South–Women’s Apparel.
4. Evitar decisiones de precio basadas únicamente en la relación con el margen
Se recomienda no utilizar el precio por unidad como único criterio para explicar o gestionar la rentabilidad, debido a la débil relación observada entre precio y margen operativo (-0,14). Las decisiones de precio deberían analizarse conjuntamente con variables como producto, región, método de venta y volumen, dado que los resultados muestran que estos elementos presentan asociaciones más relevantes con el desempeño comercial y operativo.