Introducción

Sobre el caso:

La empresa “QWERTY” es una comercializadora de todo tipo de artículos ubicada en Guatemala. El negocio ha ido creciendo sin embargo en el último año se ha estancado sin poder incrementar sus utilidades. El dueño desconoce el motivo por el cual la empresa dejó de crecer y es por eso que ha decidido contratar tus servicios para realizar un análisis de las ventas del 2015 y 2016. Utilizar la base de datos entregada por el departamento de sistemas para realizar los estudios correspondientes. Una vez realizado el análisis, exponer los hallazgos y proponer una estrategia comercial para incrementar las ventas internacionales.

sobre las bases de datos.

Se proporcionan 3 data frames.

El primero contiene información sobre la clave de departamento y el nombre del departamento El segundo contiene la clave de empleado, su nombre y apellido El tercero contiene la información de ventas. Fecha de la venta, número de vendedor, una columna en blanco (que se elimina en el código), una columna para el nombre completo del vendedor, el número de cliente, tipo, clave de departamento, nombre de departamento, clave de familia, familia, las ventas netas en Quetzales y el costo por venta.

Sobre la metodología.

Limpieza y manupilación de datos

Al ubicar columnas vacías y filas sin entradas primero se deberán filtrar para no tomar en cuenta estos entradas vacías en el análisis. Después se tienen que calcular los campos en celdas vacías, como el nombre completo de vendedor. Se tienen que hacer joints para completar columnas como el nombre del departamento o la clave de departamento. Se genera un EDA que proporciona un overview de los datos a alto nivel par poder empezar el análisis.

Metodología utilizada

Para realizar el análisis de los datos proporcionados, se siguieron los siguientes pasos:

  1. Limpieza de Datos:
    • Eliminación de duplicados y manejo de valores faltantes.
    • Conversión de formatos de fecha y tipos de datos.
  2. Análisis Exploratorio de Datos (EDA):
    • Estadísticas descriptivas para entender la distribución de ventas, costos y rentabilidad.
    • Visualización de tendencias temporales y patrones por vendedor, cliente, departamento y familia de productos.
  3. Segmentación:
    • Análisis detallado por segmento (vendedores, clientes, productos) para identificar áreas de oportunidad específicas.
  4. Herramientas Utilizadas:
    • R para análisis de datos y visualización.
    • RMarkdown para la creación de este reporte.

Manipulación de datos

Importar librerias y cargar bases de datos

# Cargar librerías necesarias
if (!require("readxl")) install.packages("readxl")
if (!require("dplyr")) install.packages("dplyr")
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("scales")) install.packages("scales")
if (!require("writexl")) install.packages("writexl")
if (!require("lubridate")) install.packages("lubridate")
if (!require("plotly")) install.packages("plotly")
if (!require("knitr")) install.packages("knitr")
if (!require("prettydoc")) install.packages("prettydoc")
if (!require("kableExtra")) install.packages("kableExtra")
if (!require("tidyverse")) install.packages("tidyverse")

library(prettydoc)
library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(writexl)
library(lubridate)
library(plotly)
library(knitr)
library(kableExtra)
library(tidyverse)

# Establecer el nombre del archivo de entrada para todos los códigos
file_name <- "BC_LCG.xlsx"

# Cargar las hojas del archivo de Excel para cada código
key_depto <- read_excel(file_name, sheet = "KEY_DEPTO")
key_vendedor <- read_excel(file_name, sheet = "KEY_VENDEDOR")                                           
bd <- read_excel(file_name, sheet = "BD")

Información de las librerias utilizadas

  1. prettydoc: Esta librería se utiliza para crear documentos en R Markdown con temas estéticamente agradables y modernos, facilitando la personalización del diseño y la presentación.
  2. readxl: Se utiliza para leer datos de archivos de Excel (.xls y .xlsx) en R, permitiendo la importación directa de datos tabulares desde hojas de cálculo.
  3. dplyr: Proporciona una gramática consistente para la manipulación de datos en R, facilitando operaciones como filtrado, selección, agrupamiento y resumen de datos tabulares.
  4. ggplot2: Es una librería para crear gráficos elegantes y sofisticados en R, basada en la “gramática de gráficos”, que permite construir visualizaciones complejas de manera intuitiva.
  5. scales: Proporciona funciones para dar formato a números y etiquetas de ejes en gráficos, facilitando la presentación clara y legible de datos en visualizaciones.
  6. writexl: Se utiliza para escribir datos en archivos de Excel (.xlsx) desde R, permitiendo la exportación de tablas y datos procesados a hojas de cálculo.
  7. lubridate: Facilita la manipulación de fechas y horas en R, ofreciendo herramientas para la extracción de componentes de fecha, cálculos de diferencia entre fechas y otras operaciones temporales.
  8. plotly: Permite la creación de gráficos interactivos en R, ofreciendo visualizaciones dinámicas y personalizables que pueden integrarse en documentos y aplicaciones web.
  9. knitr: Es una herramienta para la generación dinámica de reportes en R Markdown, que permite la incorporación de código R junto con texto narrativo y visualizaciones.
  10. kableExtra: Extiende la funcionalidad de knitr::kable para la creación de tablas en R Markdown, añadiendo opciones de formato avanzado y estilos personalizables.
  11. tidyverse: Es un conjunto de paquetes de R diseñados para la ciencia de datos. Incluye librerías como dplyr, ggplot2, tidyr, readr, purrr y tibble, que trabajan juntas para simplificar y mejorar la manipulación y visualización de datos.

Limpieza de datos

# Eliminar filas en la tabla BD donde 'Costo' es NA
bd <- bd %>% filter(!is.na(Costo))

# Eliminar las columnas vacías con títulos "Columna#"
bd <- bd %>%
  select(-matches("^Columna\\d+$"))  # Elimina las columnas que coinciden con el patrón "Columna#" donde "#" es un número

# Convertir las columnas Ventas Netas (Q) y Costo de Quetzales a USD
bd <- bd %>%
  mutate(
    `Ventas Netas (USD)` = `Ventas Netas (Q)` / 7.5,
    `Costo (USD)` = Costo / 7.5
  )

Asignar valores faltantes (Nombre de vendedores y Departamento)

# Crear diccionarios para las claves de departamentos y vendedores
depto_dict <- setNames(key_depto$Departamento, key_depto$`Departamento - Clave`)
depto_dict_reverse <- setNames(key_depto$`Departamento - Clave`, key_depto$Departamento)
vendedor_dict <- setNames(paste(key_vendedor$Nombre, key_vendedor$Apellido), key_vendedor$`No. Vendedor`)

# Rellenar la columna 'Nom_Completo_Vendedor'
bd$Nom_Completo_Vendedor <- vendedor_dict[as.character(bd$`Número de Vendedor`)]

# Completar las columnas 'Departamento - Clave' y 'Departamento' de manera coordinada
bd <- bd %>%
  rowwise() %>%
  mutate(
    `Departamento - Clave` = ifelse(is.na(`Departamento - Clave`) & !is.na(`Departamento`),
                                    depto_dict_reverse[as.character(`Departamento`)],
                                    `Departamento - Clave`),
    `Departamento` = ifelse(is.na(`Departamento`) & !is.na(`Departamento - Clave`),
                            depto_dict[as.character(`Departamento - Clave`)],
                            `Departamento`)
  ) %>%
  ungroup()

# Mostrar los primeros 5 registros de la base de datos
kable(head(bd), caption = "Primeros 5 registros") %>%
  kable_styling(full_width = FALSE)
Primeros 5 registros
Fecha Número de Vendedor Nom_Completo_Vendedor Número de cliente Tipo Departamento - Clave Departamento Familia - Clave Familia Ventas Netas (Q) Costo Ventas Netas (USD) Costo (USD)
2015-01-01 7 Carlos Vela 66 Real 0021 Pinturas 328 TRATAMIENTO DE CONCRETO 31740.12 22046.54 4232.01600 2939.5387
2015-01-01 5 Gonzalo Aguilar 45 Real 0021 Pinturas 370 PINTURAS DECORATIVAS 2377.30 1761.35 316.97333 234.8467
2015-01-01 8 Ernesto Pineda 75 Real 0021 Pinturas 371 BARNICES ARQUITECTÓNICOS 20422.48 13189.05 2722.99733 1758.5400
2015-01-01 6 Paulina Casanova 57 Real 0021 Pinturas 372 PINTURA AUTOMOTRIZ 719.80 668.40 95.97333 89.1200
2015-01-01 7 Carlos Vela 62 Real 0021 Pinturas 376 TINTES PARA MADERA 15589.78 10835.03 2078.63733 1444.6707
2015-01-01 2 Michelle Perez 20 Real 0021 Pinturas 751 BROCHAS, RODILLOS Y BANDEJAS 216456.68 116269.21 28860.89067 15502.5613

Crear dos columnas calculadas para % de rentabilidad y utilidad bruta

# Calcular el porcentaje de rentabilidad y agregarla como una nueva columna a la base de datos
bd <- bd %>%
  mutate(
    Rentabilidad = (`Ventas Netas (USD)` - `Costo (USD)`) / `Costo (USD)` * 100
  )

# Calcular la utilidad y agregarla como una nueva columna a la base de datos
bd <- bd %>%
  mutate(
    utilidad = (`Ventas Netas (USD)` - `Costo (USD)`)
  )


# Mostrar los primeros 5 registros de la base de datos
kable(head(bd), caption = "Primeros 5 registros con rentabilidad y utilidad") %>%
  kable_styling(full_width = FALSE)
Primeros 5 registros con rentabilidad y utilidad
Fecha Número de Vendedor Nom_Completo_Vendedor Número de cliente Tipo Departamento - Clave Departamento Familia - Clave Familia Ventas Netas (Q) Costo Ventas Netas (USD) Costo (USD) Rentabilidad utilidad
2015-01-01 7 Carlos Vela 66 Real 0021 Pinturas 328 TRATAMIENTO DE CONCRETO 31740.12 22046.54 4232.01600 2939.5387 43.968713 1292.477333
2015-01-01 5 Gonzalo Aguilar 45 Real 0021 Pinturas 370 PINTURAS DECORATIVAS 2377.30 1761.35 316.97333 234.8467 34.970335 82.126667
2015-01-01 8 Ernesto Pineda 75 Real 0021 Pinturas 371 BARNICES ARQUITECTÓNICOS 20422.48 13189.05 2722.99733 1758.5400 54.844208 964.457333
2015-01-01 6 Paulina Casanova 57 Real 0021 Pinturas 372 PINTURA AUTOMOTRIZ 719.80 668.40 95.97333 89.1200 7.690006 6.853333
2015-01-01 7 Carlos Vela 62 Real 0021 Pinturas 376 TINTES PARA MADERA 15589.78 10835.03 2078.63733 1444.6707 43.883127 633.966667
2015-01-01 2 Michelle Perez 20 Real 0021 Pinturas 751 BROCHAS, RODILLOS Y BANDEJAS 216456.68 116269.21 28860.89067 15502.5613 86.168531 13358.329333

Analisis inicial

Estadísticas básicas

# Resumen básico de estadísticas descriptivas para las variables numéricas
summary_stats <- summary(bd[, c("Ventas Netas (Q)", "Costo", "Ventas Netas (USD)", "Costo (USD)")])
kable(summary_stats, caption = "Resumen de estadísticas descriptivas para variables numéricas") %>%
  kable_styling(full_width = FALSE)
Resumen de estadísticas descriptivas para variables numéricas
Ventas Netas (Q) Costo Ventas Netas (USD) Costo (USD)
Min. : -437 Min. :-5145860 Min. : -58.3 Min. :-686115
1st Qu.: 19321 1st Qu.: 11081 1st Qu.: 2576.2 1st Qu.: 1477
Median : 92753 Median : 52227 Median : 12367.1 Median : 6964
Mean : 238182 Mean : 136819 Mean : 31757.6 Mean : 18242
3rd Qu.: 275888 3rd Qu.: 153648 3rd Qu.: 36785.1 3rd Qu.: 20486
Max. :7119698 Max. : 3914946 Max. :949293.1 Max. : 521993
# Conteo de observaciones por tipo de venta
vendedor_count <- table(bd$Nom_Completo_Vendedor)
vendedor_count <- sort(vendedor_count, decreasing = TRUE)
kable(vendedor_count, caption = "Conteo de observaciones por tipo de vendedor") %>%
  kable_styling(full_width = FALSE)
Conteo de observaciones por tipo de vendedor
Var1 Freq
Juan Garza 3951
Ernesto Pineda 756
Sofia Gonzalez 524
Pedro Arroyo 515
Gonzalo Aguilar 504
Carlos Vela 433
Paulina Casanova 380
Michelle Perez 329
# Conteo de observaciones por departamento
depto_count <- table(bd$`Departamento`)
depto_count <- sort(depto_count, decreasing = TRUE)
kable(depto_count, caption = "Conteo de observaciones por departamento") %>%
  kable_styling(full_width = FALSE)
Conteo de observaciones por departamento
Var1 Freq
Bebes 640
Juguetes 561
Pinturas 358
Out Door Living 346
Cocina 344
Ferretería 339
Artículos Navideños 321
Eléctricos 314
Herramientas 312
Electrodomésticos 310
Organización 297
Plomería 293
Niños 283
Decoracion 245
Automotriz 244
Materiales de Construcción 206
Mascotas 202
Jardinería 190
Limpieza 183
Lámparas 175
Mesa 174
Baños 129
Electronica 125
Seguridad 114
Muebles de Interior 112
Artículos Impulso 95
Guatemala nuestra 95
Muebles de Exterior 95
Blancos 74
Alfombras 72
Cortinaje 72
Librería 72

Analítica de datos

Pareto ABC por departamentos

Pregunta 1 y 2:

¿Cuál es el monto de ventas y cantidad de departamentos por cada clasificación (A, B y C)?

# Sumar las ventas netas por departamento
ventas_por_departamento <- bd %>%
  group_by(`Departamento`) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Calcular el total de ventas
total_ventas <- sum(ventas_por_departamento$Ventas_Netas_USD)

# Crear una tabla que muestre el porcentaje de ventas por departamento
ventas_por_departamento <- ventas_por_departamento %>%
  mutate(
    Percentage = (Ventas_Netas_USD / total_ventas) * 100
  )

# Ordenar los departamentos de mayor a menor
ventas_por_departamento <- ventas_por_departamento %>%
  arrange(desc(Ventas_Netas_USD))

# Agregar una columna de porcentaje acumulado
ventas_por_departamento <- ventas_por_departamento %>%
  mutate(
    Porcentaje_Acumulado = cumsum(Percentage)
  )

# Asignar categorías ABC
ventas_por_departamento <- ventas_por_departamento %>%
  mutate(
    Categoria = case_when(
      Porcentaje_Acumulado <= 80 ~ "A",
      Porcentaje_Acumulado <= 95 ~ "B",
      TRUE ~ "C"
    )
  )

# Crear la tabla de ventas por zona
ventas_por_zona <- ventas_por_departamento %>%
  group_by(Categoria) %>%
  summarize(
    Ventas_Netas_USD = sum(Ventas_Netas_USD),
    Cantidad_Departamentos = n()
  )

# Formatear la tabla utilizando kable
kable(ventas_por_zona, 
      caption = "Pareto ABC de Ventas por Departamento",
      col.names = c("Clasificación", "Ventas Netas (USD)", "Cantidad de Departamentos"),
      align = c("c", "r", "r"))%>%
  kable_styling(full_width = FALSE)
Pareto ABC de Ventas por Departamento
Clasificación Ventas Netas (USD) Cantidad de Departamentos
A 184530955 18
B 35356587 7
C 14864808 7

Diagrama de Pareto:

# Crear un diccionario para asignar colores a cada zona
colores_zona <- c("A" = "#69b3a2", "B" = "#145C9E", "C" = "#79C7C5")

# Crear el gráfico de Pareto con colores por zona
ggplot(ventas_por_departamento, aes(x = reorder(`Departamento`, -Ventas_Netas_USD), y = Ventas_Netas_USD, fill = Categoria)) +
  geom_bar(stat = "identity") +
  geom_line(aes(y = Porcentaje_Acumulado * max(ventas_por_departamento$Ventas_Netas_USD) / 100), color = "#e06666", size = 1.5, group = 1) +
  geom_point(aes(y = Porcentaje_Acumulado * max(ventas_por_departamento$Ventas_Netas_USD) / 100), color = "#e06666", size = 3) +
  scale_y_continuous(labels = label_number_si(unit = "M", accuracy = 0.1), sec.axis = sec_axis(~ . * 100 / max(ventas_por_departamento$Ventas_Netas_USD), name = "Porcentaje acumulado (%)")) +
  labs(x = "Departamento", y = "Ventas Netas (USD)", title = "Pareto ABC de Ventas Netas por departamento", 
       subtitle = "Categorización de departamentos por contribución a las ventas", 
       caption = "Fuente: Datos de archivo.xlsx") +
  scale_fill_manual(values = colores_zona) +  # Asignar colores a las zonas
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "none")

Pareto ABC por clientes

Pregunta 3 y 4:

3.-Realizar un ABC de clientes e identificar cuáles son los 5 clientes que más compran

# Sumar las ventas netas por Cliente
ventas_por_cliente <- bd %>%
  group_by(`Número de cliente`) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Calcular el total de ventas
total_ventas_clientes <- sum(ventas_por_cliente$Ventas_Netas_USD)

# Crear una tabla que muestre el porcentaje de ventas por cliente
ventas_por_cliente <- ventas_por_cliente %>%
  mutate(
    Porcentaje_del_total = (Ventas_Netas_USD / total_ventas_clientes) * 100
  )

# Ordenar los clientes de mayor a menor
ventas_por_cliente <- ventas_por_cliente %>%
  arrange(desc(Ventas_Netas_USD))

# Mostrar los primeros 5 registros de la base de datos
kable(head(ventas_por_cliente), caption = "Principales 5 clientes")%>%  # Mostrar los primeros 5 registros
  kable_styling(full_width = FALSE)
Principales 5 clientes
Número de cliente Ventas_Netas_USD Porcentaje_del_total
47 20530094 8.745427
14 19963858 8.504221
59 19198607 8.178239
68 18611336 7.928072
74 16949300 7.220077
71 2889475 1.230861

4.-Identificar cuál es el vendedor que le vende a la mayoría de los clientes

# Calcular las ventas por vendedor y cliente
ventas_por_vendedor <- bd %>%
  group_by(`Nom_Completo_Vendedor`, `Número de cliente`) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`)) %>%
  group_by(`Nom_Completo_Vendedor`) %>%
  summarize(Total_Ventas = sum(Ventas_Netas_USD),
            Cantidad_Clientes = n()) %>%
  arrange(desc(Cantidad_Clientes)) %>%
  top_n(3)

# Crear la tabla con kable
tabla_top_vendedores <- kable(ventas_por_vendedor, format = "html", caption = "Top 3 Vendedores por Cantidad de Clientes y Ventas") %>%
  kable_styling(full_width = FALSE)

# Mostrar la tabla
tabla_top_vendedores
Top 3 Vendedores por Cantidad de Clientes y Ventas
Nom_Completo_Vendedor Total_Ventas Cantidad_Clientes
Juan Garza 126053856 87
Ernesto Pineda 27277862 16
Pedro Arroyo 13928986 10
Sofia Gonzalez 15238779 10

Diagrama de Pareto:

# Crear un diccionario para asignar colores a cada zona
colores_zona <- c("A" = "#69b3a2", "B" = "#145C9E", "C" = "#79C7C5")

# Crear el gráfico de Pareto con colores por zona
ggplot(ventas_por_cliente, aes(x = reorder(`Número de cliente`, -Ventas_Netas_USD), y = Ventas_Netas_USD, fill = Categoria_cliente)) +
  geom_bar(stat = "identity") +
  geom_line(aes(y = Porcentaje_Acumulado_cliente * max(ventas_por_cliente$Ventas_Netas_USD) / 100), color = "#e06666", size = 1.5, group = 1) +
  geom_point(aes(y = Porcentaje_Acumulado_cliente * max(ventas_por_cliente$Ventas_Netas_USD) / 100), color = "#e06666", size = 3) +
  scale_y_continuous(labels = label_number_si(unit = "M", accuracy = 0.1), sec.axis = sec_axis(~ . * 100 / max(ventas_por_cliente$Ventas_Netas_USD), name = "Porcentaje acumulado (%)")) +
  labs(x = "Número de cliente", y = "Ventas Netas (USD)", title = "Pareto ABC de Ventas Netas", 
       subtitle = "Categorización de clientes por contribución a las ventas", 
       caption = "Fuente: Datos de archivo.xlsx") +
  scale_fill_manual(values = colores_zona) +  # Asignar colores a las zonas
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1),
        legend.position = "none")

Análisis de tendencia de ventas y utilidad.

Gráficas de tendencia de ventas mensual para 2015

# Filtrar los datos para el año 2015
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015) %>%
  mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))

# Calcular las ventas mensuales para 2015
ventas_mensuales_2015 <- bd_2015 %>%
  group_by(Mes) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Asignar colores a los trimestres
ventas_mensuales_2015 <- ventas_mensuales_2015 %>%
  mutate(Trimestre = case_when(
    Mes %in% c("Jan", "Feb", "Mar") ~ "Q1",
    Mes %in% c("Apr", "May", "Jun") ~ "Q2",
    Mes %in% c("Jul", "Aug", "Sep") ~ "Q3",
    Mes %in% c("Oct", "Nov", "Dec") ~ "Q4"
  ))

# Definir colores para los trimestres
colores_trimestre <- c("Q1" = "#1f77b4", "Q2" = "#ff7f0e", "Q3" = "#2ca02c", "Q4" = "#d62728")

# Crear la gráfica con línea de tendencia
ggplot(ventas_mensuales_2015, aes(x = Mes, y = Ventas_Netas_USD)) +
  geom_bar(aes(fill = Trimestre), stat = "identity", width = 0.7) +
  geom_smooth(aes(group = 1), method = "lm", se = FALSE, color = "#9467bd", size = 1.5, linetype = "dashed") +
  scale_y_continuous(labels = scales::label_number_si(unit = "M", accuracy = 0.1)) +
  scale_fill_manual(values = colores_trimestre) +
  labs(
    title = "Ventas Mensuales de 2015",
    subtitle = "Con línea de tendencia",
    x = "Mes",
    y = "Ventas Netas (USD)",
    fill = "Trimestre"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 20),
    plot.subtitle = element_text(hjust = 0.5, size = 15),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

Gráficas de tendencia de ventas mensual para 2016

# Filtrar los datos para el año 2016
bd_2016 <- bd %>%
  filter(year(Fecha) == 2016) %>%
  mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))

# Calcular las ventas mensuales para 2016
ventas_mensuales_2016 <- bd_2016 %>%
  group_by(Mes) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Asignar colores a los trimestres
ventas_mensuales_2016 <- ventas_mensuales_2016 %>%
  mutate(Trimestre = case_when(
    Mes %in% c("Jan", "Feb", "Mar") ~ "Q1",
    Mes %in% c("Apr", "May", "Jun") ~ "Q2",
    Mes %in% c("Jul", "Aug", "Sep") ~ "Q3",
    Mes %in% c("Oct", "Nov", "Dec") ~ "Q4"
  ))

# Definir colores para los trimestres
colores_trimestre <- c("Q1" = "#1f77b4", "Q2" = "#ff7f0e", "Q3" = "#2ca02c", "Q4" = "#d62728")

# Crear la gráfica con línea de tendencia
ggplot(ventas_mensuales_2016, aes(x = Mes, y = Ventas_Netas_USD)) +
  geom_bar(aes(fill = Trimestre), stat = "identity", width = 0.7) +
  geom_smooth(aes(group = 1), method = "lm", se = FALSE, color = "#9467bd", size = 1.5, linetype = "dashed") +
  scale_y_continuous(labels = scales::label_number_si(unit = "M", accuracy = 0.1)) +
  scale_fill_manual(values = colores_trimestre) +
  labs(
    title = "Ventas Mensuales de 2016",
    subtitle = "Con línea de tendencia",
    x = "Mes",
    y = "Ventas Netas (USD)",
    fill = "Trimestre"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 20),
    plot.subtitle = element_text(hjust = 0.5, size = 15),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

Gráfica de tendencia de ventas mensual para ambos años

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015) %>%
  mutate(
    Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"),
    Año = "2015"
  )

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016) %>%
  mutate(
    Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"),
    Año = "2016"
  )

# Combinar los datos de ambos años
bd_combined <- bind_rows(bd_2015, bd_2016)

# Calcular las ventas mensuales para ambos años
ventas_mensuales <- bd_combined %>%
  group_by(Año, Mes) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Asignar colores a los trimestres
ventas_mensuales <- ventas_mensuales %>%
  mutate(Trimestre = case_when(
    Mes %in% c("Jan", "Feb", "Mar") ~ "Q1",
    Mes %in% c("Apr", "May", "Jun") ~ "Q2",
    Mes %in% c("Jul", "Aug", "Sep") ~ "Q3",
    Mes %in% c("Oct", "Nov", "Dec") ~ "Q4"
  ))

# Definir colores para los trimestres
colores_trimestre <- c("Q1" = "#1f77b4", "Q2" = "#ff7f0e", "Q3" = "#2ca02c", "Q4" = "#d62728")

# Crear la gráfica con las tres líneas de tendencia
ggplot(ventas_mensuales, aes(x = interaction(Año, Mes, sep = "-"), y = Ventas_Netas_USD)) +
  geom_bar(aes(fill = Trimestre), stat = "identity", width = 0.7) +
  geom_smooth(aes(group = Año, color = Año), method = "lm", se = FALSE, size = 1.5, linetype = "dashed") +
  geom_smooth(aes(group = 1), method = "lm", se = FALSE, color = "black", size = 1.5, linetype = "solid") +
  scale_y_continuous(labels = scales::label_number_si(unit = "M", accuracy = 0.1)) +
  scale_fill_manual(values = colores_trimestre) +
  labs(
    title = "Ventas Mensuales de 2015 y 2016",
    subtitle = "Con líneas de tendencia",
    x = "Mes y Año",
    y = "Ventas Netas (USD)",
    fill = "Trimestre",
    color = "Líneas de Tendencia"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 20),
    plot.subtitle = element_text(hjust = 0.5, size = 15),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

Análisis de crecimiento mensual y anual

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015) %>%
  mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016) %>%
  mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))

# Calcular las ventas mensuales para 2015
ventas_mensuales_2015 <- bd_2015 %>%
  group_by(Mes) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Calcular el crecimiento mensual para 2015
ventas_mensuales_2015 <- ventas_mensuales_2015 %>%
  mutate(Crecimiento_Mensual = (Ventas_Netas_USD / lag(Ventas_Netas_USD, default = first(Ventas_Netas_USD)) - 1) * 100)

# Calcular las ventas mensuales para 2016
ventas_mensuales_2016 <- bd_2016 %>%
  group_by(Mes) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Calcular el crecimiento mensual para 2016
ventas_mensuales_2016 <- ventas_mensuales_2016 %>%
  mutate(Crecimiento_Mensual = (Ventas_Netas_USD / lag(Ventas_Netas_USD, default = first(Ventas_Netas_USD)) - 1) * 100)

# Combinar los resultados de ambos años en una sola tabla
crecimiento_mensual <- bind_rows(
  ventas_mensuales_2015 %>% mutate(Año = "2015"),
  ventas_mensuales_2016 %>% mutate(Año = "2016")
)

# Corregir el crecimiento mensual para enero de 2016
crecimiento_mensual$Crecimiento_Mensual[crecimiento_mensual$Mes == "Jan" & crecimiento_mensual$Año == "2016"] <- NA

# Crear la tabla del crecimiento mensual
tabla_crecimiento_mensual <- crecimiento_mensual %>%
  select(Año, Mes, Ventas_Netas_USD, Crecimiento_Mensual) %>%
  arrange(Año, Mes) %>%
  kable(caption = "Crecimiento Mensual de Ventas", format = "html", digits = 2) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Calcular las ventas anuales para 2015 y 2016
ventas_anuales <- bd %>%
  mutate(Año = year(Fecha)) %>%
  group_by(Año) %>%
  summarize(Ventas_Netas_USD = sum(`Ventas Netas (USD)`))

# Calcular el crecimiento anual de 2015 a 2016
crecimiento_anual <- ventas_anuales %>%
  mutate(Crecimiento_Anual = (Ventas_Netas_USD / lag(Ventas_Netas_USD, default = first(Ventas_Netas_USD)) - 1) * 100)

# Crear la tabla del crecimiento anual
tabla_crecimiento_anual <- crecimiento_anual %>%
  kable(caption = "Crecimiento Anual de Ventas", format = "html", digits = 2) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Graficar el crecimiento mensual
ggplot(crecimiento_mensual, aes(x = Mes, y = Crecimiento_Mensual, color = Año, group = Año)) +
  geom_line(size = 1.5) +
  labs(
    title = "Crecimiento Mensual de Ventas",
    x = "Mes",
    y = "% Crecimiento Mensual",
    color = "Año"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 20),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

# Mostrar las tablas
tabla_crecimiento_mensual
Crecimiento Mensual de Ventas
Año Mes Ventas_Netas_USD Crecimiento_Mensual
2015 Jan 7913549 0.00
2015 Feb 7084396 -10.48
2015 Mar 10168852 43.54
2015 Apr 7634222 -24.93
2015 May 8364326 9.56
2015 Jun 8756596 4.69
2015 Jul 9042700 3.27
2015 Aug 8193746 -9.39
2015 Sep 9760198 19.12
2015 Oct 8124340 -16.76
2015 Nov 13316292 63.91
2015 Dec 23388851 75.64
2016 Jan 8012247 NA
2016 Feb 8788090 9.68
2016 Mar 10050385 14.36
2016 Apr 7981498 -20.59
2016 May 8498493 6.48
2016 Jun 11029844 29.79
2016 Jul 9923371 -10.03
2016 Aug 8452978 -14.82
2016 Sep 10290803 21.74
2016 Oct 8611301 -16.32
2016 Nov 16960601 96.96
2016 Dec 4404673 -74.03
tabla_crecimiento_anual
Crecimiento Anual de Ventas
Año Ventas_Netas_USD Crecimiento_Anual
2015 121748066 0.00
2016 113004284 -7.18

Comportamiento de utilidad en el tiempo

# Calcular la utilidad diaria para 2015 y 2016
bd <- bd %>%
  mutate(Anio = year(Fecha), Dia_Anual = yday(Fecha))

utilidad_diaria <- bd %>%
  group_by(Anio, Dia_Anual) %>%
  summarize(Utilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`)) %>%
  ungroup()

# Convertir los días del año a fechas reales para el eje X
utilidad_diaria <- utilidad_diaria %>%
  mutate(Fecha = as.Date(Dia_Anual, origin = paste0(Anio - 1, "-12-31")))

# Gráfica de rentabilidad diaria para 2015 y 2016
ggplot(utilidad_diaria, aes(x = Fecha, y = Utilidad / 1e6, color = as.factor(Anio))) +
  geom_line(size = 1) +
  scale_color_manual(values = c("2015" = "#1f77b4", "2016" = "#ff7f0e")) +
  scale_y_continuous(labels = scales::label_number_si(prefix = "$", unit = "M", accuracy = 0.1)) +
  scale_x_date(date_labels = "%b %d", date_breaks = "1 month") +
  labs(
    title = "Utilidad bruta Diaria - 2015 vs 2016",
    x = "Fecha",
    y = "Utilidad (Millones de USD)",
    color = "Año"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 20),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

Análisis de rentabilidad del portafolio

Análisis de rentabilidad por mes

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015) %>%
  mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016) %>%
  mutate(Mes = month(Fecha, label = TRUE, abbr = TRUE, locale = "en_US"))

# Calcular la rentabilidad mensual para 2015
rentabilidad_mensual_2015 <- bd_2015 %>%
  group_by(Mes) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Calcular la rentabilidad mensual para 2016
rentabilidad_mensual_2016 <- bd_2016 %>%
  group_by(Mes) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Combinar los resultados de ambos años en una sola tabla
rentabilidad_mensual <- rentabilidad_mensual_2015 %>%
  rename(Rentabilidad_2015 = Rentabilidad) %>%
  full_join(rentabilidad_mensual_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Mes") %>%
  arrange(match(Mes, month.name))

# Crear la tabla de rentabilidad mensual
tabla_rentabilidad_mensual <- rentabilidad_mensual %>%
  kable(caption = "Rentabilidad Mensual de 2015 y 2016", format = "html", digits = 2, col.names = c("Mes", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Mostrar la tabla
tabla_rentabilidad_mensual
Rentabilidad Mensual de 2015 y 2016
Mes Rentabilidad 2015 (%) Rentabilidad 2016 (%)
May 66.24 63.25
Jan 71.09 75.95
Feb 75.89 76.43
Mar 71.33 76.93
Apr 70.93 77.09
Jun 71.66 65.68
Jul 72.09 93.52
Aug 73.57 69.75
Sep 75.84 77.28
Oct 85.45 80.75
Nov 74.92 74.71
Dec 70.52 79.40

Análisis de rentabilidad por trimestre

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015) %>%
  mutate(Trimestre = quarter(Fecha, with_year = FALSE))

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016) %>%
  mutate(Trimestre = quarter(Fecha, with_year = FALSE))

# Calcular la rentabilidad por trimestre para 2015
rentabilidad_trimestre_2015 <- bd_2015 %>%
  group_by(Trimestre) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Calcular la rentabilidad por trimestre para 2016
rentabilidad_trimestre_2016 <- bd_2016 %>%
  group_by(Trimestre) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Combinar los resultados de ambos años en una sola tabla
rentabilidad_trimestre <- rentabilidad_trimestre_2015 %>%
  rename(Rentabilidad_2015 = Rentabilidad) %>%
  full_join(rentabilidad_trimestre_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Trimestre")

# Crear la tabla de rentabilidad por trimestre
tabla_rentabilidad_trimestre <- rentabilidad_trimestre %>%
  kable(caption = "Rentabilidad por Trimestre de 2015 y 2016", format = "html", digits = 2, col.names = c("Trimestre", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Mostrar la tabla
tabla_rentabilidad_trimestre
Rentabilidad por Trimestre de 2015 y 2016
Trimestre Rentabilidad 2015 (%) Rentabilidad 2016 (%)
1 72.51 76.47
2 69.57 68.05
3 73.88 80.15
4 74.37 77.09

Análisis de rentabilidad por departamento

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015)

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016)

# Calcular la rentabilidad por departamento para 2015
rentabilidad_departamento_2015 <- bd_2015 %>%
  group_by(`Departamento`) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Calcular la rentabilidad por departamento para 2016
rentabilidad_departamento_2016 <- bd_2016 %>%
  group_by(`Departamento`) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Combinar los resultados de ambos años en una sola tabla
rentabilidad_departamento <- rentabilidad_departamento_2015 %>%
  rename(Rentabilidad_2015 = Rentabilidad) %>%
  full_join(rentabilidad_departamento_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Departamento")

# Crear la tabla de rentabilidad por departamento
tabla_rentabilidad_departamento <- rentabilidad_departamento %>%
  kable(caption = "Rentabilidad por Departamento de 2015 y 2016", format = "html", digits = 2, col.names = c("Departamento", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Mostrar la tabla
tabla_rentabilidad_departamento
Rentabilidad por Departamento de 2015 y 2016
Departamento Rentabilidad 2015 (%) Rentabilidad 2016 (%)
Alfombras 100.86 108.98
Artículos Impulso 60.19 68.35
Artículos Navideños 86.48 143.29
Automotriz 62.18 61.16
Baños 92.66 93.40
Bebes 59.96 72.39
Blancos 76.72 80.47
Cocina 84.89 87.80
Cortinaje 150.90 150.99
Decoracion 89.47 90.65
Electrodomésticos 61.63 61.04
Electronica 29.46 23.28
Eléctricos 76.91 83.15
Ferretería 101.21 98.84
Guatemala nuestra 41.00 40.91
Herramientas 63.17 63.46
Jardinería 78.57 75.72
Juguetes 67.15 65.17
Librería 45.96 48.54
Limpieza 46.83 45.21
Lámparas 106.04 107.38
Mascotas 62.29 58.16
Materiales de Construcción 25.67 77.08
Mesa 92.17 93.83
Muebles de Exterior 75.03 78.24
Muebles de Interior 69.91 77.15
Niños 90.79 84.78
Organización 88.56 83.59
Out Door Living 86.10 70.90
Pinturas 51.91 52.64
Plomería 67.88 71.04
Seguridad 71.88 66.81

Análisis de rentabilidad por clientes

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015)

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016)

# Calcular la rentabilidad por número de cliente para 2015
rentabilidad_cliente_2015 <- bd_2015 %>%
  group_by(`Número de cliente`) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Calcular la rentabilidad por número de cliente para 2016
rentabilidad_cliente_2016 <- bd_2016 %>%
  group_by(`Número de cliente`) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Combinar los resultados de ambos años en una sola tabla
rentabilidad_cliente <- rentabilidad_cliente_2015 %>%
  rename(Rentabilidad_2015 = Rentabilidad) %>%
  full_join(rentabilidad_cliente_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Número de cliente")

# Crear la tabla de rentabilidad por número de cliente
tabla_rentabilidad_cliente <- rentabilidad_cliente %>%
  kable(caption = "Rentabilidad por Cliente de 2015 y 2016", format = "html", digits = 2, col.names = c("Número de Cliente", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Mostrar la tabla
tabla_rentabilidad_cliente
Rentabilidad por Cliente de 2015 y 2016
Número de Cliente Rentabilidad 2015 (%) Rentabilidad 2016 (%)
1 70.50 79.53
2 50.16 88.02
3 64.54 75.91
4 64.34 84.89
5 66.45 82.75
6 81.39 60.03
7 68.20 70.55
8 67.68 60.53
9 67.07 71.93
10 68.20 71.33
11 64.89 79.29
12 73.67 57.26
13 79.39 70.70
14 68.69 96.76
15 65.99 78.90
16 54.23 91.82
17 74.29 85.60
18 60.00 60.64
19 56.59 77.34
20 43.72 108.74
21 67.38 67.53
22 73.91 74.69
23 82.93 56.07
24 81.52 47.56
25 72.13 82.55
26 78.68 72.95
27 70.26 77.80
28 79.59 82.77
29 80.90 81.35
30 62.38 76.09
31 90.79 88.28
32 70.47 75.27
33 69.49 81.54
34 81.10 68.92
35 64.17 84.85
36 68.09 83.24
37 79.52 89.08
38 86.53 60.97
39 72.58 76.43
40 55.85 82.02
41 77.53 97.91
42 62.75 79.48
43 94.57 52.35
44 87.87 77.91
45 72.51 57.40
46 80.49 82.84
47 69.87 66.11
48 70.82 67.07
49 94.04 90.92
50 75.10 78.77
51 47.21 64.74
52 80.06 82.38
53 85.83 61.60
54 96.31 60.19
55 80.99 56.90
56 70.29 72.44
57 95.62 76.93
58 82.24 86.00
59 76.15 76.84
60 70.58 87.19
61 69.63 73.01
62 78.49 83.90
63 65.92 80.50
64 68.07 70.79
65 74.79 90.94
66 90.04 64.45
67 67.60 56.58
68 78.90 77.73
69 84.97 60.63
70 69.59 94.61
71 75.77 76.92
72 79.05 82.12
73 62.48 70.36
74 71.42 74.20
75 89.92 82.37
76 86.64 76.63
77 72.08 66.74
78 58.88 62.61
79 75.86 75.99
80 79.89 69.01
81 64.70 64.80
82 90.66 76.64
83 86.50 89.62
84 71.96 77.39
85 64.25 60.01
86 81.30 71.20
87 69.88 68.78

Análisis de rentabilidad por vendedor

# Filtrar y preparar los datos para los años 2015 y 2016
bd_2015 <- bd %>%
  filter(year(Fecha) == 2015)

bd_2016 <- bd %>%
  filter(year(Fecha) == 2016)

# Calcular la rentabilidad por número de vendedor para 2015
rentabilidad_vendedor_2015 <- bd_2015 %>%
  group_by(`Nom_Completo_Vendedor`) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Calcular la rentabilidad por número de vendedor para 2016
rentabilidad_vendedor_2016 <- bd_2016 %>%
  group_by(`Nom_Completo_Vendedor`) %>%
  summarize(Rentabilidad = sum(`Ventas Netas (USD)` - `Costo (USD)`) / sum(`Costo (USD)`) * 100)

# Combinar los resultados de ambos años en una sola tabla
rentabilidad_vendedor <- rentabilidad_vendedor_2015 %>%
  rename(Rentabilidad_2015 = Rentabilidad) %>%
  full_join(rentabilidad_vendedor_2016 %>% rename(Rentabilidad_2016 = Rentabilidad), by = "Nom_Completo_Vendedor")

# Crear la tabla de rentabilidad por número de vendedor
tabla_rentabilidad_vendedor <- rentabilidad_vendedor %>%
  kable(caption = "Rentabilidad por Vendedor de 2015 y 2016", format = "html", digits = 2, col.names = c("Vendedor", "Rentabilidad 2015 (%)", "Rentabilidad 2016 (%)")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))

# Mostrar la tabla
tabla_rentabilidad_vendedor
Rentabilidad por Vendedor de 2015 y 2016
Vendedor Rentabilidad 2015 (%) Rentabilidad 2016 (%)
Carlos Vela 75.20 76.25
Ernesto Pineda 74.90 72.35
Gonzalo Aguilar 77.05 73.82
Juan Garza 71.69 76.91
Michelle Perez 60.53 72.96
Paulina Casanova 76.20 69.69
Pedro Arroyo 74.89 78.73
Sofia Gonzalez 75.63 72.01

Hoja de respuestas

Pareto ABC por departamentos

1.- ¿Cuál es el monto de ventas por cada clasificación ( A, B y C) ?

Respuesta:

Pareto ABC de Ventas por Departamento
Clasificación Ventas Netas (USD)
A 184530955
B 35356587
C 14864808

2.- Calcular el número de departamentos por cada clasificación (A, B y C).

Respuesta:

Pareto ABC de Ventas por Departamento
Clasificación Cantidad de Departamentos
A 18
B 7
C 7

Pareto ABC por clientes

3.- Realizar un ABC de clientes e identificar cuáles son los 5 clientes que más compran.

Respuesta:

Principales 5 clientes
Número de cliente Ventas_Netas_USD Percentage Porcentaje_Acumulado_cliente Categoria_cliente
47 20530094 8.745427 8.745427 A
14 19963858 8.504221 17.249647 A
59 19198607 8.178239 25.427886 A
68 18611336 7.928072 33.355959 A
74 16949300 7.220077 40.576035 A
71 2889475 1.230861 41.806896 A

4.- Identificar cuál es el vendedor que le vende a la mayoría de los clientes

Respuesta:

Top 3 Vendedores por Cantidad de Clientes y Ventas
Nom_Completo_Vendedor Total_Ventas Cantidad_Clientes
Juan Garza 126053856 87
Ernesto Pineda 27277862 16
Pedro Arroyo 13928986 10
Sofia Gonzalez 15238779 10

Análisis de tendencia de ventas

5.- ¿Cuál es el mes con mas ventas para el año 2015 y 2016?

Respuesta:

Top 3 Meses con Mayores Ventas en 2015
Mes Ventas_Netas_USD Crecimiento_Mensual
Dec 23388851 75.64087
Top 3 Meses con Mayores Ventas en 2016
Mes Ventas_Netas_USD Crecimiento_Mensual
Nov 16960601 96.95748

6.- ¿Cuál es el mes con menos ventas para el año 2015 y 2016?

Respuesta:

3 meses con Menores Ventas en 2015
Mes Ventas_Netas_USD Crecimiento_Mensual
Feb 7084396 -10.47764
3 meses con Menores Ventas en 2016
Mes Ventas_Netas_USD Crecimiento_Mensual
Dec 4404673 -74.02997

7.- ¿Cuál es el porcentaje de crecimiento en ventas anual?

Respuesta:

Crecimiento Anual de Ventas
Año Ventas_Netas_USD Crecimiento_Anual
2015 121748066 0.00
2016 113004284 -7.18

Análisis de rentabilidad de portafolio

8.- ¿Cuál fue la rentabilidad del mes de septiembre del 2016?

Respuesta:

Rentabilidad Mensual de 2015 y 2016
Mes Rentabilidad 2015 (%) Rentabilidad 2016 (%)
May 66.24 63.25
Jan 71.09 75.95
Feb 75.89 76.43
Mar 71.33 76.93
Apr 70.93 77.09
Jun 71.66 65.68
Jul 72.09 93.52
Aug 73.57 69.75
Sep 75.84 77.28
Oct 85.45 80.75
Nov 74.92 74.71
Dec 70.52 79.40

9.- ¿Cuáles fue el trimestre con la rentabilidad más baja?

Respuesta:

Rentabilidad por Trimestre de 2015 y 2016
Trimestre Rentabilidad 2015 (%) Rentabilidad 2016 (%)
1 72.51 76.47
2 69.57 68.05
3 73.88 80.15
4 74.37 77.09

10.- ¿Cuál fue mi cliente menos rentable y en qué año?

Respuesta:

Menor rentabilidad por cliente
Número de cliente Año Rentabilidad
20 2015 43.72

Reporte

Áreas de oportunidad

A partir del análisis de los datos de ventas de 2015 y 2016, se identificaron las siguientes áreas de oportunidad:

1. Desempeño de Vendedores:

  • Algunos vendedores muestran consistentemente bajo rendimiento en términos de ventas netas y rentabilidad.

2. Clientes:

  • Se observó una disminución en las compras de algunos clientes clave en 2016.
  • Identificación de clientes menos rentables que requieren estrategias específicas de manejo.

3. Productos:

  • Ciertas familias de productos presentan baja rentabilidad, lo que sugiere la necesidad de revisar el portafolio de productos.

4. Tendencias Temporales:

  • La estacionalidad de las ventas sugiere oportunidades para campañas de marketing dirigidas en períodos específicos del año.

Soluciones propuestas

1. Mejora del Desempeño de Vendedores:

  • Implementar programas de capacitación para vendedores con bajo rendimiento.
  • Introducir incentivos basados en el rendimiento promedio para motivar a los vendedores.

2. Fidelización de Clientes:

  • Desarrollar programas de fidelización para retener a los clientes más rentables.
  • Realizar encuestas para entender las necesidades de los clientes que han reducido sus compras.

3. Optimización del Portafolio de Productos:

  • Revisar el catálogo de productos y considerar la eliminación de productos con baja rentabilidad.
  • Introducir nuevos productos basados en las tendencias del mercado y las necesidades de los clientes.

4. Campañas de Marketing Dirigidas:

  • Planificar campañas de marketing estacionales basadas en las tendencias de ventas.
  • Utilizar datos de ventas históricos para predecir y prepararse para períodos de alta demanda.

Políticas, procesos y procedimientos

1. Políticas de Ventas y Marketing:

  • Introducción de una política de incentivos para vendedores basada en objetivos de rendimiento.
  • Política de descuentos y promociones estacionales para aumentar las ventas durante períodos clave.

2. Procesos Operativos:

  • Optimización de la gestión de inventarios para reducir costos y mejorar la disponibilidad de productos.
  • Mejora de los procesos logísticos para asegurar entregas más rápidas y eficientes.

3. Procedimientos Estándares:

  • Establecer procedimientos estándar para la formación y evaluación de vendedores.
  • Implementar un procedimiento de revisión trimestral del portafolio de productos.

Plan de trabajo

1. Cronograma de Implementación:

  • Mes 1-2: Evaluación y capacitación de vendedores.
  • Mes 1-2: Revisión y optimización del portafolio de productos.
  • Mes 4-6: Lanzamiento de campañas de marketing estacionales.

2. Asignación de Responsabilidades:

  • Equipo de Ventas: Implementar programas de capacitación y motivación.
  • Equipo de Marketing: Planificar y ejecutar campañas de marketing.
  • Equipo de Operaciones: Optimizar procesos de inventario y logística.

3. Recursos Necesarios:

  • Humanos: Contratación de un especialista en retail y un especialista en marketing digital.
  • Tecnológicos: Implementación de un nuevo sistema de gestión de inventarios.
  • Financieros: Presupuesto para campañas de marketing y programas de incentivos.

Sistema de trabajo

1. Monitoreo y Evaluación:

  • Establecer reuniones mensuales de seguimiento para revisar el progreso y ajustar las estrategias según sea necesario.
  • Utilizar herramientas de análisis de datos para monitorear las métricas clave en tiempo real.Recomendado Azure, Power apps, SQL, Salesforce

2. Indicadores Clave de Rendimiento (KPIs):

  • Ventas Netas: Monitorear el incremento en ventas netas mensualmente.
  • Rentabilidad: Medir la mejora en la rentabilidad por vendedor y por producto.
  • Fidelización de Clientes: Seguimiento de la tasa de retención de clientes.
  • Eficiencia Operativa: Reducción en los tiempos de entrega y costos de inventario.