Adidas es una de las marcas líderes a nivel mundial en la industria de artículos deportivos. Fundada en 1949 en Alemania, la compañía ha consolidado un sólido posicionamiento en el mercado global, destacándose por su innovación, calidad y estrategia comercial en la fabricación de calzado, ropa y equipos deportivos. A lo largo de más de 70 años, Adidas ha expandido su presencia en diversos segmentos del mercado, operando en un entorno dinámico y altamente competitivo.
Desde una perspectiva financiera, la empresa debe evaluar de manera continua su desempeño en términos de rentabilidad, comportamiento de ventas y eficiencia operativa. Este análisis tiene como objetivo examinar la composición de las ventas, la utilidad operativa y el margen operativo de Adidas, a través del estudio de variables clave como el precio por unidad, los volúmenes de venta, los canales de comercialización, las regiones o mercados atendidos y los diferentes segmentos de producto. Mediante este análisis exploratorio, se pretende identificar patrones y tendencias que permitan detectar oportunidades de mejora y formular estrategias orientadas a optimizar los ingresos y la rentabilidad de la compañía.
El análisis exploratorio de datos (EDA) es un paso fundamental para comprender la información financiera de Adidas, identificar patrones y evaluar la distribución de las variables clave. A través del uso de estadísticas descriptivas y visualización de datos con R, este proceso permite detectar tendencias, explorar relaciones entre variables y optimizar la interpretación de los datos, además de identificar posibles anomalías que podrían influir en el análisis.
Este enfoque proporciona una base sólida para evaluar el desempeño financiero de Adidas, facilitando la identificación de factores que inciden en su rentabilidad y eficiencia comercial. Posteriormente, dando paso a un informe de ventas detallado, se busca extraer información relevante que contribuya a la formulación de estrategias orientadas a la mejora de los ingresos y la rentabilidad de la compañía.
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(tidyverse)
PASO 2: Cargar la base de datos
# Cargar datos desde el archivo Excel
Adidas <- read_excel("C:/Users/PabloLopez/Desktop/Maestria en FINANZAS/1. Primer Semestre/Analitica de Negocios/Adidas.xlsx",
col_types = c("text",
"text", "text", "text", "text", "numeric",
"numeric", "numeric", "numeric", "numeric",
"text"))
View(Adidas)
# Ver las primeras filas de los datos
class(Adidas)
## [1] "tbl_df" "tbl" "data.frame"
colnames(Adidas)
## [1] "retailer" "Region" "State" "City"
## [5] "Product" "price_per_unit" "units_sold" "total_sales"
## [9] "operating_profit" "operating_margin" "sales_method"
head(Adidas)
| retailer | Region | State | City | Product | price_per_unit | units_sold | total_sales | operating_profit | operating_margin | sales_method |
|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
# Resumen estadístico de las variables
resumen <- Adidas %>%
select(price_per_unit, units_sold , total_sales, operating_profit, operating_margin) %>%
summary()
resumen
## price_per_unit units_sold total_sales operating_profit
## Min. : 7.00 Min. : 0.0 Min. : 0 Min. : 0
## 1st Qu.: 35.00 1st Qu.: 106.0 1st Qu.: 4065 1st Qu.: 1753
## Median : 45.00 Median : 176.0 Median : 7804 Median : 3263
## Mean : 45.22 Mean : 256.9 Mean :12455 Mean : 4895
## 3rd Qu.: 55.00 3rd Qu.: 350.0 3rd Qu.:15864 3rd Qu.: 6192
## Max. :110.00 Max. :1275.0 Max. :82500 Max. :39000
## operating_margin
## Min. :0.0000
## 1st Qu.:0.3500
## Median :0.4100
## Mean :0.4228
## 3rd Qu.:0.4900
## Max. :0.8000
Precio por unidad
El precio mínimo registrado es de $7, mientras que el máximo alcanza los $110. La mediana es $45, lo que indica que la mitad de los productos tienen un precio igual o inferior a este valor. La media es $45.22, muy cercana a la mediana, lo que sugiere que la distribución del precio es relativamente simétrica. Sin embargo, la diferencia entre el tercer cuartil ($55) y el máximo ($110) sugiere que hay productos de altos precios que podrían estar sesgando la distribución de esta variable hacia la derecha.
Unidades vendidas
Hay registros con cero unidades vendidas, lo que podría estar relacionado con productos de baja rotación o que, incluso, ya no son demandados. En contraste, la venta máxima de un solo producto alcanza 1,275 unidades, mostrando una alta variabilidad en la cantidad de unidades vendidas. La media es de 256.9 unidades, mientras que la mediana es 176 unidades, lo que indica que la distribución podría estar sesgada hacia valores más altos (presencia de productos con unidades vendidas significativamente superiores al promedio).
Ventas totales
Existen productos sin ventas en términos monetarios (mínimo de $0), lo que está relacionado con aquellos que registraron cero unidades vendidas. Por otro lado, la venta máxima alcanza los $82,500, lo que indica una gran dispersión en la composición de los ingresos generados por producto. La mediana de $7,804 sugiere que la mitad de los registros tienen ventas inferiores a este valor, mientras que la media de $12,455 sugiere la presencia de productos con ventas muy altas que elevan el promedio.
Utilidad operativa
Se observa una utilidad mínima de $0, lo que implica que hay productos que no generaron rentabilidad. La utilidad máxima registrada es de $39,000, indicando que ciertos productos generan una rentabilidad significativamente alta. La media de $4,895 es más alta que la mediana de $3,263, lo que sugiere que algunos productos con utilidades operativas muy elevadas están sesgando la distribución.
Margen operativo
El margen operativo varía entre 0% y 80%, lo que muestra una amplia diversidad en la rentabilidad del portafolio de productos. La mediana del margen operativo es 41%, mientras que la media es 42.28%, indicando una distribución relativamente simetrica. El tercer cuartil se encuentra en 49%, lo que sugiere que el 25% de los productos más rentables tienen márgenes superiores a este valor.
Conclusiones iniciales
Las ventas y la rentabilidad de los productos presentan una elevada variabilidad, lo que resalta la importancia de segmentar los componentes de la venta para identificar los factores determinantes del desempeño y analizar sus diferencias. La presencia de productos con 0 unidades vendidas o ventas totales de $0 podría indicar oportunidades de optimización en la estrategia comercial. La diferencia entre la media y la mediana en unidades vendidas, ventas totales y utilidad operativa sugiere la existencia de productos con valores extremos que sesgan la distribución. El margen operativo presenta una tendencia positiva, con más del 50% de los productos registrando márgenes superiores al 40%, lo que constituye un indicador favorable de rentabilidad.
# Función para calcular la moda
calcular_moda <- function(x) {
x <- na.omit(x) # Eliminar valores NA
frec <- table(x) # Crear tabla de frecuencias
moda <- as.numeric(names(frec[frec == max(frec)])) # Extraer el valor más frecuente
if (length(moda) > 1) {
return(paste(moda, collapse = ", ")) # Si hay varias modas, las muestra separadas por comas
}
return(moda)
}
# Crear el dataframe con valores redondeados a 2 decimales
resultado <- data.frame(
Métrica = c("Media Precio Unitario", "Mediana Precio Unitario", "Moda Precio Unitario", "Desviación Estándar Precio Unitario",
"Media Unidades Vendidas", "Mediana Unidades Vendidas", "Moda Unidades Vendidas", "Desviación Estándar Unidades Vendidas",
"Media Ventas Totales", "Mediana Ventas Totales", "Moda Ventas Totales", "Desviación Estándar Ventas Totales",
"Media Operating Profit", "Mediana Operating Profit", "Moda Operating Profit", "Desviación Estándar Operating Profit",
"Media Operating Margin", "Mediana Operating Margin", "Moda Operating Margin", "Desviación Estándar Operating Margin"),
Valor = c(
round(mean(Adidas$price_per_unit, na.rm = TRUE), 2), round(median(Adidas$price_per_unit, na.rm = TRUE), 2), calcular_moda(Adidas$price_per_unit), round(sd(Adidas$price_per_unit, na.rm = TRUE), 2),
round(mean(Adidas$units_sold, na.rm = TRUE), 2), round(median(Adidas$units_sold, na.rm = TRUE), 2), calcular_moda(Adidas$units_sold), round(sd(Adidas$units_sold, na.rm = TRUE), 2),
round(mean(Adidas$total_sales, na.rm = TRUE), 2), round(median(Adidas$total_sales, na.rm = TRUE), 2), calcular_moda(Adidas$total_sales), round(sd(Adidas$total_sales, na.rm = TRUE), 2),
round(mean(Adidas$operating_profit, na.rm = TRUE), 2), round(median(Adidas$operating_profit, na.rm = TRUE), 2), calcular_moda(Adidas$operating_profit), round(sd(Adidas$operating_profit, na.rm = TRUE), 2),
round(mean(Adidas$operating_margin, na.rm = TRUE), 2), round(median(Adidas$operating_margin, na.rm = TRUE), 2), calcular_moda(Adidas$operating_margin), round(sd(Adidas$operating_margin, na.rm = TRUE), 2)
)
)
# Mostrar encabezado (R Markdown ya lo formatea)
### Indicadores de Centralidad y Variabilidad
# Mostrar la tabla con kable para mejor presentación en R Markdown
kable(resultado, format = "markdown", caption = "Indicadores de Centralidad y Variabilidad")
| Métrica | Valor |
|---|---|
| Media Precio Unitario | 45.22 |
| Mediana Precio Unitario | 45.00 |
| Moda Precio Unitario | 50.00 |
| Desviación Estándar Precio Unitario | 14.71 |
| Media Unidades Vendidas | 256.93 |
| Mediana Unidades Vendidas | 176.00 |
| Moda Unidades Vendidas | 225.00 |
| Desviación Estándar Unidades Vendidas | 214.25 |
| Media Ventas Totales | 12455.08 |
| Mediana Ventas Totales | 7803.50 |
| Moda Ventas Totales | 10000.00 |
| Desviación Estándar Ventas Totales | 12716.39 |
| Media Operating Profit | 4894.79 |
| Mediana Operating Profit | 3262.98 |
| Moda Operating Profit | 2100.00 |
| Desviación Estándar Operating Profit | 4866.46 |
| Media Operating Margin | 0.42 |
| Mediana Operating Margin | 0.41 |
| Moda Operating Margin | 0.35 |
| Desviación Estándar Operating Margin | 0.10 |
En relación con la tabla de indicadores de centralidad y variabilidad, se pueden destacar los siguientes hallazgos adicionales:
Precio Unitario: La moda de $50.00 indica que este es el precio más comúnmente asignado a los productos, lo que podría sugerir una estrategia de precios preferida en ciertas categorías.
Unidades Vendidas: La moda de 225 unidades vendidas podría indicar un nivel de demanda consistente en determinados segmentos del mercado.
Ventas Totales: La moda de $10,000 indica que este nivel de ingresos es frecuente en varias observaciones, lo que podría señalar una categoría de productos, canales o regiones con un desempeño uniforme en ventas.
Utilidad Operativa: La moda de $2,100 revela que hay productos cuyo beneficio operativo se concentra en este nivel, lo que sugiere la existencia de una estructuras de costos y precios iguales para ciertos artículos.
Margen Operativo: Con una moda del 35%, este margen es el más comúnmente observado en los productos analizados, lo que podría reflejar una estrategia de rentabilidad estándar para la mayoría de las líneas de negocio.
# Cargar la librería necesaria
library(ggplot2)
library(plotly)
library(e1071) # Para calcular el coeficiente de skewness
# Calcular el coeficiente de sesgo (skewness)
sesgo <- skewness(Adidas$price_per_unit, na.rm = TRUE)
# Crear y mostrar el histograma interactivo
ggplotly(
ggplot(Adidas, aes(x=price_per_unit)) +
geom_histogram(binwidth=5, fill="steelblue", color="black", alpha=0.6) +
labs(title="Histograma del Precio por Unidad",
x="Precio",
y="Frecuencia") +
theme_minimal()+
# Agregar anotación con el coeficiente de skewness
annotate("text", x = max(Adidas$price_per_unit) * 0.7,
y = max(hist(Adidas$price_per_unit, plot = FALSE)$counts) * 0.9,
label = paste0("Skewness: ", round(sesgo, 2)),
color = "blue", size = 4, fontface = "bold")
)
Figura 1.1: Histograma del Precio por Unidad
El histograma muestra una distribución aproximadamente simétrica (Skewness = 0.36), con precios por unidad que oscilan entre 7 y 110. Se observa una mayor concentración de valores en el rango 35 a 55.
-Hallazgos clave: La simetría de la distribución indica que no hay sesgos significativos hacia precios bajos o altos. La amplitud del rango sugiere un portafolio diverso en términos de precios. La mayor parte de los productos vendidos tienen precios en el intervalo 35-55, lo que indica una posible estrategia de posicionamiento de precios dentro en ese segmento.
-Implicaciones comerciales: Se podrían explorar estrategias para incentivar la venta de productos en rangos de precio más altos, maximizando ingresos sin afectar la demanda de otros productos ofertados. Se podría evaluar si los productos con precios extremos (muy bajos o muy altos) tienen un desempeño diferenciado en ventas y rentabilidad. Si el segmento 35-55 es el de mayor rotación, se pueden diseñar estrategias de fidelización para aumentar el ticket promedio de compra.
# Crear y mostrar el boxplot interactivo
library(ggplot2)
library(plotly)
# Crear y mostrar el boxplot interactivo
ggplotly(
ggplot(Adidas, aes(y = price_per_unit)) +
geom_boxplot(fill = "lightblue", color = "black",
outlier.colour = "red", outlier.shape = 16, outlier.size = 3) +
labs(title = "Boxplot del Precio por Unidad",
y = "Precio") +
theme_minimal()
)
Figura 1.2: Boxplot del Precio por Unidad
El boxplot muestra que los precios oscilan entre 7 y 110, con un rango intercuartil (IQR) de 20 (Q1=35, Q3=55). La mediana es 45, lo que indica que la mitad de los productos se venden por debajo de este valor. Se identifican datos atípicos por encima del upper fence (85), en un rango de 86 a 110.
-Hallazgos clave: La distribución es equilibrada, con el 50% central de los datos entre 35 y 55. La presencia de outliers en precios altos sugiere productos premium con menor representatividad en la base de datos. No se observan valores atípicos en la parte baja del gráfico.
-Implicaciones comerciales: Evaluar el desempeño de los productos en el rango de 86-110 para determinar si sus precios reflejan su valor percibido y margen de rentabilidad. Con base en ello, proponer estrategias para incrementar su venta, asegurando que estén alineadas con la rentabilidad esperada y sin afectar la demanda de los artículos ya ofertados. Explorar estrategias de diferenciación para potenciar la venta de artículos premium, como marketing dirigido o ediciones limitadas. Si el segmento 35-55 representa la mayor parte de las ventas, evaluar posibles incrementos de precios en productos cercanos a este rango para maximizar ingresos sin afectar la demanda.
# Calcular el coeficiente de sesgo (skewness)
sesgo <- skewness(Adidas$units_sold, na.rm = TRUE)
# Crear y mostrar el histograma interactivo
ggplotly(
ggplot(Adidas, aes(x=units_sold)) +
geom_histogram(binwidth=50, fill="steelblue", color="black", alpha=0.6) +
labs(title="Histograma Unidades Vendidas",
x="Unidades vendidas",
y="Frecuencia") +
theme_minimal()+
# Agregar anotación con el coeficiente de skewness
annotate("text", x = max(Adidas$units_sold) * 0.3,
y = max(hist(Adidas$units_sold, plot = FALSE)$counts) * 0.3,
label = paste0("Skewness: ", round(sesgo, 2)),
color = "blue", size = 4, fontface = "bold")
)
Figura 1.3: Histograma de Unidades Vendidas
El histograma muestra una distribución asimétrica con sesgo a la derecha (Skewness = 1.46), con valores de unidades vendidas que oscilan entre 0 y 1275. Se observa una mayor concentración de datos en el rango 50 a 250, indicando que la mayoría de los productos vendidos se encuentran dentro de este intervalo.
-Hallazgos clave: La asimetría sugiere que hay productos con ventas excepcionalmente altas, pero que representan una proporción menor del total. La amplitud del rango indica una alta variabilidad en las unidades vendidas entre diferentes productos. La concentración en 50-250 unidades vendidas refleja el comportamiento típico de la mayoría de los artículos, con productos alcanzando volúmenes de venta inclusive por encima de la mediana 176.
-Implicaciones comerciales: Analizar los productos con volumen de ventas más altas para identificar factores que impulsan su desempeño y replicar estrategias en otros artículos. Evaluar si los productos con volumen de ventas bajas requieren ajustes en precio, promoción, disponibilidad o deben ser retirados del mercado. Desarrollar estrategias para optimizar el mix de productos, maximizando la rentabilidad sin depender únicamente de los artículos de mayor venta.
library(plotly)
# Crear y mostrar el boxplot interactivo
ggplotly(
ggplot(Adidas, aes(y = units_sold)) +
geom_boxplot(fill = "lightblue", color = "black",
outlier.colour = "red", outlier.shape = 16, outlier.size = 3) +
labs(title = "Boxplot Unidadades Vendidas",
y = "Unidades Vendidas") +
theme_minimal()
)
Figura 1.4: Boxplot de Unidades Vendidas
El boxplot muestra que las unidades vendidas varían entre 0 y 1275, con un rango intercuartil (IQR) de 244 (Q1=106, Q3=350). La mediana es 176, lo que indica que la mitad de los productos vendieron menos de esta cantidad. Se identifican datos atípicos por encima del upper fence (700), en un rango de 720 a 1275.
-Hallazgos clave: La presencia de outliers en ventas altas sugiere que ciertos productos tienen una demanda excepcionalmente alta en comparación con el resto.
-Implicaciones comerciales: Analizar los productos con ventas superiores a 700 unidades para identificar qué factores impulsan su alto desempeño y evaluar si pueden replicarse en otros productos. Evaluar si los productos con ventas más bajas dentro del IQR (106-176 unidades) requieren ajustes en precio, promoción o disponibilidad para mejorar su rotación. Desarrollar estrategias para equilibrar el portafolio, maximizando la rentabilidad tanto de los productos con alta demanda como de los que tienen menor volumen de ventas.
# Calcular el coeficiente de sesgo (skewness)
sesgo <- skewness(Adidas$total_sales, na.rm = TRUE)
# Crear y mostrar el histograma interactivo
ggplotly(
ggplot(Adidas, aes(x=total_sales)) +
geom_histogram(binwidth=5000, fill="steelblue", color="black", alpha=0.6) +
labs(title="Histograma Ventas Totales",
x="Ventas Totales",
y="Frecuencia") +
theme_minimal()+
# Agregar anotación con el coeficiente de skewness
annotate("text", x = max(Adidas$total_sales) * 0.3,
y = max(hist(Adidas$total_sales, plot = FALSE)$counts) * 0.5,
label = paste0("Skewness: ", round(sesgo, 2)),
color = "blue", size = 4, fontface = "bold")
)
Figura 1.5: Histograma de Ventas Totales
El histograma muestra una distribución asimétrica con sesgo a la derecha (Skewness = 1.96), con valores de ventas totales que oscilan entre 0 y 82,500. Se observa una mayor concentración de datos en el rango 4,000 a 15,000, lo que indica que la mayoría de los productos generan ventas dentro de este intervalo.
-Hallazgos clave: La asimetría sugiere la presencia de productos con ventas totales excepcionalmente altas, aunque representan una proporción menor del total. La amplitud del rango indica una alta variabilidad en el desempeño comercial de los productos. La concentración en 4,000-15,000 sugiere que este es el nivel de ventas más común para la mayoría de los artículos.
-Implicaciones comerciales: Analizar los productos con ventas totales más altas para identificar qué factores impulsan su éxito y evaluar si estas estrategias pueden replicarse en otros productos. Evaluar si los productos con ventas totales bajas requieren ajustes en precio, marketing o disponibilidad para mejorar su rendimiento. Desarrollar estrategias para maximizar la rentabilidad en los productos dentro del rango más representativo (4,000-15,000), optimizando costos, promociones o estrategias de cross-selling.
# Crear y mostrar el boxplot interactivo
ggplotly(
ggplot(Adidas, aes(y = total_sales)) +
geom_boxplot(fill = "lightblue", color = "black",
outlier.colour = "red", outlier.shape = 16, outlier.size = 3) +
labs(title = "Boxplot Ventas Totales",
y = "Ventas Totales") +
theme_minimal()
)
Figura 1.6: Boxplot de Ventas Totales
El boxplot muestra que las ventas totales varían entre 0 y 82,500, con un rango intercuartil (IQR) de 11,804 (Q1=4,063, Q3=15,867). La mediana es 7,803, indicando que la mitad de los productos generan ventas inferiores a este valor. Se identifican datos atípicos por encima del upper fence (33,250), en un rango de 33,750 a 82,500.
-Hallazgos clave: La presencia de outliers en ventas altas sugiere que ciertos productos tienen un desempeño excepcional en términos de ventas totales.
-Implicaciones comerciales: Analizar los productos con ventas totales superiores a 33,250 para identificar qué factores impulsan su éxito y evaluar si pueden aplicarse a otros artículos. Evaluar si los productos dentro del rango Q1-Q3 (4,063-15,867) requieren estrategias de optimización para mejorar su rentabilidad sin depender de productos con ventas excepcionalmente altas. Diseñar estrategias de segmentación y promoción para maximizar el desempeño de los productos dentro del rango típico de ventas, equilibrando márgenes y volumen de ventas.
# Calcular el coeficiente de sesgo (skewness)
sesgo <- skewness(Adidas$operating_profit, na.rm = TRUE)
# Crear y mostrar el histograma interactivo
ggplotly(
ggplot(Adidas, aes(x=operating_profit)) +
geom_histogram(binwidth=2500, fill="steelblue", color="black", alpha=0.6) +
labs(title="Histograma Utilidad Operativa",
x="Utilidad Operativa",
y="Frecuencia") +
theme_minimal()+
# Agregar anotación con el coeficiente de skewness
annotate("text", x = max(Adidas$operating_profit) * 0.3,
y = max(hist(Adidas$operating_profit, plot = FALSE)$counts) * 0.5,
label = paste0("Skewness: ", round(sesgo, 2)),
color = "blue", size = 4, fontface = "bold")
)
Figura 1.7: Histograma de Utilidad Operativa
El histograma muestra una distribución asimétrica con sesgo a la derecha (Skewness = 2.33), con valores de utilidad operativa que oscilan entre 0 y 39,000. Se observa una mayor concentración de datos en el rango 2,000 a 5,000, lo que indica que la mayoría de los productos generan utilidades dentro de este intervalo.
-Hallazgos clave: La asimetría pronunciada sugiere la existencia de productos con altas utilidades operativas, aunque son una minoría. La amplitud del rango indica una alta variabilidad en la rentabilidad de los productos. La concentración en 2,000-5,000 sugiere que este es el nivel de rentabilidad más común para la mayoría de los artículos.
-Implicaciones comerciales: Analizar los productos con utilidades operativas más altas para identificar los factores que impulsan su rentabilidad y evaluar si pueden replicarse en otros productos. Evaluar la sostenibilidad de los productos dentro del rango más común (2,000-5,000), asegurando que sus márgenes sean adecuados y no dependan solo del volumen de ventas. Optimizar estrategias de pricing y costos para mejorar la rentabilidad de productos con bajos márgenes dentro de este rango.
# Crear y mostrar el boxplot interactivo
ggplotly(
ggplot(Adidas, aes(y = operating_profit)) +
geom_boxplot(fill = "lightblue", color = "black",
outlier.colour = "red", outlier.shape = 16, outlier.size = 3) +
labs(title = "Boxplot Utilidad Operativa",
y = "Utilidad Operativa") +
theme_minimal()
)
Figura 1.8: Boxplot de Utilidad Operativa
El boxplot muestra que la utilidad operativa varía entre 0 y 39,000, con un rango intercuartil (IQR) de 4,439 (Q1 = 1,753, Q3 = 6,192). La mediana es 3,263, lo que indica que el 50% de los productos generan utilidades por debajo de este valor. Se identifican datos atípicos por encima del upper fence (12,825), en un rango de 12,862 a 39,000.
-Hallazgos clave: La presencia de outliers con utilidades altas indica que algunos productos tienen un desempeño excepcional en términos de rentabilidad.
-Implicaciones comerciales: Analizar los productos con utilidades operativas superiores a 12,825 para identificar estrategias exitosas que puedan aplicarse a otros productos. Optimizar costos y precios en los productos dentro del rango intercuartil (1,753-6,192) para mejorar su rentabilidad sin depender únicamente de los productos con mayor margen. Evaluar la composición del portafolio para determinar si los productos con menores utilidades pueden ajustarse en términos de costos, precios o volumen de ventas para mejorar su desempeño.
# Calcular el coeficiente de sesgo (skewness)
sesgo <- skewness(Adidas$operating_margin, na.rm = TRUE)
# Crear y mostrar el histograma interactivo
ggplotly(
ggplot(Adidas, aes(x=operating_margin)) +
geom_histogram(binwidth=0.05, fill="steelblue", color="black", alpha=0.6) +
labs(title="Histograma Margen Operativo",
x="Margen Operativo",
y="Frecuencia") +
theme_minimal()+
# Agregar anotación con el coeficiente de skewness
annotate("text", x = max(Adidas$operating_margin) * 0.7,
y = max(hist(Adidas$operating_margin, plot = FALSE)$counts) * 0.9,
label = paste0("Skewness: ", round(sesgo, 2)),
color = "blue", size = 4, fontface = "bold")
)
Figura 1.9: Histograma de Margen Operativo
El histograma muestra una distribución relativamente simétrica (Skewness = 0.2), con márgenes operativos que oscilan entre 0% y 80%. La mayor concentración de datos se encuentra en el rango 35%-50%, lo que sugiere que la mayoría de los productos generan márgenes dentro de este intervalo.
-Hallazgos clave: La simetría relativa indica que no hay un sesgo fuerte hacia márgenes muy altos o muy bajos. La amplitud del rango (0%-80%) sugiere que algunos productos tienen márgenes operativos significativamente diferentes entre sí. La concentración en 35%-50% indica que este es el margen típico para la mayoría de los productos.
-Implicaciones comerciales: Evaluar los productos con márgenes operativos más altos para entender qué factores (costos, precios, demanda) impulsan su rentabilidad y si estas estrategias pueden aplicarse a otros productos. Revisar los productos con márgenes operativos bajos (por debajo de 35%) para identificar oportunidades de optimización en costos o estrategias de pricing. Mantener el foco en la sostenibilidad del margen en el rango dominante (35%-50%), asegurando que no dependa solo del volumen de ventas, sino también de una estructura de costos eficiente.
# Crear y mostrar el boxplot interactivo
ggplotly(
ggplot(Adidas, aes(y = operating_margin)) +
geom_boxplot(fill = "lightblue", color = "black",
outlier.colour = "red", outlier.shape = 16, outlier.size = 3) +
labs(title = "Boxplot Margen Operativo",
y = "Margen Operativo") +
theme_minimal()
)
Figura 1.10: Boxplot de Margen Operativo
El boxplot muestra que el margen operativo varía entre 0% y 80%, con un rango intercuartil (IQR) de 14% (Q1 = 35%, Q3 = 49%). La mediana es 41%, lo que indica que el 50% de los productos tienen un margen operativo menor a este valor. Se identifican datos atípicos por encima del upper fence (70%), en un rango de 71% a 80%.
-Hallazgos clave: La mayoría de los productos tienen un margen operativo entre 35% y 49%, lo que sugiere un nivel de rentabilidad estable dentro de este rango. La mediana de 41% indica que la mitad de los productos generan márgenes en torno a este valor, reflejando una estructura de rentabilidad relativamente homogénea. La presencia de outliers con márgenes superiores al 70% sugiere que algunos productos son altamente rentables y podrían estar beneficiándose de factores como precios premium, costos optimizados o alta demanda.
-Implicaciones comerciales: Analizar los productos con márgenes superiores al 70% para identificar qué los hace más rentables y evaluar la posibilidad de replicar esas estrategias en otros productos. Optimizar la rentabilidad de los productos con márgenes entre 35%-49%, explorando estrategias de reducción de costos o ajustes en pricing para fortalecer su posición dentro del portafolio. Evaluar los productos con márgenes más bajos (cercanos al 0%) para determinar si es viable mejorarlos o si deberían ser reconsiderados dentro del portafolio.
library(dplyr)
library(plotly)
# Calcular los totales generales para Adidas
totales_adidas <- Adidas %>%
summarise(
total_sales_sum = sum(total_sales, na.rm = TRUE),
operating_profit_sum = sum(operating_profit, na.rm = TRUE)
) %>%
mutate(operating_margin_avg = round((operating_profit_sum / total_sales_sum) * 100, 1)) # Margen Operativo %
# Crear un dataframe para usar en el gráfico
df <- data.frame(
Categoria = c("Venta Total", "Utilidad Operativa"),
Valor = c(totales_adidas$total_sales_sum, totales_adidas$operating_profit_sum),
Color = c("skyblue", "orange")
)
# Crear el gráfico combinado (barras + línea)
grafico_combinado <- plot_ly() %>%
# Agregar barras de Venta Total y Utilidad Operativa
add_trace(data = df, x = ~Categoria, y = ~Valor, type = 'bar',
marker = list(color = ~Color),
text = ~paste0(formatC(Valor / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text", name = "Monto en USD") %>%
# Agregar línea del Margen Operativo (%)
add_trace(x = "Utilidad Operativa", y = totales_adidas$operating_margin_avg, type = 'scatter', mode = 'lines+markers+text',
name = "Margen Operativo (%)",
line = list(color = 'black', width = 3),
marker = list(size = 6, symbol = "circle"),
yaxis = "y2",
text = ~paste0(totales_adidas$operating_margin_avg, "%"),
textposition = "top center") %>%
# Configuración del diseño con escalas personalizadas
layout(title = "Venta Total, Utilidad Operativa y Margen Operativo de Adidas",
xaxis = list(title = ""),
# Configuración del eje Y primario (Monto en USD)
yaxis = list(
title = "Monto en Millones (USD)",
tickformat = ".1s", range = c(0, 160e6), # Escala de 0 a 160M
dtick = 20e6 # Incrementos de 20M
),
# Configuración del eje Y secundario (Margen Operativo %)
yaxis2 = list(
title = "Margen Operativo (%)", overlaying = "y", side = "right",
tickformat = ".1f%%", range = c(30, 50), # Escala de 30% a 50%
dtick = 5 # Incrementos de 5%
),
barmode = "group",
hovermode = "x")
# Mostrar el gráfico
grafico_combinado
Figura 2.0: Desempeño Financiero General de Adidas
Con base en el análisis de la base de datos, Adidas ha alcanzado un volumen de ventas total de USD 120.2M y una utilidad operativa de USD 47.2M, lo que se traduce en un margen operativo del 39.3%. Este desempeño evidencia una rentabilidad sólida, respaldada por una estructura de costos y precios que facilita la sostenibilidad de márgenes competitivos. Para una evaluación más integral, sería valioso contrastar este margen operativo con el de la competencia, a fin de comprender el posicionamiento de Adidas dentro de la industria.
Este desempeño servirá como punto de referencia para entrar a analizar la contribución de cada Región, Retailer, Método de Venta y Producto, con el objetivo de identificar oportunidades de crecimiento en ventas y optimización de la rentabilidad actual.
library(dplyr)
library(plotly)
# Calcular el total de total_sales y operating_profit por Región
totales_por_region <- Adidas %>%
group_by(Region) %>%
summarise(
total_sales_sum = sum(total_sales, na.rm = TRUE),
operating_profit_sum = sum(operating_profit, na.rm = TRUE)
) %>%
mutate(operating_margin_avg = round((operating_profit_sum / total_sales_sum) * 100, 1)) # Margen Operativo %
# Crear el gráfico combinado (barras + línea)
grafico_combinado <- totales_por_region %>%
plot_ly() %>%
# Agregar barra de Venta Total
add_trace(x = ~Region, y = ~total_sales_sum, type = 'bar', name = "Venta Total",
marker = list(color = 'skyblue'),
text = ~paste0(formatC(total_sales_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar barra de Utilidad Operativa
add_trace(x = ~Region, y = ~operating_profit_sum, type = 'bar', name = "Utilidad Operativa",
marker = list(color = 'orange'),
text = ~paste0(formatC(operating_profit_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar línea del Margen Operativo (%)
add_trace(x = ~Region, y = ~operating_margin_avg, type = 'scatter', mode = 'lines+markers+text',
name = "Margen Operativo (%)",
line = list(color = 'black', width = 3),
marker = list(size = 6, symbol = "circle"),
yaxis = "y2",
text = ~paste0(operating_margin_avg, "%"),
textposition = "top center") %>%
# Configuración del diseño con escala en millones
layout(title = "Venta Total, Utilidad Operativa y Margen Operativo por Región",
xaxis = list(title = "Región"),
yaxis = list(title = "Monto en Millones (USD)", tickformat = ".1s"), # Escala en millones
yaxis2 = list(title = "Margen Operativo (%)", overlaying = "y", side = "right", tickformat = ".1f%%"),
barmode = "group",
hovermode = "x")
# Mostrar el gráfico
grafico_combinado
Figura 2.1: Desempeño por Región
El desempeño de Adidas presenta diferencias significativas entre regiones, lo que sugiere oportunidades para optimizar estrategias comerciales y de rentabilidad:
Reiones Destacadas: South (44.8%) y Midwest (41.1%) presentan los márgenes operativos más altos, indicando una estructura eficiente de costos y precios. Sería clave analizar qué factores impulsan esta rentabilidad y evaluar la posibilidad de replicarlos en otras regiones.
Puntos de Atención: West lidera en ventas (USD 36.4M), pero con el menor margen operativo (35.7%), lo que sugiere que una mayor escala no se traduce en máxima rentabilidad. Se recomienda revisar costos operativos, estrategias de pricing y eficiencia en el canal de distribución. Northeast y Southeast muestran márgenes más moderados (38.8% y 39.3%), lo que indica un balance entre volumen y rentabilidad. Sin embargo, se podrían explorar oportunidades para mejorar eficiencia operativa y estrategias de pricing.
Recomendación Estratégica: Analizar las diferencias en estructura de costos y mix de productos entre regiones para identificar best practices replicables. En West, evaluar la composición del portafolio y estrategias de precio para fortalecer la rentabilidad sin comprometer el volumen de ventas. Aprovechar la solidez de South y Midwest para impulsar estrategias de crecimiento sostenibles en otras regiones.
library(dplyr)
library(plotly)
# Calcular el total de total_sales y operating_profit por Retailer
totales_por_retailer <- Adidas %>%
group_by(retailer) %>%
summarise(
total_sales_sum = sum(total_sales, na.rm = TRUE),
operating_profit_sum = sum(operating_profit, na.rm = TRUE)
) %>%
mutate(operating_margin_avg = round((operating_profit_sum / total_sales_sum) * 100, 1)) # Margen Operativo %
# Crear el gráfico combinado (barras + línea)
grafico_combinado <- totales_por_retailer %>%
plot_ly() %>%
# Agregar barra de Venta Total
add_trace(x = ~retailer, y = ~total_sales_sum, type = 'bar', name = "Venta Total",
marker = list(color = 'skyblue'),
text = ~paste0(formatC(total_sales_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar barra de Utilidad Operativa
add_trace(x = ~retailer, y = ~operating_profit_sum, type = 'bar', name = "Utilidad Operativa",
marker = list(color = 'orange'),
text = ~paste0(formatC(operating_profit_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar línea del Margen Operativo (%)
add_trace(x = ~retailer, y = ~operating_margin_avg, type = 'scatter', mode = 'lines+markers+text',
name = "Margen Operativo (%)",
line = list(color = 'black', width = 3),
marker = list(size = 6, symbol = "circle"),
yaxis = "y2",
text = ~paste0(operating_margin_avg, "%"),
textposition = "top center") %>%
# Configuración del diseño con escala en millones
layout(title = "Venta Total, Utilidad Operativa y Margen Operativo por Retailer",
xaxis = list(title = "Retailer"),
yaxis = list(title = "Monto en Millones (USD)", tickformat = ".1s"), # Escala en millones
yaxis2 = list(title = "Margen Operativo (%)", overlaying = "y", side = "right", tickformat = ".1f%%"),
barmode = "group",
hovermode = "x")
# Mostrar el gráfico
grafico_combinado
Figura 2.2: Desempeño por Retailer
Retailers con mayor volumen de ventas: West Gear (USD 32.4M), Foot Locker (USD 29M) y Sports Direct (USD 24.6M) lideran en ventas totales, consolidándose como canales clave para Adidas. Foot Locker y West Gear presentan márgenes operativos cercanos al promedio general (39% y 37.6% respectivamente), mientras que Sports Direct destaca con el margen más alto (43.2%), lo que sugiere una estrategia comercial eficiente que podría servir de referencia para otros retailers.
Retailers con mayor rentabilidad relativa: Sports Direct (43.2%), Amazon (39.5%) y Foot Locker (39%) muestran márgenes operativos sólidos, indicando una estructura de costos favorable o estrategias de pricing efectivas. Se recomienda profundizar en los factores que impulsan su rentabilidad con el objetivo identificar tácticas replicables en otros canales.
Retailers con margen operativo por debajo del promedio: Walmart (37.1%) y West Gear (37.6%) presentan los márgenes más bajos dentro del portafolio. Evaluar oportunidades de optimización en pricing, costos, o condiciones comerciales puede ayudar a fortalecer su rentabilidad sin comprometer la participación de mercado.
Oportunidades estratégicas: -Identificar las mejores prácticas de Sports Direct y evaluar su aplicabilidad en otros retailers con menor margen. -Analizar estrategias de pricing y mix de productos en Walmart y West Gear para mejorar rentabilidad. -Mantener el crecimiento en Foot Locker y Kohl’s asegurando la estabilidad de sus márgenes operativos.
library(dplyr)
library(plotly)
# Calcular el total de total_sales y operating_profit por Método de Venta
totales_por_sales_method <- Adidas %>%
group_by(sales_method) %>%
summarise(
total_sales_sum = sum(total_sales, na.rm = TRUE),
operating_profit_sum = sum(operating_profit, na.rm = TRUE)
) %>%
mutate(operating_margin_avg = round((operating_profit_sum / total_sales_sum) * 100, 1)) # Margen Operativo %
# Crear el gráfico combinado (barras + línea)
grafico_combinado <- totales_por_sales_method %>%
plot_ly() %>%
# Agregar barra de Venta Total
add_trace(x = ~sales_method, y = ~total_sales_sum, type = 'bar', name = "Venta Total",
marker = list(color = 'skyblue'),
text = ~paste0(formatC(total_sales_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar barra de Utilidad Operativa
add_trace(x = ~sales_method, y = ~operating_profit_sum, type = 'bar', name = "Utilidad Operativa",
marker = list(color = 'orange'),
text = ~paste0(formatC(operating_profit_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar línea del Margen Operativo (%)
add_trace(x = ~sales_method, y = ~operating_margin_avg, type = 'scatter', mode = 'lines+markers+text',
name = "Margen Operativo (%)",
line = list(color = 'black', width = 3),
marker = list(size = 6, symbol = "circle"),
yaxis = "y2",
text = ~paste0(operating_margin_avg, "%"),
textposition = "top center") %>%
# Configuración del diseño con escala en millones
layout(title = "Venta Total, Utilidad Operativa y Margen Operativo por Método de Venta",
xaxis = list(title = "Método de Venta"),
yaxis = list(title = "Monto en Millones (USD)", tickformat = ".1s"), # Escala en millones
yaxis2 = list(title = "Margen Operativo (%)", overlaying = "y", side = "right", tickformat = ".1f%%"),
barmode = "group",
hovermode = "x")
# Mostrar el gráfico
grafico_combinado
Figura 2.3: Desempeño por Metodo de Venta
El canal Online lidera en rentabilidad con un margen operativo del 43.5%, evidenciando una mayor eficiencia en costos o una estrategia de precios más favorable en este segmento. Con ventas de $45M, representa una oportunidad clave para seguir impulsando estrategias digitales y mejorar la experiencia de compra online.
El segmento Outlet muestra un sólido margen operativo del 37.7%, lo que sugiere que este canal logra mantener una rentabilidad competitiva pese a los descuentos que usualmente caracterizan este formato. Optimizar el mix de productos y gestionar mejor los volúmenes podría maximizar aún más su contribución.
Por su parte, In-Store presenta el menor margen operativo (35.8%) y ventas totales de $35.7M, lo que puede indicar mayores costos operativos. Reforzar la eficiencia en puntos de venta físicos, mejorar la conversión de venta y potenciar estrategias omnicanal serán clave para fortalecer su rentabilidad.
Recomendación clave: Dado el desempeño superior del canal online, se recomienda seguir invirtiendo en su crecimiento, optimizando la logística y personalización de la oferta. Asimismo, se sugiere analizar estrategias para mejorar la eficiencia en tiendas físicas y seguir maximizando la rentabilidad del canal outlet sin afectar la percepción de marca.
library(dplyr)
library(plotly)
# Calcular el total de total_sales y operating_profit por Product
totales_por_producto <- Adidas %>%
group_by(Product) %>%
summarise(
total_sales_sum = sum(total_sales, na.rm = TRUE),
operating_profit_sum = sum(operating_profit, na.rm = TRUE)
) %>%
mutate(operating_margin_avg = round((operating_profit_sum / total_sales_sum) * 100, 1)) # Margen Operativo %
# Crear el gráfico combinado (barras + línea)
grafico_combinado <- totales_por_producto %>%
plot_ly() %>%
# Agregar barra de Venta Total
add_trace(x = ~Product, y = ~total_sales_sum, type = 'bar', name = "Venta Total",
marker = list(color = 'skyblue'),
text = ~paste0(formatC(total_sales_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar barra de Utilidad Operativa
add_trace(x = ~Product, y = ~operating_profit_sum, type = 'bar', name = "Utilidad Operativa",
marker = list(color = 'orange'),
text = ~paste0(formatC(operating_profit_sum / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Agregar línea del Margen Operativo (%)
add_trace(x = ~Product, y = ~operating_margin_avg, type = 'scatter', mode = 'lines+markers+text',
name = "Margen Operativo (%)",
line = list(color = 'black', width = 3),
marker = list(size = 6, symbol = "circle"),
yaxis = "y2",
text = ~paste0(operating_margin_avg, "%"),
textposition = "top center") %>%
# Configuración del diseño con escala en millones
layout(title = "Venta Total, Utilidad Operativa y Margen Operativo por Producto",
xaxis = list(title = "Producto"),
yaxis = list(title = "Monto en Millones (USD)", tickformat = ".1s"), # Escala en millones
yaxis2 = list(title = "Margen Operativo (%)", overlaying = "y", side = "right", tickformat = ".1f%%"),
barmode = "group",
hovermode = "x")
# Mostrar el gráfico
grafico_combinado
Figura 2.4: Desempeño por Segmentos de Productos
El desempeño de los segmentos de productos refleja oportunidades clave para optimizar la rentabilidad y potenciar las ventas. Men’s Street Footwear lidera en ventas (USD 27.7M) y margen operativo (42%), destacando una sólida demanda y una estructura de precios favorable. Women’s Apparel también muestra un buen desempeño con ventas de USD 23.9M y un margen de 40.6%, indicando una propuesta de valor competitiva.
En contraste, Men’s Athletic Footwear presenta el margen más bajo (36.1%), lo que sugiere la necesidad de evaluar estrategias de pricing y costos. Women’s Street Footwear también podría beneficiarse de acciones para mejorar su rentabilidad, dado su margen del 37.8%.
Recomendaciones clave: -Reforzar la estrategia comercial en Men’s Street Footwear y Women’s Apparel, maximizando su rentabilidad y capitalizando su demanda. -Analizar costos y estructura de precios en Men’s Athletic Footwear para mejorar su margen. -Evaluar oportunidades de diferenciación y optimización de costos en Women’s Street Footwear para incrementar su rentabilidad sin afectar su volumen de ventas.
# Cargar paquetes necesarios
require(dplyr)
require(stringr)
require(plotly)
# Filtrar productos que comienzan con "Men's" o "Women's"
Adidas_filtrado <- Adidas %>%
mutate(Product_Group = case_when(
str_starts(Product, "Men's") ~ "Men's",
str_starts(Product, "Women's") ~ "Women's",
TRUE ~ NA_character_
)) %>%
filter(!is.na(Product_Group)) # Mantener solo Men's y Women's
# ---- 1. Cálculo de participación dentro de cada Región ----
ventas_region <- Adidas_filtrado %>%
group_by(Region, Product_Group) %>%
summarise(Ventas_Totales = sum(total_sales, na.rm = TRUE)) %>%
mutate(Participacion = round(Ventas_Totales / sum(Ventas_Totales) * 100, 0)) %>%
ungroup()
# ---- 2. Cálculo de participación dentro de cada Método de Venta ----
ventas_metodo <- Adidas_filtrado %>%
group_by(sales_method, Product_Group) %>%
summarise(Ventas_Totales = sum(total_sales, na.rm = TRUE)) %>%
mutate(Participacion = round(Ventas_Totales / sum(Ventas_Totales) * 100, 0)) %>%
ungroup()
# ---- 3. Cálculo de participación dentro de cada Retailer ----
ventas_retailer <- Adidas_filtrado %>%
group_by(retailer, Product_Group) %>%
summarise(Ventas_Totales = sum(total_sales, na.rm = TRUE)) %>%
mutate(Participacion = round(Ventas_Totales / sum(Ventas_Totales) * 100, 0)) %>%
ungroup()
# ---- 4. Gráfico interactivo de participación dentro de cada Región ----
g1 <- plot_ly(ventas_region, x = ~Region, y = ~Participacion,
color = ~Product_Group, colors = c("Men's" = "blue", "Women's" = "pink"),
type = "bar", text = ~paste0(Participacion, "%"),
textposition = "outside", hoverinfo = "text") %>%
layout(title = "Participación de Ventas por Región (Productos para hombre vs. Productos para mujer)",
xaxis = list(title = "Región"),
yaxis = list(title = "Participación (%)"),
barmode = "group")
# ---- 5. Gráfico interactivo de participación dentro de cada Método de Venta ----
g2 <- plot_ly(ventas_metodo, x = ~sales_method, y = ~Participacion,
color = ~Product_Group, colors = c("Men's" = "blue", "Women's" = "pink"),
type = "bar", text = ~paste0(Participacion, "%"),
textposition = "outside", hoverinfo = "text") %>%
layout(title = "Participación de Ventas por Método de Venta (Productos para hombre vs. Productos para mujer)",
xaxis = list(title = "Método de Venta"),
yaxis = list(title = "Participación (%)"),
barmode = "group")
# ---- 6. Gráfico interactivo de participación dentro de cada Retailer ----
g3 <- plot_ly(ventas_retailer, x = ~retailer, y = ~Participacion,
color = ~Product_Group, colors = c("Men's" = "blue", "Women's" = "pink"),
type = "bar", text = ~paste0(Participacion, "%"),
textposition = "outside", hoverinfo = "text") %>%
layout(title = "Participación de Ventas por Retailer (Productos para hombre vs. Productos para mujer)",
xaxis = list(title = "Retailer"),
yaxis = list(title = "Participación (%)"),
barmode = "group")
# ---- 7. Mostrar gráficos interactivos ----
g1
g2
g3
Figura 3.1: Análisis de Participación en la Venta por Género
Para analizar la participación de las ventas por productos dirigidos a cada género, se utilizó un gráfico de barras que compara la contribución de los productos dirigidos a hombres vs. los productos dirigidos a mujeres en la venta total y la utilidad operativa, considerando las diferentes regiones, retailers y métodos de venta.
Los resultados muestran, de manera consistente, que los productos para hombres tienen una mayor participación en las ventas totales, tanto a nivel general como en cada una de las dimensiones analizadas: Retailers, Método de Venta y Región. Esta diferencia, que oscila entre el 10% y el 15%, podría atribuirse a factores socioculturales, dado que el calzado deportivo de marcas como Adidas suele considerarse un elemento clave en el consumo masculino.
Desde una perspectiva comercial, se identifican tendencias claras en los canales y ubicaciones con mayor preferencia por género. Los hombres presentan una participación destacada en las compras a través de Amazon y en tiendas físicas dentro de las regiones de Midwest y Northeast. Por otro lado, el segmento femenino tiene una mayor incidencia en las compras realizadas en outlets, particularmente en la región South, así como en la plataforma Sports Direct.
A nivel regional, los datos reflejan que los hombres predominan en las regiones de Midwest, Northeast y Southeast, mientras que las mujeres tienen una mayor presencia en las regiones de South y West. Asimismo, el análisis por método de venta confirma que, a pesar del crecimiento del comercio electrónico, la compra en tiendas físicas sigue siendo un canal relevante, especialmente para categorías como calzado.
Estos hallazgos evidencian una mayor penetración de los productos para hombres en la oferta de Adidas, pero también sugieren oportunidades de crecimiento en el segmento femenino. Para fortalecer la participación de este último, sería clave profundizar en el análisis del mercado y evaluar estrategias específicas de producto y marketing. Si bien la oferta actual presenta líneas diferenciadas por género, podría explorarse el desarrollo de productos exclusivos que respondan de manera más precisa a las preferencias del segmento femenino. Esta estrategia permitiría diversificar la oferta, incrementar la captación de este público y potenciar las ventas dentro de esta categoría.
# Cargar paquetes necesarios
require(dplyr)
require(stringr)
require(plotly)
# Filtrar productos que comienzan con "Men's" o "Women's"
Adidas_filtrado <- Adidas %>%
mutate(Product_Group = case_when(
str_starts(Product, "Men's") ~ "Men's",
str_starts(Product, "Women's") ~ "Women's",
TRUE ~ NA_character_
)) %>%
filter(!is.na(Product_Group)) # Mantener solo Men's y Women's
# ---- 1. Cálculo de participación dentro de cada Región ----
operating_profit_region <- Adidas_filtrado %>%
group_by(Region, Product_Group) %>%
summarise(Operating_Profit_Total = sum(operating_profit, na.rm = TRUE)) %>%
mutate(Participacion = round(Operating_Profit_Total / sum(Operating_Profit_Total) * 100, 0)) %>%
ungroup()
# ---- 2. Cálculo de participación dentro de cada Método de Venta ----
operating_profit_metodo <- Adidas_filtrado %>%
group_by(sales_method, Product_Group) %>%
summarise(Operating_Profit_Total = sum(operating_profit, na.rm = TRUE)) %>%
mutate(Participacion = round(Operating_Profit_Total / sum(Operating_Profit_Total) * 100, 0)) %>%
ungroup()
# ---- 3. Cálculo de participación dentro de cada Retailer ----
operating_profit_retailer <- Adidas_filtrado %>%
group_by(retailer, Product_Group) %>%
summarise(Operating_Profit_Total = sum(operating_profit, na.rm = TRUE)) %>%
mutate(Participacion = round(Operating_Profit_Total / sum(Operating_Profit_Total) * 100, 0)) %>%
ungroup()
# ---- 4. Gráfico interactivo de participación dentro de cada Región ----
g1 <- plot_ly(operating_profit_region, x = ~Region, y = ~Participacion,
color = ~Product_Group, colors = c("Men's" = "blue", "Women's" = "pink"),
type = "bar", text = ~paste0(Participacion, "%"),
textposition = "outside", hoverinfo = "text") %>%
layout(title = "Participación del Operating Profit por Región (Productos para hombre vs. Productos para mujer)",
xaxis = list(title = "Región"),
yaxis = list(title = "Participación (%)"),
barmode = "group")
# ---- 5. Gráfico interactivo de participación dentro de cada Método de Venta ----
g2 <- plot_ly(operating_profit_metodo, x = ~sales_method, y = ~Participacion,
color = ~Product_Group, colors = c("Men's" = "blue", "Women's" = "pink"),
type = "bar", text = ~paste0(Participacion, "%"),
textposition = "outside", hoverinfo = "text") %>%
layout(title = "Participación del Operating Profit por Método de Venta (Productos para hombre vs. Productos para mujer)",
xaxis = list(title = "Método de Venta"),
yaxis = list(title = "Participación (%)"),
barmode = "group")
# ---- 6. Gráfico interactivo de participación dentro de cada Retailer ----
g3 <- plot_ly(operating_profit_retailer, x = ~retailer, y = ~Participacion,
color = ~Product_Group, colors = c("Men's" = "blue", "Women's" = "pink"),
type = "bar", text = ~paste0(Participacion, "%"),
textposition = "outside", hoverinfo = "text") %>%
layout(title = "Participación del Operating Profit por Retailer (Productos para hombre vs. Productos para mujer)",
xaxis = list(title = "Retailer"),
yaxis = list(title = "Participación (%)"),
barmode = "group")
# ---- 7. Mostrar gráficos interactivos ----
g1
g2
g3
Figura 3.2: Análisis de Participación en la Utilidad Operativa por Género
El análisis de participación en la utilidad operativa muestra un comportamiento alineado con la distribución de las ventas. Dado que los productos para hombres representan una mayor proporción de las ventas totales, también contribuyen en mayor medida a la utilidad operativa. Esto confirma que las tendencias de compra identificadas, tienden a impactar proporcionalmente la rentabilidad de la compañía.
Figura 3.3: Boxplot de la composicion de la venta por Genero
# Cargar los paquetes necesarios
library(dplyr)
library(stringr)
library(ggplot2)
library(plotly)
# Filtrar productos que comienzan con "Men's" o "Women's"
Adidas_filtrado <- Adidas %>%
mutate(Product_Group = case_when(
str_starts(Product, "Men's") ~ "Men's",
str_starts(Product, "Women's") ~ "Women's",
TRUE ~ NA_character_
)) %>%
filter(!is.na(Product_Group)) # Mantener solo Men's y Women's
# ---- 1. Gráfico de caja de bigotes por Región ----
g1 <- ggplot(Adidas_filtrado, aes(x = Region, y = total_sales, fill = Product_Group)) +
geom_boxplot() +
theme_bw() +
labs(title = "Distribución de Ventas por Región y Género", x = "Región", y = "Ventas Totales") +
scale_fill_manual(values = c("Men's" = "blue", "Women's" = "pink")) +
facet_wrap(~ Product_Group) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10))
g1_interactive <- ggplotly(g1)
# ---- 2. Gráfico de caja de bigotes por Método de Venta ----
g2 <- ggplot(Adidas_filtrado, aes(x = sales_method, y = total_sales, fill = Product_Group)) +
geom_boxplot() +
theme_bw() +
labs(title = "Distribución de Ventas por Método de Venta y Género", x = "Método de Venta", y = "Ventas Totales") +
scale_fill_manual(values = c("Men's" = "blue", "Women's" = "pink")) +
facet_wrap(~ Product_Group) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10))
g2_interactive <- ggplotly(g2)
# ---- 3. Gráfico de caja de bigotes por Retailer ----
g3 <- ggplot(Adidas_filtrado, aes(x = retailer, y = total_sales, fill = Product_Group)) +
geom_boxplot() +
theme_bw() +
labs(title = "Distribución de Ventas por Retailer y Género", x = "Retailer", y = "Ventas Totales") +
scale_fill_manual(values = c("Men's" = "blue", "Women's" = "pink")) +
facet_wrap(~ Product_Group) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10))
g3_interactive <- ggplotly(g3)
# Mostrar los gráficos interactivos
g1_interactive
g2_interactive
g3_interactive
El análisis de los gráficos de caja (Boxplot) para “Retailer”, “Método de ventas” y “Región” en relación con la “Participación en ventas” muestra una distribución sesgada a la derecha, con una mediana más cercana a Q1 que a Q3. Esto sugiere la presencia de niveles de ventas excepcionalmente altos.
El amplio rango intercuartílico (IQR = 14,298) indica una variabilidad significativa en los componentes de la venta, reflejando una dispersión notable. Asimismo, la presencia de valores atípicos confirma fluctuaciones extremas, lo que sugiere escenarios de ventas bajo condiciones particulares o de concentraciones de demanda en productos específicos.
En línea con los análisis previos, el género masculino mantiene una mayor participación en las ventas en todas las categorías evaluadas, reforzando la tendencia observada en otros enfoques.
En conclusión, el Boxplot confirma la existencia de alta variabilidad en el comportamiento de las ventas, lo que subraya la necesidad de estrategias dirigidas a optimizar la estabilidad comercial y aprovechar oportunidades en segmentos con alta dispersión.
library(dplyr)
# Asegurar que la variable Gender existe antes de filtrarla
Adidas <- Adidas %>%
mutate(Gender = case_when(
grepl("Men's", Product) ~ "Men",
grepl("Women's", Product) ~ "Women",
TRUE ~ NA_character_ # Evita valores no categorizados
))
# Ahora sí, aplicar el filtro
Adidas_filtered <- Adidas %>%
filter(Gender %in% c("Men", "Women")) %>%
group_by(Region, Gender) %>%
summarise(
Total_Sales = sum(total_sales, na.rm = TRUE),
Operating_Profit = sum(operating_profit, na.rm = TRUE),
.groups = "drop"
)
library(plotly)
library(dplyr)
library(stringr)
# Filtrar y clasificar productos por género
data_gender <- Adidas %>%
filter(str_detect(Product, "Men's|Women's")) %>%
mutate(Gender = ifelse(str_detect(Product, "Men's"), "Men", "Women")) %>%
group_by(Gender) %>%
summarise(
Total_Sales = sum(total_sales, na.rm = TRUE),
Operating_Profit = sum(operating_profit, na.rm = TRUE)
) %>%
mutate(Operating_Margin = round((Operating_Profit / Total_Sales) * 100, 2)) # Redondear a 2 decimales
# Crear gráfico combinado
grafico_combinado <- data_gender %>%
plot_ly() %>%
# Barras de Ventas Totales
add_trace(x = ~Gender, y = ~Total_Sales, type = 'bar', name = "Ventas Totales",
marker = list(color = 'blue'),
text = ~paste0(formatC(Total_Sales / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Barras de Utilidad Operativa
add_trace(x = ~Gender, y = ~Operating_Profit, type = 'bar', name = "Utilidad Operativa",
marker = list(color = 'red'),
text = ~paste0(formatC(Operating_Profit / 1e6, format = "f", big.mark = ",", digits = 1), "M"),
textposition = "none", hoverinfo = "text") %>%
# Puntos del Margen Operativo en negro oscuro con etiquetas en negrita y 2 decimales
add_trace(x = ~Gender, y = ~Operating_Margin, type = 'scatter', mode = 'markers+text',
name = "Margen Operativo (%)",
marker = list(size = 8, color = 'black', symbol = "circle"), # Puntos en negro oscuro
yaxis = "y2",
text = ~paste0(formatC(Operating_Margin, format = "f", digits = 2), "%"), # Etiquetas con 2 decimales
textposition = "top center",
textfont = list(color = 'black', size = 14, family = "Arial", bold = TRUE)) %>% # Negrita y legible
# Configuración del diseño con escala en millones y eje secundario de 0% a 100%
layout(title = "Ventas Totales, Utilidad Operativa y Margen Operativo por Género",
xaxis = list(title = "Género"),
yaxis = list(title = "Monto en Millones (USD)", tickformat = ".1s"),
yaxis2 = list(title = "Margen Operativo (%)", overlaying = "y", side = "right", range = c(0, 100), tickformat = ".2f%%"), # Eje de 0 a 100% con formato adecuado
barmode = "group",
hovermode = "x")
# Mostrar el gráfico
grafico_combinado
Figura 3.4: Niveles de Venta Total, Utilidad Operativa y Margen Operativo por Genero
Este gráfico de barras ilustra la contribución de cada género (masculino y femenino) al margen operativo dentro de las ventas totales de nuestra base de datos de Adidas. Los resultados muestran que, en términos absolutos, el género masculino domina tanto en participación de ventas (en millones de dólares) como en utilidad operativa.
Adicionalmente, al analizar el margen operativo, se observa que el segmento femenino presenta una ligera ventaja de 0.04%, lo que sugiere una eficiencia operativa uniforme entre ambos grupos.
library(ggplot2)
library(dplyr)
library(tidyr)
library(plotly)
library(scales) # Para formatear números en millones
# ====== Ventas y Utilidad por Región y Género ======
Adidas_region <- Adidas %>%
filter(Gender %in% c("Men", "Women")) %>%
group_by(Region, Gender) %>%
summarise(
Total_Sales = sum(total_sales, na.rm = TRUE) / 1e6,
Operating_Profit = sum(operating_profit, na.rm = TRUE) / 1e6
) %>%
ungroup()
Adidas_region_long <- Adidas_region %>%
pivot_longer(cols = c(Total_Sales, Operating_Profit), names_to = "Metric", values_to = "Value")
p1 <- ggplot(Adidas_region_long, aes(
x = Region, y = Value, fill = Metric,
text = paste0(
"Métrica: ", Metric, "<br>",
"Valor: ", label_number(accuracy = 0.1, scale = 1, suffix = "M")(Value), "<br>",
"Género: ", coalesce(Gender, "Desconocido")
)
)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ Gender) +
labs(title = "Ventas Totales & Utilidad Operativa por Región y Género",
y = "Millones de Dólares", x = "Región") +
theme_minimal() +
scale_fill_manual(values = c("Total_Sales" = "blue", "Operating_Profit" = "red")) +
scale_y_continuous(labels = label_number(accuracy = 0.1, scale = 1, suffix = "M")) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(p1, tooltip = "text")
# ====== Ventas y Utilidad por Retailer y Género ======
Adidas_retailer <- Adidas %>%
filter(Gender %in% c("Men", "Women")) %>%
group_by(retailer, Gender) %>%
summarise(
Total_Sales = sum(total_sales, na.rm = TRUE) / 1e6,
Operating_Profit = sum(operating_profit, na.rm = TRUE) / 1e6
) %>%
ungroup()
Adidas_retailer_long <- Adidas_retailer %>%
pivot_longer(cols = c(Total_Sales, Operating_Profit), names_to = "Metric", values_to = "Value")
p2 <- ggplot(Adidas_retailer_long, aes(
x = retailer, y = Value, fill = Metric,
text = paste0(
"Métrica: ", Metric, "<br>",
"Valor: ", label_number(accuracy = 0.1, scale = 1, suffix = "M")(Value), "<br>",
"Género: ", coalesce(Gender, "Desconocido")
)
)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ Gender) +
labs(title = "Ventas Totales & Utilidad Operativa por Retailer y Género",
y = "Millones de Dólares", x = "Retailer") +
theme_minimal() +
scale_fill_manual(values = c("Total_Sales" = "blue", "Operating_Profit" = "red")) +
scale_y_continuous(labels = label_number(accuracy = 0.1, scale = 1, suffix = "M")) +
theme(axis.text.x = element_text(angle = 60, hjust = 1))
ggplotly(p2, tooltip = "text")
# ====== Ventas y Utilidad por Método de Venta y Género ======
Adidas_sales_method <- Adidas %>%
filter(Gender %in% c("Men", "Women")) %>%
group_by(sales_method, Gender) %>%
summarise(
Total_Sales = sum(total_sales, na.rm = TRUE) / 1e6,
Operating_Profit = sum(operating_profit, na.rm = TRUE) / 1e6
) %>%
ungroup()
Adidas_sales_method_long <- Adidas_sales_method %>%
pivot_longer(cols = c(Total_Sales, Operating_Profit), names_to = "Metric", values_to = "Value")
p3 <- ggplot(Adidas_sales_method_long, aes(
x = sales_method, y = Value, fill = Metric,
text = paste0(
"Métrica: ", Metric, "<br>",
"Valor: ", label_number(accuracy = 0.1, scale = 1, suffix = "M")(Value), "<br>",
"Género: ", coalesce(Gender, "Desconocido")
)
)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ Gender) +
labs(title = "Ventas Totales & Utilidad Operativa por Método de Venta y Género",
y = "Millones de Dólares", x = "Método de Venta") +
theme_minimal() +
scale_fill_manual(values = c("Total_Sales" = "blue", "Operating_Profit" = "red")) +
scale_y_continuous(labels = label_number(accuracy = 0.1, scale = 1, suffix = "M")) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(p3, tooltip = "text")
Figura 3.5: Comparación de Ventas Totales, Utilidad Operativa y Margen Operativo por Género según Región, Retailer y Método de Venta
Del análisis a traves de estas tres dimensiones y comparando los géneros, se pueden extraer las siguientes conclusiones:
La región “West” registra los mayores niveles de venta total y utilidad operativa tanto para el género masculino como femenino.
En el análisis por Retailer, si bien los gráficos de participación indicaban que Amazon y Foot Locker tenían la mayor cuota de mercado en ventas, en términos de ingresos absolutos, West Gear y Foot Locker lideran, con aproximadamente 16-17 millones de dólares en ventas para hombres y 13-15 millones para mujeres.
Un patrón similar se observa en los métodos de venta. Aunque las tiendas físicas (In-Store) tienen una mayor participación en ventas, el canal online genera ingresos superiores, con una diferencia de 4 millones de dólares respecto a In-Store.
Por último, en todos los casos analizados, los ingresos en millones de dólares mantienen una relación proporcional con la utilidad operativa.
library(ggplot2)
library(plotly)
# Crear gráfico interactivo con correlación y tendencia loess
ggplotly(
ggplot(Adidas, aes(x = total_sales, y = operating_profit,
text = paste0("Ventas Totales: $", scales::comma(round(total_sales, 0)), "<br>",
"Utilidad Operativa: $", scales::comma(round(operating_profit, 0))))) +
geom_point(color = "purple", alpha = 0.8, size = 2) + # Puntos con color y transparencia
geom_smooth(method = "loess", color = "black", fill = "lightgray", se = TRUE, linetype = "solid", linewidth = 1) + # Línea de tendencia LOESS destacada
labs(
title = paste("Relación entre Utilidad Operativa y Ventas Totales\nCoef. de correlación: ",
round(cor(Adidas$operating_profit, Adidas$total_sales, use = "complete.obs"), 2)),
x = "Ventas Totales",
y = "Utilidad Operativa"
) +
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)
),
tooltip = "text" # Mejor interactividad en el hover
)
Figura 4.1: Relación entre Ventas Totales y Utilidad Operativa
El coeficiente de correlación de 0.94 indica una relación positiva y muy fuerte entre las ventas totales y la utilidad operativa. Esto sugiere que, a medida que aumentan las ventas, la utilidad operativa tiende a incrementarse de manera proporcional. La fuerte correlación implica que las variaciones en las ventas explican en gran medida las fluctuaciones en la utilidad operativa, con poca dispersión en los datos.
Desde una perspectiva de negocio, esta relación confirma que un mayor volumen de ventas se traduce en una mayor rentabilidad operativa, lo cual es esperable en una empresa con una estructura de costos eficiente.
La alta correlación entre ventas y utilidad operativa sugiere una estructura de costos estable, donde los costos variables y fijos están bien administrados. Este resultado es clave para la toma de decisiones estratégicas, ya que permite prever el impacto financiero de incrementar las ventas en diferentes segmentos. No obstante, sería recomendable profundizar en el análisis de los márgenes operativos por segmento, para identificar oportunidades de optimización y mejorar la rentabilidad en unidades con menores contribuciones.
library(ggplot2)
library(plotly)
# Calcular la correlación entre units_sold y total_sales
correlation_value <- cor(Adidas$units_sold, Adidas$total_sales, use = "complete.obs")
# Crear gráfico interactivo
ggplotly(
ggplot(Adidas, aes(x = units_sold, y = total_sales,
text = paste0("Unidades Vendidas: ", round(units_sold, 0), "<br>",
"Ventas Totales: $", scales::comma(round(total_sales, 2))))) +
geom_point(color = "darkgreen", alpha = 0.7, size = 2) + # Puntos con transparencia
geom_smooth(method = "loess", se = TRUE, color = "black") + # Línea de tendencia LOESS
labs(
title = paste("Relación entre Unidades Vendidas y Ventas Totales\nCoef. de correlación: ", round(correlation_value, 2)),
x = "Unidades Vendidas",
y = "Ventas Totales (USD)"
) +
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)
),
tooltip = "text" # Mostrar información en el hover
)
Figura 4.2: Relación entre Ventas Totales y Unidades Vendidas
El gráfico de dispersión muestra una fuerte relación positiva entre las Unidades Vendidas (X) y las Ventas Totales (Y), con un coeficiente de correlación de 0.92. Esto indica que a medida que aumenta el número de unidades vendidas, las ventas totales también crecen de manera proporcional.
Desde una perspectiva comercial, esta relación sugiere que el volumen de ventas es un factor clave en el crecimiento de los ingresos. Sin embargo, no proporciona información sobre la rentabilidad individual de los productos, por lo que es necesario evaluar los márgenes operativos para una visión más completa.
Financieramente, esta alta correlación reafirma que estrategias enfocadas en aumentar la rotación de productos pueden impulsar el crecimiento de ingresos. No obstante, es importante analizar la relacion entre el volumen con la rentabilidad.
library(ggplot2)
library(plotly)
library(scales)
# Calcular la correlación entre price_per_unit y total_sales
correlation_value <- cor(Adidas$price_per_unit, Adidas$total_sales, use = "complete.obs")
# Crear gráfico interactivo
ggplotly(
ggplot(Adidas, aes(x = price_per_unit, y = total_sales,
text = paste0("Precio Unitario: $", round(price_per_unit, 2), "<br>",
"Ventas Totales: $", comma(round(total_sales, 2))))) +
geom_point(color = "darkblue", alpha = 0.7, size = 2) + # Puntos con transparencia
geom_smooth(method = "loess", se = TRUE, color = "black") + # Línea de tendencia LOESS
labs(
title = paste("Relación entre Precio Unitario y Ventas Totales\nCoef. de correlación: ", round(correlation_value, 2)),
x = "Precio Unitario (USD)",
y = "Ventas Totales (USD)"
) +
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)
),
tooltip = "text" # Mostrar información en el hover
)
Figura 4.3: Relación entre Ventas Totales y Precio Unitario
El gráfico de dispersión entre Ventas Totales (Y) y Precio Unitario (X) muestra una correlación positiva moderada de 0.54. Aunque existe una relación entre ambas variables, no es tan fuerte como en los casos anteriores, lo que indica que el precio unitario no es el único determinante de los ingresos totales.
Desde un punto de vista comercial, esto sugiere que, si bien los productos con precios más altos pueden generar mayores ingresos, otros factores como el volumen de ventas y la estrategia de mercado también juegan un papel importante.
Financieramente, esta correlación moderada resalta la necesidad de una estrategia de pricing equilibrada. Un aumento en el precio unitario no siempre se traduce en un aumento proporcional en las ventas totales, por lo que es crucial analizar la elasticidad de la demanda para cada uno de los segmentos de productos, regiones, retailers y metodos de venta para entender correlaciones diferenciadas que brinden mayor informacion para la toma de decisiones estrategicas encaminadas a la maximizacion de los niveles de venta y utilidad.
library(ggplot2)
library(plotly)
# Calcular la correlación entre operating_profit y price_per_unit
correlation_value <- cor(Adidas$operating_profit, Adidas$price_per_unit, use = "complete.obs")
# Crear gráfico interactivo
ggplotly(
ggplot(Adidas, aes(x = price_per_unit, y = operating_profit,
text = paste0("Precio por Unidad: $", round(price_per_unit, 2), "<br>",
"Utilidad Operativa: $", scales::comma(round(operating_profit, 0))))) +
geom_point(color = "blue", alpha = 0.7, size = 2) + # Puntos con transparencia
geom_smooth(method = "loess", se = TRUE, color = "black") + # Línea de tendencia LOESS
labs(
title = paste("Relación entre Precio por Unidad y Utilidad Operativa\nCoef. de correlación: ", round(correlation_value, 2)),
x = "Precio por Unidad (USD)",
y = "Utilidad Operativa (USD)"
) +
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)
),
tooltip = "text" # Mostrar información en el hover
)
Figura 4.4: Relación entre Utilidad Operativa y Precio Unitario
La relación entre Utilidad Operativa y Precio Unitario, con una correlación de 0.50, es similar a la observada entre Precio Unitario y Ventas Totales. Aunque un mayor precio unitario puede contribuir a una mayor utilidad operativa, su impacto no es determinante por sí solo. Factores como el volumen de ventas, los costos asociados y la estrategia comercial juegan un papel clave en la rentabilidad.
Para buscar optimizar la utilidad operativa y el margen operativo, se recomienda profundizar en el análisis de correlacion segmentando las variables por región, retailer, método de venta y tipo de producto. Esto permitirá identificar patrones específicos y tomar decisiones estratégicas más precisas.