Adidas AG es una compañía alemana reconocida a nivel mundial por sus productos deportivos y de estilo de vida. La empresa diseña, desarrolla, produce y comercializa diferentes líneas de productos deportivos, y su sede principal se encuentra en Herzogenaurach, Alemania.
Para este caso académico, asumimos el rol de un equipo de analítica de datos de Adidas. Nuestro trabajo consiste en evaluar el desempeño comercial y financiero de las distintas líneas de producto a partir de la información disponible en la base de datos.
Analizamos variables como el precio por unidad, las unidades vendidas, las ventas totales, la utilidad operativa y el margen operativo. Además, comparamos los resultados según producto, región, ciudad, distribuidor y método de venta.
Como equipo analista, nuestro propósito no es solamente presentar cifras, sino interpretar qué nos están diciendo los datos. Buscamos identificar dónde se concentra el mayor volumen de ventas, qué segmentos generan más utilidad, cuáles presentan mejores márgenes y qué relaciones existen entre las principales variables comerciales.
A partir de estos resultados, buscamos convertir la información en conclusiones que puedan servir como apoyo para la toma de decisiones dentro de la empresa.
Objetivo general
Realizar un análisis descriptivo, exploratorio y diagnóstico del desempeño comercial y financiero del caso Adidas, con el fin de identificar patrones de ventas, rentabilidad y eficiencia por producto, región, distribuidor y método de venta, así como relaciones entre las variables cuantitativas que apoyen decisiones de gestión.
Objetivos específicos
Describir el comportamiento de las ventas, unidades vendidas, utilidad operativa y margen operativo.
Comparar el desempeño entre productos, regiones, ciudades, distribuidores y métodos de venta.
Identificar segmentos con alto volumen de ventas y segmentos con mayor rentabilidad.
Evaluar la relación entre precio, volumen, ventas, utilidad y margen operativo.
Identificar combinaciones estratégicas de producto + región y producto + método de venta.
Formular recomendaciones sustentadas en los hallazgos del análisis.
El análisis seguirá una lógica de lo general a lo específico:
Nota metodológica sobre graficos y estadisticas: la base no contiene una variable temporal. Por ello, no se calcularán tasas de crecimiento ni tendencias en el tiempo, ya que hacerlo requeriría información de fecha o período. El alcance es descriptivo, exploratorio y diagnóstico; no se interpretan las correlaciones como relaciones causales.
Si alguna librería no está instalada, ejecutar previamente:
install.packages(c("readxl", "dplyr", "ggplot2", "scales", "tidyr", "knitr"))
library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(tidyr)
library(knitr)
El siguiente código busca automáticamente el archivo de Excel cuyo
nombre contenga datoscaso1.
library(readxl)
datos <- read_excel(
"C:/Users/maria/Downloads/Trabajo Caso 1 viernes/datoscaso1.xlsx",
sheet = "Data Sales Adidas"
)
dim(datos)
## [1] 9648 11
names(datos)
## [1] "distribuidor" "region" "estado"
## [4] "ciudad" "producto" "precio_unidad"
## [7] "unidades_vendidas" "ventas_total" "utilidad_operativa"
## [10] "margen_operativo" "metodo_venta"
str(datos)
## tibble [9,648 × 11] (S3: tbl_df/tbl/data.frame)
## $ distribuidor : chr [1:9648] "Foot Locker" "Foot Locker" "Foot Locker" "Foot Locker" ...
## $ region : chr [1:9648] "Northeast" "Northeast" "Northeast" "Northeast" ...
## $ estado : chr [1:9648] "New York" "New York" "New York" "New York" ...
## $ ciudad : chr [1:9648] "New York" "New York" "New York" "New York" ...
## $ producto : chr [1:9648] "Men's Street Footwear" "Men's Athletic Footwear" "Women's Street Footwear" "Women's Athletic Footwear" ...
## $ precio_unidad : num [1:9648] 50 50 40 45 60 50 50 50 40 45 ...
## $ unidades_vendidas : num [1:9648] 1200 1000 1000 850 900 1000 1250 900 950 825 ...
## $ ventas_total : num [1:9648] 60000 50000 40000 38250 54000 ...
## $ utilidad_operativa: num [1:9648] 30000 15000 14000 13388 16200 ...
## $ margen_operativo : num [1:9648] 0.5 0.3 0.35 0.35 0.3 0.25 0.5 0.3 0.35 0.35 ...
## $ metodo_venta : chr [1:9648] "In-store" "In-store" "In-store" "In-store" ...
columnas_requeridas <- c(
"distribuidor", "region", "estado", "ciudad", "producto",
"precio_unidad", "unidades_vendidas", "ventas_total",
"utilidad_operativa", "margen_operativo", "metodo_venta"
)
faltantes_columnas <- setdiff(columnas_requeridas, names(datos))
if (length(faltantes_columnas) > 0) {
stop(
paste(
"Faltan las siguientes columnas:",
paste(faltantes_columnas, collapse = ", ")
)
)
}
diccionario <- data.frame(
Variable = c(
"distribuidor", "region", "estado", "ciudad", "producto",
"precio_unidad", "unidades_vendidas", "ventas_total",
"utilidad_operativa", "margen_operativo", "metodo_venta"
),
Tipo = c(
"Categórica", "Categórica", "Categórica", "Categórica", "Categórica",
"Cuantitativa", "Cuantitativa", "Cuantitativa",
"Cuantitativa", "Cuantitativa", "Categórica"
),
Interpretacion = c(
"Minorista o distribuidor",
"Región comercial",
"Estado",
"Ciudad",
"Línea de producto",
"Precio por unidad",
"Unidades vendidas",
"Valor total de ventas",
"Utilidad operativa",
"Margen operativo del registro",
"Canal o método de venta"
)
)
kable(diccionario, caption = "Tabla 1. Diccionario de variables")
| Variable | Tipo | Interpretacion |
|---|---|---|
| distribuidor | Categórica | Minorista o distribuidor |
| region | Categórica | Región comercial |
| estado | Categórica | Estado |
| ciudad | Categórica | Ciudad |
| producto | Categórica | Línea de producto |
| precio_unidad | Cuantitativa | Precio por unidad |
| unidades_vendidas | Cuantitativa | Unidades vendidas |
| ventas_total | Cuantitativa | Valor total de ventas |
| utilidad_operativa | Cuantitativa | Utilidad operativa |
| margen_operativo | Cuantitativa | Margen operativo del registro |
| metodo_venta | Categórica | Canal o método de venta |
n_registros <- nrow(datos)
n_variables <- ncol(datos)
faltantes <- data.frame(
Variable = names(datos),
Valores_faltantes = colSums(is.na(datos))
)
duplicados <- sum(duplicated(datos))
ceros_clave <- data.frame(
Variable = c("unidades_vendidas", "ventas_total", "utilidad_operativa"),
Cantidad_ceros = c(
sum(datos$unidades_vendidas == 0, na.rm = TRUE),
sum(datos$ventas_total == 0, na.rm = TRUE),
sum(datos$utilidad_operativa == 0, na.rm = TRUE)
)
)
kable(faltantes, caption = "Tabla 2. Valores faltantes por variable")
| Variable | Valores_faltantes | |
|---|---|---|
| distribuidor | distribuidor | 0 |
| region | region | 0 |
| estado | estado | 0 |
| ciudad | ciudad | 0 |
| producto | producto | 0 |
| precio_unidad | precio_unidad | 0 |
| unidades_vendidas | unidades_vendidas | 0 |
| ventas_total | ventas_total | 0 |
| utilidad_operativa | utilidad_operativa | 0 |
| margen_operativo | margen_operativo | 0 |
| metodo_venta | metodo_venta | 0 |
kable(ceros_clave, caption = "Tabla 3. Registros con valor cero en variables clave")
| Variable | Cantidad_ceros |
|---|---|
| unidades_vendidas | 4 |
| ventas_total | 4 |
| utilidad_operativa | 4 |
La base contiene 9.648 registros y 11 variables. Se identifican 262 registros exactamente duplicados según todas las columnas disponibles.
Estos duplicados no se eliminan automáticamente. La base no incluye un identificador único de transacción ni una fecha que permita determinar si dos filas iguales representan un error o ventas legítimas repetidas. Eliminarlos sin evidencia podría alterar los resultados.
Además del margen promedio de cada fila, se calcula el margen operativo ponderado:
\[ Margen\ ponderado = \frac{\sum Utilidad\ Operativa}{\sum Ventas\ Totales} \]
Este indicador es especialmente útil para comparar segmentos porque considera el peso económico de cada venta.
ventas_totales <- sum(datos$ventas_total, na.rm = TRUE)
unidades_totales <- sum(datos$unidades_vendidas, na.rm = TRUE)
utilidad_total <- sum(datos$utilidad_operativa, na.rm = TRUE)
margen_promedio <- mean(datos$margen_operativo, na.rm = TRUE)
margen_ponderado <- utilidad_total / ventas_totales
precio_promedio <- mean(datos$precio_unidad, na.rm = TRUE)
indicadores <- data.frame(
Indicador = c(
"Registros",
"Unidades vendidas",
"Ventas totales",
"Utilidad operativa total",
"Precio promedio por unidad",
"Margen operativo promedio",
"Margen operativo ponderado"
),
Valor = c(
format(n_registros, big.mark = "."),
format(round(unidades_totales, 0), big.mark = "."),
label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_totales),
label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(utilidad_total),
round(precio_promedio, 2),
percent(margen_promedio, accuracy = 0.1),
percent(margen_ponderado, accuracy = 0.1)
)
)
kable(indicadores, caption = "Tabla 4. Indicadores generales del caso Adidas")
| Indicador | Valor |
|---|---|
| Registros | 9.648 |
| Unidades vendidas | 2.478.861 |
| Ventas totales | 120.2 M |
| Utilidad operativa total | 47.2 M |
| Precio promedio por unidad | 45.22 |
| Margen operativo promedio | 42.3% |
| Margen operativo ponderado | 39.3% |
La tabla presenta los principales indicadores generales del caso Adidas y permite tener una visión global del desempeño comercial y financiero de la base analizada. En total se trabajó con 9.648 registros, que acumulan 2.478.861 unidades vendidas, 120,2 millones en ventas totales y 47,2 millones de utilidad operativa.
El precio promedio por unidad es de 45,22, lo que muestra el valor medio al que se comercializaron los productos dentro de la base. Por otro lado, el margen operativo promedio es de 42,3%, es decir, el promedio de los márgenes registrados en cada operación.
También se calculó un margen operativo ponderado de 39,3% , que relaciona la utilidad operativa total con las ventas totales y tiene en cuenta el peso económico de cada operación. Por esta razón, resulta especialmente útil para evaluar el desempeño general del negocio.
En conjunto, estos resultados muestran que la operación analizada genera un nivel importante de ventas y utilidad. Sin embargo, la diferencia entre el margen promedio y el margen ponderado indica que no todas las operaciones tienen el mismo peso ni presentan el mismo nivel de rentabilidad, por lo que es necesario complementar este análisis con comparaciones por producto, región, distribuidor y método de venta.
variables_numericas <- datos %>%
select(
precio_unidad,
unidades_vendidas,
ventas_total,
utilidad_operativa,
margen_operativo
)
resumen_estadistico <- data.frame(
Variable = names(variables_numericas),
Promedio = sapply(variables_numericas, mean, na.rm = TRUE),
Mediana = sapply(variables_numericas, median, na.rm = TRUE),
Minimo = sapply(variables_numericas, min, na.rm = TRUE),
Q1 = sapply(variables_numericas, quantile, probs = 0.25, na.rm = TRUE),
Q3 = sapply(variables_numericas, quantile, probs = 0.75, na.rm = TRUE),
Maximo = sapply(variables_numericas, max, na.rm = TRUE),
Desv_Estandar = sapply(variables_numericas, sd, na.rm = TRUE)
)
resumen_estadistico %>%
mutate(across(where(is.numeric), ~ round(.x, 2))) %>%
kable(caption = "Tabla 5. Medidas descriptivas de las variables cuantitativas")
| Variable | Promedio | Mediana | Minimo | Q1 | Q3 | Maximo | Desv_Estandar | |
|---|---|---|---|---|---|---|---|---|
| precio_unidad | precio_unidad | 45.22 | 45.00 | 7.0 | 35.00 | 55.00 | 110.0 | 14.71 |
| unidades_vendidas | unidades_vendidas | 256.93 | 176.00 | 0.0 | 106.00 | 350.00 | 1275.0 | 214.25 |
| ventas_total | ventas_total | 12455.08 | 7803.50 | 0.0 | 4065.25 | 15864.50 | 82500.0 | 12716.39 |
| utilidad_operativa | utilidad_operativa | 4894.79 | 3262.98 | 0.0 | 1753.44 | 6192.36 | 39000.0 | 4866.46 |
| margen_operativo | margen_operativo | 0.42 | 0.41 | 0.1 | 0.35 | 0.49 | 0.8 | 0.10 |
La diferencia entre promedio y mediana permite evaluar asimetrías. En ventas, utilidad y unidades vendidas también se analiza la desviación estándar para determinar si existe alta dispersión entre registros.
Para que los nombres y valores sean visibles, se usarán gráficos horizontales cuando corresponda, etiquetas directas sobre las barras y márgenes amplios para evitar que el texto quede recortado.
tema_adidas <- theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 11),
axis.title = element_text(face = "bold"),
axis.text.y = element_text(size = 10),
panel.grid.minor = element_blank(),
legend.position = "bottom",
plot.margin = margin(t = 12, r = 100, b = 12, l = 12)
)
Criterio de visualización. El informe se limita a 8 figuras seleccionadas por su aporte directo al objetivo del caso: identificar dónde se concentra el desempeño comercial, qué segmentos generan mayor rentabilidad, qué relaciones existen entre variables clave y qué combinaciones producto–canal resultan estratégicas. Las tablas complementan el análisis sin duplicar visualizaciones.
resumen_producto <- datos %>%
group_by(producto) %>%
summarise(
unidades_vendidas = sum(unidades_vendidas, na.rm = TRUE),
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE),
margen_ponderado = utilidad_operativa / ventas_total,
.groups = "drop"
) %>%
mutate(
participacion_ventas = ventas_total / sum(ventas_total)
) %>%
arrange(desc(ventas_total))
kable(
resumen_producto %>%
mutate(
Ventas = label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_total),
Utilidad = label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(utilidad_operativa),
`Margen ponderado` = percent(margen_ponderado, accuracy = 0.1),
`Participación ventas` = percent(participacion_ventas, accuracy = 0.1)
) %>%
select(producto, Ventas, Utilidad, `Margen ponderado`, `Participación ventas`),
caption = "Tabla 6. Desempeño por producto"
)
| producto | Ventas | Utilidad | Margen ponderado | Participación ventas |
|---|---|---|---|---|
| Men’s Street Footwear | 27.7 M | 11.6 M | 42.0% | 23.0% |
| Women’s Apparel | 23.9 M | 9.7 M | 40.6% | 19.9% |
| Men’s Athletic Footwear | 20.6 M | 7.4 M | 36.1% | 17.1% |
| Women’s Street Footwear | 17.2 M | 6.5 M | 37.8% | 14.3% |
| Men’s Apparel | 16.5 M | 6.4 M | 38.6% | 13.7% |
| Women’s Athletic Footwear | 14.3 M | 5.6 M | 39.1% | 11.9% |
graf_producto <- resumen_producto |>
mutate(
producto = reorder(producto, ventas_total),
etiqueta = paste0(
label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_total),
" | Part. ",
percent(participacion_ventas, accuracy = 0.1),
" | Margen ",
percent(margen_ponderado, accuracy = 0.1)
)
)
ggplot(
graf_producto,
aes(
x = producto,
y = ventas_total,
fill = producto
)
) +
geom_col(
width = 0.7,
show.legend = FALSE
) +
geom_text(
aes(label = etiqueta),
hjust = -0.05,
size = 3.8,
fontface = "bold"
) +
coord_flip(clip = "off") +
scale_fill_manual(
values = c(
"#F4C2C2", # rosa pastel
"#F8D7E3", # rosa claro
"#D8C4E8", # lila pastel
"#BFD7EA", # azul pastel
"#BFE3D0", # verde menta
"#F6D6AD" # durazno pastel
)
) +
scale_y_continuous(
labels = label_number(
scale = 1e-6,
suffix = " M"
),
expand = expansion(
mult = c(0, 0.48)
)
) +
labs(
title = "Figura 1. Ventas, participación y margen por producto",
subtitle = "Cada etiqueta muestra ventas agregadas, participación y margen operativo ponderado",
x = NULL,
y = "Ventas totales (millones de unidades monetarias)",
caption = "Fuente: Elaboración propia con base en la base de datos del Caso 1."
) +
theme(
plot.caption = element_text(
hjust = 1,
size = 9,
face = "italic",
color = "gray40"
)
) +
tema_adidas
Interpretación Figura 1.
El análisis por producto muestra que Men’s Street Footwear presenta el mayor nivel de ventas, con aproximadamente 27,7 M, lo que representa el 23,0% de las ventas totales, y alcanza un margen operativo ponderado de 42,0%. Este resultado indica que la línea combina una alta participación dentro del negocio con un nivel importante de rentabilidad.
La gráfica permite comparar de forma conjunta tres aspectos: el volumen de ventas, la participación de cada producto dentro del total y su margen operativo ponderado. Esto permite identificar que un mayor nivel de ventas no necesariamente implica un mayor margen en todas las líneas de producto.
Desde una perspectiva de gestión, Men’s Street Footwear representa una línea estratégica por su combinación de escala comercial y rentabilidad. Por ello, se recomienda profundizar el análisis por región y método de venta para identificar en qué condiciones este producto obtiene sus mejores resultados.
resumen_region <- datos %>%
group_by(region) %>%
summarise(
unidades_vendidas = sum(unidades_vendidas, na.rm = TRUE),
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE),
margen_ponderado = utilidad_operativa / ventas_total,
.groups = "drop"
) %>%
arrange(desc(ventas_total))
graf_region <- resumen_region %>%
mutate(
region = reorder(region, ventas_total),
etiqueta = paste0(
label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_total),
" | Margen ",
percent(margen_ponderado, accuracy = 0.1)
)
)
ggplot(
graf_region,
aes(
x = region,
y = ventas_total,
fill = region
)
) +
geom_col(
width = 0.7,
show.legend = FALSE
) +
geom_text(
aes(label = etiqueta),
hjust = -0.04,
size = 3.7,
fontface = "bold"
) +
coord_flip(clip = "off") +
scale_fill_manual(
values = c(
"#F4C2C2", # rosa pastel
"#D8C4E8", # lila pastel
"#BFD7EA", # azul pastel
"#BFE3D0", # verde menta
"#F6D6AD" # durazno pastel
)
) +
scale_y_continuous(
labels = label_number(
scale = 1e-6,
suffix = " M"
),
expand = expansion(
mult = c(0, 0.36)
)
) +
labs(
title = "Figura 2. Ventas totales y margen operativo ponderado por región",
subtitle = "Cada barra muestra el volumen de ventas y su etiqueta incorpora el margen del segmento",
x = NULL,
y = "Ventas totales (millones)",
caption = "Fuente: Elaboración propia con base en la base de datos del Caso 1."
) +
tema_adidas +
theme(
plot.caption = element_text(
hjust = 1,
size = 9,
face = "italic",
color = "gray40",
margin = margin(t = 10)
)
)
kable(
resumen_region %>%
mutate(
Ventas = label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_total),
Utilidad = label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(utilidad_operativa),
`Margen ponderado` = percent(margen_ponderado, accuracy = 0.1)
) %>%
select(region, Ventas, Utilidad, `Margen ponderado`),
caption = "Tabla 7. Desempeño comercial y financiero por región"
)
| region | Ventas | Utilidad | Margen ponderado |
|---|---|---|---|
| West | 36.4 M | 13.0 M | 35.7% |
| Northeast | 25.1 M | 9.7 M | 38.8% |
| Southeast | 21.4 M | 8.4 M | 39.3% |
| South | 20.6 M | 9.2 M | 44.8% |
| Midwest | 16.7 M | 6.9 M | 41.1% |
Interpretación Figura 2.
El análisis por región muestra que West concentra el mayor nivel de ventas, con 36,4 M, y genera una utilidad operativa de 13,0 M. Sin embargo, su margen operativo ponderado es de 35,7%, por lo que no es la región con mayor rentabilidad proporcional.
Por otro lado, South registra ventas por 20,6 M y una utilidad operativa de 9,2 M, pero presenta el margen ponderado más alto, con 44,8%. También destaca Midwest, que aunque tiene el menor volumen de ventas, con 16,7 M, alcanza un margen de 41,1%.
En conjunto, estos resultados muestran que el mayor volumen de ventas no necesariamente coincide con el mayor margen operativo. La gráfica permite diferenciar entre las regiones que aportan mayor escala comercial y aquellas que presentan una mayor eficiencia en términos de rentabilidad.
resumen_distribuidor <- datos %>%
group_by(distribuidor) %>%
summarise(
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_ponderado = utilidad_operativa / ventas_total,
.groups = "drop"
) %>%
arrange(desc(ventas_total))
graf_distribuidor <- resumen_distribuidor %>%
mutate(
distribuidor = reorder(distribuidor, ventas_total),
etiqueta = paste0(
label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_total),
" | Margen ",
percent(margen_ponderado, accuracy = 0.1)
)
)
ggplot(
graf_distribuidor,
aes(
x = distribuidor,
y = ventas_total,
fill = distribuidor
)
) +
geom_col(
width = 0.7,
show.legend = FALSE
) +
geom_text(
aes(label = etiqueta),
hjust = -0.04,
size = 3.7,
fontface = "bold"
) +
coord_flip(clip = "off") +
scale_fill_manual(
values = c(
"#F4C2C2", # rosa pastel
"#F8D7E3", # rosa claro
"#D8C4E8", # lila pastel
"#BFD7EA", # azul pastel
"#BFE3D0", # verde menta
"#F6D6AD" # durazno pastel
)
) +
scale_y_continuous(
labels = label_number(
scale = 1e-6,
suffix = " M"
),
expand = expansion(
mult = c(0, 0.34)
)
) +
labs(
title = "Figura 3. Ventas y margen operativo ponderado por distribuidor",
x = NULL,
y = "Ventas totales (millones)",
caption = "Fuente: Elaboración propia con base en la base de datos del Caso 1."
) +
tema_adidas +
theme(
plot.caption = element_text(
hjust = 1,
size = 9,
face = "italic",
color = "gray40",
margin = margin(t = 10)
)
)
Interpretación Figura 3.
El análisis por distribuidor muestra que West Gear concentra el mayor nivel de ventas, con 32,4 M, y presenta un margen operativo ponderado de 37,6%. En segundo lugar se encuentra Foot Locker, con 29,0 M en ventas y un margen de 39,0%. Por su parte, Sports Direct registra un menor volumen de ventas, con 24,6 M, pero alcanza el margen ponderado más alto, con 43,2%. En los distribuidores con menor volumen aparecen Kohl’s, con 13,5 M y un margen de 38,4%, Walmart, con 10,5 M y 37,1%, y Amazon, con 10,1 M y 39,5%. Esto evidencia que el distribuidor con mayores ventas no necesariamente es el que presenta el mayor margen, por lo que la gráfica permite distinguir entre volumen de ventas y rentabilidad proporcional.
resumen_metodo <- datos %>%
group_by(metodo_venta) %>%
summarise(
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(
margen_ponderado = utilidad_operativa / ventas_total,
participacion = ventas_total / sum(ventas_total),
etiqueta = paste0(
metodo_venta,
"\n",
scales::percent(participacion, accuracy = 0.1)
)
) %>%
arrange(desc(ventas_total))
# Tabla resumen para verificar participación y margen por método de venta
resumen_metodo %>%
mutate(
ventas_total = scales::label_number(
scale = 1e-6,
suffix = " M",
accuracy = 0.1
)(ventas_total),
utilidad_operativa = scales::label_number(
scale = 1e-6,
suffix = " M",
accuracy = 0.1
)(utilidad_operativa),
margen_ponderado = scales::percent(
margen_ponderado,
accuracy = 0.1
),
participacion = scales::percent(
participacion,
accuracy = 0.1
)
) %>%
select(
metodo_venta,
ventas_total,
utilidad_operativa,
margen_ponderado,
participacion
) %>%
knitr::kable(
caption = "Desempeño por método de venta"
)
| metodo_venta | ventas_total | utilidad_operativa | margen_ponderado | participacion |
|---|---|---|---|---|
| Online | 45.0 M | 19.6 M | 43.5% | 37.4% |
| Outlet | 39.5 M | 14.9 M | 37.7% | 32.9% |
| In-store | 35.7 M | 12.8 M | 35.8% | 29.7% |
# Figura 4
ggplot(
resumen_metodo,
aes(
x = "",
y = ventas_total,
fill = metodo_venta
)
) +
geom_col(
width = 1,
color = "white",
linewidth = 1
) +
coord_polar(theta = "y") +
geom_text(
aes(label = etiqueta),
position = position_stack(vjust = 0.5),
size = 4,
fontface = "bold"
) +
scale_fill_manual(
values = c(
"#F4C2C2",
"#F8D7E3",
"#D8C4E8"
)
) +
labs(
title = "Figura 4. Participación de las ventas por método de venta",
subtitle = "Distribución porcentual de las ventas totales según el canal comercial",
fill = "Método de venta",
caption = "Fuente: Elaboración propia con base en la base de datos del Caso 1."
) +
theme_void() +
theme(
plot.title = element_text(
face = "bold",
size = 15,
hjust = 0.5
),
plot.subtitle = element_text(
size = 11,
hjust = 0.5
),
legend.position = "bottom",
legend.title = element_text(face = "bold"),
plot.caption = element_text(
size = 9,
hjust = 1
),
plot.margin = margin(20, 30, 20, 30)
)
resumen_metodo <- datos %>%
group_by(metodo_venta) %>%
summarise(
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_ponderado = utilidad_operativa / ventas_total,
.groups = "drop"
)
resumen_metodo
Interpretación Figura 4.
El análisis por método de venta muestra que Online concentra la mayor participación de las ventas, con 37,4%, seguido de Outlet con 32,9% e In-store con 29,7%. Además, Online registra el mayor margen operativo ponderado, con 43,5%. Esto indica que, dentro de la base analizada, el canal Online lidera tanto en participación de ventas como en rentabilidad relativa. La comparación permite diferenciar el peso comercial de cada canal y su capacidad para convertir las ventas en utilidad operativa.
medianas_producto <- datos %>%
group_by(producto) %>%
summarise(
mediana_margen = median(margen_operativo, na.rm = TRUE),
.groups = "drop"
)
ggplot(
datos,
aes(
x = reorder(producto, margen_operativo, FUN = median),
y = margen_operativo,
fill = producto
)
) +
geom_boxplot(
alpha = 0.75,
outlier.alpha = 0.4,
show.legend = FALSE
) +
geom_text(
data = medianas_producto,
aes(
x = producto,
y = mediana_margen,
label = paste0(
"Mediana: ",
scales::percent(mediana_margen, accuracy = 0.1)
)
),
inherit.aes = FALSE,
hjust = -0.05,
size = 3.5,
fontface = "bold"
) +
coord_flip() +
scale_y_continuous(
labels = scales::percent_format(accuracy = 1),
expand = expansion(mult = c(0.05, 0.25))
) +
labs(
title = "Figura 5. Distribución del margen operativo por producto",
subtitle = "Variabilidad, mediana y valores atípicos del margen operativo",
x = "Producto",
y = "Margen operativo",
caption = "Fuente: elaboración propia con datos del Caso 1"
) +
tema_adidas +
theme(
plot.margin = margin(15, 80, 15, 15)
)
Interpretación Figura 5.
El margen operativo presenta diferencias entre las líneas de producto tanto en su nivel central como en su dispersión. Las medianas permiten observar el margen típico de cada categoría, mientras que la amplitud de las cajas y la presencia de valores atípicos evidencian que la rentabilidad no es uniforme dentro de cada línea.
Aunque algunas categorías presentan medianas relativamente similares, existen diferencias en la variabilidad de sus márgenes. Esto indica que dos productos pueden alcanzar niveles centrales de rentabilidad parecidos, pero presentar comportamientos distintos entre sus operaciones. Por esta razón, el análisis de rentabilidad no debe limitarse únicamente al margen promedio o ponderado, sino complementarse con la distribución de los resultados observados en cada producto.
El margen operativo promedio de los registros es de 42,3%, mientras que la mediana corresponde a 41,0%. La cercanía entre ambas medidas indica que el nivel central del margen se encuentra alrededor de estos valores; sin embargo, la Figura 5 evidencia que existen diferencias de dispersión y valores atípicos entre las distintas líneas de producto.
Por ello, para evaluar la rentabilidad resulta conveniente analizar conjuntamente el margen promedio, la mediana, el margen ponderado y la distribución de los registros. Esto permite distinguir entre el nivel general de rentabilidad y la estabilidad con la que dicho margen se presenta dentro de cada categoría.
matriz_cor <- datos %>%
select(
precio_unidad,
unidades_vendidas,
ventas_total,
utilidad_operativa,
margen_operativo
) %>%
cor(use = "complete.obs")
kable(
round(matriz_cor, 3),
caption = "Tabla 8. Matriz de correlaciones entre variables cuantitativas"
)
| precio_unidad | unidades_vendidas | ventas_total | utilidad_operativa | margen_operativo | |
|---|---|---|---|---|---|
| precio_unidad | 1.000 | 0.266 | 0.540 | 0.504 | -0.137 |
| unidades_vendidas | 0.266 | 1.000 | 0.919 | 0.872 | -0.305 |
| ventas_total | 0.540 | 0.919 | 1.000 | 0.935 | -0.302 |
| utilidad_operativa | 0.504 | 0.872 | 0.935 | 1.000 | -0.047 |
| margen_operativo | -0.137 | -0.305 | -0.302 | -0.047 | 1.000 |
Una correlación cercana a 1 indica asociación lineal positiva fuerte; cercana a -1, asociación lineal negativa fuerte; y cercana a 0, una asociación lineal débil. Correlación no implica causalidad.
La relación más fuerte con la utilidad operativa corresponde a las ventas totales, con un coeficiente de 0,935, seguida por las unidades vendidas, con 0,872. Esto indica que, dentro de la base analizada, los registros con mayores ventas y mayor volumen de unidades tienden a presentar también mayores niveles de utilidad operativa.
El precio por unidad presenta una asociación positiva moderada con la utilidad operativa, con un coeficiente de 0,504, mientras que la relación entre margen operativo y utilidad operativa es prácticamente nula, con un coeficiente de -0,047. Por tanto, una mayor utilidad absoluta no necesariamente implica un mayor margen porcentual.
Estas relaciones son descriptivas y no permiten establecer causalidad entre las variables.
corr_ventas_utilidad <- cor(
datos$ventas_total,
datos$utilidad_operativa,
use = "complete.obs"
)
ggplot(
datos,
aes(
x = ventas_total,
y = utilidad_operativa,
color = metodo_venta
)
) +
geom_point(alpha = 0.35, size = 1.6) +
geom_smooth(
aes(group = 1),
method = "lm",
se = TRUE,
color = "black",
linewidth = 0.9
) +
scale_x_continuous(labels = label_number(scale = 1e-3, suffix = " K")) +
scale_y_continuous(labels = label_number(scale = 1e-3, suffix = " K")) +
labs(
title = "Figura 6. Relación entre ventas totales y utilidad operativa",
subtitle = paste0(
"Coeficiente de correlación de Pearson: ",
round(corr_ventas_utilidad, 3)
),
x = "Ventas totales (miles)",
y = "Utilidad operativa (miles)",
color = "Método de venta",
caption = "Fuente: elaboración propia con datos del Caso 1"
) +
tema_adidas +
theme(plot.margin = margin(12, 35, 12, 12))
Interpretación Figura 6.
La correlación entre ventas totales y utilidad operativa es 0.935. El signo positivo indica que, en general, registros con mayores ventas tienden a estar asociados con una mayor utilidad operativa. La magnitud del coeficiente permite valorar qué tan estrecha es esa asociación lineal.
corr_precio_unidades <- cor(
datos$precio_unidad,
datos$unidades_vendidas,
use = "complete.obs"
)
ggplot(
datos,
aes(
x = precio_unidad,
y = unidades_vendidas,
color = producto
)
) +
geom_point(alpha = 0.3, size = 1.4) +
geom_smooth(
aes(group = 1),
method = "lm",
se = TRUE,
color = "black",
linewidth = 0.9
) +
labs(
title = "Figura 7. Relación entre precio por unidad y unidades vendidas",
subtitle = paste0(
"Coeficiente de correlación de Pearson: ",
round(corr_precio_unidades, 3)
),
x = "Precio por unidad",
y = "Unidades vendidas",
color = "Producto",
caption = "Fuente: elaboración propia con datos del Caso 1"
) +
tema_adidas +
theme(plot.margin = margin(12, 45, 12, 12))
Interpretación Figura 7.
La correlación entre el precio por unidad y las unidades vendidas es de 0,266, lo que representa una asociación lineal positiva débil. Por lo tanto, dentro de la información analizada no se observa una relación inversa fuerte en la que los precios más altos estén asociados sistemáticamente con menores volúmenes de venta.
Este resultado tampoco significa que aumentar el precio genere un incremento en las unidades vendidas. La relación observada puede estar influenciada por diferencias entre productos, regiones, canales y otras características presentes en la base. En consecuencia, el coeficiente debe interpretarse únicamente como una asociación descriptiva y no como una medida de elasticidad-precio ni como evidencia de causalidad.
producto_region <- datos %>%
group_by(producto, region) %>%
summarise(
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_ponderado = utilidad_operativa / ventas_total,
.groups = "drop"
) %>%
arrange(desc(ventas_total))
top_producto_region <- producto_region %>%
slice_max(order_by = ventas_total, n = 10, with_ties = FALSE)
kable(
top_producto_region %>%
mutate(
Ventas = label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(ventas_total),
Utilidad = label_number(scale = 1e-6, suffix = " M", accuracy = 0.1)(utilidad_operativa),
Margen = percent(margen_ponderado, accuracy = 0.1)
) %>%
select(producto, region, Ventas, Utilidad, Margen),
caption = "Tabla 9. Top 10 combinaciones producto + región por ventas"
)
| producto | region | Ventas | Utilidad | Margen |
|---|---|---|---|---|
| Men’s Street Footwear | West | 7.4 M | 2.9 M | 39.3% |
| Women’s Apparel | West | 7.0 M | 2.1 M | 29.8% |
| Men’s Street Footwear | Northeast | 6.8 M | 3.0 M | 44.3% |
| Men’s Athletic Footwear | West | 6.8 M | 2.2 M | 31.9% |
| Women’s Street Footwear | West | 5.7 M | 2.1 M | 37.3% |
| Women’s Apparel | Northeast | 5.0 M | 1.9 M | 38.0% |
| Men’s Apparel | West | 4.8 M | 2.0 M | 41.6% |
| Men’s Street Footwear | Midwest | 4.7 M | 1.9 M | 41.4% |
| Men’s Street Footwear | Southeast | 4.7 M | 2.0 M | 42.7% |
| Women’s Athletic Footwear | West | 4.7 M | 1.7 M | 36.6% |
La Tabla 9 conserva las principales combinaciones producto + región para apoyar la lectura estratégica sin añadir una visualización adicional. Esto permite reservar las figuras para relaciones y comparaciones que aportan información distinta.
producto_metodo <- datos %>%
group_by(producto, metodo_venta) %>%
summarise(
ventas_total = sum(ventas_total, na.rm = TRUE),
utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
margen_ponderado = utilidad_operativa / ventas_total,
.groups = "drop"
)
ggplot(
producto_metodo,
aes(
x = metodo_venta,
y = producto,
fill = ventas_total
)
) +
geom_tile(
color = "white",
linewidth = 1.5
) +
geom_text(
aes(
label = paste0(
label_number(
scale = 1e-6,
suffix = " M",
accuracy = 0.1
)(ventas_total),
"\nMargen ",
percent(
margen_ponderado,
accuracy = 0.1
)
)
),
size = 3.3,
fontface = "bold",
color = "#333333"
) +
scale_fill_gradientn(
colours = c(
"#F8D7E3", # rosa pastel claro
"#F4C2C2", # rosa pastel
"#D8C4E8", # lila pastel
"#BFD7EA" # azul pastel
),
labels = label_number(
scale = 1e-6,
suffix = " M"
)
) +
labs(
title = "Figura 8. Ventas y margen por producto y método de venta",
subtitle = "El color representa ventas; cada celda muestra ventas y margen ponderado",
x = "Método de venta",
y = "Producto",
fill = "Ventas",
caption = "Fuente: elaboración propia con datos del Caso 1"
) +
tema_adidas +
theme(
plot.margin = margin(12, 45, 12, 12),
axis.text.y = element_text(size = 9)
)
El análisis conjunto de producto y método de venta permite observar cómo cambia el desempeño de cada línea según el canal utilizado. En general, el canal Online presenta los mayores niveles de ventas y margen en varias categorías. La combinación más destacada es Men’s Street Footwear + Online, con 10,4 M en ventas y un margen ponderado de 45,5%, siendo la combinación con mayor volumen dentro de la matriz.
También destaca Women’s Apparel + Online, con 9,0 M en ventas y un margen de 45,8%, que representa uno de los márgenes más altos observados. En contraste, algunas combinaciones In-store presentan márgenes menores, como Women’s Street Footwear con 32,5% y Men’s Athletic Footwear con 33,2%.
La matriz evidencia que el desempeño de un producto no es igual en todos los métodos de venta, por lo que analizar únicamente el producto o únicamente el canal puede ocultar diferencias importantes. Este cruce permite identificar qué combinaciones concentran simultáneamente mayor volumen de ventas y mejores niveles de rentabilidad.
Escala comercial por producto.
Men’s Street Footwear lidera las ventas, con
27.7 M, y representa 23.0% del
total.
Rentabilidad por producto.
El mayor margen operativo ponderado por producto corresponde a
Men’s Street Footwear, con
42.0%.
Diferencia entre volumen regional y
eficiencia.
West concentra el mayor volumen de ventas, mientras que
South presenta el mayor margen ponderado
(44.8%). Esto evidencia que la región que más vende no
necesariamente es la más rentable proporcionalmente.
Desempeño de distribuidores.
West Gear lidera las ventas entre distribuidores. Por
margen, destaca Sports Direct, con
43.2%.
Importancia del canal de venta.
El método Online registra el mayor volumen de ventas.
El método con mayor margen ponderado es Online, con
43.5%.
Ventas y utilidad están estrechamente
asociadas.
La correlación entre ventas y utilidad es 0.935, lo que
muestra una asociación lineal positiva importante dentro de esta
base.
Precio y volumen no muestran una relación inversa
fuerte.
La correlación entre precio unitario y unidades vendidas es
0.266. Por tanto, la información disponible no permite
afirmar que precios más altos impliquen necesariamente menor volumen de
ventas.
Combinación estratégica principal por
escala.
La combinación con mayores ventas es Men’s Street Footwear +
West, con ventas por 7.4 M y margen ponderado
de 39.3%.
Concentrar mayor inversión comercial en Men’s Street Footwear Online. La combinación genera 10,4 M en ventas con un margen de 45,5%, por lo que tiene sentido darle prioridad en campañas digitales, disponibilidad de inventario y visibilidad dentro del canal Online.
Escalar Women’s Apparel Online antes de aumentar su exposición en West. Women’s Apparel obtiene 9,0 M y 45,8% de margen en Online, mientras que en West registra 7,0 M con solo 29,8%. Esto sugiere orientar el crecimiento de esta línea hacia el canal donde actualmente convierte mejor las ventas en utilidad, en lugar de expandir de forma uniforme.
Corregir el bajo margen de Men’s Athletic Footwear en West. Esta combinación factura 6,8 M, pero trabaja con un margen de apenas 31,9%. Antes de impulsar más volumen, conviene revisar promociones, descuentos y mezcla de referencias para evitar que un crecimiento en ventas mantenga una rentabilidad relativamente baja.
Replicar en West las condiciones que funcionan mejor para Men’s Street Footwear en Northeast. El mismo producto presenta 44,3% de margen en Northeast frente a 39,3% en West. La decisión no sería vender menos en West, sino comparar surtido, promociones y canales utilizados en ambas regiones y probar en West aquellas prácticas asociadas con el mejor desempeño observado en Northeast.
Redistribuir parte del esfuerzo comercial hacia South buscando crecimiento rentable. West lidera en ventas con 36,4 M, pero South alcanza el mayor margen regional, con 44,8%. Esto abre la posibilidad de destinar parte de las iniciativas de crecimiento a South, especialmente en los productos y canales que ya muestran buenos resultados, en lugar de concentrar toda la expansión en la región que más factura.
Dar mayor peso a Sports Direct dentro de la estrategia de distribuidores. West Gear vende más, con 32,4 M, pero Sports Direct obtiene un margen superior: 43,2% frente a 37,6%. Conviene evaluar ampliar con Sports Direct las líneas que tengan mejor desempeño y, paralelamente, renegociar o ajustar las combinaciones menos rentables dentro de West Gear.
Evitar descuentos generales como estrategia para vender más unidades. La correlación entre precio y unidades vendidas es 0,266, por lo que la base no muestra una relación inversa fuerte entre ambas variables. En lugar de bajar precios de manera general, sería más apropiado hacer pruebas diferenciadas por producto y canal y mantener aquellas promociones que mejoren ventas sin deteriorar el margen.
El análisis muestra que el mejor desempeño comercial no depende únicamente de vender más, sino de combinar volumen y rentabilidad. Men’s Street Footwear se consolida como la línea de mayor aporte, mientras que el canal Online presenta una combinación favorable de participación en ventas y margen operativo. A nivel regional, West concentra el mayor volumen, pero South presenta una mayor eficiencia en términos de margen, lo que evidencia que las regiones con mayores ventas no necesariamente son las más rentables.
También se observan diferencias importantes según la combinación de producto y canal. Casos como Men’s Street Footwear + Online y Women’s Apparel + Online muestran que ciertas combinaciones logran simultáneamente altos niveles de ventas y márgenes elevados, mientras que otras, especialmente algunas combinaciones en West e In-store, presentan oportunidades de mejora en rentabilidad.
En consecuencia, las decisiones comerciales deberían orientarse a potenciar las combinaciones que ya muestran un equilibrio favorable entre ventas y margen, y corregir aquellas que generan alto volumen con menor rentabilidad. De esta manera, la información analizada puede utilizarse no solo para conocer qué segmentos venden más, sino para identificar dónde conviene concentrar los esfuerzos comerciales.