Enlace al video de sustentación: Ver el video en YouTube

Resumen ejecutivo

Adidas necesita decidir dónde concentrar su atención comercial en Estados Unidos. Analizamos 9.644 transacciones válidas, que suman USD 120,2 millones en ventas y USD 47,2 millones de utilidad operativa, con un margen agregado de 39,3%. Encontramos que vender más no siempre significa ganar más: la región West concentra el 30,3% de las ventas, pero solo el 27,6% de la utilidad, con el margen más bajo (35,7%) en todos los canales y con todos los distribuidores; aunque vende 13,5% más caro por unidad, su costo por unidad es 23% mayor. En cambio, el canal Online genera el 37,4% de las ventas y el 41,4% de la utilidad, y es el más rentable en todas las regiones, productos y distribuidores gracias a un costo por unidad 18% menor que en tienda. Recomendamos priorizar un plan de rentabilidad para West, empezando por Women’s Apparel y West Gear, impulsar el canal Online y revisar las condiciones de los pedidos grandes en tienda. Estas conclusiones se limitan a las transacciones de la base, que no incluye fechas ni el detalle de costos.

Introducción

Adidas es una de las marcas de ropa y calzado deportivo más reconocidas del mundo. En Estados Unidos comercializa sus productos a través de minoristas como Foot Locker, West Gear, Sports Direct, Kohl’s, Amazon y Walmart, y mediante tres métodos de venta: en tienda (In-store), en outlet y en línea (Online).

Imagen ilustrativa.

Imagen ilustrativa.

En este informe realizamos un análisis exploratorio y diagnóstico de las ventas de Adidas en Estados Unidos, utilizando R. Aplicamos técnicas de estadística descriptiva y visualización de datos para identificar qué segmentos concentran las ventas, cuáles generan mayor rentabilidad y qué patrones o valores atípicos merecen atención.

A través de este análisis buscamos proporcionar al comité comercial y financiero de Adidas evidencia para decidir dónde conviene concentrar la atención de la empresa y por qué.

Ruta del informe. El análisis sigue un hilo conductor de cuatro preguntas:

  1. ¿Los datos son confiables? Revisamos la calidad de la base y documentamos cada decisión (sección 1).
  2. ¿Dónde se vende y dónde se gana? Medimos la participación de cada segmento en las ventas y en la utilidad (sección 2).
  3. ¿Por qué unos segmentos son más rentables que otros? Profundizamos en los dos hallazgos principales: la región West y el canal Online (sección 3).
  4. ¿Qué debe hacer Adidas? Proponemos acciones con su evidencia, beneficio, riesgo e indicador (sección 4).

1. Datos y preparación

Pregunta de esta sección: ¿los datos son confiables para tomar decisiones?

PASO 1. Cargar librerías

# Cargar librerías necesarias
library(readxl)      # leer archivos de Excel
library(dplyr)       # manipular datos: filtrar, agrupar, resumir
library(tidyr)       # organizar datos
library(ggplot2)     # gráficos
library(plotly)      # gráficos interactivos
library(knitr)       # tablas e informe
library(kableExtra)  # dar formato a las tablas

PASO 2. Cargar la base de datos

# Cargar la base indicando el tipo de cada columna: 5 de texto, 5 numéricas y 1 de texto
datos <- read_excel("DatosCaso1.xlsx",
    col_types = c("text", "text", "text",
        "text", "text", "numeric", "numeric",
        "numeric", "numeric", "numeric",
        "text"))

class(datos)      # tipo de objeto
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(datos)   # nombres de las columnas
##  [1] "distribuidor"       "region"             "estado"            
##  [4] "ciudad"             "producto"           "precio_unidad"     
##  [7] "unidades_vendidas"  "ventas_total"       "utilidad_operativa"
## [10] "margen_operativo"   "metodo_venta"
head(datos)       # primeras 6 filas
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
# Número de filas (observaciones) y columnas (variables)
dim(datos)
## [1] 9648   11

PASO 3. Comprender la base

# Nombres exactos de las variables y su tipo
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" ...

Unidad de observación: cada fila es una transacción de venta: un producto vendido por un distribuidor, en una ciudad y con un método de venta determinados. La base tiene 9.648 transacciones y 11 variables. Las cifras monetarias están en dólares estadounidenses (USD) y el mercado representado es Estados Unidos.

# Tabla descriptiva de las variables
variables <- data.frame(
  Variable = names(datos),
  Descripción = c("Minorista que vende el producto",
                  "Región de EE. UU.",
                  "Estado",
                  "Ciudad",
                  "Línea de producto",
                  "Precio por unidad",
                  "Unidades vendidas en la transacción",
                  "Ventas = precio × unidades",
                  "Utilidad operativa de la transacción",
                  "Margen operativo = utilidad / ventas",
                  "Canal de venta"),
  Tipo = c("Cualitativa nominal", "Cualitativa nominal", "Cualitativa nominal",
           "Cualitativa nominal", "Cualitativa nominal",
           "Cuantitativa continua", "Cuantitativa discreta",
           "Cuantitativa continua", "Cuantitativa continua",
           "Cuantitativa continua", "Cualitativa nominal"),
  Unidad = c("—", "—", "—", "—", "—", "USD", "Unidades", "USD", "USD",
             "Proporción (0 a 1)", "—")
)

kable(variables, caption = "Tabla 1. Variables de la base de datos") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111")
Tabla 1. Variables de la base de datos
Variable Descripción Tipo Unidad
distribuidor Minorista que vende el producto Cualitativa nominal —
region Región de EE. UU. Cualitativa nominal —
estado Estado Cualitativa nominal —
ciudad Ciudad Cualitativa nominal —
producto Línea de producto Cualitativa nominal —
precio_unidad Precio por unidad Cuantitativa continua USD
unidades_vendidas Unidades vendidas en la transacción Cuantitativa discreta Unidades
ventas_total Ventas = precio × unidades Cuantitativa continua USD
utilidad_operativa Utilidad operativa de la transacción Cuantitativa continua USD
margen_operativo Margen operativo = utilidad / ventas Cuantitativa continua Proporción (0 a 1)
metodo_venta Canal de venta Cualitativa nominal —
# Categorías de cada variable cualitativa
datos %>%
  summarise(Distribuidores = n_distinct(distribuidor),
            Regiones       = n_distinct(region),
            Estados        = n_distinct(estado),
            Ciudades       = n_distinct(ciudad),
            Productos      = n_distinct(producto),
            Metodos_venta  = n_distinct(metodo_venta)) %>%
  kable(caption = "Tabla 2. Número de categorías por variable cualitativa") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111")
Tabla 2. Número de categorías por variable cualitativa
Distribuidores Regiones Estados Ciudades Productos Metodos_venta
6 5 50 52 6 3

Alcance: 6 distribuidores, 5 regiones, 50 estados, 52 ciudades, 6 líneas de producto y 3 métodos de venta. La base no incluye fecha, por lo que no es posible analizar tendencias en el tiempo ni estacionalidad.

PASO 4. Revisión de la calidad de los datos

# 4.1 Datos faltantes (celdas vacías, NA) por variable
colSums(is.na(datos))
##       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
# 4.2 Filas duplicadas (copias exactas de otra fila)
sum(duplicated(datos))
## [1] 262
# 4.3 Coherencia entre variables
# ¿Ventas = precio × unidades?  (se permite una diferencia de 1 USD por redondeo)
incoh_ventas <- sum(abs(datos$precio_unidad * datos$unidades_vendidas - datos$ventas_total) > 1)

# ¿Margen = utilidad / ventas?  (solo donde las ventas son mayores que cero)
con_ventas   <- datos %>% filter(ventas_total > 0)
incoh_margen <- sum(abs(con_ventas$utilidad_operativa / con_ventas$ventas_total -
                        con_ventas$margen_operativo) > 0.01)

data.frame(Revisión = c("Ventas ≠ precio × unidades", "Margen ≠ utilidad / ventas"),
           Filas_incoherentes = c(incoh_ventas, incoh_margen))
Revisión Filas_incoherentes
Ventas ≠ precio × unidades 0
Margen ≠ utilidad / ventas 0
# 4.4 Transacciones con ventas en cero
datos %>% filter(ventas_total == 0)
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
# 4.5 Ciudades con el mismo nombre en dos estados distintos
datos %>%
  distinct(ciudad, estado) %>%
  group_by(ciudad) %>%
  filter(n() > 1)
ciudad estado
Portland Maine
Portland Oregon
Charleston South Carolina
Charleston West Virginia
# 4.6 Valores atípicos con la regla del rango intercuartílico (RIC):
# es atípico todo valor por debajo de Q1 - 1,5*RIC o por encima de Q3 + 1,5*RIC

# Precio por unidad
q1_precio  <- quantile(datos$precio_unidad, 0.25)
q3_precio  <- quantile(datos$precio_unidad, 0.75)
ric_precio <- q3_precio - q1_precio
atip_precio <- sum(datos$precio_unidad < q1_precio - 1.5 * ric_precio |
                   datos$precio_unidad > q3_precio + 1.5 * ric_precio)

# Unidades vendidas
q1_unid  <- quantile(datos$unidades_vendidas, 0.25)
q3_unid  <- quantile(datos$unidades_vendidas, 0.75)
ric_unid <- q3_unid - q1_unid
atip_unid <- sum(datos$unidades_vendidas < q1_unid - 1.5 * ric_unid |
                 datos$unidades_vendidas > q3_unid + 1.5 * ric_unid)

# Ventas totales
q1_ventas  <- quantile(datos$ventas_total, 0.25)
q3_ventas  <- quantile(datos$ventas_total, 0.75)
ric_ventas <- q3_ventas - q1_ventas
atip_ventas <- sum(datos$ventas_total < q1_ventas - 1.5 * ric_ventas |
                   datos$ventas_total > q3_ventas + 1.5 * ric_ventas)

# Utilidad operativa
q1_util  <- quantile(datos$utilidad_operativa, 0.25)
q3_util  <- quantile(datos$utilidad_operativa, 0.75)
ric_util <- q3_util - q1_util
atip_util <- sum(datos$utilidad_operativa < q1_util - 1.5 * ric_util |
                 datos$utilidad_operativa > q3_util + 1.5 * ric_util)

# Margen operativo
q1_margen  <- quantile(datos$margen_operativo, 0.25)
q3_margen  <- quantile(datos$margen_operativo, 0.75)
ric_margen <- q3_margen - q1_margen
atip_margen <- sum(datos$margen_operativo < q1_margen - 1.5 * ric_margen |
                   datos$margen_operativo > q3_margen + 1.5 * ric_margen)

# Tabla resumen
atipicos <- data.frame(
  Variable   = c("Precio por unidad", "Unidades vendidas", "Ventas totales",
                 "Utilidad operativa", "Margen operativo"),
  Atipicos   = c(atip_precio, atip_unid, atip_ventas, atip_util, atip_margen)
)
atipicos$Porcentaje <- round(atipicos$Atipicos / nrow(datos) * 100, 1)
atipicos
Variable Atipicos Porcentaje
Precio por unidad 104 1.1
Unidades vendidas 508 5.3
Ventas totales 799 8.3
Utilidad operativa 694 7.2
Margen operativo 63 0.7

Resultados de la revisión y decisiones

Revisión Resultado Decisión
Datos faltantes Ninguno No requiere tratamiento
Coherencia ventas = precio × unidades Se cumple en todas las filas La base es consistente
Coherencia margen = utilidad / ventas Se cumple en todas las filas con ventas La base es consistente
Filas duplicadas 262 copias exactas (510 filas involucradas) Se conservan. La base no tiene fecha ni número de factura, así que no es posible saber si son errores o ventas reales repetidas en días distintos. Se evalúa su impacto más abajo
Ventas en cero 4 transacciones (Foot Locker, Omaha, Women’s Athletic Footwear) con 0 unidades, 0 ventas y 0 utilidad, pero con un margen registrado (40% a 55%) Se eliminan. El cero no tiene significado: un margen sin ventas es un cálculo inválido. Representan solo el 0,04% de las observaciones (muy por debajo del 10%) y no alteran los totales
Ciudades repetidas Charleston (Carolina del Sur y Virginia Occidental) y Portland (Maine y Oregón) Las ciudades se analizan como ciudad + estado
Valores atípicos Ventas: 799 transacciones (8,3%) por encima de USD 33.563 Se conservan. Son coherentes con precio × unidades y corresponden a pedidos grandes, no a errores
# Aplicar las decisiones

# Proporción de transacciones con ventas en cero
ceros <- sum(datos$ventas_total == 0)
round(ceros / nrow(datos) * 100, 2)   # porcentaje sobre el total
## [1] 0.04
# Eliminar las 4 transacciones en cero (0,04% del total, sin significado)
datos <- datos %>% filter(ventas_total > 0)

datos <- datos %>%
  mutate(ciudad_estado = paste(ciudad, estado, sep = ", "),  # ciudad única
         margen_pct    = margen_operativo * 100)             # margen en %

# Base de análisis (se conserva el nombre datos_margen para los cálculos de margen)
datos_margen <- datos
nrow(datos)
## [1] 9644
# Impacto de los duplicados: totales con y sin duplicados
sin_dup <- datos %>% select(1:11) %>% distinct()

comparacion <- data.frame(
  Base = c("Completa (decisión adoptada)", "Sin duplicados"),
  Transacciones = c(nrow(datos), nrow(sin_dup)),
  Ventas_USD_millones = c(sum(datos$ventas_total), sum(sin_dup$ventas_total)) / 1e6,
  Utilidad_USD_millones = c(sum(datos$utilidad_operativa), sum(sin_dup$utilidad_operativa)) / 1e6,
  Margen_agregado_pct = c(sum(datos$utilidad_operativa) / sum(datos$ventas_total),
                          sum(sin_dup$utilidad_operativa) / sum(sin_dup$ventas_total)) * 100
)

kable(comparacion, digits = 1, caption = "Tabla 3. Sensibilidad de los totales a los duplicados") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111")
Tabla 3. Sensibilidad de los totales a los duplicados
Base Transacciones Ventas_USD_millones Utilidad_USD_millones Margen_agregado_pct
Completa (decisión adoptada) 9644 120.2 47.2 39.3
Sin duplicados 9382 114.4 45.2 39.5

Interpretación: si se eliminaran los duplicados, las ventas bajarían de USD 120,2 a 114,4 millones (−4,8%), pero el margen agregado casi no cambia (39,3% frente a 39,5%). Es decir, las conclusiones sobre rentabilidad no dependen de esta decisión.

2. Análisis exploratorio

Pregunta de esta sección: ¿dónde se concentran las ventas y dónde se genera la utilidad?

Indicadores generales

totales <- data.frame(
  Transacciones        = nrow(datos),
  Ventas_USD_millones  = sum(datos$ventas_total) / 1e6,
  Unidades_millones    = sum(datos$unidades_vendidas) / 1e6,
  Utilidad_USD_millones = sum(datos$utilidad_operativa) / 1e6,
  Margen_agregado_pct  = sum(datos$utilidad_operativa) / sum(datos$ventas_total) * 100
)

kable(totales, digits = 2, caption = "Tabla 4. Totales del negocio") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111")
Tabla 4. Totales del negocio
Transacciones Ventas_USD_millones Unidades_millones Utilidad_USD_millones Margen_agregado_pct
9644 120.17 2.48 47.22 39.3
# Margen agregado vs promedio simple de los márgenes
data.frame(
  Indicador = c("Margen agregado (utilidad total / ventas totales)",
                "Promedio simple de los márgenes por transacción"),
  Valor_pct = c(sum(datos_margen$utilidad_operativa) / sum(datos_margen$ventas_total) * 100,
                mean(datos_margen$margen_pct))
) %>%
  kable(digits = 1, caption = "Tabla 5. Dos formas de medir el margen") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111")
Tabla 5. Dos formas de medir el margen
Indicador Valor_pct
Margen agregado (utilidad total / ventas totales) 39.3
Promedio simple de los márgenes por transacción 42.3

Interpretación: Adidas vendió USD 120,2 millones (2,48 millones de unidades) y obtuvo una utilidad operativa de USD 47,2 millones. El margen operativo agregado es 39,3%: de cada dólar vendido quedan 39 centavos de utilidad operativa.

📌 El promedio simple de los márgenes da 42,3%, tres puntos más. La diferencia ocurre porque el promedio simple le da el mismo peso a una venta de USD 100 que a una de USD 80.000. Las transacciones grandes tienen márgenes algo menores, así que el promedio simple sobreestima la rentabilidad. Por eso usamos siempre el margen agregado.

Indicadores de centralidad y dispersión

# Se usan las 9.644 transacciones de la base depurada
indicadores <- data.frame(
  Variable = c("Precio por unidad (USD)", "Unidades vendidas", "Ventas (USD)",
               "Utilidad operativa (USD)", "Margen operativo (%)"),
  Promedio = c(mean(datos_margen$precio_unidad), mean(datos_margen$unidades_vendidas),
               mean(datos_margen$ventas_total), mean(datos_margen$utilidad_operativa),
               mean(datos_margen$margen_pct)),
  Mediana  = c(median(datos_margen$precio_unidad), median(datos_margen$unidades_vendidas),
               median(datos_margen$ventas_total), median(datos_margen$utilidad_operativa),
               median(datos_margen$margen_pct)),
  Q1       = c(quantile(datos_margen$precio_unidad, 0.25), quantile(datos_margen$unidades_vendidas, 0.25),
               quantile(datos_margen$ventas_total, 0.25), quantile(datos_margen$utilidad_operativa, 0.25),
               quantile(datos_margen$margen_pct, 0.25)),
  Q3       = c(quantile(datos_margen$precio_unidad, 0.75), quantile(datos_margen$unidades_vendidas, 0.75),
               quantile(datos_margen$ventas_total, 0.75), quantile(datos_margen$utilidad_operativa, 0.75),
               quantile(datos_margen$margen_pct, 0.75)),
  Minimo   = c(min(datos_margen$precio_unidad), min(datos_margen$unidades_vendidas),
               min(datos_margen$ventas_total), min(datos_margen$utilidad_operativa),
               min(datos_margen$margen_pct)),
  Maximo   = c(max(datos_margen$precio_unidad), max(datos_margen$unidades_vendidas),
               max(datos_margen$ventas_total), max(datos_margen$utilidad_operativa),
               max(datos_margen$margen_pct)),
  Desv_est = c(sd(datos_margen$precio_unidad), sd(datos_margen$unidades_vendidas),
               sd(datos_margen$ventas_total), sd(datos_margen$utilidad_operativa),
               sd(datos_margen$margen_pct))
)

# Coeficiente de variación = desviación estándar / promedio × 100
indicadores$CV_pct <- indicadores$Desv_est / indicadores$Promedio * 100

kable(indicadores, digits = 1, row.names = FALSE,
      format.args = list(big.mark = ","),
      col.names = c("Variable", "Promedio", "Mediana", "Q1", "Q3",
                    "Mínimo", "Máximo", "Desv. estándar", "Coef. variación (%)"),
      caption = "Tabla 6. Indicadores de centralidad y dispersión por transacción") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Fuente: base de ventas de Adidas. Elaboración propia. Base: 9.644 transacciones, sin las 4 con ventas en cero.")
Tabla 6. Indicadores de centralidad y dispersión por transacción
Variable Promedio Mediana Q1 Q3 Mínimo Máximo Desv. estándar Coef. variación (%)
Precio por unidad (USD) 45.2 45 35 55.0 7.0 110 14.7 32.5
Unidades vendidas 257.0 176 106 350.0 6.0 1,275 214.2 83.3
Ventas (USD) 12,460.2 7,812 4,068 15,872.0 160.0 82,500 12,716.5 102.1
Utilidad operativa (USD) 4,896.8 3,264 1,754 6,193.8 75.2 39,000 4,866.5 99.4
Margen operativo (%) 42.3 41 35 49.0 10.0 80 9.7 23.0
Note:
Fuente: base de ventas de Adidas. Elaboración propia. Base: 9.644 transacciones, sin las 4 con ventas en cero.

Interpretación:

📌 Precio: el precio promedio es USD 45 y coincide con la mediana, así que la distribución es simétrica. El 50% central de los precios está entre USD 35 y USD 55.

📌 Unidades y ventas: el promedio es mucho mayor que la mediana (257 frente a 176 unidades; USD 12.460 frente a USD 7.812 en ventas). Hay pocas transacciones muy grandes que suben el promedio. Por eso la mediana representa mejor una venta típica.

📊 Dispersión: el coeficiente de variación de las ventas supera el 100%, lo que indica una variabilidad muy alta entre transacciones. El margen, en cambio, es más estable (CV de 23%).

Por qué estos indicadores: usamos la mediana y los cuartiles porque las ventas y las unidades tienen distribuciones sesgadas, donde el promedio se distorsiona. El coeficiente de variación permite comparar la dispersión de variables con unidades distintas (USD, unidades, %).

Distribución de las ventas

ggplotly(
  ggplot(datos, aes(x = ventas_total)) +
    geom_histogram(binwidth = 2500, fill = "#111111", color = "white") +
    geom_vline(xintercept = mean(datos$ventas_total), color = "#E03C31", linewidth = 1) +
    geom_vline(xintercept = median(datos$ventas_total), color = "grey55",
               linewidth = 1, linetype = "dashed") +
    scale_x_continuous(labels = scales::dollar) +
    labs(title = "Figura 1. Distribución de las ventas por transacción",
         x = "Ventas por transacción (USD)", y = "Número de transacciones",
         caption = "") +
    theme_minimal()
)

Línea roja: promedio. Línea gris punteada: mediana.
Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 1. ¿Cómo se reparten las ventas entre transacciones? La mayoría de las transacciones están por debajo de USD 16.000 (el 75% de ellas), pero la cola hacia la derecha llega hasta USD 82.500. El promedio (línea roja) queda a la derecha de la mediana (línea gris), lo que confirma una distribución sesgada a la derecha: unas pocas transacciones grandes pesan mucho en el total.

ggplotly(
  ggplot(datos, aes(x = metodo_venta, y = ventas_total)) +
    geom_boxplot(fill = "grey85", color = "black", outlier.colour = "#E03C31",
                 outlier.size = 1.5) +
    scale_y_continuous(labels = scales::dollar) +
    labs(title = "Figura 2. Ventas por transacción según método de venta",
         x = "Método de venta", y = "Ventas por transacción (USD)",
         caption = "Fuente: base de ventas de Adidas. Elaboración propia.") +
    theme_minimal()
) %>%
  style(marker = list(color = "#E03C31"))

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 2. ¿Las transacciones grandes se concentran en algún canal? Sí. La venta típica (mediana) en tienda (In-store) es de USD 16.875, más del doble que en Outlet (USD 7.788) y casi el triple que en Online (USD 6.000). Los puntos rojos son transacciones atípicamente grandes dentro de cada canal.

📌 Las transacciones grandes tienden a tener márgenes menores (el cuartil de ventas más alto tiene un margen promedio de 37%, frente a 45% en el más bajo). Es una pista para el diagnóstico: el canal In-store vende pedidos más grandes, pero con menor margen.

Participación por segmentos

Para cada segmento calculamos las ventas, las unidades y la utilidad, su participación en el total y su margen agregado.

Región

seg_region <- datos %>%
  group_by(region) %>%
  summarise(transacciones = n(),
            ventas   = sum(ventas_total),
            unidades = sum(unidades_vendidas),
            utilidad = sum(utilidad_operativa)) %>%
  mutate(part_ventas   = ventas / sum(ventas) * 100,       # participación en ventas
         part_unidades = unidades / sum(unidades) * 100,   # participación en unidades
         part_utilidad = utilidad / sum(utilidad) * 100,   # participación en utilidad
         margen        = utilidad / ventas * 100) %>%      # margen agregado del segmento
  arrange(desc(ventas))

# Tabla con formato (ventas y utilidad en millones de USD)
kable(seg_region %>% mutate(ventas = ventas / 1e6, utilidad = utilidad / 1e6),
      digits = 1, format.args = list(big.mark = ","),
      col.names = c("Región", "Transacciones", "Ventas (USD M)", "Unidades",
                    "Utilidad (USD M)", "Part. ventas (%)", "Part. unidades (%)",
                    "Part. utilidad (%)", "Margen (%)"),
      caption = "Tabla 7. Ventas, unidades y rentabilidad por región") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.")
Tabla 7. Ventas, unidades y rentabilidad por región
Región Transacciones Ventas (USD M) Unidades Utilidad (USD M) Part. ventas (%) Part. unidades (%) Part. utilidad (%) Margen (%)
West 2,448 36.4 686,985 13.0 30.3 27.7 27.6 35.7
Northeast 2,376 25.1 501,279 9.7 20.9 20.2 20.6 38.8
Southeast 1,224 21.4 407,000 8.4 17.8 16.4 17.8 39.3
South 1,728 20.6 492,260 9.2 17.1 19.9 19.5 44.8
Midwest 1,868 16.7 391,337 6.9 13.9 15.8 14.5 41.1
Note:
Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.

Producto

seg_producto <- datos %>%
  group_by(producto) %>%
  summarise(transacciones = n(),
            ventas   = sum(ventas_total),
            unidades = sum(unidades_vendidas),
            utilidad = sum(utilidad_operativa)) %>%
  mutate(part_ventas   = ventas / sum(ventas) * 100,       # participación en ventas
         part_unidades = unidades / sum(unidades) * 100,   # participación en unidades
         part_utilidad = utilidad / sum(utilidad) * 100,   # participación en utilidad
         margen        = utilidad / ventas * 100) %>%      # margen agregado del segmento
  arrange(desc(ventas))

# Tabla con formato (ventas y utilidad en millones de USD)
kable(seg_producto %>% mutate(ventas = ventas / 1e6, utilidad = utilidad / 1e6),
      digits = 1, format.args = list(big.mark = ","),
      col.names = c("Producto", "Transacciones", "Ventas (USD M)", "Unidades",
                    "Utilidad (USD M)", "Part. ventas (%)", "Part. unidades (%)",
                    "Part. utilidad (%)", "Margen (%)"),
      caption = "Tabla 8. Ventas, unidades y rentabilidad por producto") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.")
Tabla 8. Ventas, unidades y rentabilidad por producto
Producto Transacciones Ventas (USD M) Unidades Utilidad (USD M) Part. ventas (%) Part. unidades (%) Part. utilidad (%) Margen (%)
Men’s Street Footwear 1,610 27.7 593,320 11.6 23.0 23.9 24.6 42.0
Women’s Apparel 1,608 23.9 433,827 9.7 19.9 17.5 20.5 40.6
Men’s Athletic Footwear 1,610 20.6 435,526 7.4 17.1 17.6 15.7 36.1
Women’s Street Footwear 1,608 17.2 392,269 6.5 14.3 15.8 13.8 37.8
Men’s Apparel 1,606 16.5 306,683 6.4 13.7 12.4 13.5 38.6
Women’s Athletic Footwear 1,602 14.3 317,236 5.6 11.9 12.8 11.9 39.1
Note:
Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.

Método de venta

seg_metodo <- datos %>%
  group_by(metodo_venta) %>%
  summarise(transacciones = n(),
            ventas   = sum(ventas_total),
            unidades = sum(unidades_vendidas),
            utilidad = sum(utilidad_operativa)) %>%
  mutate(part_ventas   = ventas / sum(ventas) * 100,       # participación en ventas
         part_unidades = unidades / sum(unidades) * 100,   # participación en unidades
         part_utilidad = utilidad / sum(utilidad) * 100,   # participación en utilidad
         margen        = utilidad / ventas * 100) %>%      # margen agregado del segmento
  arrange(desc(ventas))

# Tabla con formato (ventas y utilidad en millones de USD)
kable(seg_metodo %>% mutate(ventas = ventas / 1e6, utilidad = utilidad / 1e6),
      digits = 1, format.args = list(big.mark = ","),
      col.names = c("Método de venta", "Transacciones", "Ventas (USD M)", "Unidades",
                    "Utilidad (USD M)", "Part. ventas (%)", "Part. unidades (%)",
                    "Part. utilidad (%)", "Margen (%)"),
      caption = "Tabla 9. Ventas, unidades y rentabilidad por método de venta") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.")
Tabla 9. Ventas, unidades y rentabilidad por método de venta
Método de venta Transacciones Ventas (USD M) Unidades Utilidad (USD M) Part. ventas (%) Part. unidades (%) Part. utilidad (%) Margen (%)
Online 4,887 45.0 939,093 19.6 37.4 37.9 41.4 43.5
Outlet 3,017 39.5 849,778 14.9 32.9 34.3 31.6 37.7
In-store 1,740 35.7 689,990 12.8 29.7 27.8 27.0 35.8
Note:
Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.

Distribuidor

seg_distrib <- datos %>%
  group_by(distribuidor) %>%
  summarise(transacciones = n(),
            ventas   = sum(ventas_total),
            unidades = sum(unidades_vendidas),
            utilidad = sum(utilidad_operativa)) %>%
  mutate(part_ventas   = ventas / sum(ventas) * 100,       # participación en ventas
         part_unidades = unidades / sum(unidades) * 100,   # participación en unidades
         part_utilidad = utilidad / sum(utilidad) * 100,   # participación en utilidad
         margen        = utilidad / ventas * 100) %>%      # margen agregado del segmento
  arrange(desc(ventas))

# Tabla con formato (ventas y utilidad en millones de USD)
kable(seg_distrib %>% mutate(ventas = ventas / 1e6, utilidad = utilidad / 1e6),
      digits = 1, format.args = list(big.mark = ","),
      col.names = c("Distribuidor", "Transacciones", "Ventas (USD M)", "Unidades",
                    "Utilidad (USD M)", "Part. ventas (%)", "Part. unidades (%)",
                    "Part. utilidad (%)", "Margen (%)"),
      caption = "Tabla 10. Ventas, unidades y rentabilidad por distribuidor") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.")
Tabla 10. Ventas, unidades y rentabilidad por distribuidor
Distribuidor Transacciones Ventas (USD M) Unidades Utilidad (USD M) Part. ventas (%) Part. unidades (%) Part. utilidad (%) Margen (%)
West Gear 2,374 32.4 625,262 12.2 27.0 25.2 25.8 37.6
Foot Locker 2,633 29.0 604,369 11.3 24.2 24.4 24.0 39.0
Sports Direct 2,032 24.6 557,640 10.6 20.5 22.5 22.5 43.2
Kohl’s 1,030 13.5 287,375 5.2 11.2 11.6 11.0 38.4
Walmart 626 10.5 206,225 3.9 8.7 8.3 8.3 37.1
Amazon 949 10.1 197,990 4.0 8.4 8.0 8.4 39.5
Note:
Margen = utilidad del segmento / ventas del segmento × 100. Fuente: base de ventas de Adidas.

¿Todo lo que se vende se traduce en utilidad? Comparando la participación en ventas con la participación en utilidad de cada segmento (columnas Part. ventas y Part. utilidad de las tablas):

📌 West genera el 30,3% de las ventas, pero solo el 27,6% de la utilidad: aporta menos utilidad de la que vende.

📌 South genera el 17,1% de las ventas y el 19,5% de la utilidad: aporta más utilidad de la que vende.

📌 Online genera el 37,4% de las ventas y el 41,4% de la utilidad, mientras que In-store genera el 29,7% de las ventas y solo el 27,0% de la utilidad.

Cuando la participación en utilidad es mayor que la participación en ventas, el segmento es más rentable que el promedio; cuando es menor, es menos rentable.

Ventas frente a margen por región

En los gráficos combinados, las barras muestran las ventas (eje izquierdo) y la línea roja el margen operativo agregado (eje derecho). Ambos ejes inician en cero para no exagerar las diferencias.

# Gráfico combinado: barras = ventas (eje izquierdo), línea = margen (eje derecho)
plot_ly(seg_region) %>%
  add_bars(x = ~region, y = ~ventas / 1e6, name = "Ventas (USD millones)",
           marker = list(color = "#111111"),
           text = ~round(ventas / 1e6, 1), textposition = "inside",
           textfont = list(color = "white"), insidetextanchor = "end",
           hovertemplate = "%{x}<br>Ventas: USD %{y:.1f} M<extra></extra>") %>%
  add_trace(x = ~region, y = ~margen, name = "Margen operativo (%)",
            type = "scatter", mode = "lines+markers+text", yaxis = "y2",
            line = list(color = "#E03C31", width = 3), marker = list(color = "#E03C31", size = 9),
            text = ~paste0(round(margen, 1), "%"), textposition = "top center",
            textfont = list(color = "#E03C31", size = 13),
            hovertemplate = "%{x}<br>Margen: %{y:.1f}%<extra></extra>") %>%
  layout(title = "Figura 3. Ventas y margen operativo por región",
         xaxis = list(title = "Región", categoryorder = "array",
                      categoryarray = seg_region$region),
         yaxis = list(title = "Ventas (USD millones)", rangemode = "tozero"),
         yaxis2 = list(title = "Margen operativo (%)", overlaying = "y",
                       side = "right", range = c(0, 55)),
         legend = list(orientation = "h", y = -0.25),
         margin = list(r = 70))

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 3. ¿Las regiones que más venden son las más rentables? No necesariamente. West concentra el 30% de las ventas, pero tiene el margen más bajo (35,7%). South, con el 17% de las ventas, tiene el margen más alto (44,8%). Vender más no significa ganar más por cada dólar vendido.

📌 Hallazgos preliminares para profundizar en el diagnóstico:

  1. West vende más pero gana menos por dólar. ¿Se explica por su mezcla de canales o de productos?
  2. Online es el canal con mayor participación (37%) y también con mayor margen (43,5%); In-store tiene el menor margen (35,8%).
  3. Men’s Street Footwear lidera en ventas (23%) con margen alto (42,0%); Men’s Athletic Footwear tiene el margen más bajo (36,1%).

Representación espacial de la información

Para identificar diferencias geográficas, representamos el margen operativo de cada estado en un mapa. Como la base no incluye coordenadas, cada estado se ubica con su código de dos letras (por ejemplo, CA para California).

estados <- datos %>%
  group_by(estado) %>%
  summarise(ventas   = sum(ventas_total),
            utilidad = sum(utilidad_operativa)) %>%
  mutate(part_ventas = ventas / sum(ventas) * 100,
         margen      = utilidad / ventas * 100,
         codigo      = state.abb[match(estado, state.name)])  # código de dos letras

plot_geo(estados, locationmode = "USA-states") %>%
  add_trace(z = ~margen, locations = ~codigo,
            text = ~paste0(estado,
                           "<br>Ventas: USD ", round(ventas / 1e6, 1), " M (", round(part_ventas, 1), "%)",
                           "<br>Margen: ", round(margen, 1), "%"),
            hoverinfo = "text",
            colorscale = list(c(0, "#E03C31"), c(0.5, "white"), c(1, "#111111")), zmid = 39.3,
            colorbar = list(title = "Margen (%)"),
            marker = list(line = list(color = "white", width = 0.5))) %>%
  layout(title = "Figura 4. Margen operativo por estado",
         geo = list(scope = "usa"))

Rojo: estados con margen por debajo del promedio nacional (39,3%). Negro: por encima. Al pasar el mouse se ven las ventas y el margen de cada estado.
Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 4. ¿Dónde se gana más y dónde menos? Los estados con menor margen se concentran en el oeste y en los estados alejados: Hawaii (28,5%), Washington (28,8%), Alaska (32,7%) y California (34,5%). Los de mayor margen están en el sur y el centro del país: Alabama (54,4%), Tennessee (49,5%) y Michigan (45,9%). California es el segundo estado que más vende del país (7,1% de las ventas), pero está entre los cinco de menor margen.

3. Diagnóstico y hallazgos

Pregunta de esta sección: ¿por qué unos segmentos son más rentables que otros?

En esta sección profundizamos en los patrones observados: comparamos canales y productos, cruzamos región con método de venta y revisamos la relación entre precio, volumen y utilidad.

Ventas frente a margen por canal y por producto

# Gráfico combinado: barras = ventas (eje izquierdo), línea = margen (eje derecho)
plot_ly(seg_metodo) %>%
  add_bars(x = ~metodo_venta, y = ~ventas / 1e6, name = "Ventas (USD millones)",
           marker = list(color = "#111111"),
           text = ~round(ventas / 1e6, 1), textposition = "inside",
           textfont = list(color = "white"), insidetextanchor = "end",
           hovertemplate = "%{x}<br>Ventas: USD %{y:.1f} M<extra></extra>") %>%
  add_trace(x = ~metodo_venta, y = ~margen, name = "Margen operativo (%)",
            type = "scatter", mode = "lines+markers+text", yaxis = "y2",
            line = list(color = "#E03C31", width = 3), marker = list(color = "#E03C31", size = 9),
            text = ~paste0(round(margen, 1), "%"), textposition = "top center",
            textfont = list(color = "#E03C31", size = 13),
            hovertemplate = "%{x}<br>Margen: %{y:.1f}%<extra></extra>") %>%
  layout(title = "Figura 5. Ventas y margen operativo por método de venta",
         xaxis = list(title = "Método de venta", categoryorder = "array",
                      categoryarray = seg_metodo$metodo_venta),
         yaxis = list(title = "Ventas (USD millones)", rangemode = "tozero"),
         yaxis2 = list(title = "Margen operativo (%)", overlaying = "y",
                       side = "right", range = c(0, 55)),
         legend = list(orientation = "h", y = -0.25),
         margin = list(r = 70))

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 5. ¿El canal que más vende es el más rentable? Sí. Online es el canal con mayor participación en ventas (37,4%) y también el de mayor margen (43,5%). In-store es el de menor margen (35,8%).

# Pasar las dos participaciones a formato largo para graficarlas lado a lado
producto_part <- seg_producto %>%
  select(producto, part_ventas, part_utilidad) %>%
  pivot_longer(cols = c(part_ventas, part_utilidad),
               names_to = "medida", values_to = "participacion") %>%
  mutate(medida = ifelse(medida == "part_ventas", "Participación en ventas",
                         "Participación en utilidad"))

ggplotly(
  ggplot(producto_part, aes(x = reorder(producto, participacion), y = participacion,
                            fill = medida,
                            text = paste0(producto, "<br>", medida, ": ",
                                          round(participacion, 1), "%"))) +
    geom_col(position = "dodge", width = 0.7) +
    coord_flip() +
    scale_fill_manual(values = c("Participación en ventas" = "grey70",
                                 "Participación en utilidad" = "#111111"), name = NULL) +
    labs(title = "Figura 6. Participación en ventas y en utilidad por producto",
         x = NULL, y = "Participación en el total (%)") +
    theme_minimal(),
  tooltip = "text"
)

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 6. ¿Todo lo que se vende se traduce en utilidad? No en la misma proporción. Cuando la barra negra (utilidad) es más larga que la gris (ventas), el producto aporta más utilidad de la que vende. Men’s Street Footwear es el producto estrella: genera el 23,0% de las ventas y el 24,6% de la utilidad, con el margen más alto (42,0%). En cambio, Men’s Athletic Footwear genera el 17,1% de las ventas, pero solo el 15,7% de la utilidad, con el margen más bajo (36,1%).

Cruce región × método de venta

cruce <- datos %>%
  group_by(region, metodo_venta) %>%
  summarise(ventas = sum(ventas_total), utilidad = sum(utilidad_operativa),
            .groups = "drop") %>%
  group_by(region) %>%
  mutate(margen = utilidad / ventas * 100,
         mezcla = ventas / sum(ventas) * 100) %>%
  ungroup()

ggplotly(
  ggplot(cruce, aes(x = metodo_venta, y = region, fill = margen,
                    text = paste0(region, " · ", metodo_venta,
                                  "<br>Margen: ", round(margen, 1), "%"))) +
    geom_tile(color = "white", linewidth = 1) +
    geom_text(aes(label = paste0(round(margen, 1), "%"),
                  color = margen > 40), size = 4.5) +
    scale_fill_gradient(low = "grey90", high = "#111111", name = "Margen (%)") +
    scale_color_manual(values = c("TRUE" = "white", "FALSE" = "black"), guide = "none") +
    labs(title = "Figura 7. Margen operativo (%) por región y método de venta",
         x = "Método de venta", y = NULL) +
    theme_minimal(),
  tooltip = "text"
)

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 7. Entre más oscura la celda, mayor el margen. Se ven dos patrones claros:

📌 Online es el canal más rentable en todas las regiones (entre 41,4% y 48,6%). No es un efecto de una sola región.

📌 West tiene el margen más bajo en los tres canales (33,2% en tienda, 41,4% en línea y 32,8% en outlet).

ggplotly(
  ggplot(cruce, aes(x = region, y = mezcla, fill = metodo_venta,
                    text = paste0(region, " · ", metodo_venta,
                                  "<br>Participación: ", round(mezcla, 1), "%"))) +
    geom_col(width = 0.7) +
    scale_fill_manual(values = c("In-store" = "grey70", "Online" = "#111111",
                                 "Outlet" = "grey45"), name = "Método de venta") +
    labs(title = "Figura 8. Mezcla de canales: participación de cada método en las ventas de cada región",
         x = NULL, y = "Participación en las ventas de la región (%)") +
    theme_minimal(),
  tooltip = "text"
)

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 8. La mezcla de canales cambia mucho entre regiones: South casi no vende en tienda (1,6% de sus ventas) y Southeast vende más de la mitad en línea (56,5%). West tiene una mezcla más repartida (28,9% en tienda, 32,8% en línea y 38,3% en outlet).

¿El bajo margen de West se explica por su mezcla de canales? Para comprobarlo, calculamos cuál sería el margen de West si vendiera con la misma mezcla de canales que el promedio nacional:

mezcla_nacional <- datos %>%
  group_by(metodo_venta) %>%
  summarise(ventas = sum(ventas_total), .groups = "drop") %>%
  mutate(peso = ventas / sum(ventas))

west_ajustado <- cruce %>%
  filter(region == "West") %>%
  left_join(mezcla_nacional %>% select(metodo_venta, peso), by = "metodo_venta") %>%
  summarise(margen_ajustado = sum(margen * peso))

data.frame(
  Indicador = c("Margen real de West", "Margen de West con la mezcla nacional de canales",
                "Margen agregado nacional"),
  Valor_pct = c(seg_region$margen[seg_region$region == "West"],
                west_ajustado$margen_ajustado,
                sum(datos$utilidad_operativa) / sum(datos$ventas_total) * 100)
) %>%
  kable(digits = 1, caption = "Tabla 11. Prueba de composición para la región West") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111")
Tabla 11. Prueba de composición para la región West
Indicador Valor_pct
Margen real de West 35.7
Margen de West con la mezcla nacional de canales 36.1
Margen agregado nacional 39.3

Interpretación. Aun con la mezcla nacional de canales, el margen de West sería 36,1%, casi igual al real (35,7%) y lejos del promedio nacional (39,3%). El bajo margen de West no se explica por cómo reparte sus ventas entre canales, sino por algo propio de la región, que se repite en todos los canales.

Profundización: ¿qué explica el bajo margen de West?

Para entender el hallazgo de West desde la base de datos, comparamos la región con el resto del país en precio, costo y utilidad por unidad, y luego revisamos productos, distribuidores y estados.

# Variable para comparar West con el resto del país
datos <- datos %>%
  mutate(zona = ifelse(region == "West", "West", "Resto del país"))

west_unidad <- datos %>%
  group_by(zona) %>%
  summarise(ventas   = sum(ventas_total),
            utilidad = sum(utilidad_operativa),
            unidades = sum(unidades_vendidas)) %>%
  mutate(precio_promedio   = ventas / unidades,               # ingreso por unidad
         costo_por_unidad  = (ventas - utilidad) / unidades,  # costos y gastos por unidad
         utilidad_unidad   = utilidad / unidades,             # utilidad por unidad
         margen            = utilidad / ventas * 100)

kable(west_unidad %>% select(zona, precio_promedio, costo_por_unidad, utilidad_unidad, margen),
      digits = 2,
      col.names = c("Zona", "Precio promedio por unidad (USD)", "Costo por unidad (USD)",
                    "Utilidad por unidad (USD)", "Margen (%)"),
      caption = "Tabla 12. West frente al resto del país: precio, costo y utilidad por unidad") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Costo por unidad = (ventas - utilidad operativa) / unidades: costos y gastos operativos implícitos. Fuente: base de ventas de Adidas.")
Tabla 12. West frente al resto del país: precio, costo y utilidad por unidad
Zona Precio promedio por unidad (USD) Costo por unidad (USD) Utilidad por unidad (USD) Margen (%)
Resto del país 46.73 27.64 19.09 40.85
West 53.04 34.09 18.95 35.73
Note:
Costo por unidad = (ventas - utilidad operativa) / unidades: costos y gastos operativos implícitos. Fuente: base de ventas de Adidas.

Interpretación Tabla 12. West vende más caro (USD 53,04 por unidad frente a USD 46,73 en el resto del país, un 13,5% más), pero su costo por unidad es 23% mayor (USD 34,09 frente a USD 27,64). El resultado es que gana prácticamente lo mismo por unidad (USD 18,95 frente a USD 19,09). Por eso su margen es menor: el mayor precio no compensa sus mayores costos.

west_producto <- datos %>%
  group_by(producto, zona) %>%
  summarise(ventas = sum(ventas_total), utilidad = sum(utilidad_operativa)) %>%
  mutate(margen = utilidad / ventas * 100) %>%
  ungroup()

ggplotly(
  ggplot(west_producto, aes(x = producto, y = margen, fill = zona,
                            text = paste0(producto, "<br>", zona, ": ", round(margen, 1), "%"))) +
    geom_col(position = "dodge", width = 0.7) +
    coord_flip() +
    scale_fill_manual(values = c("West" = "#111111", "Resto del país" = "grey70"), name = NULL) +
    labs(title = "Figura 9. Margen operativo por producto: West frente al resto del país",
         x = NULL, y = "Margen operativo (%)") +
    theme_minimal(),
  tooltip = "text"
)

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 9. ¿En qué productos pierde margen West? La mayor brecha está en Women’s Apparel: 29,8% en West frente a 45,1% en el resto del país (15 puntos menos). Le siguen Men’s Athletic Footwear (31,9% frente a 38,2%) y Women’s Athletic Footwear (36,6% frente a 40,3%). En cambio, Men’s Apparel es más rentable en West (41,6% frente a 37,4%).

west_distrib <- datos %>%
  group_by(distribuidor, zona) %>%
  summarise(margen = sum(utilidad_operativa) / sum(ventas_total) * 100) %>%
  ungroup() %>%
  pivot_wider(names_from = zona, values_from = margen) %>%
  mutate(Diferencia = West - `Resto del país`)

part_west <- datos %>%
  filter(region == "West") %>%
  group_by(distribuidor) %>%
  summarise(ventas = sum(ventas_total)) %>%
  mutate(part_en_west = ventas / sum(ventas) * 100) %>%
  select(distribuidor, part_en_west)

west_distrib <- west_distrib %>%
  left_join(part_west, by = "distribuidor") %>%
  arrange(desc(part_en_west))

kable(west_distrib %>% select(distribuidor, part_en_west, West, `Resto del país`, Diferencia),
      digits = 1,
      col.names = c("Distribuidor", "Part. en ventas de West (%)", "Margen en West (%)",
                    "Margen en el resto (%)", "Diferencia (puntos)"),
      caption = "Tabla 13. Margen de cada distribuidor en West y en el resto del país") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Fuente: base de ventas de Adidas. Elaboración propia.")
Tabla 13. Margen de cada distribuidor en West y en el resto del país
Distribuidor Part. en ventas de West (%) Margen en West (%) Margen en el resto (%) Diferencia (puntos)
West Gear 51.3 35.3 40.8 -5.5
Kohl’s 23.5 37.3 40.2 -2.9
Foot Locker 13.9 35.4 39.7 -4.3
Sports Direct 4.6 40.3 43.4 -3.1
Amazon 4.5 33.2 40.7 -7.5
Walmart 2.3 27.3 38.0 -10.7
Note:
Fuente: base de ventas de Adidas. Elaboración propia.

Interpretación Tabla 13. Todos los distribuidores tienen menor margen en West que en el resto del país. El caso más importante es West Gear, que concentra el 51,3% de las ventas de la región y tiene un margen de 35,3% en West frente a 40,8% fuera de ella. Walmart tiene la mayor brecha (27,3% frente a 38,0%), aunque pesa poco en la región (2,3%).

west_estados <- datos %>%
  filter(region == "West") %>%
  group_by(estado) %>%
  summarise(ventas   = sum(ventas_total),
            utilidad = sum(utilidad_operativa),
            unidades = sum(unidades_vendidas)) %>%
  mutate(part_ventas     = ventas / sum(ventas) * 100,
         margen          = utilidad / ventas * 100,
         precio_promedio = ventas / unidades) %>%
  arrange(margen)

kable(west_estados %>% select(estado, part_ventas, margen, precio_promedio),
      digits = 1,
      col.names = c("Estado", "Part. en ventas de West (%)", "Margen (%)",
                    "Precio promedio por unidad (USD)"),
      caption = "Tabla 14. Estados de la región West, ordenados de menor a mayor margen") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Fuente: base de ventas de Adidas. Elaboración propia.")
Tabla 14. Estados de la región West, ordenados de menor a mayor margen
Estado Part. en ventas de West (%) Margen (%) Precio promedio por unidad (USD)
Hawaii 7.5 28.5 67.7
Washington 8.8 28.8 69.1
Alaska 5.0 32.7 58.8
California 23.5 34.5 52.5
Arizona 6.2 36.4 48.0
New Mexico 7.8 36.4 53.7
Nevada 8.2 36.4 57.5
Wyoming 6.3 37.5 45.4
Oregon 8.4 38.0 60.3
Colorado 7.1 38.9 62.1
Utah 3.8 42.4 28.6
Idaho 7.5 44.6 43.0
Note:
Fuente: base de ventas de Adidas. Elaboración propia.

Interpretación Tabla 14. Los márgenes más bajos están en Hawaii (28,5%) y Washington (28,8%), que a la vez tienen los precios más altos de la región (USD 67,7 y 69,1 por unidad). California, el estado que más vende en West (23,5% de la región), tiene un margen de 34,5%, también por debajo del promedio nacional.

📌 Conclusión de la profundización: el bajo margen de West no viene de un solo factor, sino de costos más altos que se repiten en todos los canales y distribuidores, y que se concentran en Women’s Apparel, en West Gear (por su peso en la región) y en estados como Hawaii, Washington y California. Una posible explicación son mayores costos logísticos o de operación en la costa oeste y en estados alejados como Hawaii y Alaska; para comprobarlo necesitaríamos el detalle de costos por región.

Profundización: ¿la ventaja del canal Online es real?

El canal Online tiene el mayor margen, pero podría deberse a que vende más productos o distribuidores rentables (un efecto de composición). Para comprobarlo, comparamos los canales dentro de cada producto y de cada distribuidor.

canal_unidad <- datos %>%
  group_by(metodo_venta) %>%
  summarise(ventas   = sum(ventas_total),
            utilidad = sum(utilidad_operativa),
            unidades = sum(unidades_vendidas)) %>%
  mutate(precio_promedio  = ventas / unidades,
         costo_por_unidad = (ventas - utilidad) / unidades,
         utilidad_unidad  = utilidad / unidades,
         margen           = utilidad / ventas * 100)

kable(canal_unidad %>% select(metodo_venta, precio_promedio, costo_por_unidad, utilidad_unidad, margen),
      digits = 2,
      col.names = c("Método de venta", "Precio promedio por unidad (USD)", "Costo por unidad (USD)",
                    "Utilidad por unidad (USD)", "Margen (%)"),
      caption = "Tabla 15. Precio, costo y utilidad por unidad según método de venta") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Costo por unidad = (ventas - utilidad operativa) / unidades. Fuente: base de ventas de Adidas.")
Tabla 15. Precio, costo y utilidad por unidad según método de venta
Método de venta Precio promedio por unidad (USD) Costo por unidad (USD) Utilidad por unidad (USD) Margen (%)
In-store 51.69 33.20 18.49 35.78
Online 47.88 27.06 20.82 43.48
Outlet 46.53 28.98 17.55 37.72
Note:
Costo por unidad = (ventas - utilidad operativa) / unidades. Fuente: base de ventas de Adidas.

Interpretación Tabla 15. Online no vende más caro: su precio promedio (USD 47,88) es menor que el de la tienda (USD 51,69). Su ventaja está en el costo por unidad, que es 18% menor que en tienda (USD 27,06 frente a USD 33,20). Por eso gana más por unidad (USD 20,82 frente a USD 18,49).

canal_producto <- datos %>%
  group_by(producto, metodo_venta) %>%
  summarise(margen = sum(utilidad_operativa) / sum(ventas_total) * 100) %>%
  ungroup()

ggplotly(
  ggplot(canal_producto, aes(x = metodo_venta, y = producto, fill = margen,
                             text = paste0(producto, " · ", metodo_venta,
                                           "<br>Margen: ", round(margen, 1), "%"))) +
    geom_tile(color = "white", linewidth = 1) +
    geom_text(aes(label = paste0(round(margen, 1), "%"), color = margen > 40), size = 4.5) +
    scale_fill_gradient(low = "grey90", high = "#111111", name = "Margen (%)") +
    scale_color_manual(values = c("TRUE" = "white", "FALSE" = "black"), guide = "none") +
    labs(title = "Figura 10. Margen operativo (%) por producto y método de venta",
         x = "Método de venta", y = NULL) +
    theme_minimal(),
  tooltip = "text"
)

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 10. Online es el canal más rentable en los seis productos, con márgenes entre 41,2% y 45,8%, frente a 32,5%–39,2% en tienda. La brecha más grande está en Women’s Athletic Footwear (9,8 puntos más en Online que en tienda) y Women’s Street Footwear (9,3 puntos).

canal_distrib <- datos %>%
  group_by(distribuidor, metodo_venta) %>%
  summarise(margen = sum(utilidad_operativa) / sum(ventas_total) * 100) %>%
  ungroup() %>%
  pivot_wider(names_from = metodo_venta, values_from = margen) %>%
  mutate(Diferencia = Online - `In-store`) %>%
  arrange(desc(Diferencia))

kable(canal_distrib %>% select(distribuidor, Online, Outlet, `In-store`, Diferencia),
      digits = 1,
      col.names = c("Distribuidor", "Margen Online (%)", "Margen Outlet (%)",
                    "Margen In-store (%)", "Online − In-store (puntos)"),
      caption = "Tabla 16. Margen de cada distribuidor según método de venta") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Fuente: base de ventas de Adidas. Elaboración propia.")
Tabla 16. Margen de cada distribuidor según método de venta
Distribuidor Margen Online (%) Margen Outlet (%) Margen In-store (%) Online − In-store (puntos)
Walmart 43.4 35.7 30.0 13.4
West Gear 44.5 34.2 35.1 9.4
Sports Direct 45.1 44.6 37.4 7.7
Amazon 43.8 34.6 37.4 6.5
Foot Locker 42.4 36.4 36.7 5.7
Kohl’s 40.9 37.1 35.8 5.1
Note:
Fuente: base de ventas de Adidas. Elaboración propia.

Interpretación Tabla 16. Los seis distribuidores ganan más en Online que en tienda, con diferencias entre 5,1 puntos (Kohl’s) y 13,4 puntos (Walmart).

📌 Conclusión de la profundización: la ventaja del canal Online no es un efecto de composición: se mantiene en todos los productos, todas las regiones y todos los distribuidores. Proviene de un menor costo por unidad, no de precios más altos. Una posible explicación es que el canal en línea evita costos de tienda física (arriendo, personal, exhibición); para comprobarlo necesitaríamos el detalle de costos por canal, incluidos los de envío y devoluciones.

Relación entre precio, volumen y utilidad

# Matriz de correlaciones de Pearson (transacciones con ventas)
correlaciones <- cor(datos_margen[c("precio_unidad", "unidades_vendidas",
                                    "ventas_total", "utilidad_operativa", "margen_pct")])

nombres <- c("Precio", "Unidades", "Ventas", "Utilidad", "Margen (%)")
dimnames(correlaciones) <- list(nombres, nombres)

# Pasar la matriz a formato de tabla larga para graficarla
matriz <- as.data.frame(as.table(correlaciones))
names(matriz) <- c("Variable1", "Variable2", "r")

ggplotly(
  ggplot(matriz, aes(x = Variable1, y = Variable2, fill = r,
                     text = paste0(Variable1, " vs ", Variable2, "<br>r = ", round(r, 2)))) +
    geom_tile(color = "white", linewidth = 1) +
    geom_text(aes(label = round(r, 2), color = abs(r) > 0.6), size = 4.5) +
    scale_color_manual(values = c("TRUE" = "white", "FALSE" = "#111111"), guide = "none") +
    scale_fill_gradient2(low = "#E03C31", mid = "white", high = "#111111",
                         midpoint = 0, limits = c(-1, 1), name = "r") +
    labs(title = "Figura 11. Matriz de correlaciones entre variables",
         x = NULL, y = NULL) +
    theme_minimal(),
  tooltip = "text"
)

Negro: relación positiva. Rojo: relación negativa. Blanco: sin relación.
Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

r_precio_unid <- cor(datos_margen$precio_unidad, datos_margen$unidades_vendidas)

ggplotly(
  ggplot(datos_margen, aes(x = precio_unidad, y = unidades_vendidas)) +
    geom_point(color = "#111111", alpha = 0.15, size = 1.2) +
    geom_smooth(method = "lm", color = "#E03C31", se = TRUE) +
    labs(title = paste0("Figura 12. Relación entre precio y unidades vendidas (r = ",
                        round(r_precio_unid, 2), ")"),
         x = "Precio por unidad (USD)", y = "Unidades vendidas por transacción") +
    theme_minimal()
)

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figuras 11 y 12.

📌 La utilidad depende sobre todo del volumen: la correlación entre unidades y utilidad es 0,87 (fuerte), mientras que entre precio y utilidad es 0,50 (moderada).

📌 El margen tiene una relación negativa con las ventas (r = −0,30): las transacciones más grandes tienden a tener márgenes menores, lo que es coherente con el hallazgo del canal In-store.

📌 Precio y unidades tienen una relación positiva débil (r = 0,27). Contrario a lo que se esperaría, los productos más caros no venden menos unidades. Esto puede reflejar diferencias entre productos, canales y distribuidores, no un efecto directo del precio.

⚠️ Correlación no es causalidad: estas relaciones muestran que las variables se mueven juntas, no que una cause la otra.

¿Estas relaciones se mantienen por producto y por región?

cor_producto <- datos %>%
  group_by(producto) %>%
  summarise(precio_unidades   = cor(precio_unidad, unidades_vendidas),
            unidades_utilidad = cor(unidades_vendidas, utilidad_operativa),
            precio_utilidad   = cor(precio_unidad, utilidad_operativa))

kable(cor_producto, digits = 2,
      col.names = c("Producto", "r precio–unidades", "r unidades–utilidad", "r precio–utilidad"),
      caption = "Tabla 17. Coeficientes de correlación por producto") %>%
  kable_styling(full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#111111") %>%
  footnote(general = "Fuente: base de ventas de Adidas. Elaboración propia.")
Tabla 17. Coeficientes de correlación por producto
Producto r precio–unidades r unidades–utilidad r precio–utilidad
Men’s Apparel 0.31 0.89 0.49
Men’s Athletic Footwear 0.33 0.89 0.57
Men’s Street Footwear 0.25 0.87 0.56
Women’s Apparel 0.27 0.85 0.44
Women’s Athletic Footwear 0.34 0.91 0.57
Women’s Street Footwear 0.30 0.87 0.59
Note:
Fuente: base de ventas de Adidas. Elaboración propia.

Interpretación Tabla 17. Las relaciones del total se mantienen dentro de cada producto: la correlación entre unidades y utilidad es fuerte en todos (entre 0,85 y 0,91), y la de precio y unidades es débil y positiva en todos (entre 0,25 y 0,34). Lo mismo ocurre por región (unidades–utilidad entre 0,83 y 0,92). Es decir, la relación observada en el total no es un efecto de la composición de las ventas.

Variabilidad del margen por canal

ggplotly(
  ggplot(datos_margen, aes(x = metodo_venta, y = margen_pct)) +
    geom_boxplot(aes(fill = metodo_venta == "Online"), color = "black", outlier.colour = "#E03C31", outlier.size = 1.5) +
    scale_fill_manual(values = c("TRUE" = "grey45", "FALSE" = "grey85"), guide = "none") +
    labs(title = "Figura 13. Distribución del margen operativo por método de venta",
         x = "Método de venta", y = "Margen operativo por transacción (%)") +
    theme_minimal()
) %>%
  style(marker = list(color = "#E03C31"))

Fuente: base de ventas de Adidas en EE. UU. (curso Analítica de Negocios, PUJ Cali). Elaboración propia.

Interpretación Figura 13. La transacción típica en Online tiene un margen de 47% (mediana), frente a 35% en In-store y 40% en Outlet. Además, las cajas casi no se cruzan entre Online e In-store: la diferencia de rentabilidad entre canales es consistente, no se debe a unas pocas transacciones.

Hallazgos principales

# Evidencia Interpretación Implicación para Adidas
1 West concentra el 30,3% de las ventas, pero solo el 27,6% de la utilidad; su margen (35,7%) es el más bajo en los tres canales y con todos los distribuidores. Vende 13,5% más caro por unidad, pero su costo por unidad es 23% mayor El bajo margen no se explica por la mezcla de canales, sino por costos más altos propios de la región, concentrados en Women’s Apparel, West Gear y estados como Hawaii, Washington y California Hay una oportunidad de mejorar la rentabilidad en la región que más vende, revisando costos y condiciones comerciales, sin necesidad de vender más
2 Online genera el 37,4% de las ventas y el 41,4% de la utilidad, con el mayor margen (43,5%). Es el canal más rentable en las 5 regiones, los 6 productos y los 6 distribuidores. Su costo por unidad es 18% menor que en tienda La ventaja de Online es real y no se explica por la composición de sus ventas: proviene de costos más bajos, no de precios más altos Online es el canal con mayor potencial para crecer de forma rentable
3 In-store tiene la venta típica más grande (USD 16.875, casi el triple que Online), pero el menor margen (35,8%) Los pedidos grandes en tienda generan volumen, pero con menor rentabilidad por dólar Vale la pena revisar las condiciones comerciales de los pedidos grandes en tienda
4 La utilidad se relaciona más con las unidades (r = 0,87) que con el precio (r = 0,50) El resultado del negocio depende más del volumen que del precio por unidad Las estrategias de crecimiento deben cuidar el volumen, pero sin sacrificar margen

Explicaciones alternativas e información adicional necesaria

  • West: el menor margen podría deberse a mayores costos logísticos o de arriendo, a más descuentos por competencia o a otras condiciones con los distribuidores de la región. Para validarlo necesitaríamos los costos detallados y los precios de lista frente a los precios con descuento.
  • Online: su mayor margen podría reflejar menores costos de operación, pero también una mezcla distinta de productos. Para validarlo necesitaríamos los costos logísticos y las devoluciones del canal en línea.

4. Recomendaciones y límites

Pregunta de esta sección: ¿qué debe hacer Adidas con esta evidencia?

Priorizamos tres acciones, en orden de importancia. Los beneficios esperados son escenarios propuestos, calculados con los márgenes observados en la base, no resultados demostrados.

Acción 1. Plan de rentabilidad para la región West

Elemento Detalle
Qué hacer Revisar la estructura de costos y las condiciones comerciales de West, empezando por Women’s Apparel, el distribuidor West Gear y los estados de Hawaii, Washington y California
Evidencia West tiene el 30,3% de las ventas y el 27,6% de la utilidad. Su margen (35,7%) es el más bajo en los tres canales y con los seis distribuidores. Su costo por unidad es 23% mayor que en el resto del país. Women’s Apparel gana 29,8% en West frente a 45,1% fuera de ella
Beneficio esperado (escenario) Si West alcanzara el margen nacional (39,3%), la utilidad aumentaría cerca de USD 1,3 millones (2,8% de la utilidad total) sin vender más. Solo cerrar la brecha de Women’s Apparel frente al resto del país aportaría cerca de USD 1,1 millones
Riesgo o supuesto Supone que los mayores costos se pueden reducir. Si son estructurales (por ejemplo, fletes a Hawaii y Alaska), el margen mejoraría poco. Subir precios es riesgoso: West ya vende 13,5% más caro
Área responsable Gerencia comercial de la región West, con el área financiera y de logística
Indicador de seguimiento Margen operativo de West y costo por unidad en West, medidos cada mes

Acción 2. Impulsar el canal Online

Elemento Detalle
Qué hacer Fortalecer las ventas en línea, junto con los distribuidores, que ganan más en Online que en tienda
Evidencia Online tiene el mayor margen (43,5%) y genera el 41,4% de la utilidad con el 37,4% de las ventas. Es el canal más rentable en las 5 regiones, los 6 productos y los 6 distribuidores. Su costo por unidad es 18% menor que en tienda
Beneficio esperado (escenario) Por cada punto porcentual de las ventas totales que pase de tienda a Online, la utilidad aumentaría cerca de USD 93.000 (7,7 puntos de diferencia de margen)
Riesgo o supuesto La base no incluye costos de envío ni devoluciones, que podrían reducir la ventaja del canal. Además, impulsar Online podría afectar la relación con los distribuidores de tiendas físicas
Área responsable Gerencia de comercio electrónico y gerencia de canales y distribuidores
Indicador de seguimiento Participación de Online en las ventas totales y margen operativo de Online

Acción 3. Revisar las condiciones de los pedidos grandes en tienda

Elemento Detalle
Qué hacer Revisar los descuentos y condiciones comerciales de los pedidos de mayor tamaño en el canal In-store
Evidencia In-store tiene la venta típica más grande (USD 16.875) y el menor margen (35,8%). Las transacciones más grandes tienen menores márgenes (r ventas–margen = −0,30)
Beneficio esperado (escenario) Si el margen de In-store subiera 2 puntos, la utilidad aumentaría cerca de USD 0,7 millones
Riesgo o supuesto Endurecer las condiciones podría hacer perder pedidos grandes. Como la utilidad depende sobre todo del volumen (r unidades–utilidad = 0,87), perder volumen podría costar más de lo que se gana en margen
Área responsable Gerencia comercial de cuentas clave
Indicador de seguimiento Margen operativo de In-store y margen de las transacciones de más de USD 33.563 (las atípicas por tamaño)

¿Qué dato podría cambiar nuestra recomendación? El detalle de costos por región y por canal. Si mostrara que los mayores costos de West son inevitables (por ejemplo, transporte), la acción 1 pasaría de reducir costos a renegociar condiciones con West Gear o a priorizar regiones más rentables. Si los costos de envío y devoluciones de Online fueran altos, la ventaja de la acción 2 sería menor.

Límites del análisis

  • Sin fecha: las conclusiones describen el conjunto de transacciones de la base, sin un periodo identificado. No se pueden analizar tendencias, estacionalidad, tasas de crecimiento ni el efecto de eventos.
  • Mercado delimitado: los resultados se refieren a las ventas en Estados Unidos a través de seis minoristas, y no se pueden generalizar a otros mercados.
  • Sin número de factura: no es posible confirmar si las 262 filas duplicadas son errores; por eso se conservaron y se evaluó su impacto (Tabla 3).
  • Costos implícitos: el costo por unidad se calculó como ventas menos utilidad operativa; la base no detalla qué costos lo componen (logística, arriendos, descuentos).
  • Correlación no es causalidad: las relaciones encontradas muestran asociaciones, no causas.
  • Escenarios: los beneficios de las acciones son estimaciones con los márgenes observados, no resultados demostrados.

Decisión que solicitamos al comité

Aprobar un plan de rentabilidad para la región West como prioridad, acompañado de una estrategia para impulsar el canal Online, y solicitar al área financiera el detalle de costos por región y canal para validar y ajustar estas acciones.

Anexo: fuentes y paquetes

  • Fuente de datos: base de ventas de Adidas en EE. UU. suministrada en el curso Analítica de Negocios, Pontificia Universidad Javeriana Cali.
  • Paquetes de R: readxl (lectura del Excel), dplyr y tidyr (manipulación de datos), ggplot2 y plotly (gráficos y mapa), knitr y kableExtra (tablas). Los códigos de los estados provienen de los datos state.name y state.abb incluidos en R.
  • Código: incluido en cada sección del informe.