1 Descripción General

Adidas es una empresa de reconocimiento global, consolidada como una de las principales referentes en la industria de artículos deportivos. Fundada en 1949 por Adolf Dassler en Herzogenaurach, Alemania -ciudad donde actualmente mantiene su sede central-, la compañía se especializa en el diseño, fabricación y comercialización de calzado, indumentaria y accesorios deportivos.

A lo largo de su trayectoria, Adidas ha construido una sólida reputación gracias a su compromiso con la innovación, la calidad y el rendimiento de sus productos. Su estrategia empresarial se apoya en el desarrollo de tecnologías avanzadas y en la creación de diseños funcionales que satisfacen las exigencias tanto de atletas profesionales como de consumidores cotidianos.

La empresa opera a nivel global a través de una extensa red de filiales, sucursales y alianzas estratégicas. Su modelo de distribución combina tiendas propias, plataformas de comercio electrónico y franquicias, lo que le permite mantener una presencia competitiva y adaptarse a los distintos contextos de mercado.

2 Objetivo del Análisis

Este estudio tiene como objetivo realizar un análisis financiero detallado del desempeño de Adidas en el mercado de los Estados Unidos, enfocado particularmente en sus puntos de venta distribuidos por región, estado, ciudad y canal de comercialización (tiendas propias, franquicias y ventas en línea).

La metodología aplicada se basa en la recopilación de datos cuantitativos relevantes, como precio unitarios, unidades vendidas, ventas totales y utilidad operativa, complementada con un enfoque de estadística descriptiva. Este enfoque permitirá detectar posibles anomalías, patrones de comportamiento y diferencias regionales significativas en los resultados financieros.

El análisis busca no solo evaluar la rentabilidad de las operaciones, sino también identificar oportunidades de mejora y tendencias de consumo, con el fin de generar recomendaciones estratégicas basadas en información precisa, segmentada y contextualizada.

El análisis regional preliminar identificó que la región West contribuye con el 30.3% de las ventas totales de Adidas en EE.UU. equivalente a 36.436.157 USD, posicionándose como la región con mayor participación en ingresos. Esta relevancia estratégica justifica un análisis financiero profundo para evaluar su desempeño, rentabilidad y eficiencia operativa, con foco en los productos comercializados.

library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
library(readxl)
datos_1ad <- read_excel("C:/Users/CRISTIAN/Desktop/ANDRES ANALITICA NEG/MOD 1/caso 1/Adidas.xlsx")
grafico_anillo_ingresos <- datos_1ad %>% 
  plot_ly(labels = ~Region, values = ~total_sales, type = 'pie',
    hole = 0.6,
    marker = list(
      colors = c('#3498db', '#2ecc71', '#e74c3c', '#f39c12'),  # Paleta profesional
      line = list(color = '#FFFFFF', width = 2)  # Borde blanco para mejor contraste
    ),
    textinfo = 'label+percent',
    hoverinfo = 'label+value+percent',
    textfont = list(  # Fuente para etiquetas internas
      family = 'Lato',
      size = 14,
      color = '#FFFFFF'
    ),
    hovertemplate = paste(  # Plantilla personalizada para hover
      '<b>%{label}</b><br>',
      'Ventas: $%{value:,.0f}<br>',
      '(%{percent})<extra></extra>'
    )
  ) %>% 
  layout(
    title = list(
      text = "<b>Gráfico 1. Distribución de Ingresos de Adidas por Región</b>",
      font = list(
        family = 'Montserrat',
        size = 18,
        color = '#2C3E50'
      ),
      x = 0.05  # Alineación izquierda
    ),
    showlegend = TRUE,
    legend = list(
      font = list(
        family = 'Lato',
        size = 14,
        color = '#333333'
      ),
      orientation = 'h',  # Leyenda horizontal
      x = 0.5,  # Centrado
      y = -0.1  # Posición bajo el gráfico
    ),
    font = list(  # Fuente global
      family = 'Lato',
      size = 14,
      color = '#333333'
    ),
    annotations = list(  # Anotación central
      text = 'TOTAL',
      x = 0.5,
      y = 0.5,
      showarrow = FALSE,
      font = list(
        family = 'Montserrat',
        size = 18,
        color = '#3498DB'
      )
    ),
    margin = list(l = 20, r = 20, b = 80, t = 80)  # Espaciado mejorado
  ) %>% 
  config(displayModeBar = FALSE)  # Oculta barra de herramientas

grafico_anillo_ingresos
library(readxl)
datos_2ad <- read_excel("C:/Users/CRISTIAN/Desktop/ANDRES ANALITICA NEG/MOD 1/caso 1/Adidas.xlsx")

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

require(RecordLinkage)

pos = which(jarowinkler("West",datos_2ad$Region)>0.98)
datos_west=datos_2ad[pos,]

3 Desempeño general

Total ventas por ciudad - región West

# PASO 1: Cargar las librerías necesarias
if (!require("pacman")) install.packages("pacman")
pacman::p_load(ggplot2, dplyr, scales, readxl, showtext, plotly)  # Añadí plotly

# Cargar fuentes de Google
font_add_google("Montserrat", "montserrat")
font_add_google("Lato", "lato")
showtext_auto()

# PASO 3: Procesar TODAS las ciudades de la región West
west_data <- datos_1ad %>% 
  filter(tolower(Region) == "west") %>%
  group_by(City) %>%
  summarise(
    Total_Units = sum(units_sold, na.rm = TRUE),
    Total_Sales = sum(total_sales, na.rm = TRUE),
    Avg_Price = mean(price_per_unit, na.rm = TRUE)
  ) %>%
  arrange(desc(Total_Sales)) %>%
  mutate(
    # Preparamos texto para el tooltip
    Tooltip = paste(
      "<b>Ciudad:</b>", City, "<br>",
      "<b>Ventas:</b>", scales::dollar(Total_Sales), "<br>",
      "<b>Unidades:</b>", scales::comma(Total_Units), "<br>",
      "<b>Precio promedio:</b>", scales::dollar(Avg_Price))
  )

# PASO 4: Crear el gráfico base de ggplot con información para tooltips
p <- ggplot(west_data, aes(x = reorder(City, Total_Sales), y = Total_Sales,
             text = Tooltip)) +  # Usamos el texto preparado
  geom_col(aes(fill = Total_Sales), width = 0.8, show.legend = FALSE) +
  scale_fill_gradient(low = "#56B1F7", high = "#132B43") +
  scale_y_continuous(
    labels = scales::dollar_format(),
    expand = expansion(mult = c(0, 0.15))
  ) +
  labs(
    title = "Gráfico 2. Ventas por ciudad - región West",
    subtitle = "Todas las ciudades ordenadas por volumen total de ventas",
    x = "Ciudad",
    y = "Ventas Totales (USD)",
    caption = paste("Total de ciudades analizadas:", nrow(west_data))
  ) +
  coord_flip() +
  theme_minimal() +
  theme(
    text = element_text(family = "lato", color = "#333333"),
    plot.title = element_text(family = "montserrat", face = "bold", size = 20, color = "#2C3E50"),
    plot.subtitle = element_text(family = "lato", size = 12, color = "#7f8c8d"),
    axis.title = element_text(family = "montserrat"),
    axis.text = element_text(family = "lato"),
    axis.text.y = element_text(size = 10),
    panel.grid.major.y = element_blank(),
    plot.caption = element_text(family = "lato")
  )

# Convertir a gráfico interactivo con plotly
ggplotly(p, tooltip = "text") %>%
  layout(
    hoverlabel = list(
      bgcolor = "white",
      font = list(family = "montserrat", size = 12),
      bordercolor = "lightgray"
    ),
    margin = list(l = 100)  # Ajuste para etiquetas de eje Y
  ) %>%
  config(displayModeBar = FALSE)  # Ocultar barra de herramientas de plotly

La grafica anterior nos muestra que:

1.San Francisco concentra el mayor volumen de ventas con $4.99M, lo que indica una alta dependencia de este mercado para la region evaluada.

2.Los Ángeles ($3.47M) y Seattle ($2.52M) representan mercados secundarios clave.

3.Salt Lake City y Anchorage presentan el menor desempeño, con ventas por debajo de $1.7M., estados dos cuidades tienen gran oportunidad de mejora ya que demuestran espacio para estrategias de desarrollo comercial local.

Comparativo utilidad operativa y ventas totales por producto
library(ggplot2)
library(dplyr)
library(plotly)
library(scales)
library(tidyr)

# Procesamiento de datos
datos_long <- datos_west %>%
  group_by(Product) %>%
  summarise(
    total_sales = sum(total_sales),
    operating_profit = sum(operating_profit)
  ) %>%
  mutate(
    profit_ratio = operating_profit / total_sales
  ) %>%
  pivot_longer(
    cols = c(total_sales, operating_profit),
    names_to = "variable",
    values_to = "valor"
  )

# Gráfico con ggplot - CORRECCIÓN DE PARÉNTESIS
grafico <- ggplot(datos_long, aes(
  x = Product,
  y = valor,
  fill = variable,
  text = paste(
    "Producto:", Product, "<br>",
    "Monto:", dollar(valor), "<br>",
    "% Utilidad/Ventas:", percent(profit_ratio)
  )
)) +
  geom_col(
    position = position_dodge(width = 0.7),  # Posición lado a lado
    width = 0.6  # Ancho de las barras
  ) +  # CORRECCIÓN: Paréntesis correctamente cerrado aquí
  scale_fill_manual(
    values = c(
      "total_sales" = "#3498DB",
      "operating_profit" = "#2ECC71"
    ),
    labels = c("Ventas Totales", "Utilidad Operativa")
  ) +
  scale_y_continuous(labels = dollar_format()) +
  labs(
    title = "Gráfico 3. Comparativo utilidad operativa - ventas totales",
    x = NULL,
    y = NULL,
    fill = NULL
  ) +
  theme_minimal(base_family = "Lato") +
  theme(
    plot.title = element_text(family = "Montserrat", face = "bold", size = 16, color = "#2C3E50"),
    axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, family = "Lato"),
    axis.text.y = element_text(family = "Lato"),
    legend.text = element_text(family = "Lato"),
    legend.title = element_blank()
  )

# Convertir a plotly
ggplotly(grafico, tooltip = "text") %>%
  layout(
    hoverlabel = list(
      bgcolor = "white",
      font = list(family = "Arial", size = 12)
    ),
    annotations = list(
      list(
        x = 1,
        y = -0.2,
        text = "",
        showarrow = FALSE,
        xref = "paper",
        yref = "paper",
        xanchor = "right",
        font = list(size = 10, family = "Lato")
      )
    )
  ) %>%
  config(
    displayModeBar = TRUE,
    modeBarButtonsToRemove = c("zoom2d", "pan2d", "select2d")
  )

En la gráfica anterior se observa que:

Existe una discrepancia en Women’s Apparel:Altas ventas pero utilidad operativa desproporcionadamente baja.Puede tener una mala gestión de costos, precios inadecuados o estructura operativa ineficiente.

Producto excelente Men’s Street Footwear:Alto volumen de ventas y utilidad operativa sólida.

Bajo Desempeño en Women’s Athletic Footwear: Ventas y utilidad bajas.

4 Análisis de Rentabilidad

Indicadores de centralidad
Medianas de las variables
# Cargar librerías necesarias
library(kableExtra)
library(scales)

# Calcular las medianas
resultado_mediana <- datos_west %>% 
  group_by(Product) %>% 
  summarise(
    "Mediana price_per_unit" = median(price_per_unit, na.rm = TRUE),
    "Mediana units_sold" = median(units_sold, na.rm = TRUE),
    "Mediana total_sales" = median(total_sales, na.rm = TRUE),
    "Mediana operating_profit" = median(operating_profit, na.rm = TRUE),
    "Mediana operating_margin" = median(operating_margin, na.rm = TRUE)
  ) %>% 
  mutate(
    "Mediana price_per_unit" = dollar(`Mediana price_per_unit`, accuracy = 0.01),
    "Mediana total_sales" = dollar(`Mediana total_sales`, accuracy = 1),
    "Mediana operating_profit" = dollar(`Mediana operating_profit`, accuracy = 1),
    "Mediana operating_margin" = percent(`Mediana operating_margin`, accuracy = 0.1),
    "Mediana units_sold" = comma(`Mediana units_sold`, accuracy = 0.1)
  ) %>% 
  arrange(desc(`Mediana operating_margin`))

# Crear tabla con formato ejecutivo
resultado_mediana %>%
  kable(
    caption = "<b>Tabla 1. Indicador de centralidad Mediana por Producto - Adidas Región West</b>",
    align = c('l', rep('c', ncol(resultado_mediana)-1)),
    escape = FALSE
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center",
    html_font = "'Lato', sans-serif"  # Fuente para cuerpo de tabla
  ) %>%
  row_spec(
    0, 
    bold = TRUE, 
    color = "white", 
    background = "#2C3E50",
    extra_css = "font-family: 'Montserrat', sans-serif; font-weight: 600;"
  ) %>%
  column_spec(
    1, 
    bold = TRUE,
    extra_css = "font-family: 'Montserrat', sans-serif;"
  ) %>%
  add_header_above(
    c(" " = 1, "Métricas de Desempeño" = 5),
    background = "#3498DB",
    color = "white",
    font_size = 16,
    extra_css = "font-family: 'Montserrat', sans-serif;"
  ) %>%
  footnote(
    general = "Fuente: Datos internos",
    general_title = "",
    footnote_as_chunk = TRUE,
    escape = FALSE
  )
Tabla 1. Indicador de centralidad Mediana por Producto - Adidas Región West
Métricas de Desempeño
Product Mediana price_per_unit Mediana units_sold Mediana total_sales Mediana operating_profit Mediana operating_margin
Men’s Apparel $53.00 145.0 $7,810 $3,296 42.0%
Men’s Street Footwear $45.00 238.5 $11,294 $5,135 42.0%
Women’s Athletic Footwear $46.50 158.0 $7,500 $3,058 40.0%
Women’s Street Footwear $47.00 194.0 $8,944 $3,915 40.0%
Men’s Athletic Footwear $50.00 216.5 $10,636 $3,871 37.0%
Women’s Apparel $55.00 196.0 $11,151 $3,599 31.0%
Fuente: Datos internos

De la tabla anterior cabe resaltar los siguientes datos relevantes:

1. Precios unitarios

Producto con mayor precio unitario: Women’s Apparel (USD 55), seguido de Men’s Apparel (USD 53) y Men’s Athletic Footwear (USD 50). Las prendas (apparel) tienen precios más altos que el calzado, especialmente en la línea femenina.

Producto con menor precio unitario: Men’s Street Footwear (USD 45). El calzado urbano masculino podría estar en un mercado más competitivo o con estrategias de precios agresivas.

2. Volumen de Ventas (Unidades Vendidas)

Mayor volumen: Men’s Street Footwear (238.5 unidades), seguido de Men’s Athletic Footwear (216.5). El calzado masculino (tanto deportivo como urbano) genera alta demanda en unidades, pero con precios más bajos.

Menor volumen: Women’s Athletic Footwear (158 unidades).Baja rotación en calzado deportivo femenino, a pesar de su precio moderado (USD 46.50). Podría requerir promociones o revisión de oferta.

3. Utilidad operativa y Margen operativo

Mayor margen operativo: Men’s Apparel y Men’s Street Footwear (42%). Aunque el apparel tiene precios altos, el calzado urbano masculino logra el mismo margen con mayor volumen.

Menor margen: Women’s Apparel (31%) a pesar de su alto precio unitario. Se puede deducir que maneja unos costos altos. Requiere análisis de estructura de costos.

Men’s Athletic Footwear: Margen bajo (37%) pese a buen volumen y precio. Se puede deducir que maneja un alto costo de producción.

4. Relación Precio-Ventas-Rentabilidad

Mejor desempeño integral: Men’s Street Footwear. Combina volumen alto (238.5 unidades), margen saludable (42%) y ventas totales altas (USD 11,294).

Oportunidad de mejora: Women’s Apparel. Aunque tiene el precio más alto (USD 55) y ventas totales altas (USD 11,151), su margen (31%) es el más bajo.

Indicadores de variabilidad
Utilidad operativa
library(dplyr)
library(kableExtra)
library(scales)

# 1. Cálculo de métricas sin formatear estadísticas
resultado_var4 <- datos_west %>% 
  group_by(Product) %>% 
  summarise(
    "Mínimo operating_profit" = min(operating_profit, na.rm = TRUE),
    "Máximo operating_profit" = max(operating_profit, na.rm = TRUE),
    "Desviación estándar operating_profit" = sd(operating_profit, na.rm = TRUE) 
  )

resultado_var4 <- resultado_var4 %>% 
  mutate(
    "Mínimo operating_profit" = dollar(`Mínimo operating_profit`, accuracy = 0.01),
    "Máximo operating_profit" = dollar(`Máximo operating_profit`, accuracy = 0.01),
    "Desviación estándar operating_profit" = number(`Desviación estándar operating_profit`, accuracy = 0.01)  
  )

# 3. Creación de tabla (ajustar header_above)
resultado_var4 %>%
  kable(
    caption = "<b>Tabla 2. Indicador de variabilidad Beneficio operacional por Producto - Adidas Región West</b>",
    align = c('l', rep('c', ncol(resultado_var4)-1)),
    col.names = c("Producto", "Mínimo", "Máximo", "Desv. Estándar"),  # Nombres simplificados
    escape = FALSE
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"),
    full_width = FALSE,
    font_size = 14,
    position = "center",
    html_font = "'Lato', sans-serif"
  ) %>%
  row_spec(
    0, 
    bold = TRUE, 
    color = "white", 
    background = "#2C3E50",
    extra_css = "font-family: 'Montserrat', sans-serif; font-weight: 600;"
  ) %>%
  column_spec(
    1, 
    bold = TRUE,
    extra_css = "font-family: 'Montserrat', sans-serif;"
  ) %>%
  add_header_above(
    c(" " = 1, "Métricas de beneficio operacional" = 3),  
    background = "#3498DB",
    color = "white",
    font_size = 16,
    extra_css = "font-family: 'Montserrat', sans-serif;"
  ) %>%
  footnote(
    general = "Nota: Desviación estándar mide dispersión de precios (valores altos = mayor variabilidad)",
    general_title = "",
    footnote_as_chunk = TRUE
  )
Tabla 2. Indicador de variabilidad Beneficio operacional por Producto - Adidas Región West
Métricas de beneficio operacional
Producto Mínimo Máximo Desv. Estándar
Men’s Apparel $511.68 $28,125.00 4 897.12
Men’s Athletic Footwear $739.20 $22,050.00 3 857.71
Men’s Street Footwear $967.92 $25,287.50 5 447.72
Women’s Apparel $960.40 $28,600.00 4 292.81
Women’s Athletic Footwear $357.42 $16,362.50 3 353.37
Women’s Street Footwear $308.70 $21,450.00 4 197.20
Nota: Desviación estándar mide dispersión de precios (valores altos = mayor variabilidad)

1. Rango de Utilidad operativa (Mínimo vs. Máximo)

Producto con mayor amplitud::

Women’s Apparel ($960.40 a $28,600): Mayor rango, lo que sugiere alto potencial de rentabilidad en picos, pero también riesgo de picos de baja en ciertos períodos.

Men’s Apparel ($511.68 a $28,125): Similar al anterior, con capacidad para generar grandes beneficios.

Producto con menor amplitud:

Women’s Athletic Footwear ($357.42 a $16,362.50): Aunque el rango es amplio, su mínimo es el más bajo de la tabla, indicando posibles problemas de rentabilidad.

2. Desviación Estándar

Mayor volatilidad: Men’s Street Footwear (5,447.72) y Men’s Apparel (4,897.12). Beneficios muy sensibles a factores externos. Requiere gestión activa de costos y precios.

Menor volatilidad: Women’s Athletic Footwear (3,353.37) y Men’s Athletic Footwear (3,857.71).Líneas más estables, es decir las utilidades son más predecible facilitando los presupuestos y gestión de flujos de caja.

3. Coeficiente de correlación

Analisis de correlación variables precio por unidad y margen operativo

tabla_corre1<- datos_west %>%
  group_by(Product) %>%
  summarise(
    Coef.Correlación = cor(operating_margin, price_per_unit , use = "complete.obs")
  ) %>%
  ungroup() %>%
  mutate(
    Coef.Correlación = round(Coef.Correlación, 3)  
  )

tabla_corre1
Product Coef.Correlación
Men’s Apparel -0.077
Men’s Athletic Footwear -0.309
Men’s Street Footwear -0.164
Women’s Apparel -0.323
Women’s Athletic Footwear -0.294
Women’s Street Footwear -0.160

La tabla anterior nos muestra lo siguiente:

Todos los coeficientes muestran una relación inversa (valores negativos) entre el precio unitario y el margen operacional, pero con diferentes intensidades:

Correlación débil (-0.1 a -0.3): En la mayoría de los productos, los precios tienen menos impacto en el margen operativo.

Correlación moderada (aproximándose a -0.3): Women’s Apparel y Men’s Athletic Footwear. Los aumentos de precio podrían estar afectando la rentabilidad.

Casi nula (Men’s Apparel: -0.077) El precio no afecta significativamente el margen.

Analisis de correlación del unidades vendidas y margen operativo.

tabla_corre2<- datos_west %>%
  group_by(Product) %>%
  summarise(
    Coef.Correlación = cor(units_sold, operating_margin, use = "complete.obs")
  ) %>%
  ungroup() %>%
  mutate(
    Coef.Correlación = round(Coef.Correlación, 3)  
  )

tabla_corre2
Product Coef.Correlación
Men’s Apparel -0.157
Men’s Athletic Footwear -0.592
Men’s Street Footwear -0.488
Women’s Apparel -0.369
Women’s Athletic Footwear -0.521
Women’s Street Footwear -0.500

La tabla anterior nos muestra lo siguiente:

Todos los coeficientes muestran una relación inversa (valores negativos) entre unidades vendidas y el margen operativo, pero con diferentes intensidades:

Correlaciones negativas moderadas a fuertes en la mayoría de productos (-0.369 a -0.592).

Productos más afectados (correlación más fuerte): Men’s Athletic Footwear (-0.592) - La relación inversa más marcada Women’s Athletic Footwear (-0.521) Women’s Street Footwear (-0.500)

Productos menos afectados Women’s Apparel (-0.369) - Menos sensible al volumen Men’s Apparel (-0.157) - Casi neutral (relación muy débil)

5 Análisis de Eficiencia en ventas

library(scales)
library(stringr)
library(showtext)
library(tidyverse)
library(plotly)

# Configuración inicial
font_add_google("Montserrat", "montserrat")
showtext_auto()

# Preparación de datos
top_ciudades <- datos_1ad %>%
  filter(tolower(Region) == "west") %>%
  group_by(City) %>%
  summarise(
    Unidades = sum(units_sold, na.rm = TRUE),
    Ventas = sum(total_sales, na.rm = TRUE),
    Margen = sum(operating_profit, na.rm = TRUE)
  ) %>%
  arrange(desc(Ventas)) %>%
  slice_head(n = 10) %>%
  mutate(City = str_wrap(City, width = 10))

# Factores de escala
max_ventas <- max(top_ciudades$Ventas)
max_unidades <- max(top_ciudades$Unidades)
factor_escala <- max_ventas / max_unidades

# Transformación a formato largo
top_ciudades_long <- top_ciudades %>%
  pivot_longer(
    cols = c(Ventas, Unidades),
    names_to = "Metrica",
    values_to = "Valor"
  ) %>%
  mutate(
    Metrica = factor(Metrica, levels = c("Ventas", "Unidades")),
    Valor_escalado = ifelse(Metrica == "Unidades", Valor * factor_escala, Valor),
    Etiqueta = ifelse(
      Metrica == "Unidades",
      paste0(City, "\nUnidades: ", comma(Valor)),
      paste0(City, "\nVentas: $", comma(Valor))
    )
  )

# Gráfico base de ggplot
p <- ggplot(top_ciudades_long, aes(x = factor(City, levels = unique(City)))) +
  geom_col(
    aes(y = Valor_escalado, fill = Metrica, text = Etiqueta),
    position = position_dodge(width = 0.8),
    width = 0.6
  ) +
  geom_line(
    data = distinct(top_ciudades, City, Margen),
    aes(y = Margen, group = 1, color = "Margen ($)", 
        text = paste0(City, "\nMargen: $", comma(Margen))),
    size = 1.2
  ) +
  geom_point(
    data = distinct(top_ciudades, City, Margen),
    aes(y = Margen, color = "Margen ($)", 
        text = paste0(City, "\nMargen: $", comma(Margen))),
    size = 3
  ) +
  scale_y_continuous(
    name = "Ventas y Margen ($)",
    sec.axis = sec_axis(
      ~./factor_escala,
      name = "Unidades vendidas"
    ),
    labels = comma,
    expand = expansion(mult = c(0, 0.1))
  ) +
  scale_fill_manual(
    name = "Métricas",
    values = c("Ventas" = "#005b96", "Unidades" = "#88c1f2"),
    labels = c("Ventas ($)", "Unidades vendidas")
  ) +
  scale_color_manual(
    name = NULL,
    values = c("Margen ($)" = "#e74c3c")
  ) +
  labs(
    title = "Gráfico 4. Desempeño por ciudad región West",
    subtitle = "Ventas (barras azules), Unidades (barras verdes) y Margen (línea roja)",
    x = "Ciudades",
    caption = "Fuente: Datos Adidas | Unidades escaladas para comparación visual"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
    legend.position = "top",
    legend.box = "horizontal",
    plot.title = element_text(face = "bold", size = 14, margin = margin(b = 10)),  # Añadir margen inferior al título
    plot.margin = margin(t = 50, r = 20, b = 20, l = 20),  # Ajustar márgenes del gráfico
    panel.grid.major.x = element_blank()
  )

# Convertir a plotly con ajustes adicionales
ggplotly(p, tooltip = "text") %>%
  layout(
    hoverlabel = list(
      bgcolor = "white",
      font = list(family = "montserrat", size = 12)
    ),
    legend = list(orientation = "h", y = 1.15),  # Mover leyenda más arriba
    margin = list(t = 100)  # Añadir margen superior para el título
  )

La gráfica anterior nos muestra que:

1San Francisco lidera en ventas y unidades. Además, mantiene un buen margen. Esto la consolida como el mercado más completo y rentable.

2Boise y Portland no destacan por volumen, pero sí por margen. Son ejemplos de mercados rentables aunque no masivos: vale la pena potenciarlos.

3Honolulu y Albuquerque muestran un desempeño medio en ventas, pero con márgenes muy bajos, lo que reduce significativamente su aporte al beneficio neto. Es necesario revisar precios, costos o mix de productos.

4Cheyenne y Denver tienen bajo volumen y bajo margen. Su bajo retorno sugiere que deben ser reevaluadas estratégicamente antes de seguir invirtiendo en ellas.

Analisis de la efeciencia en ventas por canal de ventas

# -------------------------------------
# 1. CARGAR LIBRERÍAS
# -------------------------------------
library(ggplot2)
library(dplyr)
library(scales)
library(ggrepel)

# -------------------------------------
# 2. PREPARAR LOS DATOS
# -------------------------------------
datos_analisis <- datos_1ad %>%
  filter(tolower(Region) == "west") %>%
  mutate(
    precio_unitario = as.numeric(price_per_unit),
    unidades_vendidas = as.numeric(units_sold),
    beneficio_total = as.numeric(operating_profit),
    eficiencia = log(unidades_vendidas / precio_unitario)
  ) %>%
  group_by(Product) %>%
  summarise(
    precio_promedio = median(precio_unitario),
    unidades_totales = sum(unidades_vendidas),
    beneficio_total = sum(beneficio_total),
    eficiencia_promedio = mean(eficiencia)
  ) %>%
  mutate(
    rank_beneficio = ntile(beneficio_total, 4),
    rank_eficiencia = ntile(eficiencia_promedio, 4),
    categoria = case_when(
      rank_eficiencia >= 3 & rank_beneficio >= 3 ~ "ESTRELLA",
      rank_eficiencia >= 3 & rank_beneficio < 3 ~ "OPORTUNIDAD",
      rank_eficiencia < 3 & rank_beneficio >= 3 ~ "RENTABILIDAD",
      TRUE ~ "REVISIÓN"
    )
  )

# -------------------------------------
# 3. CONFIGURAR ELEMENTOS DEL GRÁFICO
# -------------------------------------
colores <- c(
  "ESTRELLA" = "#1D3557",
  "OPORTUNIDAD" = "#F1C453",
  "RENTABILIDAD" = "#E63946",
  "REVISIÓN" = "#A8DADC"
)

linea_eficiencia <- median(datos_analisis$eficiencia_promedio)
linea_beneficio <- median(datos_analisis$beneficio_total)

# Definir posiciones para etiquetas de cuadrantes
cuadrantes <- data.frame(
  x = c(
    linea_eficiencia + abs(diff(range(datos_analisis$eficiencia_promedio))) * 0.25,
    linea_eficiencia + abs(diff(range(datos_analisis$eficiencia_promedio))) * 0.25,
    linea_eficiencia - abs(diff(range(datos_analisis$eficiencia_promedio))) * 0.25,
    linea_eficiencia - abs(diff(range(datos_analisis$eficiencia_promedio))) * 0.25,
    linea_eficiencia
  ),
  y = c(
    linea_beneficio + abs(diff(range(datos_analisis$beneficio_total))) * 0.25,
    linea_beneficio - abs(diff(range(datos_analisis$beneficio_total))) * 0.25,
    linea_beneficio + abs(diff(range(datos_analisis$beneficio_total))) * 0.25,
    linea_beneficio - abs(diff(range(datos_analisis$beneficio_total))) * 0.25,
    linea_beneficio
  ),
  label = c(
    "Alta eficiencia\nalta rentabilidad",
    "Alta eficiencia\nbaja rentabilidad",
    "Baja eficiencia\nalta rentabilidad",
    "Baja eficiencia\nbaja rentabilidad",
    "Intermedio\n(Cerca del umbral\nde rentabilidad)"
  ),
  prioridad = c(2, 2, 2, 2, 1)
)

# Ordenar por prioridad
cuadrantes <- cuadrantes[order(cuadrantes$prioridad), ]

# -------------------------------------
# 4. CREAR EL GRÁFICO
# -------------------------------------
ggplot(datos_analisis, aes(x = eficiencia_promedio, y = beneficio_total)) +
  
  # Fondos de cuadrantes
  annotate("rect", xmin = -Inf, xmax = linea_eficiencia, ymin = linea_beneficio, ymax = Inf, alpha = 0.08, fill = colores["RENTABILIDAD"]) +
  annotate("rect", xmin = linea_eficiencia, xmax = Inf, ymin = linea_beneficio, ymax = Inf, alpha = 0.08, fill = colores["ESTRELLA"]) +
  annotate("rect", xmin = linea_eficiencia, xmax = Inf, ymin = -Inf, ymax = linea_beneficio, alpha = 0.08, fill = colores["OPORTUNIDAD"]) +
  
  # Líneas divisorias
  geom_vline(xintercept = linea_eficiencia, linetype = "dashed", linewidth = 1, color = "gray30") +
  geom_hline(yintercept = linea_beneficio, linetype = "dashed", linewidth = 1, color = "gray30") +
  
  # Etiquetas de cuadrantes
  geom_label(data = cuadrantes, aes(x = x, y = y, label = label),
            fill = "white", color = "gray20", alpha = 0.9, size = 4.5,
            fontface = "bold", lineheight = 0.85, show.legend = FALSE) +
  
  # Puntos
  geom_point(aes(size = precio_promedio, fill = categoria), shape = 21, color = "black", alpha = 0.9) +
  
  # Etiquetas de productos
  geom_label_repel(aes(label = Product), size = 3.5, max.overlaps = 30,
                  box.padding = 0.4, min.segment.length = 0,
                  point.padding = 0.5, force = 1) +
  
  # Escalas y formatos
  scale_size_continuous(name = "Precio promedio (USD)", range = c(5, 15)) +
  scale_fill_manual(name = "Categoría estratégica", values = colores) +
  scale_y_continuous(labels = dollar_format(scale = 1e-3, suffix = "K")) +
  
  # Títulos y estilo
  labs(
    title = "Gráfico 5. Matriz de rentabilidad- región West",
    subtitle = "Relación entre eficiencia (log(unidades/precio)) y beneficio total",
    x = "Índice de Eficiencia",
    y = "Beneficio Total (USD)",
    caption = "Tamaño del punto = Precio promedio = Líneas = Medianas"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5, size = 18, margin = margin(b = 8)),
    plot.subtitle = element_text(hjust = 0.5, size = 12, color = "gray30", margin = margin(b = 15)),
    axis.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 11),
    legend.position = "right",
    panel.grid.major = element_line(color = "gray92"),
    plot.background = element_rect(fill = "white", color = NA),
    plot.margin = margin(15, 15, 15, 15)
  )

Análisis Gerencial del Portafolio de Productos – Región West

La grafica anterior nos muestra que:

En la región West, la línea Men’s Street Footwear se consolida como el producto estrella del portafolio. Su destacada eficiencia operativa y sólida rentabilidad, a pesar de contar con un precio promedio moderado, reflejan una óptima alineación entre oferta, demanda y estrategia de precios.

Por el contrario, Women’s Athletic Footwear no evidencia ventajas competitivas claras. Su bajo rendimiento compromete la rentabilidad global y diluye el desempeño agregado del portafolio, lo que sugiere la necesidad de una revisión estratégica o posible reestructuración de esta línea.

El producto Men’s Apparel presenta una alta rentabilidad, pero con una eficiencia operativa limitada. Este desequilibrio indica un modelo de negocio rentable pero potencialmente ineficiente en términos logísticos, de rotación de inventario o acciones promocionales, lo que abre oportunidades de mejora.

En tanto, Women’s Apparel combina un precio elevado con un desempeño financiero solo intermedio, lo que sugiere que el valor percibido del producto no está siendo plenamente capitalizado. Una revisión de la estrategia de posicionamiento podría maximizar su rentabilidad.

Respecto al producto Men’s Athletic Footwear, si bien se encuentra adecuadamente gestionado desde una perspectiva operativa, su rentabilidad limitada podría estar siendo afectada por costos variables elevados o por una política de descuentos agresiva.

Finalmente, Women’s Street Footwear no se destaca ni en rentabilidad ni en eficiencia, lo que representa un foco de riesgo para el portafolio. Esta línea consume recursos sin generar un retorno significativo, por lo que se recomienda una evaluación profunda de su viabilidad o reposicionamiento.

library(ggplot2)
library(plotly)

# Crear gráfico con estilo tipográfico aproximado y sin leyenda
graf_blox1 <- ggplot(datos_west, aes(x = sales_method, y = units_sold, fill = sales_method)) +
  geom_boxplot() +
  labs(
    title = "Gráfico 6. Unidades vendidas por método de Venta",
    x = "Método de Venta",
    y = "Unidades Vendidas"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",  # <-- Aquí se oculta la leyenda
    plot.title = element_text(family = "Montserrat", face = "bold", size = 16, color = "#2C3E50"),
    axis.title = element_text(family = "Lato", face = "plain", size = 12, color = "#333333"),
    axis.text = element_text(family = "Lato", size = 10, color = "#333333"),
    legend.title = element_text(family = "Montserrat", size = 11, color = "#2C3E50"),
    legend.text = element_text(family = "Lato", size = 10, color = "#333333")
  )

# Convertir a gráfico interactivo
ggplotly(graf_blox1)
library(ggplot2)
library(plotly)

# Crear gráfico con estilo tipográfico aproximado y sin leyenda
graf_blox2 <- ggplot(datos_west, aes(x = sales_method, y = total_sales, fill = sales_method)) +
  geom_boxplot() +
  labs(
    title = "Gráfico 7. Ventas totales por método de Venta",
    x = "Método de Venta",
    y = "Valor ventas ($)"
  ) +
  theme_minimal() +
  theme(
    legend.position = "none",  # <-- Aquí se oculta la leyenda
    plot.title = element_text(family = "Montserrat", face = "bold", size = 16, color = "#2C3E50"),
    axis.title = element_text(family = "Lato", face = "plain", size = 12, color = "#333333"),
    axis.text = element_text(family = "Lato", size = 10, color = "#333333"),
    legend.title = element_text(family = "Montserrat", size = 11, color = "#2C3E50"),
    legend.text = element_text(family = "Lato", size = 10, color = "#333333")
  )

# Convertir a gráfico interactivo
ggplotly(graf_blox2)

Las dos graficas anteriores indican que:

Tiendas físicas (In-store): Este canal presenta una mediana alta y una baja dispersión en los datos de ventas en unidades y en ventas totales, lo que indica un comportamiento de consumo consistente y predecible. Se consolida como el canal con mejor desempeño, generando la mayor parte del volumen de ventas de manera estable.

Canal online: Muestra la mediana más baja y una distribución compacta. Esto muestra un bajo volumen de unidades vendidas con poca variabilidad, lo cual se refleja en la baja participación en el total de ingresos. Dados sus punto de dispersión en las ventas totales se presume que tambien existen promociones puntuales con picos de demanda o bases de clientes muy diversa. Es un área que requiere revisión estratégica si se desea potenciar su rendimiento.

Outlets: Se caracteriza por una alta dispersión y presencia de ventas atípicas significativamente altas. Aunque la mediana es inferior a la de las tiendas físicas, estos picos indican que existen oportunidades específicas, como promociones o liquidaciones que pueden ser aprovechadas para maximizar el potencial de este canal.

6 Recomendaciones Estratégicas

  1. Diversificación geográfica: Reducir dependencia de San Francisco activando mercados emergentes como Anchorage, Boise y Salt Lake City con campañas locales y expansión gradual del portafolio

  2. Fortalecer líneas con alto retorno como Men’s Street Footwear y Men’s Apparel.

  3. Reestructurar líneas no rentables como Women’s Street Footwear y Women’s Athletic Footwear.

  4. Consolidar el canal físico como principal fuente de ingreso.

  5. Fortalecer canal online con foco en tecnología digital por medio de experiencias de navegación fluidas y sin interrupciones.

  6. Aprovechar los outlets para campañas tácticas de inventario y generación de flujo de caja.