Adidas cuenta con una base de datos comercial que permite evaluar el comportamiento de variables asociadas con ventas y rentabilidad. En este informe se desarrolla un analisis descriptivo y diagnostico enfocado en la utilidad operativa y el margen operativo, con el proposito de identificar patrones relevantes para la toma de decisiones.
A diferencia de un analisis general de todas las variables, este documento se concentra en las preguntas centrales del caso: como se distribuyen la utilidad operativa y el margen operativo, cual es el margen promedio y que tan variable es, que productos, ciudades y metodos de venta parecen mas rentables, y si existe relacion entre ventas y utilidad.
Con base en ello, se priorizan las variables
utilidad_operativa, margen_operativo,
ventas_total, producto, ciudad y
metodo_venta, ya que estas permiten evaluar tanto la
rentabilidad absoluta como la rentabilidad relativa de los distintos
segmentos.
El analisis exploratorio de datos constituye una etapa fundamental para comprender la estructura de la informacion, describir el comportamiento de las variables clave e identificar relaciones relevantes entre ellas.
En este caso, el analisis se orienta especificamente a la rentabilidad de Adidas. Por esta razon, se emplean estadisticas descriptivas, medidas de variabilidad y visualizaciones enfocadas en utilidad operativa, margen operativo, producto, ciudad y metodo de venta.
PASO 1. Instalar y cargar librerias
# Cargar librerias necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(tidyverse)
library(janitor)
PASO 2. Cargar la base de datos
# Cargar datos desde el archivo Excel
adidas <- read_excel("C:/Users/ASUS/OneDrive - PUJ Cali/Desktop/MASTER FINANZAS JAVERIANA 2026-2027/Analitica de negocios/trabajos R/DatosCaso111.xlsx",
sheet = "Data Sales Adidas") %>%
clean_names() %>%
mutate(
producto = as.factor(producto),
ciudad = as.factor(ciudad),
metodo_venta = as.factor(metodo_venta)
)
# Revision basica de las variables utilizadas en el analisis
variables_clave <- adidas %>%
select(ciudad, producto, metodo_venta, ventas_total, utilidad_operativa, margen_operativo)
head(variables_clave)
| ciudad | producto | metodo_venta | ventas_total | utilidad_operativa | margen_operativo |
|---|---|---|---|---|---|
| New York | Men’s Street Footwear | In-store | 60000 | 30000.0 | 0.50 |
| New York | Men’s Athletic Footwear | In-store | 50000 | 15000.0 | 0.30 |
| New York | Women’s Street Footwear | In-store | 40000 | 14000.0 | 0.35 |
| New York | Women’s Athletic Footwear | In-store | 38250 | 13387.5 | 0.35 |
| New York | Men’s Apparel | In-store | 54000 | 16200.0 | 0.30 |
| New York | Women’s Apparel | In-store | 50000 | 12500.0 | 0.25 |
En esta seccion se resume el comportamiento de las variables de rentabilidad principales. Se reportan medidas de tendencia central y dispersion para utilidad operativa, margen operativo y ventas totales.
resumen_rentabilidad <- data.frame(
Variable = c("Ventas totales", "Utilidad operativa", "Margen operativo"),
Minimo = c(min(adidas$ventas_total, na.rm = TRUE),
min(adidas$utilidad_operativa, na.rm = TRUE),
min(adidas$margen_operativo, na.rm = TRUE)),
Media = c(mean(adidas$ventas_total, na.rm = TRUE),
mean(adidas$utilidad_operativa, na.rm = TRUE),
mean(adidas$margen_operativo, na.rm = TRUE)),
Mediana = c(median(adidas$ventas_total, na.rm = TRUE),
median(adidas$utilidad_operativa, na.rm = TRUE),
median(adidas$margen_operativo, na.rm = TRUE)),
Maximo = c(max(adidas$ventas_total, na.rm = TRUE),
max(adidas$utilidad_operativa, na.rm = TRUE),
max(adidas$margen_operativo, na.rm = TRUE)),
Desv_Estandar = c(sd(adidas$ventas_total, na.rm = TRUE),
sd(adidas$utilidad_operativa, na.rm = TRUE),
sd(adidas$margen_operativo, na.rm = TRUE))
)
knitr::kable(resumen_rentabilidad, digits = 2, caption = "Tabla 1. Resumen estadistico de ventas y rentabilidad") %>%
kable_styling(full_width = FALSE)
| Variable | Minimo | Media | Mediana | Maximo | Desv_Estandar |
|---|---|---|---|---|---|
| Ventas totales | 0.0 | 12455.08 | 7803.50 | 82500.0 | 12716.39 |
| Utilidad operativa | 0.0 | 4894.79 | 3262.98 | 39000.0 | 4866.46 |
| Margen operativo | 0.1 | 0.42 | 0.41 | 0.8 | 0.10 |
La tabla anterior permite observar el nivel promedio de rentabilidad y su dispersion. En particular, la desviacion estandar resulta relevante porque muestra que tan estable o heterogeneo es el comportamiento de cada variable con respecto a su media.
El siguiente histograma permite evaluar como se distribuye la utilidad operativa dentro de la base de datos.
grafico_hist_utilidad <- ggplot(adidas, aes(x = utilidad_operativa)) +
geom_histogram(bins = 30, fill = "lightblue", color = "black") +
labs(title = "Figura 1. Distribucion de la utilidad operativa",
x = "Utilidad operativa",
y = "Frecuencia") +
theme_minimal()
ggplotly(grafico_hist_utilidad)
El boxplot permite identificar dispersion, asimetria y posibles valores atipicos en la utilidad operativa.
ggplotly(
ggplot(adidas, aes(y = utilidad_operativa)) +
geom_boxplot(fill = "lightblue", color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
labs(title = "Figura 2. Boxplot de utilidad operativa",
y = "Utilidad operativa") +
theme_minimal()
)
A partir de estas figuras se puede evaluar si la utilidad operativa presenta alta concentracion, dispersion significativa o dependencia de pocos registros extremos.
El margen operativo es una medida de rentabilidad relativa. Su distribucion permite entender si la eficiencia del negocio es estable o si cambia considerablemente entre observaciones.
grafico_hist_margen <- ggplot(adidas, aes(x = margen_operativo)) +
geom_histogram(bins = 30, fill = "darkseagreen", color = "black") +
labs(title = "Figura 3. Distribucion del margen operativo",
x = "Margen operativo",
y = "Frecuencia") +
theme_minimal()
ggplotly(grafico_hist_margen)
ggplotly(
ggplot(adidas, aes(y = margen_operativo)) +
geom_boxplot(fill = "khaki", color = "black", outlier.colour = "red", outlier.shape = 16, outlier.size = 2) +
labs(title = "Figura 4. Boxplot del margen operativo",
y = "Margen operativo") +
theme_minimal()
)
Para responder cual es el margen promedio y que tan variable es, se construye una tabla especifica para el margen operativo.
resumen_margen <- data.frame(
Medida = c("Media", "Mediana", "Desviacion estandar", "Rango", "Coeficiente de variacion"),
Valor = c(
mean(adidas$margen_operativo, na.rm = TRUE),
median(adidas$margen_operativo, na.rm = TRUE),
sd(adidas$margen_operativo, na.rm = TRUE),
max(adidas$margen_operativo, na.rm = TRUE) - min(adidas$margen_operativo, na.rm = TRUE),
sd(adidas$margen_operativo, na.rm = TRUE) / mean(adidas$margen_operativo, na.rm = TRUE)
)
)
knitr::kable(resumen_margen, digits = 4, caption = "Tabla 2. Margen promedio y variabilidad") %>%
kable_styling(full_width = FALSE)
| Medida | Valor |
|---|---|
| Media | 0.4230 |
| Mediana | 0.4100 |
| Desviacion estandar | 0.0972 |
| Rango | 0.7000 |
| Coeficiente de variacion | 0.2298 |
La media resume la rentabilidad promedio, mientras que la desviacion estandar, el rango y el coeficiente de variacion muestran si esa rentabilidad es estable o presenta diferencias importantes entre observaciones.
En esta parte se busca identificar que productos parecen mas rentables, considerando tanto utilidad operativa total como margen operativo promedio.
rent_producto <- adidas %>%
group_by(producto) %>%
summarise(
utilidad_total = sum(utilidad_operativa, na.rm = TRUE),
utilidad_promedio = mean(utilidad_operativa, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(desc(utilidad_total))
knitr::kable(rent_producto, digits = 2, caption = "Tabla 3. Rentabilidad por producto") %>%
kable_styling(full_width = FALSE)
| producto | utilidad_total | utilidad_promedio | margen_promedio |
|---|---|---|---|
| Men’s Street Footwear | 11629046 | 7223.01 | 0.45 |
| Women’s Apparel | 9685221 | 6023.15 | 0.44 |
| Men’s Athletic Footwear | 7437457 | 4619.54 | 0.40 |
| Women’s Street Footwear | 6494017 | 4038.57 | 0.41 |
| Men’s Apparel | 6381405 | 3973.48 | 0.41 |
| Women’s Athletic Footwear | 5597822 | 3485.57 | 0.42 |
grafico_producto_utilidad <- rent_producto %>%
plot_ly(x = ~reorder(producto, utilidad_total), y = ~utilidad_total, type = "bar",
marker = list(color = "steelblue")) %>%
layout(title = "Figura 5. Utilidad total por producto",
xaxis = list(title = "Producto"),
yaxis = list(title = "Utilidad total"))
grafico_producto_utilidad
grafico_producto_margen <- rent_producto %>%
plot_ly(x = ~reorder(producto, margen_promedio), y = ~margen_promedio, type = "bar",
marker = list(color = "darkseagreen")) %>%
layout(title = "Figura 6. Margen promedio por producto",
xaxis = list(title = "Producto"),
yaxis = list(title = "Margen promedio"))
grafico_producto_margen
Comparar utilidad total y margen promedio permite diferenciar productos que destacan por escala de aquellos que sobresalen por eficiencia relativa.
Dado que existen muchas ciudades, se prioriza el analisis de las 10 con mayor utilidad total y de las 10 con mayor margen promedio.
rent_ciudad <- adidas %>%
group_by(ciudad) %>%
summarise(
utilidad_total = sum(utilidad_operativa, na.rm = TRUE),
utilidad_promedio = mean(utilidad_operativa, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE),
.groups = "drop"
) %>%
arrange(desc(utilidad_total))
knitr::kable(head(rent_ciudad, 10), digits = 2, caption = "Tabla 4. Top 10 ciudades por utilidad total") %>%
kable_styling(full_width = FALSE)
| ciudad | utilidad_total | utilidad_promedio | margen_promedio |
|---|---|---|---|
| New York | 2114664 | 9790.11 | 0.40 |
| Charleston | 2024086 | 7028.08 | 0.44 |
| San Francisco | 1581993 | 7324.04 | 0.36 |
| Miami | 1579388 | 10967.97 | 0.43 |
| Portland | 1575861 | 4377.39 | 0.41 |
| Houston | 1494772 | 6920.24 | 0.44 |
| New Orleans | 1424390 | 6594.40 | 0.45 |
| Los Angeles | 1378158 | 6380.36 | 0.42 |
| Birmingham | 1368206 | 6334.29 | 0.55 |
| Orlando | 1342207 | 6213.92 | 0.36 |
top_ciudad_utilidad <- rent_ciudad %>%
slice_max(order_by = utilidad_total, n = 10)
grafico_ciudad_utilidad <- top_ciudad_utilidad %>%
plot_ly(x = ~reorder(ciudad, utilidad_total), y = ~utilidad_total, type = "bar",
marker = list(color = "tomato")) %>%
layout(title = "Figura 7. Top 10 ciudades por utilidad total",
xaxis = list(title = "Ciudad"),
yaxis = list(title = "Utilidad total"))
grafico_ciudad_utilidad
top_ciudad_margen <- rent_ciudad %>%
slice_max(order_by = margen_promedio, n = 10)
grafico_ciudad_margen <- top_ciudad_margen %>%
plot_ly(x = ~reorder(ciudad, margen_promedio), y = ~margen_promedio, type = "bar",
marker = list(color = "goldenrod")) %>%
layout(title = "Figura 8. Top 10 ciudades por margen promedio",
xaxis = list(title = "Ciudad"),
yaxis = list(title = "Margen promedio"))
grafico_ciudad_margen
Este analisis permite distinguir ciudades estrategicas por volumen de utilidad y ciudades con mejor rentabilidad relativa.
Ahora se analiza si el canal de venta influye en la rentabilidad.
rent_metodo <- adidas %>%
group_by(metodo_venta) %>%
summarise(
utilidad_total = sum(utilidad_operativa, na.rm = TRUE),
utilidad_promedio = mean(utilidad_operativa, na.rm = TRUE),
margen_promedio = mean(margen_operativo, na.rm = TRUE),
ventas_totales = sum(ventas_total, na.rm = TRUE),
.groups = "drop"
)
knitr::kable(rent_metodo, digits = 2, caption = "Tabla 5. Rentabilidad por metodo de venta") %>%
kable_styling(full_width = FALSE)
| metodo_venta | utilidad_total | utilidad_promedio | margen_promedio | ventas_totales |
|---|---|---|---|---|
| In-store | 12759129 | 7332.83 | 0.36 | 35664375 |
| Online | 19552538 | 3999.29 | 0.46 | 44965657 |
| Outlet | 14913301 | 4939.81 | 0.39 | 39536618 |
grafico_metodo_utilidad <- rent_metodo %>%
plot_ly(x = ~metodo_venta, y = ~utilidad_total, type = "bar",
marker = list(color = "purple")) %>%
layout(title = "Figura 9. Utilidad total por metodo de venta",
xaxis = list(title = "Metodo de venta"),
yaxis = list(title = "Utilidad total"))
grafico_metodo_utilidad
grafico_metodo_margen <- rent_metodo %>%
plot_ly(x = ~metodo_venta, y = ~margen_promedio, type = "bar",
marker = list(color = "darkorange")) %>%
layout(title = "Figura 10. Margen promedio por metodo de venta",
xaxis = list(title = "Metodo de venta"),
yaxis = list(title = "Margen promedio"))
grafico_metodo_margen
El metodo de venta es una variable especialmente util para la toma de decisiones, ya que permite identificar si un canal destaca por utilidad total, por margen promedio o por ambas dimensiones.
Finalmente, se analiza si existe relacion entre ventas y utilidad operativa.
cor_ventas_utilidad <- cor(adidas$ventas_total, adidas$utilidad_operativa, use = "complete.obs")
cor_ventas_utilidad
## [1] 0.9353717
ggplotly(
ggplot(adidas, aes(x = ventas_total, y = utilidad_operativa)) +
geom_point(color = "lightblue", alpha = 0.8, size = 2) +
geom_smooth(method = "lm", color = "grey", se = TRUE) +
labs(
title = paste("Figura 11. Relacion entre ventas y utilidad operativa\nCoef. de correlacion:",
round(cor(adidas$ventas_total, adidas$utilidad_operativa, use = "complete.obs"), 2)),
x = "Ventas totales",
y = "Utilidad operativa"
) +
theme_minimal()
)
Si la correlacion es positiva y alta, ello sugiere que un mayor volumen de ventas tiende a estar asociado con una mayor utilidad operativa. Si la dispersion es alta, entonces otros factores como el margen operativo tambien influyen de manera importante.
A partir del analisis realizado, se pueden extraer varias conclusiones relevantes:
Con base en los resultados del analisis, se recomienda: