1 Introducción

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.

1.1 Objetivo del análisis

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

  1. Describir el comportamiento de las ventas, unidades vendidas, utilidad operativa y margen operativo.

  2. Comparar el desempeño entre productos, regiones, ciudades, distribuidores y métodos de venta.

  3. Identificar segmentos con alto volumen de ventas y segmentos con mayor rentabilidad.

  4. Evaluar la relación entre precio, volumen, ventas, utilidad y margen operativo.

  5. Identificar combinaciones estratégicas de producto + región y producto + método de venta.

  6. Formular recomendaciones sustentadas en los hallazgos del análisis.

1.2 Enfoque analítico

El análisis seguirá una lógica de lo general a lo específico:

  • Diagnóstico de la base: dimensiones, tipos de variables, valores faltantes, ceros y registros duplicados.
  • Análisis univariado: medidas de tendencia central y variabilidad.
  • Análisis por segmentos: ventas, utilidad y margen por producto, región, distribuidor, ciudad y método de venta.
  • Análisis bivariado: correlaciones y gráficos de dispersión.
  • Análisis estratégico: combinaciones de producto con región y canal.
  • Analítica prescriptiva básica: recomendaciones derivadas de los patrones observados.

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.

2 Preparación de los datos

2.1 1. Cargar librerías

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)

2.2 2. Cargar la base de Adidas

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

2.3 3. Verificar estructura y variables

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 = ", ")
    )
  )
}

2.4 4. Diccionario de variables

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

3 Diagnóstico de calidad de datos

3.1 Registros y valores faltantes

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

4 Estadísticas descriptivas generales

4.1 Indicadores principales

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

4.2 Medidas de centralidad y variabilidad

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

5 Tema gráfico y formato de etiquetas

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

6 Desempeño de ventas

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.

6.1 Ventas y participación por producto

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

6.2 Ventas y margen por región

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

6.3 Ventas por distribuidor

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.

6.4 Método de venta

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

7 Rentabilidad

7.1 Utilidad y margen por producto

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.

7.2 Distribución y variabilidad del margen operativo

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.

8 Relación entre variables clave

8.1 Matriz de correlaciones

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

8.2 Ventas totales vs. utilidad operativa

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.

8.3 Precio por unidad vs. unidades vendidas

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.

9 Análisis estratégico de combinaciones

9.1 Producto + región

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

9.2 Producto + método de venta

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.

10 Hallazgos principales

  1. Escala comercial por producto.
    Men’s Street Footwear lidera las ventas, con 27.7 M, y representa 23.0% del total.

  2. Rentabilidad por producto.
    El mayor margen operativo ponderado por producto corresponde a Men’s Street Footwear, con 42.0%.

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

  4. Desempeño de distribuidores.
    West Gear lidera las ventas entre distribuidores. Por margen, destaca Sports Direct, con 43.2%.

  5. 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%.

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

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

  8. 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%.

11 Recomendaciones para la toma de decisiones

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

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

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

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

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

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

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

12 Limitaciones del análisis

  1. No existe una variable temporal, por lo que no es posible evaluar crecimiento, estacionalidad ni tendencias.
  2. La base no permite identificar clientes individuales ni analizar recompra, segmentación demográfica o fidelidad.
  3. No se dispone de una estructura detallada de costos; por tanto, el análisis utiliza la utilidad operativa ya calculada en la base.
  4. No existe un identificador único de transacción, por lo que los registros exactamente duplicados no pueden clasificarse con certeza como errores.
  5. La base no especifica explícitamente la moneda; por ello, el informe presenta ventas y utilidad como unidades monetarias.
  6. Las correlaciones son asociaciones descriptivas y no demuestran causalidad.

13 Conclusiones

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.