1. Resumen ejecutivo

Este análisis busca conocer cómo le ha ido comercialmente a Adidas y qué tan rentable ha sido su operación, teniendo en cuenta aspectos como las ventas, los precios de los productos y los márgenes de utilidad. A partir del análisis de estos datos, se busca identificar comportamientos, reconocer qué factores pueden estar influyendo en los resultados y encontrar oportunidades de mejora que ayuden a la empresa a tomar mejores decisiones y fortalecer su desempeño en el mercado.

2. Datos y preparación

2.1 Alcance y unidad de observación

La base de datos trabajada contiene 9648 filas; cada una representa las ventas, utilidad y margen operativo, para determinada linea línea productos de la marca Adidas, clasificada por distribuidor, ciudad, estado y método de venta. La base de datos proporcionada cuenta con un total de 9648 filas. La información suministrada representa las ventas de distribuidores de la marca, no de tiendas propias, unicamente datos en Estados Unidos, y no tienen una fecha como tal. El detalle de categorías por variable se presenta en la tabla de la sección 2.2 ## 2.2 Estructura y tipos de variables

Cada fila presenta las variables mostradas en la tabla a continuación:

Estructura y clasificación de variables (9.648 registros)
Variable Tipo en R Clasificación Valores únicos Unidad Valores o rango
distribuidor factor Cualitativa 6 — Ej.: Foot Locker, Walmart, Sports Direct
region factor Cualitativa 5 — Ej.: Northeast, South, West
estado factor Cualitativa 50 — Ej.: New York, Texas, California
ciudad factor Cualitativa 52 — Ej.: New York, Houston, San Francisco
producto factor Cualitativa 6 — Ej.: Men’s Street Footwear, Men’s Athletic Footwear, Women’s Street Footwear
precio_unidad numeric Cuantitativa 146 USD por unidad Mín. 7 – Máx. 110
unidades_vendidas numeric Cuantitativa 361 Cantidad de productos Mín. 0 – Máx. 1.275
ventas_total numeric Cuantitativa 3481 USD Mín. 0 – Máx. 82.500
utilidad_operativa numeric Cuantitativa 6494 USD Mín. 0 – Máx. 39.000
margen_operativo numeric Cuantitativa 127 Proporción (entre 0 y 1) Mín. 0,1 – Máx. 0,8
metodo_venta factor Cualitativa 3 — Ej.: In-store, Outlet, Online

Tipos de variable:

Cualitativas: Distribuidor, región, estado,ciudad y producto, que permiten estructurar un analis de rendimiento comercial e identificar la distrubución jerarquica. Permite tambien tener claridad de quien vende, dónde vende y qué se está vendiendo.

Cuantitativas:Precio por unidad,unidades vendidas, ventas totales,utilidad operativa, margen operativo y metodo de ventas, permiten evaluar el desempeño comercial y financiero de una empresa, identificar oportunidades de crecimiento, medir la eficiencia operativa y tomar decisiones estratégicas para incrementar las ventas y mejorar la rentabilidad.

2.3 Calidad de los datos y decisiones de limpieza

Se encuentra inconsistencia en 4 lineas de la base de datos, ya que el valor de las ventas de 4

# Analisis Explotario (EDA)

Es una etapa importante para conocer y entender mejor la información relacionada con las ventas y ganancias de Adidas. Este proceso permite reconocer tendencias, identificar comportamientos y observar cómo se distribuyen las diferentes variables.

La base de datos reúne información sobre la actividad comercial de Adidas, teniendo en cuenta sus diferentes productos, regiones, distribuidores y canales de venta. Esto facilita examinar cómo se comportan las ventas y conocer los resultados de rentabilidad del negocio, a través de las utilidades y los márgenes obtenidos.s un paso clave para comprender la información de venta y utilidades de ADIDA.

library(readxl)
library(dplyr)
library(ggplot2)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyr)
library(RecordLinkage)
library(leaflet)
library(htmltools)
library(writexl)
library(tibble)

Base de datos

library(readxl)
datos_Adidas <-  read_excel("~/Documents/CASO 1/datos_Adidas.xlsx")

# Análisis individual de las variables

Tipos de variable:

Cualitativas: Distribuidor, región, estado,ciudad y producto, que permiten estructurar un analis de rendimiento comercial e identificar la distrubución jerarquica. Permite tambien tener claridad de quien vende, dónde vende y qué se está vendiendo.

Cuantitativas:Precio por unidad,unidades vendidas, ventas totales,utilidad operativa, margen operativo y metodo de ventas, permiten evaluar el desempeño comercial y financiero de una empresa, identificar oportunidades de crecimiento, medir la eficiencia operativa y tomar decisiones estratégicas para incrementar las ventas y mejorar la rentabilidad.

A continuación, se presenta un análisis de las variables objetivo

# 1.Ingresos

Resumen de Ventas Totales
total promedio mediana desviacion minimo maximo Q1 Q3
120.166.650 12.455 7.804 12.716 0 82.500 4.065 15.864

Las ventas de Adidas registraron un valor total de 120.166.650, con un promedio de 12.455 por operación. Estas cifras muestran que la empresa maneja un número importante de transacciones comerciales. Sin embargo, al observar la mediana, que corresponde a 7.804, se puede notar que más de la mitad de las ventas tienen valores inferiores al promedio. Esto indica que buena parte de los ingresos se obtiene mediante operaciones de menor cuantía que, al acumularse, representan una participación importante en el total.

Por otra parte, la desviación estándar fue de 12.716, un valor que supera el promedio y demuestra que existen diferencias considerables entre los montos de las transacciones. Esto permite identificar que dentro del negocio se presentan tanto ventas de valores bajos como operaciones de mayor cuantía. También se encontraron cuatro registros con valor cero y una venta máxima de 82.500, lo que evidencia la existencia de algunas operaciones que pueden tener una mayor influencia en los ingresos.

Al revisar los cuartiles, se observa que el 25% de las ventas tiene valores inferiores a 4.065 (Q1), mientras que el 75% de las operaciones registra montos de hasta 15.864 (Q3). Este comportamiento permite confirmar que las ventas se concentran principalmente en valores bajos, aunque también existen algunas transacciones de mayor valor que contribuyen a incrementar los resultados comerciales.

En general, los datos muestran que los ingresos de Adidas están respaldados por una cantidad amplia de ventas de menor valor y por un grupo más reducido de operaciones de mayor cuantía. Por esta razón, los resultados del negocio dependen tanto de mantener un buen volumen de ventas como de aprovechar las oportunidades que representan las transacciones de mayor valor.

# 2.Utilidad Operativa

Resumen de Utilidad Operativa
total promedio mediana desviacion minimo maximo Q1 Q3
$47.224.968 $4.895 $3.263 $4.866 $0 $39.000 $1.753 $6.192

La utilidad operativa alcanzó un total de 47.224.968, con un promedio de 4.895 por transacción. Este resultado muestra que Adidas obtiene ganancias en sus operaciones comerciales. Sin embargo, la mediana de 3.263 indica que más de la mitad de las transacciones generan una utilidad por debajo del promedio, lo que permite ver que una parte importante del resultado se obtiene al sumar las ganancias de muchas operaciones de menor valor.

En cuanto a la variación de los datos, la desviación estándar fue de 4.866, una cifra muy cercana al promedio. Esto refleja que las ganancias cambian bastante de una transacción a otra, ya que existen operaciones que aportan poco y otras que generan utilidades más altas. También se encontraron registros con utilidad cero y una cifra máxima de 39.000, lo que muestra que algunas ventas generan ganancias mucho mayores que otras.

Al revisar los cuartiles, se encuentra que el 25% de las transacciones genera una utilidad inferior a 1.753 (Q1), mientras que el 75% registra ganancias de hasta 6.192 (Q3). Estos resultados muestran que la mayoría de las operaciones producen utilidades relativamente bajas, aunque su aporte en conjunto es importante para el resultado total de la empresa.

En general, se puede decir que Adidas obtiene buena parte de su utilidad operativa gracias a la cantidad de transacciones que realiza, aunque también cuenta con algunas operaciones que generan ganancias más altas y ayudan a mejorar el resultado del negocio.

# 3.Margen Operacional

Resumen Estadístico - Margen Operativo
promedio mediana desviacion minimo maximo Q1 Q3
42.3% 41.0% 9.7% 10.0% 80.0% 35.0% 49.0%

Los datos analizados muestran que el margen operativo de Adidas se encuentra en un promedio de 42,3%, mientras que su mediana es de 41,0%. La poca diferencia entre estos dos valores permite entender que los márgenes de ganancia tienen un comportamiento relativamente similar en la mayoría de las transacciones.

Por otro lado, la desviación estándar fue de 9,7%, lo que indica que existen variaciones en los márgenes obtenidos por la empresa. Esta situación también se refleja en los valores registrados, donde el margen más bajo fue de 10,0% y el más alto llegó al 80,0%. Esto demuestra que no todas las operaciones generan el mismo nivel de rentabilidad, pues algunas aportan menos ganancias y otras presentan resultados mucho más favorables.

Respecto a la distribución de los datos, se observa que el 25% de las transacciones tiene márgenes inferiores al 35,0% (Q1), mientras que el 75% se encuentra en valores iguales o inferiores al 49,0% (Q3). Esto permite identificar que una buena parte de las operaciones mantiene márgenes dentro de un rango relativamente similar.

En conclusión, Adidas presenta un comportamiento favorable en sus márgenes operativos, con resultados que se mantienen relativamente estables en la mayoría de las transacciones. Sin embargo, las diferencias encontradas muestran que todavía hay operaciones en las que se pueden buscar mejoras para lograr una rentabilidad más uniforme.

*cruce de variables de interes cuantitativas y cualitativas*

##*Ventas totales por el metodo de venta*

Se puede observar que el metodo que mas ventas genera son las ventas online (45M),seguido por los outlet (39,5M), y en último lugar las ventas In-store (35,7M). Las ventas online pueden obtener mejores resultados ya que es mayor la facilidad de compra y a simple vista los outlet venden más que los puntos in-store, sin embargo se puede observar que los outlet presentan una mayor cantidad de puntos de venta, por lo que se va a entrar a analizar la venta promedio por cada tienda para cada uno de los metodos de venta.

##*Venta promedio por tienda según metodo de venta

library(dplyr)
library(ggplot2)
library(scales)

# 1. Calcular indicadores por método de venta
resumen_promedio <- datos_Adidas %>%
  filter(unidades_vendidas > 0) %>%
  group_by(metodo_venta) %>%
  summarise(
    n_registros = n(),

    ventas_totales = sum(ventas_total, na.rm = TRUE),

    venta_promedio = ventas_totales / n_registros,

    .groups = "drop"
  ) %>%
  mutate(
    metodo_venta = factor(
      metodo_venta,
      levels = c("In-store", "Online", "Outlet")
    ),

    etiqueta_canal = paste0(
      metodo_venta,
      "\n(n = ",
      format(n_registros, big.mark = ".", decimal.mark = ","),
      ")"
    ),

    etiqueta_promedio = dollar(
      venta_promedio,
      prefix = "$",
      big.mark = ".",
      decimal.mark = ",",
      accuracy = 1
    )
  ) %>%
  arrange(metodo_venta)

# 2. Imprimir tabla de resultados en consola
tabla_promedio <- resumen_promedio %>%
  select(
    metodo_venta,
    n_registros,
    ventas_totales,
    venta_promedio
  )

print(tabla_promedio)
## # A tibble: 3 × 4
##   metodo_venta n_registros ventas_totales venta_promedio
##   <fct>              <int>          <dbl>          <dbl>
## 1 In-store            1740       35664375         20497.
## 2 Online              4887       44965657          9201.
## 3 Outlet              3017       39536618         13105.
# 3. Construir gráfico de barras
ggplot(
  resumen_promedio,
  aes(
    x = etiqueta_canal,
    y = venta_promedio,
    fill = metodo_venta
  )
) +

  geom_col(
    width = 0.60,
    alpha = 0.9
  ) +

  # Etiquetas de venta promedio
  geom_text(
    aes(label = etiqueta_promedio),
    vjust = -0.6,
    size = 4,
    fontface = "bold",
    color = "#333333"
  ) +

  # Colores de cada canal
  scale_fill_manual(
    values = c(
      "In-store" = "#287A55",
      "Online" = "#3985B8",
      "Outlet" = "#D69A38"
    )
  ) +

  # Eje Y con formato colombiano
  scale_y_continuous(
    labels = label_number(
      prefix = "$",
      big.mark = ".",
      decimal.mark = ",",
      accuracy = 1
    ),
    limits = c(0, NA),
    expand = expansion(mult = c(0, 0.15))
  ) +

  labs(
    title = "Venta promedio por tienda según método de venta",

    x = NULL,
    y = "Venta promedio por tienda ($)",

   
    )

  # Diseño visual
  theme_minimal() +

  theme(
    plot.title = element_text(
      hjust = 0.5,
      face = "bold",
      size = 14,
      color = "#263B5E"
    ),

    plot.subtitle = element_text(
      hjust = 0.5,
      size = 10,
      color = "#555555",
      margin = margin(b = 12)
    ),

    axis.title.y = element_text(size = 10),

    axis.text.x = element_text(
      size = 10,
      face = "bold",
      color = "#333333"
    ),

    axis.text.y = element_text(size = 9),

    legend.position = "none",

    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank(),

    plot.caption = element_text(
      hjust = 0,
      size = 8,
      color = "#666666",
      lineheight = 1.3,
      margin = margin(t = 15)
    ),

    plot.margin = margin(15, 20, 20, 15)
  )
## <theme> List of 144
##  $ line                            : <ggplot2::element_line>
##   ..@ colour       : chr "black"
##   ..@ linewidth    : num 0.5
##   ..@ linetype     : num 1
##   ..@ lineend      : chr "butt"
##   ..@ linejoin     : chr "round"
##   ..@ arrow        : logi FALSE
##   ..@ arrow.fill   : chr "black"
##   ..@ inherit.blank: logi TRUE
##  $ rect                            : <ggplot2::element_rect>
##   ..@ fill         : chr "white"
##   ..@ colour       : chr "black"
##   ..@ linewidth    : num 0.5
##   ..@ linetype     : num 1
##   ..@ linejoin     : chr "round"
##   ..@ inherit.blank: logi TRUE
##  $ text                            : <ggplot2::element_text>
##   ..@ family       : chr ""
##   ..@ face         : chr "plain"
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : chr "black"
##   ..@ size         : num 11
##   ..@ hjust        : num 0.5
##   ..@ vjust        : num 0.5
##   ..@ angle        : num 0
##   ..@ lineheight   : num 0.9
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 0 0 0
##   ..@ debug        : logi FALSE
##   ..@ inherit.blank: logi TRUE
##  $ title                           : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : NULL
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ point                           : <ggplot2::element_point>
##   ..@ colour       : chr "black"
##   ..@ shape        : num 19
##   ..@ size         : num 1.5
##   ..@ fill         : chr "white"
##   ..@ stroke       : num 0.5
##   ..@ inherit.blank: logi TRUE
##  $ polygon                         : <ggplot2::element_polygon>
##   ..@ fill         : chr "white"
##   ..@ colour       : chr "black"
##   ..@ linewidth    : num 0.5
##   ..@ linetype     : num 1
##   ..@ linejoin     : chr "round"
##   ..@ inherit.blank: logi TRUE
##  $ geom                            : <ggplot2::element_geom>
##   ..@ ink        : chr "black"
##   ..@ paper      : chr "white"
##   ..@ accent     : chr "#3366FF"
##   ..@ linewidth  : num 0.5
##   ..@ borderwidth: num 0.5
##   ..@ linetype   : int 1
##   ..@ bordertype : int 1
##   ..@ family     : chr ""
##   ..@ fontsize   : num 3.87
##   ..@ pointsize  : num 1.5
##   ..@ pointshape : num 19
##   ..@ colour     : NULL
##   ..@ fill       : NULL
##  $ spacing                         : 'simpleUnit' num 5.5points
##   ..- attr(*, "unit")= int 8
##  $ margins                         : <ggplot2::margin> num [1:4] 5.5 5.5 5.5 5.5
##  $ aspect.ratio                    : NULL
##  $ axis.title                      : NULL
##  $ axis.title.x                    : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : num 1
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 2.75 0 0 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.title.x.top                : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : num 0
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 0 2.75 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.title.x.bottom             : NULL
##  $ axis.title.y                    : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : num 10
##   ..@ hjust        : NULL
##   ..@ vjust        : num 1
##   ..@ angle        : num 90
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 2.75 0 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi FALSE
##  $ axis.title.y.left               : NULL
##  $ axis.title.y.right              : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : num 1
##   ..@ angle        : num -90
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 0 0 2.75
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.text                       : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : chr "#4D4D4DFF"
##   ..@ size         : 'rel' num 0.8
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : NULL
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.text.x                     : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : chr "bold"
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : chr "#333333"
##   ..@ size         : num 10
##   ..@ hjust        : NULL
##   ..@ vjust        : num 1
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 2.2 0 0 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi FALSE
##  $ axis.text.x.top                 : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 0 4.95 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.text.x.bottom              : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 4.95 0 0 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.text.y                     : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : num 9
##   ..@ hjust        : num 1
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 2.2 0 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi FALSE
##  $ axis.text.y.left                : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 4.95 0 0
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.text.y.right               : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 0 0 4.95
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.text.theta                 : NULL
##  $ axis.text.r                     : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : num 0.5
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : <ggplot2::margin> num [1:4] 0 2.2 0 2.2
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ axis.ticks                      : <ggplot2::element_blank>
##  $ axis.ticks.x                    : NULL
##  $ axis.ticks.x.top                : NULL
##  $ axis.ticks.x.bottom             : NULL
##  $ axis.ticks.y                    : NULL
##  $ axis.ticks.y.left               : NULL
##  $ axis.ticks.y.right              : NULL
##  $ axis.ticks.theta                : NULL
##  $ axis.ticks.r                    : NULL
##  $ axis.minor.ticks.x.top          : NULL
##  $ axis.minor.ticks.x.bottom       : NULL
##  $ axis.minor.ticks.y.left         : NULL
##  $ axis.minor.ticks.y.right        : NULL
##  $ axis.minor.ticks.theta          : NULL
##  $ axis.minor.ticks.r              : NULL
##  $ axis.ticks.length               : 'rel' num 0.5
##  $ axis.ticks.length.x             : NULL
##  $ axis.ticks.length.x.top         : NULL
##  $ axis.ticks.length.x.bottom      : NULL
##  $ axis.ticks.length.y             : NULL
##  $ axis.ticks.length.y.left        : NULL
##  $ axis.ticks.length.y.right       : NULL
##  $ axis.ticks.length.theta         : NULL
##  $ axis.ticks.length.r             : NULL
##  $ axis.minor.ticks.length         : 'rel' num 0.75
##  $ axis.minor.ticks.length.x       : NULL
##  $ axis.minor.ticks.length.x.top   : NULL
##  $ axis.minor.ticks.length.x.bottom: NULL
##  $ axis.minor.ticks.length.y       : NULL
##  $ axis.minor.ticks.length.y.left  : NULL
##  $ axis.minor.ticks.length.y.right : NULL
##  $ axis.minor.ticks.length.theta   : NULL
##  $ axis.minor.ticks.length.r       : NULL
##  $ axis.line                       : <ggplot2::element_blank>
##  $ axis.line.x                     : NULL
##  $ axis.line.x.top                 : NULL
##  $ axis.line.x.bottom              : NULL
##  $ axis.line.y                     : NULL
##  $ axis.line.y.left                : NULL
##  $ axis.line.y.right               : NULL
##  $ axis.line.theta                 : NULL
##  $ axis.line.r                     : NULL
##  $ legend.background               : <ggplot2::element_blank>
##  $ legend.margin                   : NULL
##  $ legend.spacing                  : 'rel' num 2
##  $ legend.spacing.x                : NULL
##  $ legend.spacing.y                : NULL
##  $ legend.key                      : <ggplot2::element_blank>
##  $ legend.key.size                 : 'simpleUnit' num 1.2lines
##   ..- attr(*, "unit")= int 3
##  $ legend.key.height               : NULL
##  $ legend.key.width                : NULL
##  $ legend.key.spacing              : NULL
##  $ legend.key.spacing.x            : NULL
##  $ legend.key.spacing.y            : NULL
##  $ legend.key.justification        : NULL
##  $ legend.frame                    : NULL
##  $ legend.ticks                    : NULL
##  $ legend.ticks.length             : 'rel' num 0.2
##  $ legend.axis.line                : NULL
##  $ legend.text                     : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : 'rel' num 0.8
##   ..@ hjust        : NULL
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : NULL
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ legend.text.position            : NULL
##  $ legend.title                    : <ggplot2::element_text>
##   ..@ family       : NULL
##   ..@ face         : NULL
##   ..@ italic       : chr NA
##   ..@ fontweight   : num NA
##   ..@ fontwidth    : num NA
##   ..@ colour       : NULL
##   ..@ size         : NULL
##   ..@ hjust        : num 0
##   ..@ vjust        : NULL
##   ..@ angle        : NULL
##   ..@ lineheight   : NULL
##   ..@ margin       : NULL
##   ..@ debug        : NULL
##   ..@ inherit.blank: logi TRUE
##  $ legend.title.position           : NULL
##  $ legend.position                 : chr "none"
##  $ legend.position.inside          : NULL
##  $ legend.direction                : NULL
##  $ legend.byrow                    : NULL
##  $ legend.justification            : chr "center"
##  $ legend.justification.top        : NULL
##  $ legend.justification.bottom     : NULL
##  $ legend.justification.left       : NULL
##  $ legend.justification.right      : NULL
##  $ legend.justification.inside     : NULL
##   [list output truncated]
##  @ complete: logi TRUE
##  @ validate: logi TRUE

La gráfica permite comparar los precios de venta de los productos Adidas en las tiendas In-store y Outlet. Se observa que, en todos los productos, los precios de las tiendas In-store son más altos que los de Outlet, con diferencias que se encuentran aproximadamente entre el 25% y el 27%.

Los productos de ropa para hombre y mujer presentan las mayores diferencias, con un 27%, mientras que el calzado deportivo muestra diferencias cercanas al 25% y 26%.

En general, esto muestra que Adidas maneja precios más bajos en sus tiendas Outlet, posiblemente como una estrategia para ofrecer descuentos y atraer clientes que buscan productos a menor costo. Por otro lado, las tiendas In-store mantienen precios más altos, lo que puede representar una mayor oportunidad de ingresos por cada producto vendido.

Podemos concuir diciendo que existe una diferencia de precios entre los dos canales de venta, siendo In-store el de mayor valor en todas las categorías de productos.

##*Comparación del margen operativo entre tienda física y outlet”

library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)

# 1. Filtrar únicamente In-store y Outlet
datos_canales <- datos_Adidas %>%
  filter(metodo_venta %in% c("In-store", "Outlet"))

# 2. Identificar combinaciones presentes en ambos canales
claves <- c("distribuidor", "estado", "ciudad", "producto")

combinaciones_pareadas <- datos_canales %>%
  distinct(across(all_of(claves)), metodo_venta) %>%
  group_by(across(all_of(claves))) %>%
  summarise(
    numero_canales = n_distinct(metodo_venta),
    .groups = "drop"
  ) %>%
  filter(numero_canales == 2) %>%
  select(all_of(claves))

# Conservar únicamente las filas correspondientes a las
# combinaciones que tienen ventas en ambos canales
datos_pareados <- datos_canales %>%
  semi_join(combinaciones_pareadas, by = claves)

# Número real de combinaciones pareadas
total_pareadas <- nrow(combinaciones_pareadas)

# 3. Calcular indicadores financieros por canal
resumen_canales <- datos_pareados %>%
  group_by(metodo_venta) %>%
  summarise(
    ventas = sum(ventas_total, na.rm = TRUE),

    utilidad = sum(utilidad_operativa, na.rm = TRUE),

    costos = ventas - utilidad,

    margen = utilidad / ventas,

    pct_costos = 1 - margen,

    .groups = "drop"
  ) %>%
  mutate(
    combinaciones_pareadas = total_pareadas,
    pct_utilidad = margen * 100,
    pct_costos_100 = pct_costos * 100
  ) %>%
  mutate(
    metodo_venta = factor(
      metodo_venta,
      levels = c("In-store", "Outlet")
    )
  ) %>%
  arrange(metodo_venta)

# 4. Imprimir tabla de resultados en consola
tabla_verificacion <- resumen_canales %>%
  transmute(
    canal = metodo_venta,
    combinaciones_pareadas,
    ventas = dollar(
      ventas,
      prefix = "$",
      big.mark = ".",
      decimal.mark = ",",
      accuracy = 1
    ),
    utilidad = dollar(
      utilidad,
      prefix = "$",
      big.mark = ".",
      decimal.mark = ",",
      accuracy = 1
    ),
    costos = dollar(
      costos,
      prefix = "$",
      big.mark = ".",
      decimal.mark = ",",
      accuracy = 1
    ),
    margen = percent(
      margen,
      accuracy = 0.01,
      decimal.mark = ","
    ),
    pct_costos = percent(
      pct_costos,
      accuracy = 0.01,
      decimal.mark = ","
    )
  )

print(tabla_verificacion)
## # A tibble: 2 × 7
##   canal    combinaciones_pareadas ventas      utilidad  costos margen pct_costos
##   <fct>                     <int> <chr>       <chr>     <chr>  <chr>  <chr>     
## 1 In-store                    112 $14.039.425 $4.896.1… $9.14… 34,87% 65,13%    
## 2 Outlet                      112 $8.591.894  $3.210.6… $5.38… 37,37% 62,63%
# 5. Preparar datos para el gráfico apilado
datos_grafico <- bind_rows(

  resumen_canales %>%
    transmute(
      canal = metodo_venta,
      componente = "Costos operativos",
      valor = pct_costos_100
    ),

  resumen_canales %>%
    transmute(
      canal = metodo_venta,
      componente = "Utilidad operativa",
      valor = pct_utilidad
    )

) %>%
  mutate(
    canal = factor(
      canal,
      levels = c("In-store", "Outlet")
    ),

    componente = factor(
      componente,
      levels = c(
        "Costos operativos",
        "Utilidad operativa"
      )
    ),

    etiqueta = paste0(
      "$",
      number(
        valor,
        accuracy = 0.1,
        decimal.mark = ",",
        big.mark = "."
      )
    ),

    color_segmento = case_when(
      componente == "Costos operativos" ~ "Costos operativos",
      canal == "In-store" ~ "Utilidad In-store",
      canal == "Outlet" ~ "Utilidad Outlet"
    )
  )

# 6. Construir gráfico de barras apiladas al 100 %
ggplot(
  datos_grafico,
  aes(
    x = canal,
    y = valor,
    fill = color_segmento
  )
) +

  geom_col(
    width = 0.60,
    position = position_stack(reverse = TRUE)
  ) +

  # Etiquetas de pesos por cada $100 vendidos
  geom_text(
    aes(label = etiqueta),
    position = position_stack(
      vjust = 0.5,
      reverse = TRUE
    ),
    color = "#333333",
    fontface = "bold",
    size = 4
  ) +

  # Colores de cada componente
  scale_fill_manual(
    values = c(
      "Costos operativos" = "#D9DDE2",
      "Utilidad In-store" = "#287A55",
      "Utilidad Outlet" = "#D69A38"
    ),
    breaks = c(
      "Costos operativos",
      "Utilidad In-store",
      "Utilidad Outlet"
    ),
    labels = c(
      "Costos operativos",
      "Utilidad operativa - In-store",
      "Utilidad operativa - Outlet"
    )
  ) +

  # Eje porcentual de 0 a 100
  scale_y_continuous(
    limits = c(0, 100),
    breaks = seq(0, 100, by = 20),
    labels = function(x) {
      paste0(
        number(
          x,
          accuracy = 1,
          decimal.mark = ",",
          big.mark = "."
        ),
        "%"
      )
    },
    expand = expansion(mult = c(0, 0))
  ) +

  labs(
    title = "¿Cuánto queda de cada $100 vendidos?",

    subtitle = paste(
      "Comparación del margen operativo",
      "entre tienda física y outlet"
    ),

    x = NULL,
    y = "De cada $100 vendidos",
    fill = NULL,

    caption = paste0(
      "Costos = ventas − utilidad operativa ",
      "(equivale a 1 − margen).\n",
      "Comparación pareada: ",
      total_pareadas,
      " combinaciones; mismo distribuidor, estado, ciudad y producto."
    )
  ) +

  # Diseño visual
  theme_minimal() +

  theme(
    plot.title = element_text(
      hjust = 0.5,
      face = "bold",
      size = 14,
      color = "#263B5E"
    ),

    plot.subtitle = element_text(
      hjust = 0.5,
      size = 10,
      color = "#555555",
      margin = margin(b = 12)
    ),

    legend.position = "top",
    legend.direction = "horizontal",
    legend.justification = "center",

    legend.text = element_text(size = 9),

    axis.title.y = element_text(size = 10),

    axis.text.x = element_text(
      size = 11,
      face = "bold",
      color = "#333333"
    ),

    axis.text.y = element_text(size = 9),

    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank(),

    plot.caption = element_text(
      hjust = 0,
      size = 8,
      color = "#666666",
      lineheight = 1.3,
      margin = margin(t = 15)
    ),

    plot.margin = margin(15, 20, 20, 15)
  )

Analisis: xxxx

Ventasy utilidad por distribuidor

Indicadores por Distribuidor
distribuidor ventas_totales participacion utilidad_operativa ticket_promedio utilidad_por_ticket margen_por_ticket
Amazon 10.096.987 8.4% 3.984.432 10.640 4.198,56 39.5%
Foot Locker 29.024.945 24.2% 11.317.027 11.007 4.291,63 39.0%
Kohl’s 13.512.453 11.2% 5.182.260 13.119 5.031,32 38.4%
Sports Direct 24.616.622 20.5% 10.641.609 12.114 5.237,01 43.2%
Walmart 10.506.085 8.7% 3.902.749 16.783 6.234,42 37.1%
West Gear 32.409.558 27.0% 12.196.891 13.652 5.137,70 37.6%
TOTAL GENERAL 120.166.650 100.0% 47.224.968 12.455 4.894,79 39.3%

Al comparar las ventas de cada distribuidor, se observa que West Gear ocupa el primer lugar con 32.409.558, seguido de Foot Locker, que registra 29.024.945, y Sports Direct con 24.616.622. Entre los tres concentran cerca del 71,7% de las ventas totales, lo que representa aproximadamente 86 millones de los 120 millones registrados por Adidas.

Por otra parte, Walmart, con ventas de 10.506.085, y Amazon, con 10.096.987, presentan los resultados más bajos frente a los demás distribuidores. Esto muestra que su aporte al total de las ventas es menor en comparación con los principales distribuidores.

Al observar las ganancias obtenidas por cada distribuidor, se encuentra que West Gear ocupa el primer lugar con una utilidad de 12.196.891. Le siguen Foot Locker, con 11.317.027, y Sports Direct, con 10.641.609. Estos tres distribuidores reúnen cerca del 72% de la utilidad total, es decir, más de 34 millones de los 47,2 millones generados. Esto demuestra que una parte importante de las ganancias de Adidas proviene de estos tres canales. En cambio, Amazon (3.984.432) y Walmart (3.902.749) tienen una participación menor en la utilidad

Al observar las ganancias obtenidas por cada distribuidor, se encuentra que West Gear ocupa el primer lugar con una utilidad de 12.196.891. Le siguen Foot Locker, con 11.317.027, y Sports Direct, con 10.641.609. Estos tres distribuidores reúnen cerca del 72% de la utilidad total, es decir, más de 34 millones de los 47,2 millones generados. Esto demuestra que una parte importante de las ganancias de Adidas proviene de estos tres canales. En cambio, Amazon (3.984.432) y Walmart (3.902.749) tienen una participación menor en la utilidad.

En relación con los márgenes operativos, Sports Direct presenta el porcentaje más alto con 43,2%, seguido de Amazon con 39,5% y Kohl’s con 38,4%. Por su parte, Walmart registra el margen más bajo, con 37,1%, a pesar de tener el ticket promedio más alto. Esto podría indicar que sus costos son mayores o que sus operaciones tienen una menor eficiencia, lo que hace que el valor más alto de sus ventas no se traduzca necesariamente en un mejor margen de rentabilidad.

Ventas y utilidad por Producto

Tabla por Producto
producto ventas_totales participacion utilidad_operativa ticket_promedio utilidad_por_ticket margen_por_ticket
Men’s Apparel 16.520.632 13,75% 6.381.405 10.287 3.973 38,63%
Men’s Athletic Footwear 20.577.180 17,12% 7.437.457 12.781 4.620 36,14%
Men’s Street Footwear 27.680.769 23,04% 11.629.046 17.193 7.223 42,01%
Women’s Apparel 23.870.985 19,86% 9.685.221 14.845 6.023 40,57%
Women’s Athletic Footwear 14.315.521 11,91% 5.597.822 8.914 3.486 39,10%
Women’s Street Footwear 17.201.563 14,31% 6.494.017 10.697 4.039 37,75%
TOTAL GENERAL 120.166.650 100,00% 47.224.968 12.455 4.895 39,30%

El producto con mayor nivel de ventas es Men’s Street Footwear con 27.680.769, representando el 23.0% del total, seguido por Women’s Apparel con 23.870.985 (19.9%) y Men’s Athletic Footwear con 20.577.180 (17.1%). En contraste, Women’s Athletic Footwear presenta el menor nivel de ventas con 14.315.521 (11.9%).

Al revisar las utilidades generadas por cada categoría, Men’s Street Footwear ocupa el primer lugar con 11.629.046, seguido de Women’s Apparel, que alcanza 9.685.221, y Men’s Athletic Footwear con 7.437.457. Estos resultados muestran que los productos que tienen mayor movimiento en ventas también representan una parte importante de las ganancias de Adidas, principalmente en las categorías masculinas.

De acuerdo con los resultados, Men’s Street Footwear se destaca como una de las categorías más importantes para Adidas, ya que ocupa el primer lugar en participación de ventas (23,0%), utilidad total y margen operativo (42,0%). Esto demuestra su importancia tanto en el movimiento comercial como en la generación de ganancias.

##Ventas y utilidad por ubicación

Indicadores por Region
region ventas_totales participacion utilidad_operativa ticket_promedio utilidad_por_ticket margen_por_ticket
Midwest 16.674.434 13.88% 6.859.945 8.907 3.664,50 41.14%
Northeast 25.078.267 20.87% 9.732.774 10.555 4.096,29 38.81%
South 20.603.356 17.15% 9.221.605 11.923 5.336,58 44.76%
Southeast 21.374.436 17.79% 8.393.059 17.463 6.857,07 39.27%
West 36.436.157 30.32% 13.017.584 14.884 5.317,64 35.73%
TOTAL GENERAL 120.166.650 100.00% 47.224.968 12.455 4.894,79 39.30%

West lidera en ventas con una participación del 30,32%, aunque su margen de 35,73% está por debajo del promedio general. South se destaca por ser la región más eficiente, con un margen del 44,76%, mientras que Southeast obtiene la mayor utilidad por ticket (6.857,07). Por su parte, Northeast mantiene resultados estables y Midwest, aunque tiene la menor participación en ventas (13,88%), presenta un buen margen del 41,14%, lo que representa una oportunidad para aumentar su volumen comercial.

Ventas por ciudad

New York y Miami se destacan frente a las demás ciudades, ya que presentan las medianas de ingresos más altas y una mayor variación en sus resultados. Esto muestra que tienen una actividad comercial importante y que, además, cuentan con algunas ventas de valores elevados. Por otro lado, Portland y New Orleans presentan ingresos más bajos por operación, aunque en algunos casos se registran ventas que sobresalen por su alto valor.

En cuanto a San Francisco, Seattle y Los Angeles, sus resultados muestran un comportamiento más uniforme, con ingresos relativamente constantes y algunas operaciones que alcanzan valores importantes.

De manera general, los datos reflejan que gran parte de los ingresos se concentra en ventas de valores medios y bajos, mientras que un grupo menor de transacciones con montos más altos contribuye a incrementar el resultado total.

#Correlaciones

Ventas y Unidades vendidas

Matriz de correlacion
precio_unidad unidades_vendidas ventas_total utilidad_operativa margen_operativo
precio_unidad 1.00 0.27 0.54 0.50 -0.14
unidades_vendidas 0.27 1.00 0.92 0.87 -0.31
ventas_total 0.54 0.92 1.00 0.94 -0.30
utilidad_operativa 0.50 0.87 0.94 1.00 -0.05
margen_operativo -0.14 -0.31 -0.30 -0.05 1.00

La tabla de correlación evidencia relaciones fuertes y consistentes entre las principales variables del negocio. Se destaca la alta correlación entre las ventas totales y la utilidad operativa (0,94), lo que refleja que el aumento de los ingresos está directamente relacionado con una mayor rentabilidad y demuestra un crecimiento eficiente del negocio.

Ventas y Unidades vendidas

Las unidades vendidas también muestran una alta correlación con las ventas totales (0,92) y la utilidad operativa (0,87), lo que confirma que el volumen de ventas es uno de los principales impulsores del negocio. Por tanto, aumentar la cantidad de productos vendidos tiene un efecto significativo en los ingresos y la utilidad.

Por otro lado, el precio por unidad presenta una correlación moderada con las ventas (0,54) y la utilidad (0,50), lo que indica que, aunque influye en los resultados, su impacto es menor en comparación con el volumen de ventas. Esto demuestra que el desempeño del negocio no depende únicamente de precios altos, sino de la combinación entre precio y cantidad vendida.

Unidades y margen operativo

El margen operativo registra correlaciones negativas con las ventas (-0,30), las unidades vendidas (-0,31) y el precio (-0,14), lo que refleja una relación inversa entre el volumen de ventas y la rentabilidad porcentual. Esto significa que, a medida que aumentan las ventas o las unidades comercializadas, el margen tiende a disminuir, posiblemente debido a estrategias comerciales como descuentos y promociones.

Finalmente, la correlación entre la utilidad operativa y el margen operativo es prácticamente nula (-0,05), lo que demuestra que un incremento en la utilidad no implica necesariamente una mejora en el margen, sino que está relacionado principalmente con el aumento del volumen de ventas.

#Plan de Mejoramiento

Escalar productos de mayor utilidad

Priorizar el crecimiento del producto Men’s Street Footwear, debido a que presenta una mayor utilidad y un ticket promedio alto, lo que favorece la rentabilidad. Asimismo, garantizar su disponibilidad y mantener niveles adecuados de inventario para evitar pérdidas por falta de stock.

Fortalecer con estrategias de eficiencia en combinaciones de bajo volumen pero alto margen

Fortalecer las acciones comerciales en los distribuidores y canales que, pese a registrar menores volúmenes de ventas, generan márgenes elevados por transacción. Aunque el negocio depende principalmente de tres distribuidores (West Gear, Foot Locker y Sports Direct), que concentran más del 70 % de las ventas y utilidades, es importante impulsar el potencial de los demás canales para diversificar los ingresos.