Introducción

Adidas es una empresa global de origen alemán dedicada al diseño, fabricación y comercialización de productos deportivos, principalmente calzado, ropa y accesorios. Su modelo de negocio combina ventas directas al consumidor (a través de tiendas propias y comercio electrónico) con distribución mayorista a minoristas y socios estratégicos.

Financieramente, Adidas opera con un enfoque en la eficiencia operativa y la innovación, buscando mantener márgenes saludables en un mercado altamente competitivo. La empresa monitorea de cerca el desempeño de sus diferentes líneas de producto y canales de venta para optimizar la rentabilidad y adaptarse a las dinámicas del consumidor global

El presente informe presenta un análisis exploratorio del desempeño financiero de Adidas, focalizado en tres dimensiones clave:

Rentabilidad, a través del margen operativo, y su relación con el precio por unidad y volumen de ventas.

Eficiencia en ventas, explorando cómo el precio influye en la demanda (unidades vendidas).

Desempeño financiero general, evaluando cómo las ventas totales y la utilidad operativa contribuyen a la meta empresarial.

Los resultados revelan patrones claros que ayudan a tomar decisiones sobre precios, canales de venta y líneas de producto. Se incluyen visualizaciones como histogramas, boxplots y diagramas de dispersión para respaldar los hallazgos.

Análisis exploratorio

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

PASO 1. Instalar y cargar librerias

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

PASO 2: Filtar o seleccionar la información que necesito

Se filtra la base de datos teniendo en cuenta sólo el producto Men’s Street Footwear y en la ciudad de Miami:

El código siguiente carga un archivo de Excel con datos estrategicos de Adidas, les asigna un ID único a cada fila, y luego filtra el producto Men’s Street Footwear vendidos en la ciudad de “Miami”, permitiendo pequeñas diferencias en la escritura del nombre.

library(readxl)
datos<- read_excel("D:/D/Diplomados/Maestria Finanzas Javeriana/Modulo 1 - Analitica de Negocios/Modulo 1/Entregas/Caso 1/Adidas.xlsx")


#Generar una secuencia de números desde 1 hasta el número total de filas y agrega esta secuencia a la tabla como una nueva columna.

id=1:dim(datos)[1]
datos=data.frame(id,datos)


#Filtro

require(RecordLinkage)

#Busca coincidencias de nombres similares (ej., "Miami" aún sería válido).
#Encuentra las posiciones de las filas que cumplen ambas condiciones.
# Extrae solo esas filas y las guarda en datos_sub.

pos = which(jarowinkler("Miami",datos$City)>0.98&datos$Product=="Men's Street Footwear")
datos_sub=datos[pos,]
head(datos_sub) # para mostrar la tabla comando head
id retailer Region State City Product P_Unit Vtas_Unids total_sales operating_profit operating_margin sales_method
723 723 Foot Locker Southeast Florida Miami Men’s Street Footwear 45 1100 49500 22275.00 0.45 In-store
729 729 Foot Locker Southeast Florida Miami Men’s Street Footwear 45 1070 48150 21667.50 0.45 In-store
735 735 Foot Locker Southeast Florida Miami Men’s Street Footwear 45 1025 46125 20756.25 0.45 In-store
741 741 West Gear Southeast Florida Miami Men’s Street Footwear 55 1070 58850 26482.50 0.45 In-store
747 747 West Gear Southeast Florida Miami Men’s Street Footwear 60 1075 64500 29025.00 0.45 In-store
753 753 West Gear Southeast Florida Miami Men’s Street Footwear 65 1150 74750 33637.50 0.45 In-store
#jarowinkler es el comando para poder filtar, el >0,98 se utiliza para buscar semenjanza, ejplo cuando estan mal escritos

Ahora obtenemos los nombres exactos de las variables que tenemos en la base de datos

library(dplyr)
names(datos_sub)
##  [1] "id"               "retailer"         "Region"           "State"           
##  [5] "City"             "Product"          "P_Unit"           "Vtas_Unids"      
##  [9] "total_sales"      "operating_profit" "operating_margin" "sales_method"
##Registros totales para las ventas tipo "Men's Street Footwear" y  ciudad "Miami" 
length(pos)
## [1] 24

Indicadores de centralidad

## Se calcula el promedio del precio unitario de venta, las unidades vendidas, el Metodo de Venta, el Margen Operacional y la Utilidad Operacional del calzado tipo Men's Street Footwear en la ciudad de Miami y se colocan los datos en una tabla o dataframe

#na.rm:  ignora valores faltantes (NA) para evitar errores en el cálculo.

cantidad_ventas= length(datos_sub$Vtas_Unids)
promedio_precio= mean(datos_sub$P_Unit,na.rm=TRUE)
promedio_Unids_Vta= round(mean(datos_sub$Vtas_Unids,na.rm =TRUE),0)
promedio_Margen= round(mean(datos_sub$operating_margin,na.rm=TRUE),2)
promedio_UtilidadOp= round(mean(datos_sub$operating_profit,na.rm=TRUE),0)

resultado_prom=data.frame(cantidad_ventas,promedio_precio,promedio_Unids_Vta,promedio_Margen,promedio_UtilidadOp)
resultado_prom
cantidad_ventas promedio_precio promedio_Unids_Vta promedio_Margen promedio_UtilidadOp
24 52.875 644 0.5 16733
#data.frame se utiliza para mostrar el resultado en forma de tabla
## Se calcula la mediana del precio, de las Unidades, del Margen y la Utilidad Operacional de la venta del producto Men's Street Footwear en la ciudad de Miami y se colocan los datos en una tabla o dataframe

cantidad_ventas= length(datos_sub$Vtas_Unids)
mediana_precio= median(datos_sub$P_Unit,na.rm=TRUE)
mediana_Unids_Vta= median(datos_sub$Vtas_Unids,na.rm =TRUE)
mediana_Margen= median(datos_sub$operating_margin,na.rm=TRUE)
mediana_UtilidadOp= median(datos_sub$operating_profit,na.rm=TRUE)

resultado_med=data.frame(cantidad_ventas,mediana_precio,mediana_Unids_Vta,mediana_Margen,mediana_UtilidadOp)
resultado_med
cantidad_ventas mediana_precio mediana_Unids_Vta mediana_Margen mediana_UtilidadOp
24 55 386.5 0.45 11079.72
### Indicadores de centralidad y variabilidad para la variable "precio"

promedio_precio=mean(datos_sub$P_Unit,na.rm = TRUE)
mediana_precio=median(datos_sub$P_Unit,na.rm = TRUE)
minimo_precio=min(datos_sub$P_Unit,na.rm = TRUE)
maximo_precio=max(datos_sub$P_Unit,na.rm = TRUE)
desvest_precio=sd(datos_sub$P_Unit,na.rm = TRUE)

indic_precio=data.frame(promedio_precio,mediana_precio,minimo_precio,maximo_precio,desvest_precio)
indic_precio
promedio_precio mediana_precio minimo_precio maximo_precio desvest_precio
52.875 55 33 65 9.529417
## Indicadores de centralidad y variabilidad para la variable "Unidades Vendidas"

promedio_Vtas_Unids=mean(datos_sub$Vtas_Unids,na.rm =TRUE)
mediana_Vtas_Unids=median(datos_sub$Vtas_Unids,na.rm =TRUE)
minimo_Vtas_Unids=min(datos_sub$Vtas_Unids,na.rm =TRUE)
maximo_Vtas_Unids=max(datos_sub$Vtas_Unids,na.rm =TRUE)
desvest_Vtas_Unids=sd(datos_sub$Vtas_Unids,na.rm =TRUE)

indic_Vtas_Unids=data.frame(promedio_Vtas_Unids,mediana_Vtas_Unids,minimo_Vtas_Unids,maximo_Vtas_Unids,desvest_Vtas_Unids)
indic_Vtas_Unids
promedio_Vtas_Unids mediana_Vtas_Unids minimo_Vtas_Unids maximo_Vtas_Unids desvest_Vtas_Unids
643.875 386.5 131 1150 400.2849

Representación gráfica

Histograma

Ahora creamos el histograma de las unidades vendidas y el precio de venta para ver la distribución de los datos:

colnames(datos_sub)  # Muestra los nombres de las columnas
##  [1] "id"               "retailer"         "Region"           "State"           
##  [5] "City"             "Product"          "P_Unit"           "Vtas_Unids"      
##  [9] "total_sales"      "operating_profit" "operating_margin" "sales_method"
str(datos_sub)       # Muestra la estructura del dataframe
## 'data.frame':    24 obs. of  12 variables:
##  $ id              : int  723 729 735 741 747 753 759 765 771 777 ...
##  $ retailer        : chr  "Foot Locker" "Foot Locker" "Foot Locker" "West Gear" ...
##  $ Region          : chr  "Southeast" "Southeast" "Southeast" "Southeast" ...
##  $ State           : chr  "Florida" "Florida" "Florida" "Florida" ...
##  $ City            : chr  "Miami" "Miami" "Miami" "Miami" ...
##  $ Product         : chr  "Men's Street Footwear" "Men's Street Footwear" "Men's Street Footwear" "Men's Street Footwear" ...
##  $ P_Unit          : num  45 45 45 55 60 65 65 55 60 60 ...
##  $ Vtas_Unids      : num  1100 1070 1025 1070 1075 ...
##  $ total_sales     : num  49500 48150 46125 58850 64500 ...
##  $ operating_profit: num  22275 21668 20756 26483 29025 ...
##  $ operating_margin: num  0.45 0.45 0.45 0.45 0.45 0.45 0.45 0.45 0.45 0.45 ...
##  $ sales_method    : chr  "In-store" "In-store" "In-store" "In-store" ...
# install.packages("ggplot2")
# install.packages("ggpattern")

library(ggplot2)
library(ggpattern)

# Datos de ejemplo
x <- datos_sub$P_Unit

# Histograma con Scott
bw <- diff(range(x)) / (length(x)^(1/3))  # regla de Scott

ggplot(data.frame(x), aes(x)) +
  geom_histogram_pattern(
    binwidth = bw,
    color = "black",
    pattern = "gradient",               # efecto de degradado
    pattern_fill = "lightblue",
    pattern_fill2 = "darkblue",
    fill = "lightblue"
  ) +
  labs(title="Figura 1. Histograma del Precio de Venta del Calzado Casual de Adidas",
       x="Precio", 
       y="Frecuencia") +
  theme_minimal()+
  theme(
    panel.grid.major = element_blank(),  # quita líneas principales
    panel.grid.minor = element_blank(),  # quita líneas menores
    panel.border = element_blank()       # opcional, quita borde
  )

Interpretación Figura 1.

La Figura 1. muestra la distribución de los precios del calzado deportivo de Adidas en Miami. Permite identificar patrones, concentración de precios y posibles sesgos en la distribución.

📌 Distribución de Precios:

La mayoría del calzado tienen precios entre US$40 y US$60, con una mayor concentración entre US$50 y US$60 con los valores mas frecuentes en ese rango.

Hay calzado más económico, con precios inferiores a US$30, pero son menos frecuentes.

📈 Modos y Agrupaciones:

Se identifican dos picos principales:

Uno entre US$50 y US$60 (mayor cantidad de ventas).

Otro entre US$40 y US$50, aunque menos pronunciado.

También hay pocas ventas en el rango de US$60 a US$70, lo que sugiere que modelos de nueva colección.

📊 Dispersión y Rango de Precios:

Los precios van desde US$30 hasta US$65. El mercado tiene una alta variabilidad en precios, con una clara preferencia entre los calzados con precio superior a US$50 que los inferiores a ese precio.

# Crear y mostrar el histograma interactivo
ggplotly(
  ggplot(datos_sub, aes(x=Vtas_Unids)) +
    geom_histogram(binwidth=30, fill="darkblue", color="black", alpha=0.6) +
    labs(title="Figura 2. Histograma de Ventas de Calzado Casual Masculino en Miami",
         x="Ventas Unids", 
         y="Frecuencia") +
    theme_minimal()
)

Interpretación Figura 2.

La Figura 2. muestra la distribucion de las unidades vendidas del calzado Casual de Adidas en la ciudad de Miami

📌 Distribución de las unidades vendidas:

Se puede observar un comportamiento de compra divido en dos grandes grupos, donde un primer gurpo presenta un nivel bajo en volumen de ventas, oscilando entre 270 y 300 unidades, y por otro lado, un grupo con alto volumen de ventas entre 950 y 1200 unidades.

📈 Modos y Agrupaciones:

Hay dos picos importantes entre 270 y 300 unidades, y por otro lado un pico entre 1000 y 1100, lo que permite inferir que las ventas no estan uniformemente distribuidas, reflejando un comportamiento diferenciado.

Se identifican un pequeño grupo cercano a las 500 unidades y sin datos hasta las 900 unidades.

📊 Dispersión y Rango de Precios:

Los niveles de ventas mas elevados de ventas superan las 3.000 unidades en diferentes rangos de precios (US$45, US$60 y US$65), el rango mas alto de ventas muestra 3.653 unidades a un precio de US$60.. La distribucion muestra un comportamiento de consumo asociado al nivel de precios, diferenciando 3 grandes grupos de precios.

⚠️ Posibles Valores Atípicos:

Las ventas de calzado con precios inferiores a US$40 parecen ser excepcionales, lo que podría indicar que son producto de liquidaciones de colecciones anteriores..

Boxplot

Ahora creamos el boxplot del precio de la venta del calzado para ver la distribución de los datos:

# Crear y mostrar el boxplot interactivo
ggplotly(
  ggplot(datos_sub, aes(y=P_Unit)) +
    geom_boxplot(fill="#1F497D", color="black", outlier.colour="red", outlier.shape=16, outlier.size=3) +
    labs(title="Figura 3. Boxplot del Precio de Venta Calzado Casual Adidas en Miami",
         y="Precio") +
    theme_minimal()
)

Interpretación Fgura 3-Boxplot

Este boxplot muestra la distribución de los precios del calzado casual de Adidas en Miami y permite identificar la dispersión, la mediana y posibles valores atípicos.

📌 Mediana (median: 55):

La línea negra dentro de la caja representa la mediana del precio del calzado casual, que es US$55. Esto significa que el 50% de las ventas del calzado tienen un precio menor o igual a US$50, y el otro 50% tiene un precio mayor.

📦 Rango Intercuartílico (IQR – Interquartile Range):

Q1 (Primer Cuartil - q1: 45): El 25% de las ventas del calzado tiene un precio inferior a US$45. Q3 (Tercer Cuartil - q3: 60): El 75% de las ventas del calzado tiene un precio inferior a US$60.

El 50% de los precios se encuentran entre US$45 y US$60.

📊 Rango Total (Bigotes del Boxplot):

Mínimo (min: 33): El precio más bajo registrado es US$33. Máximo (max: 65): El precio más alto es US$65.

Los “bigotes” (líneas que se extienden desde la caja) representan el rango de precios sin outliers.

⚠️ ¿Hay valores atípicos?

No se observan outliers marcados en rojo en este gráfico o por fuera de los bigotes, lo que sugiere que todos los precios se encuentran dentro del rango esperado.

Ahora creamos el boxplot del nivel de ventas para ver la distribución de los datos:

# Crear y mostrar el boxplot interactivo
ggplotly(
  ggplot(datos_sub, aes(y=Vtas_Unids)) +
    geom_boxplot(fill="blue", color="black", outlier.colour="red", outlier.shape=16, outlier.size=3) +
    labs(title="Figura 4. Boxplot del Nivel de Ventas del Calzado Casual de Adidas en Miami",
         y="Unidades") +
    theme_minimal()
)

Interpretación Figura 4

Este boxplot muestra la distribución del nivel de ventas del calzado casual de Adidas en Miami, permitiendo analizar la dispersión, la mediana y los valores atípicos.

Mediana (median: 386)

La línea negra dentro de la caja representa la mediana del área, que 386 unidades. Esto significa que el 50% de las ventas del calzado tienen un nivel de ventas menor o igual a 386, y el otro 50% tiene un nivel de ventas mayor.

📦 Rango Intercuartílico (IQR – Interquartile Range):

Q1 (Primer Cuartil - q1: 287 unids): El 25% de las ventas son menores a 287 unidades. Q3 (Tercer Cuartil - q3: 1070 unids): El 75% de las ventas tienen un área nivel de ventas menor a 1070 unidades. El 50% de los apartamentos tienen un nivel de ventas entre 287 unidades y 1070 unidades.

📊 Rango Total (Bigotes del Boxplot):

Mínimo (min: 131 unids): El menor nivel de ventas es de 131 unidades Máximo (max: 1150 unids): El mayor nivel de ventas registrado es de 1150 unidades. Se puede observar que no existen valores atipicos de ventas.

⚠️ Valores Atípicos (Outliers)

No se observan puntos por encima de 1150 unidades, lo que indica que todas las ventas se encuentran dentro del rango esperado.

Exploración bivariada entre Ventas Totales y Utilidad Operacional

Gráfico de dispersión

Opción 1

library(ggplot2)
library(plotly)

g1 <- ggplot(data = datos_sub, aes(x = total_sales, y = operating_profit)) +
  geom_point(color = "#2C3E50", alpha = 0.7, size = 2) +  # puntos más estilizados
  geom_smooth(method = "loess", se = TRUE, color = "#2980B9") +  # línea suave con banda de confianza
  labs(
    title = "Relación entre Ventas Totales y Utilidad Operativa",
    x = "Ventas Totales",
    y = "Utilidad Operativa"
  ) +
  theme_minimal() +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    plot.title = element_text(face = "bold", size = 14),
    axis.title = element_text(size = 12)
  )

ggplotly(g1)

Interpretación Relación Ventas Totales y Utilidad Operacional

El gráfico muestra una relación positiva y casi lineal entre las Ventas Totales y la Utilidad Operativa, lo cual nos indica que, a medida que aumentan las ventas, la rentabilidad operativa también crece de forma consistente. A partir de esto se puede analizar lo siguiente:

  1. Desempeño Financiero General

Crecimiento proporcional: La tendencia ascendente sugiere que la empresa está logrando convertir sus ventas en utilidades de manera eficiente. Un incremento en las ventas se refleja en un incremento sostenido en la utilidad operativa, lo cual es un indicador saludable del modelo de negocio.

Estabilidad en la relación ventas-utilidad: La estrecha dispersión de los puntos alrededor de la línea de tendencia indica estabilidad y control sobre los costos operativos, con pocas variaciones que afecten la rentabilidad.

  1. Contribución al Objetivo Financiero

El comportamiento del gráfico muestra que las ventas tienen un impacto directo en la rentabilidad operativa, por lo que maximizar las ventas contribuirá significativamente al cumplimiento de los objetivos financieros.

Al no observarse caídas importantes en la utilidad frente al incremento de ventas, se infiere que los costos no están aumentando desproporcionadamente, manteniendo un buen margen operativo.

  1. Posibles Áreas de Mejora

Optimización de márgenes: Aunque la tendencia es positiva, podría explorarse la posibilidad de incrementar aún más la rentabilidad por unidad vendida (mejorar precios, reducir costos variables).

Análisis de puntos atípicos: Hay un punto aislado con ventas bajas y utilidad inferior que podría indicar ineficiencia en ese rango específico de ventas lo que nos da a interiorizar que es fundamental encontrar el punto de equilibrio entre el precio y el volumen.

Estrategias de crecimiento: Potenciar estrategias comerciales en segmentos de ventas altas, donde la relación utilidad-ventas es más sólida, asegurando que el crecimiento siga siendo rentable.

Opción 2

library(ggplot2)
library(plotly)

# Calcular la correlación con manejo de NA
correlacion <- round(cor(datos_sub$operating_margin, datos_sub$P_Unit, use = "complete.obs"), 2)

# Crear el gráfico
g <- ggplot(datos_sub, aes(x = P_Unit, y = operating_margin)) +
  geom_point(color = "#5D3FD3", alpha = 0.7, size = 2.2) +  # Puntos más elegantes (morado sobrio)
  geom_smooth(method = "loess", color = "darkgrey", se = TRUE) +  # Línea de tendencia suavizada
  labs(
    title = paste("Figura 5. Relación entre Precio Unitario y Margen Operativo\nCoeficiente de correlación: ", correlacion),
    x = "Precio Unitario (US$)",
    y = "Margen Operativo",
    caption = "Fuente: Datos de Ventas Adidas - Miami"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )

# Convertir a gráfico interactivo
ggplotly(g)

Interpretación Figura 5.

El gráfico muestra la relación entre el Precio Unitario (USD) y el Margen Operativo, con un coeficiente de correlación de 0.1, lo que indica una relación muy débil entre ambas variables.

Niveles de margen operativo alcanzados:

El margen operativo se sitúa mayoritariamente en un rango entre 0.4 y 0.6.

Los valores más altos de margen (cercanos a 0.6) se concentran en precios unitarios intermedios (aproximadamente entre 40 y 60 USD).

Variación en función del precio por unidad:

A precios bajos (30-40 USD), el margen operativo presenta una mayor dispersión, incluyendo valores más bajos (0.33) y valores medios (0.45).

En el rango medio (40-60 USD), se observa una tendencia a márgenes más estables y elevados, alcanzando los valores máximos (0.6).

A precios altos (>60 USD), el margen tiende a disminuir ligeramente, indicando que precios excesivamente altos no garantizan mayor rentabilidad operativa.

Impacto del volumen de ventas:

Aunque el gráfico no muestra directamente el volumen, la baja correlación (0.1) sugiere que ni el precio unitario ni el margen operativo por sí solos explican el desempeño general, por lo que sería necesario considerar el volumen vendido para entender la rentabilidad total.

Conclusión:la rentabilidad Operativa parece optimizarse en los rango de los precios intermedios entre (40 y 60 USD) la correlacion indicque el precio unitario no es undeterminante significativo del margen y se recomienda analizar en conjunto con el volumen de ventas para tomar decisiones estrategicas