INTRODUCCIÓN

El presente análisis tiene como propósito comprender el comportamiento de las ventas y la rentabilidad de Adidas a partir de la información disponible en la base de datos. Para ello, se desarrolla un análisis descriptivo y diagnóstico de variables relacionadas con el desempeño comercial y financiero de la empresa, considerando aspectos como el precio por unidad, las unidades vendidas, las ventas totales, la utilidad operativa y el margen operativo.

El análisis también contempla la comparación del desempeño entre diferentes segmentos de la operación, con el fin de identificar patrones, diferencias y relaciones relevantes que permitan comprender el comportamiento observado en las ventas y la rentabilidad.

ANÁLISIS DESCRIPTIVO Y DIAGNÓSTICO

El análisis exploratorio de datos (EDA) busca comprender el comportamiento de las ventas y la rentabilidad de Adidas a partir de la información disponible en la base de datos. Para ello, se examinan las principales variables financieras y comerciales, con el propósito de identificar patrones, diferencias y comportamientos relevantes entre las distintas dimensiones de la información. Estos hallazgos servirán como base para profundizar posteriormente en las posibles causas de los resultados observados.

Instalar y cargar librerias

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

Cargue, Revisión y preparación de los datos

# Cargar datos desde el archivo Excel
datos_col <- read_excel("C:/Users/Pcs/Desktop/Maestria Finanzas/Analitica de negocios/Modulo I/Actividad caso 1/DatosCaso1.xlsx", 
    col_types = c("text", "text", "text", 
        "text", "text", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text"))

# Ver las primeras filas de los datos
head(datos_col)
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
# Revisar estructura y tipos de variables
class(datos_col)
## [1] "tbl_df"     "tbl"        "data.frame"
colnames(datos_col)
##  [1] "distribuidor"       "region"             "estado"            
##  [4] "ciudad"             "producto"           "precio_unidad"     
##  [7] "unidades_vendidas"  "ventas_total"       "utilidad_operativa"
## [10] "margen_operativo"   "metodo_venta"
# Revisar dimensiones de la base
dim(datos_col)
## [1] 9648   11
# Revisar valores faltantes
colSums(is.na(datos_col))
##       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
# Revisar registros duplicados
sum(duplicated(datos_col))
## [1] 262
# Identificar registros inconsistentes
registros_inconsistentes <- datos_col %>%
  filter(
    unidades_vendidas == 0 &
    ventas_total == 0 &
    utilidad_operativa == 0 &
    margen_operativo > 0
  )

# Cantidad de registros inconsistentes
nrow(registros_inconsistentes)
## [1] 4
# Revisar los registros inconsistentes
registros_inconsistentes %>%
  select(
    distribuidor,
    region,
    estado,
    ciudad,
    producto,
    precio_unidad,
    unidades_vendidas,
    ventas_total,
    utilidad_operativa,
    margen_operativo,
    metodo_venta
  )
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
# Eliminar únicamente los registros inconsistentes
datos_col <- datos_col %>%
  filter(
    !(unidades_vendidas == 0 &
      ventas_total == 0 &
      utilidad_operativa == 0 &
      margen_operativo > 0)
  )

# Verificar las dimensiones después de la limpieza
dim(datos_col)
## [1] 9644   11

Indicadores de centralidad y dispersión

# Resumen estadístico de las variables financieras
resumen <- datos_col %>%
  select(
    precio_unidad,
    unidades_vendidas,
    ventas_total,
    utilidad_operativa,
    margen_operativo
  ) %>%
  summary()

resumen
##  precio_unidad    unidades_vendidas  ventas_total   utilidad_operativa
##  Min.   :  7.00   Min.   :   6      Min.   :  160   Min.   :   75.2   
##  1st Qu.: 35.00   1st Qu.: 106      1st Qu.: 4068   1st Qu.: 1754.0   
##  Median : 45.00   Median : 176      Median : 7812   Median : 3264.0   
##  Mean   : 45.22   Mean   : 257      Mean   :12460   Mean   : 4896.8   
##  3rd Qu.: 55.00   3rd Qu.: 350      3rd Qu.:15872   3rd Qu.: 6193.8   
##  Max.   :110.00   Max.   :1275      Max.   :82500   Max.   :39000.0   
##  margen_operativo
##  Min.   :0.100   
##  1st Qu.:0.350   
##  Median :0.410   
##  Mean   :0.423   
##  3rd Qu.:0.490   
##  Max.   :0.800
# Desviación estándar de las variables financieras
desviacion_estandar <- datos_col %>%
  summarise(
    desviacion_precio = sd(precio_unidad, na.rm = TRUE),
    desviacion_unidades = sd(unidades_vendidas, na.rm = TRUE),
    desviacion_ventas = sd(ventas_total, na.rm = TRUE),
    desviacion_utilidad = sd(utilidad_operativa, na.rm = TRUE),
    desviacion_margen = sd(margen_operativo, na.rm = TRUE)
  )

desviacion_estandar
desviacion_precio desviacion_unidades desviacion_ventas desviacion_utilidad desviacion_margen
14.70557 214.2325 12716.5 4866.452 0.0972023

Interpretación de los indicadores

Los indicadores de centralidad muestran que las ventas totales y la utilidad operativa presentan una diferencia considerable entre la media y la mediana. Esto indica que existen registros con valores elevados que incrementan el promedio. En contraste, el precio por unidad y el margen operativo presentan valores de media y mediana relativamente cercanos, lo que indica una menor diferencia entre sus medidas de tendencia central.

La desviación estándar permite complementar este análisis al mostrar una mayor variabilidad en las ventas y la utilidad operativa, mientras que el precio por unidad presenta una dispersión menor. En consecuencia, estas variables constituyen elementos relevantes para profundizar el análisis del comportamiento comercial y de la rentabilidad de Adidas.

Gráfico de barras - Ventas y unidades vendidas por región

# Crear gráfico combinado: Resumen de ventas y unidades vendidas por región

resumen_region <- datos_col %>%
  group_by(region) %>%
  summarise(
    ventas = sum(ventas_total, na.rm = TRUE),
    unidades_vendidas = sum(unidades_vendidas, na.rm = TRUE)
  )

resumen_region
region ventas unidades_vendidas
Midwest 16674434 391337
Northeast 25078267 501279
South 20603356 492260
Southeast 21374436 407000
West 36436157 686985
# Gráfico combinado: ventas y unidades vendidas por región

grafico_ventas_unidades <- resumen_region %>%
  plot_ly(
    x = ~region,
    y = ~ventas,
    type = "bar",
    name = "Ventas",
    hovertemplate = paste(
      "<b>%{x}</b><br>",
      "Ventas: %{y:,.0f}<extra></extra>"
    ),
    marker = list(
      color = "#9FBFD3"
    )
  ) %>%
  
  add_trace(
    y = ~unidades_vendidas,
    type = "scatter",
    mode = "lines+markers",
    name = "Unidades vendidas",
    yaxis = "y2",
    hovertemplate = paste(
      "<b>%{x}</b><br>",
      "Unidades vendidas: %{y:,.0f}<extra></extra>"
    ),
    line = list(
      color = "#2F5D7E"
    ),
    marker = list(
      color = "#2F5D7E"
    )
  ) %>%
  
  layout(
    
    # Título
    title = list(
      text = "<b>Figura 1. Ventas totales y unidades vendidas por región</b>",
      x = 0.5,
      xanchor = "center"
    ),
    
    # Eje X
    xaxis = list(
      title = "Región"
    ),
    
    # Eje Y principal
    yaxis = list(
      title = "Ventas totales (USD)",
      separatethousands = TRUE
    ),
    
    # Eje Y secundario
    yaxis2 = list(
      title = "Unidades vendidas",
      overlaying = "y",
      side = "right",
      separatethousands = TRUE
    ),
    
    # Leyenda
    legend = list(
      orientation = "h",
      x = 0.5,
      xanchor = "center",
      y = 1.05
    ),
    
    # Márgenes
    margin = list(
      t = 90,
      b = 120,
      l = 80,
      r = 80
    ),
    
    # Fuente
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.28,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(
          size = 10
        )
      )
    ),
    # Interacción al pasar el cursor
    hovermode = "x unified"
  )
# Mostrar el gráfico

grafico_ventas_unidades

El análisis de las ventas totales y las unidades vendidas por región muestra diferencias importantes entre las regiones. West concentra el mayor volumen comercial, tanto en ventas como en unidades vendidas, mientras que Midwest presenta los niveles más bajos en ambos indicadores. Northeast y South presentan niveles intermedios, mientras que Southeast registra un menor volumen de unidades vendidas frente a South, aunque sus ventas totales son ligeramente superiores.

Gráfico de torat-%Participación utilidad operacional

# Crear el resumen de utilidad operativa por región

utilidad_region <- datos_col %>%
  group_by(region) %>%
  summarise(
    utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE)
  ) %>%
  mutate(
    participacion = utilidad_operativa / sum(utilidad_operativa) * 100
  ) %>%
  arrange(desc(participacion))

# Crear gráfico de anillo: Participación de la utilidad operativa por región

grafico_anillo_utilidad <- utilidad_region %>%
  plot_ly(
    labels = ~region,
    values = ~participacion,
    type = "pie",
    hole = 0.5,
    textinfo = "label+percent",
    textposition = "outside",
    hoverinfo = "label+value+percent",
    marker = list(
      colors = c(
        "#2F5D7E",
        "#5B88A9",
        "#86ACC5",
        "#B0C8D8",
        "#D4E2EB"
      )
    )
  ) %>%
  layout(
    title = "Figura 2. Participación de la utilidad operativa por región",
    showlegend = FALSE,
    margin = list(
      t = 80,
      b = 100,
      l = 60,
      r = 60
    ),
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1.Adidas",
        x = 0,
        y = -0.25,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico

grafico_anillo_utilidad

La participación de la utilidad operativa muestra que West concentra la mayor proporción de la utilidad operativa total, con un 27,6%, seguida de Northeast con un 20,6% y South con un 19,5%. Southeast representa el 17,8%, mientras que Midwest presenta la menor participación, con un 14,5%.

Estos resultados muestran que West no solo concentra el mayor volumen de ventas y unidades vendidas, sino que también representa la mayor participación de la utilidad operativa total. Sin embargo, este resultado refleja el aporte absoluto de cada región a la utilidad y no necesariamente su eficiencia o rentabilidad relativa. Por esta razón, el análisis del margen de utilidad operativa permite complementar esta conclusión.

Gráfico de barras-Margen operativo por región (%)

# Calcular el margen operativo por región (%)

margen_region <- datos_col %>%
  group_by(region) %>%
  summarise(
    ventas = sum(ventas_total, na.rm = TRUE),
    utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE)
  ) %>%
  mutate(
    margen_utilidad = (utilidad_operativa / ventas) * 100
  ) %>%
  arrange(desc(margen_utilidad))

margen_region
region ventas utilidad_operativa margen_utilidad
South 20603356 9221605 44.75778
Midwest 16674434 6859945 41.14050
Southeast 21374436 8393059 39.26681
Northeast 25078267 9732774 38.80960
West 36436157 13017584 35.72710
# Crear gráfico de margen operativo por región (%)

grafico_margen_utilidad <- margen_region %>%
  plot_ly(
    x = ~margen_utilidad,
    y = ~reorder(region, margen_utilidad),
    type = "bar",
    orientation = "h",
    marker = list(
      color = ~margen_utilidad,
      colorscale = list(
        c(0, "#D4E2EB"),
        c(0.5, "#86ACC5"),
        c(1, "#2F5D7E")
      )
    ),
    text = ~paste0(round(margen_utilidad, 1), "%"),
    textposition = "outside",
    hovertemplate = paste(
      "<b>%{y}</b><br>",
      "Margen de utilidad operativa: %{x:.1f}%",
      "<extra></extra>"
    )
  ) %>%
  layout(
    title = "Figura 3. Margen operativo por región (%)",
    
    xaxis = list(
      title = "Margen operativo por región (%)",
      ticksuffix = "%"
    ),
    
    yaxis = list(
      title = ""
    ),
    
    showlegend = FALSE,
    
    margin = list(
      t = 80,
      b = 120,
      l = 80,
      r = 80
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.25,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )


# Mostrar el gráfico

grafico_margen_utilidad

El análisis del margen operativo evidencia un comportamiento diferente al observado en el volumen de ventas y en la participación de la utilidad. South presenta el mayor margen operativo, con 44,8%, seguida de Midwest con 41,1%. Por su parte, West registra el menor margen, con 35,7%, a pesar de ser la región con mayor volumen de ventas, unidades vendidas y participación en la utilidad operativa.

Este resultado muestra que un mayor volumen de ventas no necesariamente se traduce en una mayor rentabilidad relativa. Mientras West se destaca por su escala comercial y su aporte a la utilidad total, South presenta una mayor eficiencia en la generación de utilidad respecto a sus ventas. Esta diferencia constituye un hallazgo relevante que requiere profundizar en el comportamiento de otras variables para identificar posibles factores asociados.

Gráfico de histograma - Distribución del precio por unidad

# Histograma de la distribución del precio por unidad

grafico_precio <- plot_ly(
  datos_col,
  x = ~precio_unidad,
  type = "histogram",
  xbins = list(
    size = 5
  ),
  marker = list(
    color = "#B0C8D8"
  ),
  hovertemplate = paste(
    "<b>Precio: %{x}</b><br>",
    "Frecuencia: %{y}<extra></extra>"
  )
) %>%
  layout(
    title = "Figura 4. Distribución del precio por unidad",
    
    xaxis = list(
      title = "Precio por unidad (USD)"
    ),
    
    yaxis = list(
      title = "Frecuencia"
    ),
    
    bargap = 0.05,
    
    margin = list(
      t = 80,
      b = 100,
      l = 80,
      r = 60
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.25,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico
grafico_precio

El histograma muestra que los precios por unidad se concentran principalmente entre USD 35 y USD 55, con una mayor frecuencia alrededor de USD 40–45. A medida que el precio supera los USD 55, la frecuencia de los registros disminuye, aunque se presentan algunos valores de hasta aproximadamente USD 110, evidenciando una cola hacia precios superiores. En general, la concentración de los registros alrededor de USD 45 es consistente con una media de USD 45,22 y una mediana de USD 45.

Grafico Boxplot - Ventas totales

# Crear boxplot de las ventas totales

grafico_boxplot_ventas <- plot_ly(
  datos_col,
  y = ~ventas_total,
  type = "box",
  marker = list(
    color = "#9FBFD3"
  ),
  hovertemplate = paste(
    "Ventas: %{y:$,.0f} USD<extra></extra>"
  )
) %>%
  layout(
    title = "Figura 5. Distribución de las ventas totales",
    
    yaxis = list(
      title = "Ventas totales (USD)",
      separatethousands = TRUE
    ),
    
   xaxis = list(
  title = "",
  showticklabels = FALSE
),
    
    showlegend = FALSE,
    
    margin = list(
      t = 80,
      b = 100,
      l = 80,
      r = 60
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.20,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico
grafico_boxplot_ventas

Las ventas totales evidencia una alta dispersión de los registros y la presencia de numerosos valores atípicos por encima del límite superior. La mediana se ubica alrededor de USD 7.812, mientras que algunos registros alcanzan valores superiores a USD 80.000. Estos valores elevados ayudan a explicar la diferencia entre la media y la mediana observada anteriormente, indicando que el promedio de ventas está influenciado por registros con valores excepcionalmente altos.

Grafico Boxplot - utilidad operativa

# Crear boxplot de la utilidad operativa

grafico_boxplot_utilidad <- plot_ly(
  datos_col,
  y = ~utilidad_operativa,
  type = "box",
  marker = list(
    color = "#9FBFD3"
  ),
  hovertemplate = paste(
    "Utilidad operativa: %{y:$,.0f} USD<extra></extra>"
  )
) %>%
  layout(
    title = "Figura 6. Distribución de la utilidad operativa",
    
    yaxis = list(
      title = "Utilidad operativa (USD)",
      separatethousands = TRUE
    ),
    
    xaxis = list(
      title = "",
      showticklabels = FALSE
    ),
    
    showlegend = FALSE,
    
    margin = list(
      t = 80,
      b = 100,
      l = 80,
      r = 60
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.25,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico
grafico_boxplot_utilidad

La utilidad operativa presenta una alta dispersión y una distribución sesgada hacia la derecha, evidenciada por la presencia de numerosos valores atípicos por encima del límite superior. La mediana se ubica alrededor de USD 3.264, mientras que algunos registros alcanzan valores cercanos a USD 39.000. Estos valores elevados contribuyen a que la media (USD 4.896,8) sea superior a la mediana, indicando que el promedio de utilidad está influenciado por registros con resultados excepcionalmente altos.

Gráfico de calor - Correlación entre variables financieras

# Crear gráfico interactivo con correlación
# Seleccionar las variables numéricas para el análisis
datos_correlacion <- datos_col %>%
  select(
    precio_unidad,
    unidades_vendidas,
    ventas_total,
    utilidad_operativa,
    margen_operativo
  )

# Calcular la matriz de correlación
matriz_correlacion <- cor(
  datos_correlacion,
  use = "complete.obs"
)

# Mostrar la matriz de correlación
round(matriz_correlacion, 2)
##                    precio_unidad unidades_vendidas ventas_total
## precio_unidad               1.00              0.27         0.54
## unidades_vendidas           0.27              1.00         0.92
## ventas_total                0.54              0.92         1.00
## utilidad_operativa          0.50              0.87         0.94
## margen_operativo           -0.14             -0.31        -0.30
##                    utilidad_operativa margen_operativo
## precio_unidad                    0.50            -0.14
## unidades_vendidas                0.87            -0.31
## ventas_total                     0.94            -0.30
## utilidad_operativa               1.00            -0.05
## margen_operativo                -0.05             1.00
# Crear gráfico de calor

grafico_calor <- plot_ly(
  x = colnames(matriz_correlacion),
  y = rownames(matriz_correlacion),
  z = matriz_correlacion,
  type = "heatmap",
  colorscale = list(
    c(0, "#D4E2EB"),
    c(0.5, "#86ACC5"),
    c(1, "#2F5D7E")
  ),
  text = round(matriz_correlacion, 2),
  texttemplate = "%{text}",
  hovertemplate = paste(
    "<b>%{y}</b> vs <b>%{x}</b><br>",
    "Correlación: %{z:.2f}",
    "<extra></extra>"
  )
) %>%
  layout(
    title = "Figura 7. Correlación entre variables financieras",
    xaxis = list(
      title = ""
    ),
    yaxis = list(
      title = ""
    ),
    margin = list(
      t = 80,
      b = 100,
      l = 120,
      r = 80
    ),
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.32,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico
grafico_calor

El análisis de correlación evidencia una relación positiva muy fuerte entre las ventas totales y la utilidad operativa (0,94), lo que indica que los registros con mayores niveles de ventas tienden a presentar también mayores niveles de utilidad. Asimismo, las unidades vendidas presentan una fuerte relación positiva con las ventas totales (0,92) y con la utilidad operativa (0,87), evidenciando una estrecha asociación entre el volumen de unidades y el desempeño comercial y operativo. Por otra parte, el precio por unidad presenta una relación positiva moderada con las ventas totales (0,54) y con la utilidad operativa (0,50), mientras que su relación con las unidades vendidas es positiva pero débil (0,27), por lo que en esta base no se observa evidencia de que precios más altos estén asociados con un menor volumen de ventas. Sin embargo, esta relación débil no permite establecer una relación causal. Finalmente, el margen operativo presenta relaciones negativas débiles con las unidades vendidas (-0,31) y las ventas totales (-0,30), lo que sugiere que un mayor volumen comercial no necesariamente se traduce en un mayor margen porcentual.

Análisis del desempeño por producto

# Resumen de ventas, utilidad y margen por producto

resumen_producto <- datos_col %>%
  group_by(producto) %>%
  summarise(
    ventas = sum(ventas_total, na.rm = TRUE),
    unidades = sum(unidades_vendidas, na.rm = TRUE),
    utilidad = sum(utilidad_operativa, na.rm = TRUE)
  ) %>%
  mutate(
    margen = (utilidad / ventas) * 100
  ) %>%
  arrange(desc(utilidad))

resumen_producto
producto ventas unidades utilidad margen
Men’s Street Footwear 27680769 593320 11629046 42.01128
Women’s Apparel 23870985 433827 9685221 40.57319
Men’s Athletic Footwear 20577180 435526 7437457 36.14420
Women’s Street Footwear 17201563 392269 6494017 37.75248
Men’s Apparel 16520632 306683 6381405 38.62688
Women’s Athletic Footwear 14315521 317236 5597822 39.10317

Gráfico combinado - utilidad y margen operativo por producto

# Resumen de utilidad y margen operativo por producto

producto_resumen <- datos_col %>%
  group_by(producto) %>%
  summarise(
    utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
    ventas = sum(ventas_total, na.rm = TRUE)
  ) %>%
  mutate(
    margen_operativo = (utilidad_operativa / ventas) * 100
  ) %>%
  arrange(desc(utilidad_operativa))

producto_resumen
producto utilidad_operativa ventas margen_operativo
Men’s Street Footwear 11629046 27680769 42.01128
Women’s Apparel 9685221 23870985 40.57319
Men’s Athletic Footwear 7437457 20577180 36.14420
Women’s Street Footwear 6494017 17201563 37.75248
Men’s Apparel 6381405 16520632 38.62688
Women’s Athletic Footwear 5597822 14315521 39.10317
# Gráfico combinado: utilidad operativa y margen operativo

grafico_producto <- producto_resumen %>%
  plot_ly(
    x = ~reorder(producto, utilidad_operativa),
    y = ~utilidad_operativa,
    type = "bar",
    name = "Utilidad operativa",
    marker = list(
      color = "#9FBFD3"
    ),
    hovertemplate = paste(
      "<b>%{x}</b><br>",
      "Utilidad operativa: USD %{y:,.0f}",
      "<extra></extra>"
    )
  ) %>%
  add_trace(
    x = ~reorder(producto, utilidad_operativa),
    y = ~margen_operativo,
    type = "scatter",
    mode = "lines+markers",
    name = "Margen operativo",
    yaxis = "y2",
    line = list(
      color = "#2F5D7E"
    ),
    marker = list(
      color = "#2F5D7E"
    ),
    hovertemplate = paste(
      "<b>%{x}</b><br>",
      "Margen operativo: %{y:.1f}%",
      "<extra></extra>"
    )
  ) %>%
  layout(
    
    title = list(
      text = "<b>Figura 8. Utilidad y margen operativo por producto</b>",
      x = 0.5,
      xanchor = "center"
    ),
    
    xaxis = list(
      title = "Producto",
      tickangle = -25
    ),
    
    yaxis = list(
      title = "Utilidad operativa (USD)",
      separatethousands = TRUE
    ),
    
    yaxis2 = list(
      title = "Margen operativo (%)",
      overlaying = "y",
      side = "right",
      ticksuffix = "%"
    ),
    
    legend = list(
      orientation = "h",
      x = 0.5,
      xanchor = "center",
      y = 1.05
    ),
    
    margin = list(
      t = 90,
      b = 150,
      l = 80,
      r = 80
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.45,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    ),
    
    hovermode = "x unified"
  )

# Mostrar el gráfico

grafico_producto

Al analizar conjuntamente la utilidad y el margen operativo por producto, se observa que Men’s Street Footwear presenta el desempeño más favorable en estas dos dimensiones, al registrar la mayor utilidad operativa y el margen más alto, cercano al 42%. También destaca Women’s Apparel, con una utilidad elevada y un margen aproximado de 40,6%. En contraste, Men’s Athletic Footwear presenta el margen más bajo, con 36,1%, pese a generar una utilidad operativa superior a la de algunos productos. Estos resultados muestran que un mayor nivel de utilidad no necesariamente implica un mayor margen operativo y que el desempeño debe evaluarse considerando conjuntamente la escala y la rentabilidad relativa.

Análisis del desempeño por método de venta

# Resumen de ventas, utilidad y margen por método de venta

resumen_metodo <- datos_col %>%
  group_by(metodo_venta) %>%
  summarise(
    ventas = sum(ventas_total, na.rm = TRUE),
    unidades = sum(unidades_vendidas, na.rm = TRUE),
    utilidad = sum(utilidad_operativa, na.rm = TRUE)
  ) %>%
  mutate(
    margen = (utilidad / ventas) * 100
  ) %>%
  arrange(desc(utilidad))

resumen_metodo
metodo_venta ventas unidades utilidad margen
Online 44965657 939093 19552538 43.48327
Outlet 39536618 849778 14913301 37.72022
In-store 35664375 689990 12759129 35.77556
## **Gráfico combinado: utilidad y margen por método de venta**

metodo_venta_resumen <- datos_col %>%
  group_by(metodo_venta) %>%
  summarise(
    utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
    ventas = sum(ventas_total, na.rm = TRUE)
  ) %>%
  mutate(
    margen_operativo = (utilidad_operativa / ventas) * 100
  ) %>%
  arrange(desc(utilidad_operativa))

metodo_venta_resumen
metodo_venta utilidad_operativa ventas margen_operativo
Online 19552538 44965657 43.48327
Outlet 14913301 39536618 37.72022
In-store 12759129 35664375 35.77556
grafico_metodo_venta <- metodo_venta_resumen %>%
  plot_ly(
    x = ~metodo_venta,
    y = ~utilidad_operativa,
    type = "bar",
    name = "Utilidad operativa",
    marker = list(
      color = "#9FBFD3"
    ),
    hovertemplate = paste(
      "<b>%{x}</b><br>",
      "Utilidad operativa: USD %{y:,.0f}",
      "<extra></extra>"
    )
  ) %>%
  add_trace(
    x = ~metodo_venta,
    y = ~margen_operativo,
    type = "scatter",
    mode = "lines+markers",
    name = "Margen operativo",
    yaxis = "y2",
    line = list(
      color = "#2F5D7E"
    ),
    marker = list(
      color = "#2F5D7E"
    ),
    hovertemplate = paste(
      "<b>%{x}</b><br>",
      "Margen operativo: %{y:.1f}%",
      "<extra></extra>"
    )
  ) %>%
  layout(
    
    title = list(
      text = "<b>Figura 9. Utilidad y margen operativo por método de venta</b>",
      x = 0.5,
      xanchor = "center"
    ),
    
    xaxis = list(
      title = "Método de venta"
    ),
    
    yaxis = list(
      title = "Utilidad operativa (USD)",
      separatethousands = TRUE
    ),
    
    yaxis2 = list(
      title = "Margen operativo (%)",
      overlaying = "y",
      side = "right",
      ticksuffix = "%"
    ),
    
    legend = list(
      orientation = "h",
      x = 0.5,
      xanchor = "center",
      y = 1.05
    ),
    
    margin = list(
      t = 90,
      b = 120,
      l = 80,
      r = 80
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.30,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    ),
    
    hovermode = "x unified"
  )

# Mostrar el gráfico
grafico_metodo_venta

Al analizar conjuntamente la utilidad y el margen operativo por método de venta, se observa que Online presenta el desempeño más favorable, con una utilidad operativa de aproximadamente USD 19,6 millones y un margen del 43,5%. Outlet presenta resultados intermedios, mientras que In-store registra la menor utilidad operativa (USD 12,8 millones) y el menor margen (35,8%). En esta base de datos, el canal Online concentra el mayor volumen de ventas y, simultáneamente, presenta los mayores niveles de utilidad y margen operativo, lo que lo posiciona como el método de venta de mejor desempeño.

Margen operativo por región y producto

# Calcular el margen operativo por región y producto

diagnostico_region_producto <- datos_col %>%
  group_by(region, producto) %>%
  summarise(
    ventas = sum(ventas_total, na.rm = TRUE),
    utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    margen_operativo = (utilidad_operativa / ventas) * 100
  )

diagnostico_region_producto
region producto ventas utilidad_operativa margen_operativo
Midwest Men’s Apparel 2223786 937479.3 42.15690
Midwest Men’s Athletic Footwear 2619289 970070.7 37.03565
Midwest Men’s Street Footwear 4707360 1948621.5 41.39521
Midwest Women’s Apparel 3453008 1585771.9 45.92436
Midwest Women’s Athletic Footwear 1673543 659186.7 39.38869
Midwest Women’s Street Footwear 1997448 758815.2 37.98923
Northeast Men’s Apparel 3475037 1183786.1 34.06542
Northeast Men’s Athletic Footwear 3895862 1474713.4 37.85333
Northeast Men’s Street Footwear 6841324 3030663.5 44.29937
Northeast Women’s Apparel 5045208 1917008.3 37.99662
Northeast Women’s Athletic Footwear 2668013 976505.5 36.60048
Northeast Women’s Street Footwear 3152823 1150097.2 36.47833
South Men’s Apparel 2811194 1102713.3 39.22580
South Men’s Athletic Footwear 3647045 1504995.5 41.26616
South Men’s Street Footwear 4048261 1738371.9 42.94120
South Women’s Apparel 4224937 2199137.0 52.05136
South Women’s Athletic Footwear 2629097 1277839.1 48.60373
South Women’s Street Footwear 3242822 1398548.5 43.12751
Southeast Men’s Apparel 3183237 1147871.7 36.05989
Southeast Men’s Athletic Footwear 3653645 1333466.5 36.49688
Southeast Men’s Street Footwear 4693836 2003885.7 42.69186
Southeast Women’s Apparel 4109786 1887044.9 45.91589
Southeast Women’s Athletic Footwear 2674048 976673.4 36.52415
Southeast Women’s Street Footwear 3059884 1044116.8 34.12276
West Men’s Apparel 4827378 2009554.9 41.62829
West Men’s Athletic Footwear 6761339 2154210.9 31.86071
West Men’s Street Footwear 7389988 2907503.0 39.34381
West Women’s Apparel 7038046 2096258.4 29.78466
West Women’s Athletic Footwear 4670820 1707617.8 36.55927
West Women’s Street Footwear 5748586 2142439.1 37.26898

Grafico de calor: margen operativo por región y producto

# Crear grafico de calor del margen operativo por región y producto

grafico_calor_region_producto <- diagnostico_region_producto %>%
  plot_ly(
    x = ~producto,
    y = ~region,
    z = ~margen_operativo,
    type = "heatmap",
    text = ~paste(
      "<b>Región:</b>", region,
      "<br><b>Producto:</b>", producto,
      "<br><b>Margen operativo:</b>", round(margen_operativo, 1), "%"
    ),
    hoverinfo = "text",
    colorscale = list(
      c(0, "#D4E2EB"),
      c(0.5, "#86ACC5"),
      c(1, "#2F5D7E")
    )
  ) %>%
  layout(
    
    title = list(
      text = "<b>Figura 10. Margen operativo por región y producto</b>",
      x = 0.5,
      xanchor = "center"
    ),
    
    xaxis = list(
      title = "Producto"
    ),
    
    yaxis = list(
      title = "Región"
    ),
    
    margin = list(
      t = 90,
      b = 150,
      l = 90,
      r = 80
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.55,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico

grafico_calor_region_producto

El análisis del margen operativo por región y producto evidencia diferencias en la rentabilidad según la combinación de ambas variables. South presenta, en general, los márgenes más altos, destacándose especialmente en Women’s Apparel, mientras que West presenta niveles relativamente menores en varios productos. Esto indica que el desempeño de un mismo producto varía entre regiones, por lo que la rentabilidad debe analizarse considerando conjuntamente el producto y la región.

Grafico combinado - margen operativo por región y método de venta

## **Margen operativo (%) según región y método de venta**

diagnostico_region_metodo <- datos_col %>%
  group_by(region, metodo_venta) %>%
  summarise(
    ventas_total = sum(ventas_total, na.rm = TRUE),
    utilidad_operativa = sum(utilidad_operativa, na.rm = TRUE),
    margen_operativo = (utilidad_operativa / ventas_total) * 100,
    .groups = "drop"
  )

# Crear gráfico de calor
grafico_calor_region_metodo <- diagnostico_region_metodo %>%
  plot_ly(
    x = ~metodo_venta,
    y = ~region,
    z = ~margen_operativo,
    type = "heatmap",
    
    text = ~paste(
      "<b>Región:</b> ", region,
      "<br><b>Método de venta:</b> ", metodo_venta,
      "<br><b>Margen operativo:</b> ",
      round(margen_operativo, 1), "%"
    ),
    
    hoverinfo = "text",
    
    colorscale = list(
      c(0, "#D4E2EB"),
      c(0.5, "#86ACC5"),
      c(1, "#2F5D7E")
    ),
    
    showscale = TRUE,
    
    colorbar = list(
      title = "Margen (%)"
    )
  ) %>%
  layout(
    title = "Figura 11. Margen operativo (%) según región y método de venta",
    
    xaxis = list(
      title = "Método de venta"
    ),
    
    yaxis = list(
      title = "Región"
    ),
    
    margin = list(
      t = 80,
      b = 100,
      l = 80,
      r = 80
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.25,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

# Mostrar el gráfico
grafico_calor_region_metodo

El análisis del margen operativo según región y método de venta evidencia que el canal Online presenta el mayor margen operativo en las cinco regiones analizadas. El resultado más destacado corresponde a Northeast, donde el canal Online alcanza un margen de 48,6%. Este comportamiento consistente evidencia un mejor desempeño relativo del canal Online frente a los demás métodos de venta en términos de margen operativo, aunque la magnitud del margen varía según la región.

Grafico de dispersión - relación entre precio y margen operativo

# Crear gráfico de dispersión entre precio y margen operativo

grafico_precio_margen <- datos_col %>%
  plot_ly(
    x = ~precio_unidad,
    y = ~margen_operativo,
    type = "scatter",
    mode = "markers",
    
    text = ~paste(
      "<b>Producto:</b> ", producto,
      "<br><b>Precio:</b> USD ", precio_unidad,
      "<br><b>Margen operativo:</b> ",
      round(margen_operativo * 100, 1), "%"
    ),
    
    hoverinfo = "text"
  ) %>%
  layout(
    
    title = "Figura 12. Relación entre precio por unidad y margen operativo",
    
    xaxis = list(
      title = "Precio por unidad (USD)"
    ),
    
    yaxis = list(
      title = "Margen operativo (%)",
      tickformat = ".0%"
    ),
    
    margin = list(
      t = 80,
      b = 100,
      l = 80,
      r = 80
    ),
    
    annotations = list(
      list(
        text = "Fuente: Elaboración propia a partir de la base de datos del caso 1. Adidas",
        x = 0,
        y = -0.25,
        xref = "paper",
        yref = "paper",
        xanchor = "left",
        showarrow = FALSE,
        font = list(size = 10)
      )
    )
  )

grafico_precio_margen

La relación entre el precio por unidad y el margen operativo es negativa y débil (r = -0,14). Esto indica que, en esta base de datos, los precios más altos presentan una ligera asociación con menores márgenes operativos; sin embargo, La baja intensidad de la relación indica que el precio por sí solo tiene una asociación limitada con las variaciones observadas en el margen. Por tanto, no se puede establecer una relación causal entre el precio y la rentabilidad a partir de esta correlación.

PRINCIPALES HALLAZGOS

1. El volumen comercial no necesariamente se traduce en mayor rentabilidad relativa

West concentra el mayor volumen de ventas y la mayor participación de la utilidad operativa, pero presenta el menor margen relativo entre las regiones analizadas. Esto muestra que un mayor volumen comercial no necesariamente se traduce en una mayor eficiencia relativa, por lo que el desempeño debe evaluarse considerando conjuntamente los resultados absolutos y el margen operativo.

2. El canal Online presenta el desempeño más favorable

Online presenta el desempeño más favorable entre los métodos de venta. Registra las mayores ventas, unidades vendidas y utilidad operativa, además del mayor margen general (43,5%). Adicionalmente, presenta el mayor margen operativo dentro de las cinco regiones analizadas, mostrando un comportamiento consistente de este canal.

3. La rentabilidad varía según la combinación producto-región

La rentabilidad varía según la combinación producto-región. Los márgenes presentan diferencias importantes para un mismo producto entre las regiones analizadas. Por ejemplo, Women’s Apparel alcanza un margen de 52,1% en South, mientras que en West registra 29,8%. Esto muestra que el desempeño de un producto no es uniforme entre mercados y que la rentabilidad debe analizarse considerando conjuntamente el producto y la región.

4. La generación de utilidad y el margen no siempre evolucionan de la misma manera

Los productos presentan diferencias tanto en generación de utilidad como en margen operativo. Men’s Street Footwear registra simultáneamente la mayor utilidad operativa (USD 11,6 millones) y el mayor margen (42,0%), mientras que Men’s Athletic Footwear presenta una utilidad operativa superior a la de algunos productos, pero el menor margen del grupo (36,1%). Esto evidencia que la evaluación del desempeño de los productos debe considerar tanto la utilidad absoluta como la eficiencia relativa.

5. El precio presenta una relación débil con el margen operativo

La relación entre el precio por unidad y el margen operativo es negativa y débil (r = -0,14). Esto indica que, en esta base de datos, los precios más altos presentan una ligera asociación con menores márgenes operativos; sin embargo, la baja intensidad de la relación indica que el precio, considerado de manera aislada, tiene una asociación limitada con la variación del margen. Por tanto, esta correlación no permite establecer una relación causal entre precio y rentabilidad.

CONCLUSIONES Y RECOMENDACIONES

El análisis realizado muestra que el desempeño comercial y operativo de Adidas presenta diferencias relevantes según la región, el producto y el método de venta. West concentra el mayor volumen comercial y la mayor participación de la utilidad operativa, pero presenta el menor margen relativo, mientras que Online combina los mayores niveles de ventas, utilidad y margen. Asimismo, las diferencias observadas entre las combinaciones producto-región muestran que la rentabilidad no es uniforme entre los mercados. Finalmente, la débil relación entre precio y margen indica que la rentabilidad no puede analizarse a partir del precio de manera aislada. En conjunto, los resultados sugieren que la evaluación del desempeño debe considerar simultáneamente volumen, utilidad y margen, incorporando las dimensiones de producto, región y método de venta.

1. Priorizar el análisis de rentabilidad relativa de West:

Se recomienda complementar el seguimiento de ventas, unidades y utilidad con el margen operativo para evaluar integralmente el desempeño de West. Aunque esta región concentra el mayor volumen comercial y la mayor participación de la utilidad operativa, presenta el menor margen relativo (35,7%). Por ello, se recomienda profundizar en los factores asociados a este margen relativo, como la composición de productos, los métodos de venta y las condiciones particulares del mercado, con el objetivo de identificar oportunidades de mejora en rentabilidad preservando su fortaleza comercial.

2. Aprovechar el desempeño del canal Online.

Se recomienda fortalecer el canal Online como una alternativa prioritaria de crecimiento rentable, considerando que presenta el mayor margen operativo general (43,5%) y el mayor margen dentro de cada una de las regiones analizadas. La estrategia debería orientarse a identificar las características de las operaciones Online de mayor desempeño y replicar las prácticas que puedan ser aplicables a otros mercados y segmentos.

3. Gestianar la oferta de acuerdo con la conbinación producto-Región:

Se recomienda utilizar la combinación producto–región como criterio para orientar las decisiones comerciales. Las diferencias observadas en los márgenes sugieren que un mismo producto puede presentar desempeños distintos según el mercado. Por ello, las decisiones de promoción, disponibilidad y priorización comercial deberían considerar la rentabilidad específica de cada combinación, prestando especial atención a aquellas que presentan márgenes elevados, como South–Women’s Apparel.

4. Evitar decisiones de precio basadas únicamente en la relación con el margen

Se recomienda no utilizar el precio por unidad como único criterio para explicar o gestionar la rentabilidad, debido a la débil relación observada entre precio y margen operativo (-0,14). Las decisiones de precio deberían analizarse conjuntamente con variables como producto, región, método de venta y volumen, dado que los resultados muestran que estos elementos presentan asociaciones más relevantes con el desempeño comercial y operativo.