1 Introducción

En este informe se analizará el comportamiento de las ventas y la rentabilidad de Adidas a través de un análisis exploratorio de datos, enfocado en los productos menos vendidos para de tal manera analizar y comprender cuál es la situación y que medidas o estrategias se podrían tomar para que la empresa mejore su utilidad y rentabilidad.

2 Análisis exploratorio

El análisis exploratorio de datos (EDA) es un paso clave para comprender la información financiera de Adidas. identificar patrones y evaluar la distribución de las variables.

A través de estadísticas descriptivas y visualización de datos con R, identificaremos tendencias, relaciones entre variables y posibles anomalías, proporcionando una base sólida para interpretar el desempeño financiero de Adidas.

# Cargar librerías necesarias
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
library(tidyverse)
library(readxl)
library(ggplot2)
library(plotly)
library(scales)

2.1 Indicadores de medida central

de las variables unidades vendidas, precio de unidad y utilidad operativa:

 datos <- read_excel("DatosCaso1 (1).xlsx")

ventas_producto <- datos %>%
  group_by(producto) %>%
  summarise(
    total_unidades = sum(unidades_vendidas, na.rm = TRUE),
    .groups = "drop"
  )
#Leer archivo
datos <- read_excel("DatosCaso1 (1).xlsx")


resumen <- datos %>%
  select(unidades_vendidas, precio_unidad, utilidad_operativa) %>%
  summary()

resumen
##  unidades_vendidas precio_unidad    utilidad_operativa
##  Min.   :   0.0    Min.   :  7.00   Min.   :    0     
##  1st Qu.: 106.0    1st Qu.: 35.00   1st Qu.: 1753     
##  Median : 176.0    Median : 45.00   Median : 3263     
##  Mean   : 256.9    Mean   : 45.22   Mean   : 4895     
##  3rd Qu.: 350.0    3rd Qu.: 55.00   3rd Qu.: 6192     
##  Max.   :1275.0    Max.   :110.00   Max.   :39000
# Clasificacion de productos que estan por debajo de la media de Uidades vendidas

Interpretacion:

Rango amplio: Hay productos que no se vendieron (0) y otros que llegaron hasta 1275 unidades. Distribución sesgada a la derecha: La media (256.9) es mayor que la mediana (176), lo que indica que unos pocos productos tienen ventas muy altas y elevan el promedio. Precio por unidad: Rango de precios: Desde muy barato (7) hasta muy caro (110). Media y mediana similares: La distribución de precios parece relativamente simétrica, con la mayoría de productos entre 35 y 55. Utilidad operativa Amplia variabilidad: La utilidad va desde 0 hasta 39,000, mostrando que algunos productos generan mucho margen y otros casi nada. Sesgo positivo (a la derecha): La media (4895) es mucho mayor que la mediana (3263), indicando que unas pocas ventas generan utilidades muy altas.

2.2 ENFOQUE:

Se toma en cuenta estas tres variables principalmente por que apartir de ellas se puede deducir que hay productos que no estan rotando y que probablemente esos productos que no se venden no aportan margen en la utilidad opertiva, en base a esto nos damos cuenta que podemos enfocar nuestra investigacion a primero identificar cuales son esos productos, segundo a entender por que ese comportamiento o la tendencia, y por ultimo llegar a las conclusiones mas acertadas para definir estrategias claras en base a que medidas o decisiones se deberian de tomar respecto a los productos de baja rotacion .

2.3 Calculo media de ventas totales por producto

#este es el calculo de la media Total acumulado por producto y no individual.
cat("La media de ventas totales por producto es:",
    round(mean(ventas_producto$total_unidades), 2))
## La media de ventas totales por producto es: 413143.5

¿Por que trabajamos con esa media de ventas totales por producto?

Se utiliza la media de ventas totales por producto para clasificar los productos en bajo, medio y alto desempeño, comparando cada producto con el promedio general.

2.4 Clasificacion de desempeño

# 1️⃣ Calcular ventas totales por producto
ventas_producto <- datos %>%
  group_by(producto) %>%
  summarise(
    total_unidades = sum(unidades_vendidas, na.rm = TRUE),
    .groups = "drop"
  )

# 2️⃣ Calcular promedio general
promedio_general <- mean(ventas_producto$total_unidades, na.rm = TRUE)

# 3️⃣ Clasificar nivel de desempeño
ventas_clasificadas <- ventas_producto %>%
  mutate(
    nivel_desempeño = case_when(
      total_unidades < promedio_general * 0.8 ~ "Bajo desempeño",
      total_unidades <= promedio_general * 1.2 ~ "Desempeño medio",
      TRUE ~ "Alto desempeño"
    )
  )

# 4️⃣ Mostrar la tabla (sin errores)
ventas_clasificadas  # Dejar el objeto al final del chunk para mostrarlo
## # A tibble: 6 × 3
##   producto                  total_unidades nivel_desempeño
##   <chr>                              <dbl> <chr>          
## 1 Men's Apparel                     306683 Bajo desempeño 
## 2 Men's Athletic Footwear           435526 Desempeño medio
## 3 Men's Street Footwear             593320 Alto desempeño 
## 4 Women's Apparel                   433827 Desempeño medio
## 5 Women's Athletic Footwear         317236 Bajo desempeño 
## 6 Women's Street Footwear           392269 Desempeño medio

Interpretacion:

Teniendo en cuenta que la media de ventas totales por producto fue de 413143.5, Se hace así (0.8 y 1.2 del promedio) porque estamos creando una banda de tolerancia alrededor del promedio para separar lo “normal” de lo “bajo” y lo “alto”.0.8 × promedio → 20% por debajo, 1.2 × promedio → 20% por encima. Entonces se clasifico a Women’s Athletic Footwear y a Men’s Apparel como los dos productos con un menor desempeño.

2.4.1 Representacion grafica del nivel de desempeño de cada producto.

grafico <- ggplot(ventas_clasificadas,
       aes(x = reorder(producto, total_unidades),
           y = total_unidades,
           fill = nivel_desempeño,
           text = paste("Producto:", producto,
                        "<br>Total unidades:", total_unidades,
                        "<br>Nivel:", nivel_desempeño))) +
  geom_col() +
  scale_fill_manual(
    values = c(
      "Bajo desempeño" = "#E63946",      # rojo elegante
      "Desempeño medio" = "#F4A261",     # amarillo profesional
      "Alto desempeño" = "#2A9D8F"       # verde ejecutivo
    )
  ) +
  labs(
    title = "Clasificacion de Productos segun Nivel de Desempeño",
    x = "Producto",
    y = "Total de Unidades Vendidas"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(grafico, tooltip = "text")

Interpretacion:

En la grafica pódemos visualizar mas facilmente como han sido clasificados los productos y entonces concluir que las dos prendas con una menor rotacion son men´s Apparel con un total de unidades vendidas de 306683 y women´s athletic footwear con un total de unidades vendidas de 317236. En base a estos datos podemos continuar con el estudio y analisis enfocandonos en esos dos productos.


2.4.2 clasificacion por ciudad.

Se identificaron las diez ciudades con menor volumen de ventas en productos clasificados como de bajo desempeño, con el fin de evaluar posibles oportunidades de optimización del portafolio.

# 1️⃣ Total por producto
ventas_producto <- datos %>%
  group_by(producto) %>%
  summarise(
    total_unidades = sum(unidades_vendidas, na.rm = TRUE),
    .groups = "drop"
  )

# 2️⃣ Promedio general
promedio_general <- mean(ventas_producto$total_unidades, na.rm = TRUE)

# 3️⃣ Clasificación
ventas_clasificadas <- ventas_producto %>%
  mutate(
    nivel_desempeno = case_when(
      total_unidades < promedio_general * 0.8 ~ "Bajo desempeno",
      total_unidades <= promedio_general * 1.2 ~ "Desempeno medio",
      TRUE ~ "Alto desempeno"
    )
  )

# 4️⃣ Unir con datos originales
datos_con_clasificacion <- datos %>%
  left_join(ventas_clasificadas, by = "producto")

# 5️⃣ Filtrar productos de bajo desempeño
productos_bajo <- datos_con_clasificacion %>%
  filter(nivel_desempeno == "Bajo desempeno")

# 6️⃣ Ciudades con menor venta
ciudades_menos_ventas <- productos_bajo %>%
  group_by(ciudad) %>%
  summarise(
    total_unidades_bajo = sum(unidades_vendidas, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(total_unidades_bajo)

# 7️⃣ Top 10 ciudades
top10_ciudades <- ciudades_menos_ventas %>%
  slice_head(n = 10) %>%
  pull(ciudad)

# 8️⃣ Detalle por ciudad y producto
detalle_top10 <- productos_bajo %>%
  filter(ciudad %in% top10_ciudades) %>%
  group_by(ciudad, producto) %>%
  summarise(
    total_unidades = sum(unidades_vendidas, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    ciudad = as.character(ciudad),
    producto = as.character(producto)
  )

# 9️⃣ Gráfico interactivo
grafico_top10 <- ggplot(detalle_top10,
       aes(x = reorder(ciudad, total_unidades),
           y = total_unidades,
           fill = producto,
           text = paste("Ciudad:", ciudad,
                        "<br>Producto:", producto,
                        "<br>Unidades:", total_unidades))) +
  geom_col(position = "dodge") +
  coord_flip() +
  theme_minimal() +
  labs(title = "Top 10 Ciudades con Menor Venta",
       subtitle = "Ventas de las 2 Prendas de Bajo Desempeno",
       x = "Ciudad",
       y = "Total Unidades Vendidas")

#  🔹 Mostrar gráfica interactiva
ggplotly(grafico_top10, tooltip = "text")

Interpretacion:

Las ciudades del top 10 presentan una concentración significativa de bajo desempeño en productos ya clasificados como débiles, lo que sugiere una doble afectación: bajo rendimiento general y bajo rendimiento regional.

las tres ciudades principales donde ambos productos se venden muy poco son Omaha, Baltimore y Minneapolis esto indica que posiblemente en estas ciudades hay una baja demanda local, una mala estrategia de precios o un problema de visibilidad o marketing.

2.4.3 Clasificacion por metodo de venta.

# 1️⃣ Calcular ventas totales por producto
ventas_producto <- datos %>%
  group_by(producto) %>%
  summarise(total_unidades = sum(unidades_vendidas, na.rm = TRUE), .groups = "drop")

# 2️⃣ Calcular promedio y clasificar desempeño
promedio_general <- mean(ventas_producto$total_unidades, na.rm = TRUE)

ventas_clasificadas <- ventas_producto %>%
  mutate(
    nivel_desempeno = case_when(
      total_unidades < promedio_general * 0.8 ~ "Bajo desempeno",
      total_unidades <= promedio_general * 1.2 ~ "Desempeno medio",
      TRUE ~ "Alto desempeno"
    )
  )

# 3️⃣ Filtrar productos de bajo desempeño
productos_bajo <- ventas_clasificadas %>%
  filter(nivel_desempeno == "Bajo desempeno")

# 4️⃣ Agrupar ventas por metodo_venta para esos productos
ventas_por_metodo <- datos %>%
  filter(producto %in% productos_bajo$producto) %>%
  group_by(producto, metodo_venta) %>%
  summarise(total_unidades = sum(unidades_vendidas, na.rm = TRUE), .groups = "drop") %>%
  arrange(producto, total_unidades)

ventas_por_metodo
## # A tibble: 6 × 3
##   producto                  metodo_venta total_unidades
##   <chr>                     <chr>                 <dbl>
## 1 Men's Apparel             In-store              85375
## 2 Men's Apparel             Outlet               103542
## 3 Men's Apparel             Online               117766
## 4 Women's Athletic Footwear In-store              85450
## 5 Women's Athletic Footwear Outlet               111031
## 6 Women's Athletic Footwear Online               120755

Interpretacion:

Se clasifico a traves de que metodo se venden los dos productos de baja rotacion (Outlet, In-store, Online)donde tambien se puede observar de que forma ambos se venden menos esto nos permite concluir que ambos productos se venden muy poco In-store lo cual podria significar

3 Indicadores clave

3.1 Participacion en ventas.

# 1️⃣ Total general de ingresos
total_ingresos_general <- sum(datos$ventas_total, na.rm = TRUE)

# 2️⃣ Calcular total de unidades por producto
ventas_producto <- datos %>%
  group_by(producto) %>%
  summarise(
    total_unidades = sum(unidades_vendidas, na.rm = TRUE),
    .groups = "drop"
  )

# 3️⃣ Seleccionar las 2 prendas menos vendidas
top2_menos <- ventas_producto %>%
  arrange(total_unidades) %>%
  slice_head(n = 2)

# 4️⃣ Extraer solo esas 2 prendas del dataset original
datos_top2 <- datos %>%
  filter(producto %in% top2_menos$producto)

# 5️⃣ Calcular ingresos totales de esas 2 prendas
ingresos_top2 <- sum(datos_top2$ventas_total, na.rm = TRUE)

# 6️⃣ Participación conjunta
participacion_top2 <- ingresos_top2 / total_ingresos_general

cat("Participación conjunta de las 2 prendas menos vendidas:",
    percent(participacion_top2), "\n\n")
## Participación conjunta de las 2 prendas menos vendidas: 26%
# 7️⃣ Participación individual
participacion_individual <- datos_top2 %>%
  group_by(producto) %>%
  summarise(
    ingresos_producto = sum(ventas_total, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    participacion = ingresos_producto / total_ingresos_general,
    participacion_formato = percent(participacion)
  )

participacion_individual
## # A tibble: 2 × 4
##   producto                 ingresos_producto participacion participacion_formato
##   <chr>                                <dbl>         <dbl> <chr>                
## 1 Men's Apparel                     16520632         0.137 13.7%                
## 2 Women's Athletic Footwe…          14315521         0.119 11.9%
total_ingresos_general <- sum(datos$ventas_total, na.rm = TRUE)

cat("El total de ingresos de la Empresa Adidas es de:",
    scales::dollar(total_ingresos_general))
## El total de ingresos de la Empresa Adidas es de: $120,166,650

Interpretacion:

Podemos observar que el producto Women’s Athletic Footwear tiene una menor participacion en ventas, sin embargo desde un punto de vista mas general se puede concluir que ambos productos analizados un porcentage reducido frente a los ingresos totales de Adidas. No obstante, un bajo nivel de participación no implica necesariamente baja rentabilidad. Es posible que, a pesar de venderse en menores cantidades, estos productos generen márgenes de contribución positivos y aporten a la utilidad de la empresa.

3.2 Participacion en utilidad.

total_utilidad_general <- sum(datos$utilidad_operativa, na.rm = TRUE)

total_utilidad_general
## [1] 47224968
utilidad_top2 <- datos %>%
  filter(producto %in% top2_menos$producto) %>%
  group_by(producto) %>%
  summarise(
    utilidad_producto = sum(utilidad_operativa, na.rm = TRUE)
  )

utilidad_top2
## # A tibble: 2 × 2
##   producto                  utilidad_producto
##   <chr>                                 <dbl>
## 1 Men's Apparel                      6381405.
## 2 Women's Athletic Footwear          5597822.
participacion_utilidad <- utilidad_top2 %>%
  mutate(
    participacion = utilidad_producto / total_utilidad_general
  )

participacion_utilidad
## # A tibble: 2 × 3
##   producto                  utilidad_producto participacion
##   <chr>                                 <dbl>         <dbl>
## 1 Men's Apparel                      6381405.         0.135
## 2 Women's Athletic Footwear          5597822.         0.119
participacion_utilidad %>%
  mutate(participacion = scales::percent(participacion))
## # A tibble: 2 × 3
##   producto                  utilidad_producto participacion
##   <chr>                                 <dbl> <chr>        
## 1 Men's Apparel                      6381405. 13.5%        
## 2 Women's Athletic Footwear          5597822. 11.9%

Interpretacion Una vez analizada la participación en ventas de ambos productos, es fundamental evaluar también su participación en la utilidad, ya que esto permite identificar no solo cuál se vende menos, sino cuál es menos rentable. Según la información proporcionada, Women’s Athletic Footwear es el producto con menor participación en la utilidad, lo que podría indicar un problema de rentabilidad asociado a costos elevados, un margen reducido o una estrategia comercial inadecuada.

3.3 Comparacion margen operativo

Interpretacion:

Si la barra está por encima de la línea roja → rentable Si está por debajo → poco rentable Los productos menos vendidos presentan un margen inferior al promedio de la empresa, lo que indica que no solo venden poco, sino que además aportan menor rentabilidad.

teniendo en cuenta que el promedio del margen operativo de la empresa es de:

margen_empresa <- sum(datos$utilidad_operativa, na.rm = TRUE) / 
                  sum(datos$ventas_total, na.rm = TRUE)

cat("El margen operativo de la empresa Adidas es de:",
    scales::percent(margen_empresa))
## El margen operativo de la empresa Adidas es de: 39%

4 ¿Existe relación entre el precio y las unidades vendidas?

Interpretacion

El análisis de la relación precio–unidades vendidas muestra una pendiente positiva, lo que indica que el precio no parece estar afectando negativamente la demanda. Esto sugiere que el bajo desempeño comercial de estos productos podría estar asociado a factores distintos al precio, como posicionamiento, canal de venta o estrategia comercial. Coeficiente de precio_unidad = 3.8285 Esto significa: Por cada aumento de 1 unidad monetaria en el precio, las unidades vendidas aumentan en aproximadamente 3.83 unidades.

5 Medidas de dispercion

5.1 Variabilidad en Ventas (Desviacion estandar)

datos_top2 %>%
  group_by(producto) %>%
  summarise(
    promedio_unidades = mean(unidades_vendidas, na.rm = TRUE),
    desviacion_estandar = sd(unidades_vendidas, na.rm = TRUE),
    minimo = min(unidades_vendidas, na.rm = TRUE),
    maximo = max(unidades_vendidas, na.rm = TRUE)
  )
## # A tibble: 2 × 5
##   producto                  promedio_unidades desviacion_estandar minimo maximo
##   <chr>                                 <dbl>               <dbl>  <dbl>  <dbl>
## 1 Men's Apparel                          191.                170.      6    925
## 2 Women's Athletic Footwear              198.                175.      0    925

Interpretacion Se puede observar que hay ciudades donde el minimo es de 6 y 0 unidades vendidas de estos productos pero que tambien hay ciudades donde el maximo es de 925 quiere decir que hay ciudades donde se venden en una proporcion significativamente mayor,ademas ambos productos se encuentran muy por debajo del promedio de unidades vendidas validando que las prendas tiene muy baja rotacion.

5.2 coeficiente de variacion

datos_top2 %>%
  group_by(producto) %>%
  summarise(
    promedio = mean(unidades_vendidas, na.rm = TRUE),
    desviacion = sd(unidades_vendidas, na.rm = TRUE),
    coef_variacion = sd(unidades_vendidas, na.rm = TRUE) /
                     mean(unidades_vendidas, na.rm = TRUE)
  )
## # A tibble: 2 × 4
##   producto                  promedio desviacion coef_variacion
##   <chr>                        <dbl>      <dbl>          <dbl>
## 1 Men's Apparel                 191.       170.          0.890
## 2 Women's Athletic Footwear     198.       175.          0.885

Interpretacion CV < 0.20 → ventas estables 0.20 – 0.50 → variabilidad moderada CV> 0.50→ alta inestabilidad Ambos productos tienen un CV cercano al 90% Significa que las ventas son extremadamente variables entre ciudades, son productos inestables regionalmente esto se puede deber a un problema de segmentacion Distribución, Precio , Perfil de consumidor o Marketing localizado.

6 Grafico de boxplot.

grafico_var <- ggplot(datos_top2,
       aes(x = producto,
           y = unidades_vendidas,
           fill = producto,
           text = paste("Producto:", producto,
                        "<br>Unidades:", unidades_vendidas))) +
  geom_boxplot(alpha = 0.6) +
  theme_minimal() +
  labs(title = "Variabilidad de Ventas por Producto",
       x = "Producto",
       y = "Unidades Vendidas")

ggplotly(grafico_var, tooltip = "text")

Interpretacion del boxplot: Los productos presentan una alta variabilidad en ventas entre ciudades, evidenciada por amplios rangos intercuartílicos y presencia de valores atípicos superiores. Esto sugiere que el bajo desempeño general está concentrado en mercados específicos, mientras que en otras regiones existe una demanda significativa.

La presencia de puntos atipicos es decir donde las ventas fueron mucho más altas que en la mayoría de ciudades. esto podria signoficar que el producto puede funcionar muy bien en ciertos mercados.

7 Conclusiones del Analisis:

  • Despues de haber realizado el analisis exploratorio y diagnostico se concluye que los productos Men’s Apparel y Women’s Athletic Footwear clasificadas con un bajo desempeño presentan un rendimiento inferior en términos de ventas y rotación, especialmente en el canal In-store,ademas las ventas son demasiado inestables y muestran alta variablidad segun la region y ciudad. En relación con el precio, uno de los factores más relevantes , se observó que no existe una relación negativa con las cantidades vendidas. Por el contrario, la relación identificada es positiva, lo que sugiere que el precio no sería la causa principal del bajo desempeño.

Entonces, esto nos lleva a pensar que las razones principales por las cuales estos productos tienen esta tendencia puede ser probablemente:

  • Costos elevados que reducen el margen de rentabilidad.

  • Una estrategia de organización y exhibición inadecuada en el canal físico (In-store).

  • Problemas de segmentación del mercado.

  • Un perfil de consumidor poco alineado con la propuesta del producto.

  • Deficiencias en la estrategia de marketing.

  • Baja demanda en determinadas regiones o ciudades.

7.1 Recomendaciones Estrategicas:

  • Luego de haber observado que las ventas son muy variables y que en algunas ciudades se vende en proporciones mucho mayores que otras, se recomienda analizar las estrategias comerciales implementadas en los puntos de mayor desempeño. Esto permitiría identificar buenas prácticas y utilizar esos modelos como referencia para replicarlos en las ciudades con menor rendimiento.

  • Asimismo, considerando que una de las principales causas de la baja rentabilidad podría estar asociada a costos elevados, resulta oportuno implementar un sistema de seguimiento y control que permita optimizar la estructura de costos y evitar incrementos que afecten el margen operativo.

  • Realizar un estudio del perfil del consumidor local con el fin de adaptar el surtido de productos a las características y preferencias específicas de cada mercado

  • Estrategia de marketing, impulsando las ventas a traves de campañas llamativas teniendo como prioridad estas dos prendas priorizando acciones promocionales y comunicación estratégica que aumenten su visibilidad y atractivo.

  • Finalmente, se propone una reorganización en las tiendas físicas, mejorando la ubicación y exhibición de los productos para incrementar su visibilidad y capacidad de captar la atención del cliente.