library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(scales)
library(kableExtra)
library(tidyr)
library(forcats)
library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx")
datos_raw <- datos_raw %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear" = "Calzado Urbano Hombre",
"Men's Athletic Footwear" = "Calzado Deportivo Hombre",
"Women's Street Footwear" = "Calzado Urbano Mujer",
"Women's Athletic Footwear" = "Calzado Deportivo Mujer",
"Men's Apparel" = "Ropa Hombre",
"Women's Apparel" = "Ropa Mujer"
),
region_es = recode(region,
"West" = "Oeste",
"Northeast" = "Noreste",
"Southeast" = "Sureste",
"South" = "Sur",
"Midwest" = "Medio Oeste"
),
metodo_es = recode(metodo_venta,
"In-store" = "Tienda Física",
"Online" = "En Línea",
"Outlet" = "Outlet"
),
margen_pct = margen_operativo * 100
)
Adidas es una empresa multinacional líder en la industria de artículos deportivos, reconocida globalmente por su oferta de calzado, ropa y accesorios. El presente informe tiene como objetivo realizar un análisis descriptivo y exploratorio de su desempeño comercial en el mercado estadounidense, con el fin de comprender el comportamiento de sus ventas y rentabilidad en distintos segmentos.
Para ello, se aplican técnicas de analítica descriptiva que permiten examinar la distribución de las ventas, analizar la rentabilidad y explorar las relaciones entre variables clave que influyen en el desempeño comercial. A través de estadísticas descriptivas y visualizaciones interactivas, se busca identificar patrones relevantes y diferencias entre regiones, productos, distribuidores y canales de venta.
Con base en los hallazgos obtenidos a partir de este análisis, se formularán recomendaciones y se presentarán conclusiones orientadas a fortalecer la toma de decisiones y mejorar el desempeño comercial de la organización.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
resumen_desc <- datos %>%
summarise(
across(
c(precio_unidad, unidades_vendidas, ventas_total,
utilidad_operativa, margen_pct),
list(
Media = ~round(mean(.x, na.rm = TRUE), 2),
Mediana = ~round(median(.x, na.rm = TRUE), 2),
Mínimo = ~round(min(.x, na.rm = TRUE), 2),
Máximo = ~round(max(.x, na.rm = TRUE), 2)
),
.names = "{.col}|{.fn}"
)
) %>%
pivot_longer(everything(),
names_to = c("Variable", "Estadístico"),
names_sep = "\\|") %>%
pivot_wider(names_from = "Estadístico", values_from = "value")
resumen_desc$Variable <- recode(resumen_desc$Variable,
"precio_unidad" = "Precio por Unidad (USD)",
"unidades_vendidas" = "Unidades Vendidas",
"ventas_total" = "Ventas Totales (USD)",
"utilidad_operativa" = "Utilidad Operativa (USD)",
"margen_pct" = "Margen Operativo (%)"
)
resumen_desc %>%
kable(caption = "Tabla 1. Estadísticas Descriptivas de Variables Clave",
align = "lrrrr") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE) %>%
column_spec(1, bold = TRUE)
| Variable | Media | Mediana | Mínimo | Máximo |
|---|---|---|---|---|
| Precio por Unidad (USD) | 45.22 | 45.00 | 7 | 110 |
| Unidades Vendidas | 256.93 | 176.00 | 0 | 1275 |
| Ventas Totales (USD) | 12455.08 | 7803.50 | 0 | 82500 |
| Utilidad Operativa (USD) | 4894.79 | 3262.98 | 0 | 39000 |
| Margen Operativo (%) | 42.30 | 41.00 | 10 | 80 |
Interpretación: Mediante esta tabla podemos entender cómo se comporta el negocio en números. El precio promedio por unidad es de $45.22, muy cercano a la mediana ($45), lo que nos dice que los precios están relativamente distribuidos de forma equilibrada, sin productos que distorsionen el promedio por ser extremadamente caros o baratos. Las ventas totales sí muestran una brecha entre media y mediana, lo que indica que hay transacciones grandes que de alguna manera “jalan” el promedio hacia arriba: la mayoría de las ventas son medianas, pero unas pocas son muy grandes. El margen operativo promedio del 42.3% es sólido y competitivo, aunque la diferencia entre el mínimo y el máximo revela que no todos los productos o canales son igual de rentables.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
datos_resumen <- datos %>%
group_by(producto_es) %>%
summarise(
ventas = sum(ventas_total, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
margen = mean(margen_operativo, na.rm = TRUE)
) %>%
arrange(utilidad)
niveles_fig1 <- str_wrap(datos_resumen$producto_es, width = 15)
datos_resumen$producto_es <- factor(niveles_fig1, levels = niveles_fig1)
plot_ly(datos_resumen, x = ~producto_es) %>%
add_trace(
y = ~ventas, name = "Ventas Totales", type = "bar",
marker = list(color = "#2E7D32"), yaxis = "y1",
hovertemplate = "<b>%{x}</b><br>Ventas: $%{y:,.0f}<extra></extra>"
) %>%
add_trace(
y = ~utilidad, name = "Utilidad Operativa", type = "bar",
marker = list(color = "#1565C0"), yaxis = "y1",
hovertemplate = "<b>%{x}</b><br>Utilidad: $%{y:,.0f}<extra></extra>"
) %>%
add_trace(
y = ~margen * 100, name = "Margen Operativo", type = "scatter",
mode = "lines+markers",
line = list(color = "#E53935", width = 3),
marker = list(size = 8, color = "#E53935"), yaxis = "y2",
hovertemplate = "<b>%{x}</b><br>Margen: %{y:.1f}%<extra></extra>"
) %>%
layout(
title = list(
text = "<b>Figura 1. Comparación de Ventas Totales, Utilidad Operativa<br>y Margen Operativo por Producto</b>",
x = 0.5, font = list(size = 14)
),
xaxis = list(title = list(text = "<b>Producto</b>", font = list(size = 13)),
tickangle = -45, tickfont = list(size = 10), automargin = TRUE),
yaxis = list(title = list(text = "<b>Ventas y Utilidad (USD)</b>", font = list(size = 13)),
tickprefix = "$", tickformat = ",.0f"),
yaxis2 = list(title = list(text = "<b>Margen Operativo (%)</b>", font = list(size = 13)),
overlaying = "y", side = "right", ticksuffix = "%", tickformat = ".1f"),
barmode = "group", plot_bgcolor = "white", paper_bgcolor = "white",
legend = list(orientation = "h", x = 0.5, xanchor = "center", y = -0.35),
margin = list(t = 80, b = 140, l = 80, r = 80)
)
Interpretación: El Calzado Urbano Hombre lidera tanto en ventas totales como en utilidad generada, seguido de cerca por la Ropa Mujer, lo que consolida al calzado masculino como el motor del volumen del negocio. Sin embargo, la línea del margen cuenta una historia diferente: el Calzado Urbano Hombre y la Ropa Mujer son los que mayor margen operativo tienen, mientras que el Calzado Deportivo Hombre, a pesar de ser un producto de alto volumen, registra el margen más bajo del portafolio. Esto significa que no todas las ventas valen igual: hay productos que generan mucho ingreso pero dejan menos por cada dólar vendido. La pregunta estratégica que surge naturalmente es: si la ropa es tan rentable, ¿por qué no se le está dando más protagonismo?
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
tabla_heat <- datos %>%
group_by(region_es, producto_es) %>%
summarise(ventas_totales = sum(ventas_total, na.rm = TRUE), .groups = "drop")
orden_prod <- tabla_heat %>% group_by(producto_es) %>%
summarise(t = sum(ventas_totales)) %>% arrange(t) %>% pull(producto_es)
orden_reg <- tabla_heat %>% group_by(region_es) %>%
summarise(t = sum(ventas_totales)) %>% arrange(t) %>% pull(region_es)
tabla_heat <- tabla_heat %>%
mutate(producto_es = factor(producto_es, levels = orden_prod),
region_es = factor(region_es, levels = orden_reg))
g_heat <- ggplot(tabla_heat,
aes(x = producto_es, y = region_es, fill = ventas_totales,
text = paste0("Región: ", region_es,
"<br>Producto: ", producto_es,
"<br>Ventas: ", dollar(ventas_totales)))) +
geom_tile(color = "white", linewidth = 0.5) +
scale_fill_gradient(low = "#E3F2FD", high = "#0D47A1",
labels = dollar_format(prefix = "$", big.mark = ",")) +
labs(title = "Figura 2. Ventas Totales por Región y Producto",
x = "Categoría de Producto", y = "Región", fill = "Ventas (USD)") +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 20, hjust = 1))
ggplotly(g_heat, tooltip = "text") %>%
layout(coloraxis = list(colorbar = list(tickformat = "$,.0f")))
Interpretación: Este mapa de calor permite ver de un vistazo dónde está concentrado el negocio. Los cuadros más oscuros (azul intenso) señalan las combinaciones más fuertes de región y producto. La región Oeste domina en prácticamente todas las categorías, con el calzado masculino como su mayor fortaleza. En contraste, el Medio Oeste y el Sur aparecen casi en blanco, lo que no es necesariamente una señal de fracaso, sino de terreno poco explorado. Estas regiones representan oportunidades reales de crecimiento: el mercado existe, los productos también, lo que falta es presencia y estrategia. Además, la ropa femenina se ve baja en todas las regiones, lo que refuerza la idea de que es un segmento con potencial todavía sin capturar.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
ventas_metodo_region <- datos %>%
group_by(region_es, metodo_es) %>%
summarise(ventas = sum(ventas_total, na.rm = TRUE), .groups = "drop")
orden_reg3 <- ventas_metodo_region %>%
group_by(region_es) %>%
summarise(total = sum(ventas)) %>%
arrange(desc(total)) %>%
pull(region_es)
ventas_metodo_region <- ventas_metodo_region %>%
mutate(region_es = factor(region_es, levels = orden_reg3))
plot_ly(ventas_metodo_region,
x = ~region_es, y = ~ventas, color = ~metodo_es,
colors = c("Tienda Física" = "#0D47A1", "En Línea" = "#42A5F5", "Outlet" = "#7E57C2"),
type = "bar",
hovertemplate = "<b>%{x} — %{data.name}</b><br>Ventas: $%{y:,.0f}<extra></extra>"
) %>%
layout(
barmode = "stack",
title = list(text = "<b>Figura 3. Ventas Totales por Región y Método de Venta</b>", x = 0.5),
xaxis = list(title = "<b>Región</b>"),
yaxis = list(title = "<b>Ventas Totales (USD)</b>", tickprefix = "$", separatethousands = TRUE),
legend = list(title = list(text = "<b>Canal de Venta</b>")),
plot_bgcolor = "white", paper_bgcolor = "white",
margin = list(t = 70, b = 60)
)
Interpretación: Esta gráfica muestra dónde vende Adidas y cómo vende al mismo tiempo. La región Oeste lidera en ventas totales y lo hace con los tres canales activos. Lo más importante es ver qué parte de cada barra corresponde al canal En Línea: aunque en números absolutos es menor que la tienda física, su costo de operación es mucho más bajo, lo que lo hace más rentable por cada dólar vendido. En las regiones Sur y Medio Oeste, las barras son más pequeñas en general, y la presencia del canal online es poca en la region del Medio Oeste. Eso sugiere que hay espacio para crecer digitalmente en esas zonas sin necesidad de abrir tiendas físicas. El Outlet aparece en todas las regiones pero en proporciones bajas, lo cual es sano: es un canal de apoyo, no el motor principal.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
orden_prod_box <- datos %>%
group_by(producto_es) %>%
summarise(med = median(ventas_total, na.rm = TRUE)) %>%
arrange(med) %>%
pull(producto_es)
datos_box_prod <- datos %>%
mutate(producto_es = factor(producto_es, levels = orden_prod_box))
plot_ly(
data = datos_box_prod, x = ~producto_es, y = ~ventas_total,
type = "box", color = ~producto_es, colors = "Set2", boxpoints = "outliers",
hovertemplate = "<b>%{x}</b><br>Ventas: $%{y:,.0f}<extra></extra>"
) %>%
layout(
title = list(text = "<b>Figura 4. Distribución de Ventas Totales por Categoría de Producto</b>", x = 0.5),
xaxis = list(title = "<b>Categoría de Producto</b>", tickangle = -30, automargin = TRUE),
yaxis = list(title = "<b>Ventas Totales por Transacción (USD)</b>",
tickprefix = "$", separatethousands = TRUE),
showlegend = FALSE, plot_bgcolor = "white", paper_bgcolor = "white",
margin = list(t = 70, b = 100)
)
Interpretación: Este boxplot nos muestra la variabilidad interna de las ventas en cada categoría de producto. El Calzado Urbano Hombre tiene la mediana más alta, seguido de la Ropa Mujer, lo que indica que sus transacciones típicas son las de mayor valor del portafolio. Sin embargo, en términos de amplitud de caja y valores atípicos extremos hacia arriba, el calzado en general presenta las distribuciones más dispersas, lo que confirma que es el segmento con transacciones más irregulares. Hay ventas gigantes que no son la norma, sino excepciones de alto valor. En contraste, las categorías de Ropa Hombre presentan cajas más comprimidas: sus ventas son más uniformes y predecibles, aunque de menor monto. Esto tiene implicaciones prácticas: el calzado es más volátil —depende de clientes de gran volumen— mientras que la ropa es más estable. Un portafolio equilibrado entre ambos tipos reduce el riesgo de caídas abruptas en ventas.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
plot_ly(
data = datos, y = ~ventas_total, type = "box", boxpoints = "outliers",
marker = list(color = "#1565C0", opacity = 0.5),
line = list(color = "#0D47A1"), fillcolor = "#BBDEFB",
name = "Ventas Totales",
hovertemplate = "Ventas: $%{y:,.0f}<extra></extra>"
) %>%
layout(
title = list(text = "<b>Figura 5. Distribución General de Ventas Totales</b>", x = 0.5),
yaxis = list(title = "<b>Ventas Totales por Transacción (USD)</b>",
tickprefix = "$", separatethousands = TRUE),
xaxis = list(showticklabels = FALSE),
showlegend = FALSE, plot_bgcolor = "white", paper_bgcolor = "white",
margin = list(t = 70, b = 60, l = 80, r = 60)
)
Interpretación: La variabilidad de las ventas de Adidas es muy alta, lo que indica que los valores están fuertemente dispersos alrededor de la mediana de $7,804. El rango intercuartílico se ubica entre $4,065 y $15,864, lo que muestra dónde se concentra el 50% central de las ventas. Sin embargo, el bigote superior solo alcanza los $33,563, por lo que cualquier valor por encima de ese monto se considera un outlier. La venta atípica más extrema llega a $82,500, más de diez veces la mediana. Esto confirma que para el negocio la mayoría de las transacciones son de tamaño moderado, pero un pequeño grupo de ventas extraordinariamente altas es el que impulsa de manera significativa los totales.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
margen_prom <- mean(datos$margen_pct, na.rm = TRUE)
margen_sd <- sd(datos$margen_pct, na.rm = TRUE)
p6 <- ggplot(datos, aes(x = margen_pct)) +
geom_histogram(bins = 25, fill = "#6A1B9A", color = "white", alpha = 0.85) +
geom_vline(xintercept = margen_prom, color = "red", linetype = "dashed", linewidth = 1.2) +
annotate("text", x = margen_prom + 2, y = Inf, vjust = 2,
label = paste0("Media: ", round(margen_prom, 1), "%"),
color = "red", size = 4) +
scale_x_continuous(labels = function(x) paste0(x, "%")) +
labs(
title = paste0("Figura 6. Distribución del Margen Operativo",
"\nPromedio: ", round(margen_prom, 1),
"% | Desv. Est.: ", round(margen_sd, 1), "%"),
x = "Margen Operativo (%)", y = "Frecuencia"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(size = 13, face = "bold", hjust = 0.5))
ggplotly(p6)
Interpretación: Este histograma muestra cómo se distribuyen los márgenes operativos de todas las transacciones. La distribución es amplia y relativamente plana, con márgenes que van desde el 10% hasta el 80%, lo que indica que no hay un único margen típico sino una gran dispersión. La línea roja marca el promedio del 42.3%, pero la mayoría de las barras tienen alturas similares entre sí, lo que revela que hay transacciones con márgenes muy bajos y otras muy altos en proporciones parecidas. Esto tiene una implicación importante: el promedio solo cuenta parte de la historia. Hay operaciones que apenas superan el 10% de margen y otras que llegan al 80%, lo que significa que la rentabilidad del negocio depende mucho de qué se vende, a quién y por qué canal en cada transacción específica.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
canal_resumen <- datos %>%
group_by(metodo_es) %>%
summarise(
utilidad = sum(utilidad_operativa, na.rm = TRUE),
margen_avg = mean(margen_pct, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(desc(utilidad))
plot_ly(canal_resumen, x = ~metodo_es) %>%
add_trace(
y = ~utilidad, name = "Utilidad Operativa", type = "bar",
marker = list(color = c("#0D47A1", "#42A5F5", "#7E57C2")), yaxis = "y1",
hovertemplate = "<b>%{x}</b><br>Utilidad: $%{y:,.0f}<extra></extra>"
) %>%
add_trace(
y = ~margen_avg, name = "Margen Promedio (%)", type = "scatter",
mode = "lines+markers",
line = list(color = "red", width = 3), marker = list(size = 10, color = "red"),
yaxis = "y2",
hovertemplate = "<b>%{x}</b><br>Margen: %{y:.1f}%<extra></extra>"
) %>%
layout(
title = list(text = "<b>Figura 7. Utilidad Operativa y Margen Promedio por Canal de Venta</b>", x = 0.5),
xaxis = list(title = "<b>Canal de Venta</b>"),
yaxis = list(title = "<b>Utilidad Operativa (USD)</b>",
tickprefix = "$", separatethousands = TRUE),
yaxis2 = list(title = "<b>Margen Operativo (%)</b>", overlaying = "y", side = "right",
ticksuffix = "%", tickformat = ".1f", range = c(0, 60), showgrid = FALSE),
legend = list(orientation = "h", x = 0.5, xanchor = "center", y = -0.2),
plot_bgcolor = "white", paper_bgcolor = "white",
margin = list(t = 70, b = 80, l = 80, r = 80)
)
Interpretación: Esta gráfica muestra dos cosas a la vez: cuánto genera cada canal en dinero (las barras) y qué tan eficiente es (la línea roja del margen). El canal En Línea lidera tanto en utilidad total como en margen promedio, lo que lo convierte en el canal más valioso del portafolio: genera más dinero y lo hace de forma más eficiente, sin los costos de local, personal de piso ni inventario en exhibición. La Tienda Física es el canal con el margen más bajo de los tres, lo que significa que es el que más cuesta operar en relación a lo que deja. El Outlet tiene una posición intermedia en utilidad pero con un margen notablemente inferior al canal En Línea. La conclusión es clara: el canal digital ya demostró que funciona mejor que los demás, y todavía hay espacio para acelerarlo.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
orden_reg_box <- datos %>%
group_by(region_es) %>%
summarise(med = median(utilidad_operativa, na.rm = TRUE)) %>%
arrange(med) %>% pull(region_es)
datos_box <- datos %>%
mutate(region_es = factor(region_es, levels = orden_reg_box))
plot_ly(
data = datos_box, x = ~region_es, y = ~utilidad_operativa,
type = "box", color = ~region_es, colors = "Blues", boxpoints = "outliers",
hovertemplate = "<b>%{x}</b><br>Utilidad: $%{y:,.0f}<extra></extra>"
) %>%
layout(
title = list(text = "<b>Figura 8. Distribución de la Utilidad Operativa por Región</b>", x = 0.5),
xaxis = list(title = "<b>Región</b>"),
yaxis = list(title = "<b>Utilidad Operativa (USD)</b>",
tickprefix = "$", separatethousands = TRUE),
showlegend = FALSE, plot_bgcolor = "white", paper_bgcolor = "white"
)
Interpretación: Esta gráfica muestra no solo cuánto gana cada región, sino qué tan estable o irregular es ese desempeño. El Sureste presenta la mediana más alta de todas las regiones, lo que lo posiciona como el mercado con las transacciones más rentables en términos típicos. El Oeste, aunque tiene una caja amplia que refleja alta variabilidad, concentra los outliers más extremos hacia arriba, confirmando que allí ocurren las transacciones de mayor valor individual del negocio. El Medio Oeste y el Noreste tienen las medianas más bajas y cajas más comprimidas, lo que indica transacciones más pequeñas y uniformes. Los puntos fuera de las cajas son transacciones individuales donde la utilidad fue excepcionalmente alta; el hecho de que aparezcan en varias regiones indica que el potencial de ventas grandes no está limitado a una sola zona geográfica.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
tabla_dist <- datos %>%
group_by(Distribuidor = distribuidor) %>%
summarise(
ventas_num = sum(ventas_total, na.rm = TRUE),
utilidad_num = sum(utilidad_operativa, na.rm = TRUE),
margen_num = mean(margen_pct, na.rm = TRUE),
unidades_num = sum(unidades_vendidas, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(utilidad_num) %>%
mutate(
`Ventas Totales (USD)` = dollar(ventas_num),
`Utilidad Operativa (USD)` = dollar(utilidad_num),
`Margen Promedio (%)` = paste0(round(margen_num, 1), "%"),
`Unidades Vendidas` = format(unidades_num, big.mark = ",")
) %>%
select(Distribuidor, `Ventas Totales (USD)`, `Utilidad Operativa (USD)`,
`Margen Promedio (%)`, `Unidades Vendidas`)
tabla_dist %>%
kable(caption = "Tabla 2. Desempeño Comercial por Distribuidor",
align = c("l","r","r","r","r")) %>%
kable_styling(bootstrap_options = c("striped","hover","condensed"),
full_width = FALSE) %>%
column_spec(1, bold = TRUE)
| Distribuidor | Ventas Totales (USD) | Utilidad Operativa (USD) | Margen Promedio (%) | Unidades Vendidas |
|---|---|---|---|---|
| Walmart | $10,506,085 | $3,902,749 | 40.7% | 206,225 |
| Amazon | $10,096,987 | $3,984,432 | 41.8% | 197,990 |
| Kohl’s | $13,512,453 | $5,182,260 | 41.9% | 287,375 |
| Sports Direct | $24,616,622 | $10,641,609 | 44.5% | 557,640 |
| Foot Locker | $29,024,945 | $11,317,027 | 41.8% | 604,369 |
| West Gear | $32,409,558 | $12,196,891 | 41.8% | 625,262 |
Interpretación: Esta tabla permite ver de forma directa quién está generando más valor para Adidas entre sus socios de distribución. Los distribuidores con mayor utilidad no siempre son los que más venden en volumen, lo que revela diferencias importantes en eficiencia. Un distribuidor que vende mucho pero con margen bajo puede estar aportando menos a la rentabilidad que otro con ventas moderadas pero mayor margen. Al comparar las columnas de ventas, utilidad y margen simultáneamente, es posible identificar cuáles son verdaderamente socios estratégicos y cuáles son simplemente canales de volumen.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
dist_resumen <- datos %>%
group_by(distribuidor) %>%
summarise(
ventas_totales = sum(ventas_total, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE),
utilidad_total = sum(utilidad_operativa, na.rm = TRUE),
.groups = "drop"
)
plot_ly(dist_resumen,
x = ~ventas_totales, y = ~margen_promedio,
type = "scatter", mode = "markers",
size = ~utilidad_total, sizes = c(20, 300),
marker = list(color = "#1565C0", opacity = 0.80, sizemode = "area"),
customdata = ~paste0("<b>", distribuidor, "</b><br>",
"Ventas: ", dollar(ventas_totales), "<br>",
"Margen: ", percent(margen_promedio, accuracy = 0.1), "<br>",
"Utilidad: ", dollar(utilidad_total)),
hovertemplate = "%{customdata}<extra></extra>"
) %>%
add_annotations(
data = dist_resumen, x = ~ventas_totales, y = ~margen_promedio,
text = ~distribuidor, xref = "x", yref = "y",
showarrow = FALSE, yshift = 18,
font = list(size = 12, color = "black"), cliponaxis = FALSE
) %>%
layout(
title = list(
text = "<b>Figura 9. Ventas Totales vs Margen Operativo por Distribuidor</b><br><sup>Tamaño del punto proporcional a la Utilidad Operativa</sup>",
x = 0.5
),
xaxis = list(title = "<b>Ventas Totales (USD)</b>", tickprefix = "$", separatethousands = TRUE),
yaxis = list(title = "<b>Margen Operativo Promedio</b>", tickformat = ".0%"),
plot_bgcolor = "white", paper_bgcolor = "white",
showlegend = FALSE, margin = list(t = 80, b = 70, l = 80, r = 80)
)
Interpretación: En esta gráfica, el lugar ideal para que esté un distribuidor es en la esquina superior derecha: mucho volumen de ventas y alto margen. West Gear y Foot Locker lideran en volumen de ventas con márgenes similares entre sí, consolidándose como los socios de mayor peso comercial. Sin embargo, Sports Direct aparece en una posición destacada: con menos ventas que los dos anteriores, tiene el margen más alto de todos los distribuidores, lo que lo convierte en el socio más eficiente del portafolio. Amazon, Walmart y Kohl’s operan con márgenes más ajustados o volúmenes menores, lo que los sitúa en una posición donde vale la pena revisar las condiciones comerciales para mejorar su contribución a la rentabilidad.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
prod_precio_margen <- datos %>%
group_by(producto_es) %>%
summarise(
precio_prom = mean(precio_unidad, na.rm = TRUE),
margen_prom = mean(margen_operativo, na.rm = TRUE),
unidades = sum(unidades_vendidas, na.rm = TRUE),
utilidad = sum(utilidad_operativa, na.rm = TRUE),
.groups = "drop"
)
plot_ly(prod_precio_margen,
x = ~precio_prom, y = ~margen_prom,
type = "scatter", mode = "markers",
size = ~unidades, sizes = c(20, 300),
marker = list(color = "#1565C0", opacity = 0.75, sizemode = "area"),
customdata = ~paste0(
"<b>", producto_es, "</b><br>",
"Precio promedio: $", round(precio_prom, 2), "<br>",
"Margen: ", round(margen_prom * 100, 1), "%<br>",
"Unidades vendidas: ", formatC(unidades, format = "d", big.mark = ","), "<br>",
"Utilidad total: $", formatC(utilidad, format = "d", big.mark = ",")
),
hovertemplate = "%{customdata}<extra></extra>"
) %>%
add_annotations(
data = prod_precio_margen, x = ~precio_prom, y = ~margen_prom,
text = ~producto_es, xref = "x", yref = "y",
showarrow = FALSE, yshift = 18,
font = list(size = 11, color = "black"), cliponaxis = FALSE
) %>%
layout(
title = list(
text = paste0("<b>Figura 10. Precio Promedio vs Margen Operativo por Categoría</b>",
"<br><sup>Tamaño del punto proporcional a las Unidades Vendidas</sup>"),
x = 0.5
),
xaxis = list(title = "<b>Precio Promedio por Unidad (USD)</b>", tickprefix = "$"),
yaxis = list(title = "<b>Margen Operativo Promedio</b>", tickformat = ".0%"),
plot_bgcolor = "white", paper_bgcolor = "white",
showlegend = FALSE, margin = list(t = 90, b = 60, l = 80, r = 80)
)
Interpretación: Esta gráfica revela una relación interesante: la Ropa (hombre y mujer) tiene los precios promedio más altos del portafolio, superando los $50 por unidad, y al mismo tiempo mantiene márgenes por encima del promedio general. Sin embargo, sus puntos son pequeños, lo que indica que se vende en menor volumen. El Calzado Urbano Hombre combina un precio competitivo con el margen más alto y el punto más grande, siendo la categoría con mejor equilibrio entre precio, margen y volumen. El Calzado Deportivo Hombre, a pesar de tener uno de los puntos más grandes en unidades, registra el margen más bajo, lo que confirma que vender mucho no siempre equivale a ser el producto más rentable. La zona ideal de la gráfica —precio alto, margen alto y punto grande— todavía no está completamente ocupada por ninguna categoría, y ahí reside la oportunidad estratégica más clara.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
datos_11 <- datos %>%
filter(!is.na(precio_unidad), !is.na(unidades_vendidas))
corr_pu <- cor(datos_11$precio_unidad, datos_11$unidades_vendidas, use = "complete.obs")
g11 <- ggplot(datos_11, aes(x = precio_unidad, y = unidades_vendidas)) +
geom_point(color = "#1565C0", size = 1.8, alpha = 0.55) +
geom_smooth(method = "lm", color = "red", linewidth = 1.2, se = TRUE) +
scale_x_continuous(labels = dollar_format(prefix = "$")) +
scale_y_continuous(labels = comma_format()) +
labs(
title = paste0("Figura 11. Precio por Unidad vs Unidades Vendidas",
"\nCorrelación: r = ", round(corr_pu, 3)),
subtitle = "La línea roja representa la tendencia lineal (MCO)",
x = "Precio por Unidad (USD)",
y = "Unidades Vendidas"
) +
theme_minimal(base_size = 12)
ggplotly(g11)
Interpretación: Esta gráfica responde una pregunta que toda empresa se hace: ¿si subo el precio, vendo menos? En el caso de Adidas, la correlación de r = 0.266 sugiere que la relación entre precio y volumen es débil: subir precios no se traduce necesariamente en una caída proporcional en las ventas. Esto es una señal muy positiva y tiene un nombre: poder de marca. Los consumidores no eligen Adidas solo por precio, sino por lo que la marca representa. Esto le da a la empresa un margen de maniobra para hacer ajustes de precio en categorías o momentos específicos sin sacrificar demasiado volumen.
Se puede decir que los consumidores de Adidas no toman su decisión de compra basándose principalmente en el precio, sino en otros factores como la marca, el estilo o la ocasión. Eso es exactamente lo que se llama poder de marca: Adidas puede subir precios sin que sus ventas caigan de forma significativa, lo cual es una ventaja competitiva muy valiosa.
# -- Carga independiente --
if (!exists("datos")) {
library(readxl); library(dplyr); library(stringr)
datos_raw <- read_excel("DatosCaso1.xlsx") %>%
mutate(ventas_total = precio_unidad * unidades_vendidas)
datos <- datos_raw %>%
filter(!is.na(distribuidor)) %>%
mutate(
producto_es = recode(producto,
"Men's Street Footwear"="Calzado Urbano Hombre","Men's Athletic Footwear"="Calzado Deportivo Hombre",
"Women's Street Footwear"="Calzado Urbano Mujer","Women's Athletic Footwear"="Calzado Deportivo Mujer",
"Men's Apparel"="Ropa Hombre","Women's Apparel"="Ropa Mujer"),
region_es = recode(region,
"West"="Oeste","Northeast"="Noreste","Southeast"="Sureste","South"="Sur","Midwest"="Medio Oeste"),
metodo_es = recode(metodo_venta,
"In-store"="Tienda Física","Online"="En Línea","Outlet"="Outlet"),
margen_pct = margen_operativo * 100)
}
precio_ciudad <- datos %>%
group_by(ciudad) %>%
summarise(
precio_prom = mean(precio_unidad, na.rm = TRUE),
n_transac = n(),
.groups = "drop"
) %>%
filter(n_transac >= 5) %>%
arrange(desc(precio_prom)) %>%
slice_head(n = 15) %>%
arrange(precio_prom) %>%
mutate(ciudad = factor(ciudad, levels = ciudad))
plot_ly(
data = precio_ciudad, x = ~precio_prom, y = ~ciudad,
type = "bar", orientation = "h",
marker = list(color = ~precio_prom,
colorscale = list(c(0, "#FFF9C4"), c(1, "#F57F17")),
showscale = FALSE),
hovertemplate = "<b>%{y}</b><br>Precio promedio: $%{x:.2f}<extra></extra>"
) %>%
layout(
title = list(text = "<b>Figura 12. Precio Promedio por Unidad — Top 15 Ciudades</b>", x = 0.5),
xaxis = list(title = "<b>Precio Promedio por Unidad (USD)</b>", tickprefix = "$"),
yaxis = list(title = "<b>Ciudad</b>"),
plot_bgcolor = "white", paper_bgcolor = "white",
margin = list(t = 70, b = 60, l = 130, r = 60)
)
Interpretación: Esta gráfica muestra en qué ciudades Adidas logra posicionarse con precios más altos, lo que es un indicador indirecto del poder adquisitivo del consumidor local y de la percepción de valor de la marca en cada mercado. Las ciudades en la parte superior de la gráfica no solo pagan más por unidad: también representan mercados donde la marca tiene mayor relevancia o donde el mix de productos vendidos es más premium. Esto tiene una implicación directa para la estrategia: los lanzamientos de líneas de alto precio y las colaboraciones de edición limitada deberían concentrarse primero en estas ciudades, donde el consumidor ya está dispuesto a pagar más. Por otro lado, las ciudades en la parte inferior de la lista no son mercados de bajo valor, sino mercados donde probablemente predominan productos de entrada o donde el canal Outlet tiene mayor presencia, lo que baja el precio promedio. Identificar si el bajo precio promedio de una ciudad es por mix de productos o por perfil del consumidor es el siguiente paso para diseñar estrategias de precio diferenciadas por mercado.
A partir del análisis realizado, estos son los mensajes más importantes que deja la información recolectada:
Desempeño de Ventas:
Rentabilidad:
Lo que revelan las relaciones entre variables:
Los datos de Adidas en el mercado estadounidense cuentan una historia clara: el negocio es rentable y tiene una base sólida, pero depende demasiado de pocos productos, pocas regiones y pocos socios comerciales. Esa concentración es el riesgo más importante que revelan los números.
El Calzado Urbano Hombre lidera en ventas con $27.7 millones (23% del total), pero su margen del 44.6% no es el más alto del portafolio. La Ropa Mujer, que ocupa el segundo lugar en ventas con $23.9 millones, también tiene un margen del 44.1% — casi igual al producto líder, pero con mucho menos protagonismo comercial. Eso es una señal importante: los productos que más se publicitan no son necesariamente los más rentables.
Geográficamente, el Oeste concentra el 30.3% de todas las ventas ($36.4 millones), seguido del Noreste con el 20.9%. Juntas, estas dos regiones explican más de la mitad del negocio. Lo que sorprende es lo que muestran las regiones rezagadas: el Sur, a pesar de tener menos ventas, registra el margen más alto de todas las regiones con un 46.7%. Vende menos, pero lo que vende lo hace de forma muy eficiente. Eso no es un mercado débil — es un mercado sin desarrollar.
El hallazgo más contundente en canales es el siguiente: el canal En Línea genera el 37.4% de las ventas totales ($45 millones), tiene el margen más alto de los tres canales con un 46.4%, y opera sin los costos fijos de una tienda física. La Tienda Física, en contraste, tiene el margen más bajo: 35.6%. El canal que más cuesta operar es el que menos margen deja. El Outlet, con un margen del 39.5%, cumple una función de liquidación pero no puede ser parte central de ninguna estrategia de crecimiento.
Finalmente, la correlación entre precio y unidades vendidas es de apenas r = 0.27 — prácticamente inexistente. Subir precios no hace que la gente deje de comprar Adidas. Eso confirma que la marca tiene un poder real sobre sus consumidores que todavía no se está aprovechando del todo.
El Sur tiene el margen más alto del país (46.7%) pero solo representa el 17.1% de las ventas. El Medio Oeste tiene un margen del 43.5% y apenas el 13.9% de participación. Estos no son mercados difíciles — son mercados a los que Adidas no ha llegado con fuerza.
En términos de productos, la apuesta más segura para entrar en estas regiones es el Calzado Urbano (hombre y mujer), que combina los márgenes más altos del portafolio (44.6% y 41%) con los mayores volúmenes de unidades vendidas. La Ropa, con márgenes por encima del promedio, puede funcionar como complemento para aumentar el ticket promedio por transacción sin añadir complejidad logística.
En cuanto a distribuidores, Sports Direct es el socio más indicado para liderar esta expansión: tiene el margen más alto entre todos los distribuidores (44.5%) y ya opera con un volumen considerable ($24.6M). Kohl’s, con presencia establecida en el centro y sur del país y un margen del 41.9%, es el segundo aliado natural para llegar a esos consumidores. Apoyarse en estos dos socios reduce el riesgo de entrada y aprovecha redes de distribución que ya existen en esos mercados.
La Ropa Mujer es el segundo producto en ventas ($23.9M) y tiene un margen del 44.1%. La Ropa Hombre tiene un margen del 41.3%. Ambos superan el promedio general del 42.3%, pero ninguno recibe el protagonismo del calzado. Si la ropa tuviera campañas propias, mayor visibilidad en punto de venta y asociaciones estratégicas con lanzamientos de calzado, podría crecer en volumen manteniendo sus márgenes. Es el segmento con la mejor combinación de rentabilidad y potencial sin explotar del portafolio.
El canal En Línea tiene el margen más alto (46.4%), el mayor volumen de ventas ($45M) y los menores costos de operación. La Tienda Física tiene el margen más bajo (35.6%). Cada venta que migra de tienda física u Outlet hacia el canal digital mejora directamente la rentabilidad del negocio. La recomendación es invertir en la experiencia de compra online, ofrecer lanzamientos o productos exclusivos para el canal digital, y usar los datos de comportamiento del consumidor para personalizar la oferta. El canal ya demostró que funciona, es decir que hay que acelerarlo lo mas que se pueda.
Con un margen del 39.5% — casi 7 puntos por debajo del canal En Línea — el Outlet es el canal menos eficiente. Su función es legítima: mover inventario de temporadas pasadas. El problema ocurre cuando se vuelve habitual, porque entrena al consumidor a esperar descuentos y compite directamente con los otros canales. La recomendación es activarlo de forma quirúrgica: períodos cortos, productos específicos de temporada anterior, y nunca como canal de venta regular.
West Gear ($32.4M en ventas, margen 41.8%) y Foot Locker ($29M, margen 41.8%) son los socios de mayor volumen. Pero Sports Direct, con $24.6M en ventas y el margen más alto entre distribuidores (44.5%), es el socio más eficiente y probablemente el más subvalorado. Estos tres merecen condiciones preferenciales: acceso anticipado a lanzamientos, inversión conjunta en puntos de venta y acuerdos que fortalezcan la relación a largo plazo. Amazon y Walmart, con márgenes de 41.8% y 40.7% respectivamente, requieren una conversación diferente sobre cómo mejorar condiciones sin perder presencia.
La correlación entre precio y unidades vendidas es de apenas r = 0.27: cuando Adidas sube precios, el volumen casi no se mueve. El espacio más claro para actuar es el Calzado Deportivo Hombre, que tiene el margen más bajo del portafolio (40.3%) y más de 435,000 unidades vendidas — un ajuste selectivo de precio ahí tendría un impacto directo y visible en la rentabilidad total. Adicionalmente, el análisis por ciudad sugiere focalizar incrementos de precio primero en los mercados que ya demuestran mayor disposición a pagar.
Análisis elaborado con R Studio | Datos: DatosCaso1.xlsx | Gráficas: Elaboración propia