i) ¿Qué es un análisis exploratorio de los
datos?
El análisis exploratorio de los datos, también conocido como EDA, es un
método en el cual se pueden investigar y analizar conjuntos de datos
mediante diversas técnicas para la visualización de datos, es de
especial ayuda cuando se manejan grandes cantidades de datos. Su
principal objetivo es descubrir patrones, tendencias, detectar
irregularidades, probar hipótesis, y en sí, lograr entender con mayor
profundidad los datos que se están analizando.
ii) ¿Cómo contribuye el análisis exploratorio de los datos a
mejorar el proceso y los resultados de analítica
descriptiva?
La analítica descriptiva consiste en identificar tendencias y relaciones
entre las variables. La forma en que el análisis exploratorio ayuda a
mejorar este proceso es que permite identificar estos patrones,
tendencias y relaciones de forma más fácil y rápida al ser representados
visualmente. Hallazgos que a simple vista no podrían ser encontrados por
el ojo humano, así como también facilitar la selección de las variables
más importantes para la situación o decisión que se está estudiando.
Visión: En 2033 seremos una de las cinco mejores compañías de México que generan valor dentro de la cadena de suministro de las industrias que más valoran la forma en la que se protegen y trasladan las cosas.
Misión: Transformar nuestro entorno y resolver retos industriales de nuestros clientes a través de la colaboración, provocando nuevas oportunidades que potencian nuestro modelo de negocio, para alcanzar nuestros ideales.
Objetivos estrategicos:
Promover la sustentabilidad: reduciendo el uso de materiales no renovables, aumentar uso de materiales reciclables, optimizar sus recursos disminuyendo los residuos.
Fomentar la efectividad colaborativa: cumplir en tiempo y forma, establecer metas claras con sus respectivos responsables, tener transparencia dentro del equipo.
Fomentar la innovación: buscar promover la innovación en la organización donde los miembros de la empresa están trabajando juntos para lograr solucionar los problemas mediante su uso de ingenio y experimentación.
# Carga de librerias
library(xts)
library(dplyr)
library(ggplot2)
library(tseries)
library(stats)
library(forecast)
library(astsa)
library(corrplot)
library(AER)
library(vars)
library(dynlm)
library(TSstudio)
library(tidyverse)
library(sarima)
library(dygraphs)
library(readxl)
library(zoo)
library(DataExplorer)
library(foreign)
library(modelr)
library(broom)
library(ISLR)
library(readr)
library(caret)
library(e1071)
library(class)
library(ROCR)
library(pROC)
library(lmtest)
library(caTools)
library(rpart)
library(rpart.plot)
library(psych)
library(ggpubr)
library(reshape)
library(Metrics)
library(mlbench)
library(rsample)
library(cluster)
library(factoextra)
library(gridExtra)
library(readxl)
library(lubridate)
library(forecast)
library(RColorBrewer)
library(gt)
#install.packages ("readtext")
library(readtext)
#install.packages("syuzhet")
library(syuzhet)
#install.packages("RColorBrewer")
library(RColorBrewer)
#install.packages("wordcloud")
library(wordcloud)
#install.packages("tm")
library(tm)
# Bases de datos
importadores <- read.csv("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Importers of Cartons boxes cases of corrugated paper or board 2020-2021.csv")
exportadores <- read.csv("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Exporters of Carton boxes cases of corrugated paper or board 2020-2021.csv")
#summary(importadores)
#summary(exportadores)
Importadores:
Continent.ID: Siglas para identificar el continente.
Continent: Nombre del continente.
Country.ID: Siglas para identificar el país y el continente al que pertenece.
Country: País.
Year: Año en el cual se registró el dato.
Trade.Value: El tamaño de la industria de la importación de cartón.
Trade.Value.Growth: El crecimiento porcentual del “Trade.Value” en relación al año anterior.
Trade.Value.Growth.Value: El crecimiento en unidades del “Trade.Value” en relación al año anterior.
Trade.Value.Previous: El tamaño de la industria de la importación de cartón en el año previo.
Trade.Value.Current: El tamaño de la industria de la importación de cartón en el año actual.
Exportadores:
Continent.ID: Siglas para identificar el continente.
Continent: Nombre del continente.
Country.ID: Siglas para identificar el país y el continente al que pertenece.
Country: País.
Year: Año en el cual se registró el dato.
Trade.Value: El tamaño de la industria de la exportación de cartón.
Trade.Value.Growth: El crecimiento porcentual del “Trade.Value” en relación al año anterior.
Trade.Value.Growth.Value: El crecimiento en unidades del “Trade.Value” en relación al año anterior.
Trade.Value.Previous: El tamaño de la industria de la exportación de cartón en el año previo.
Trade.Value.Current: El tamaño de la industria de la exportación de cartón en el año actual.
imp_crecimiento <-
importadores %>%
group_by(Continent) %>%
summarise(avg_growth = mean(Trade.Value.Growth),
avg_value = mean(Trade.Value)) %>%
filter(Continent != "Antarctica")
plot_imp <- ggplot(data=imp_crecimiento, aes(x=reorder(Continent, avg_value), y=avg_value, fill=avg_growth)) +
geom_bar(stat="identity") +
coord_flip() +
scale_fill_gradient(low = "yellow", high = "darkorange") +
labs(title = "Importaciones de Cartón por Continente")
exp_crecimiento <-
exportadores %>%
group_by(Continent) %>%
summarise(avg_growth = mean(Trade.Value.Growth),
avg_value = mean(Trade.Value)) %>%
filter(Continent != "Antarctica")
plot_exp <- ggplot(data=exp_crecimiento, aes(x=reorder(Continent, avg_value), y=avg_value, fill=avg_growth)) +
geom_bar(stat="identity") +
coord_flip() +
scale_fill_gradient(low = "yellow", high = "darkorange") +
labs(title = "Exportaciones de Cartón por Continente")
# Define a layout matrix with margins
layout_matrix <- rbind(c(1, 1), c(2, 2))
# Arrange the plots with the specified layout matrix
grid_arrangement <- grid.arrange(plot_imp, plot_exp, layout_matrix = layout_matrix)
imp_crecimiento_america <-
importadores %>%
filter(Continent == "North America") %>%
group_by(Country) %>%
summarise(Trade.Value.Growth = mean(Trade.Value.Growth), Trade.Value = sum(Trade.Value)) %>%
arrange(desc(Trade.Value)) %>%
top_n(10, wt = Trade.Value)
plot_imp_america <- ggplot(data = imp_crecimiento_america, aes(x = reorder(Country, Trade.Value), y = Trade.Value, fill = Trade.Value.Growth)) +
geom_bar(stat = "identity") +
coord_flip() +
scale_fill_gradient(low = "yellow", high = "darkorange") +
labs(title = "Importaciones de Cartón en Norteamérica", subtitle = "Top 10 Países por Value")
exp_crecimiento_america <-
exportadores %>%
filter(Continent == "North America") %>%
group_by(Country) %>%
summarise(Trade.Value.Growth = mean(Trade.Value.Growth), Trade.Value = sum(Trade.Value)) %>%
arrange(desc(Trade.Value)) %>%
top_n(10, wt = Trade.Value)
plot_exp_america <- ggplot(data = exp_crecimiento_america, aes(x = reorder(Country, Trade.Value), y = Trade.Value, fill = Trade.Value.Growth)) +
geom_bar(stat = "identity") +
coord_flip() +
scale_fill_gradient(low = "yellow", high = "darkorange") +
labs(title = "Exportaciones de Cartón en Norteamérica", subtitle = "Top 10 Países por Value")
# Define a layout matrix with margins
layout_matrix <- rbind(c(1, 1), c(2, 2))
# Arrange the plots with the specified layout matrix
grid_arrangement2 <-grid.arrange(plot_imp_america, plot_exp_america, layout_matrix = layout_matrix)
ggsave("imp_na.png", plot = grid_arrangement2, device = "png")
## Saving 7 x 5 in image
imp_crecimiento_europa <-
importadores %>%
filter(Continent == "Europe") %>%
group_by(Country) %>%
summarise(Trade.Value.Growth = mean(Trade.Value.Growth), Trade.Value = sum(Trade.Value)) %>%
arrange(desc(Trade.Value)) %>%
top_n(10, wt = Trade.Value)
plot_imp_europa <- ggplot(data = imp_crecimiento_europa, aes(x = reorder(Country, Trade.Value), y = Trade.Value, fill = Trade.Value.Growth)) +
geom_bar(stat = "identity") +
coord_flip() +
scale_fill_gradient(low = "yellow", high = "darkorange") +
labs(title = "Importaciones de Cartón en Europa", subtitle = "Top 10 Países por Value")
exp_crecimiento_europa <-
exportadores %>%
filter(Continent == "Europe") %>%
group_by(Country) %>%
summarise(Trade.Value.Growth = mean(Trade.Value.Growth), Trade.Value = sum(Trade.Value)) %>%
arrange(desc(Trade.Value)) %>%
top_n(10, wt = Trade.Value)
plot_exp_europa <- ggplot(data = exp_crecimiento_europa, aes(x = reorder(Country, Trade.Value), y = Trade.Value, fill = Trade.Value.Growth)) +
geom_bar(stat = "identity") +
coord_flip() +
scale_fill_gradient(low = "yellow", high = "darkorange") +
labs(title = "Exportaciones de Cartón en Europa", subtitle = "Top 10 Países por Value")
# Define a layout matrix with margins
layout_matrix <- rbind(c(1, 1), c(2, 2))
# Arrange the plots with the specified layout matrix
grid_arrangement3 <- grid.arrange(plot_imp_europa, plot_exp_europa, layout_matrix = layout_matrix)
ggsave("imp_eu.png", plot = grid_arrangement3, device = "png")
## Saving 7 x 5 in image
A través de las visualizaciones previas, podemos concluir lo siguiente:
Aunque los EE.UU son los líderes del mercado de cartón en América, podemos considerar que el mercado Alemán de cartón puede ser una amenaza para Form. Esto se debe a que una gran parte de la industria automotríz y de autopartes se centra en Alemania. Asimismo, Alemania posee un valor comercial de alrededor de 1.5 mil millones de dólares (1,413,035,728 USD en el 2021), superando el valor comericial de 1.3 mil millones de dólares (1,319,071,8128 USD en el 2021) de los EE.UU.
El mercado de Los Países Bajos también pueden ser una amenaza para Form, ya que posee un gran crecimiento del 56% en cuanto a exportaciones de cartón en el 2021 (año en el que fueron grabados los datos) y es un mercado de 650 millones de dólares (651,558,509 USD). Esto siendo ~2.5 veces mayor que el mercado mexicano. También, la cercanía que tiene con Alemania también podría representar una amenaza adicional para Form. La interconexión de los mercados de los Países Bajos y Alemania podría facilitar la entrada de competidores alemanes en el mercado neerlandés, intensificando la competencia y afectando la cuota de mercado de Form.
A través de las visualizaciones previas, podemos concluir lo siguiente:
Un gran beneficio para Form es que el mercado norteamericano ya se encuentra establecido en cuanto a Cartón. Claro, hay países con crecimiento como México (En específico el estado de Nuevo León) en cuanto al mercado automotriz. Existe la presencia actual de manufactura de autopartes en Nuevo León.
Ya que Form se centra en Detroit, Nuevo León, y León, la empresa se encuentra en grandes hotspots norteamericanos de la industria automotriz y de cartón. Por lo cual, siguiendo las tendencias actuales, sus clientes metas deben ser Kia, Ford, y Tesla.
# Base de datos
vol_autopartes <- read.csv("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\VFP_autopartes.csv")
vol_autopartes:
Periodos: Año y trimestre.
indice: Índice del volumen físico de la producción.
plot(vol_autopartes$Date, vol_autopartes$indice, type = "l", col = "orange", lwd = 2, xlab = "Fecha", ylab = "Índice", main = "Índice del volumen físico de la producción")
temporariedad<-ts(vol_autopartes$indice,start=c(2005),end=c(2023),frequency=4)
temporariedad_decompose<-decompose(temporariedad)
plot(temporariedad_decompose)
decompose_plot <- autoplot(temporariedad_decompose)
A través de las visualizaciones previas, podemos concluir lo siguiente:
Aunque ha existido una tendencia positiva en los últimos años, existen muchas fluctuaciones en el comportamiento de la serie de tiempo desde el 2019. Si juntamos esto con los comentarios hechos por Felipe de Form, esto puede afectar la precisión al hacer predicciones de la demanda de Form.
La creciente tendencia de nearshoring puede afectar la volatilidad de la demanda para Form. Si se junta esto con los procesos ad hoc de la empresa, esto puede resultar en jornadas de trabajo altamente demandantes y puede incrementar la rotación de personal.
A través de las visualizaciones previas, podemos concluir lo siguiente:
Se puede observar que existe estacionalidad en la producción de autopartes. Se puede observar que en el tercer trimestre de cada año existe una alza en cuanto al índice del volumen físico de la producción de autopartes en México. Conociendo este dato, Form puede elaborar un análisis de demanda de acuerdo a la estacionalidad y generar estrategias de planeación para suplir con la alta demanda de cartón y empaques para autopartes.
El índice del volumen físico de la producción de autopartes en México tiene una tendencia positiva. Lo cual puede indicar que, considerando el estado actual de la industria automotriz en México, puede existir una futura alza en la producción de autopartes en México. Esto se puede traducir a un crecimiento de demanda para Form.
El volumen físico de producción de autopartes se encuentra en uno de sus puntos más altos históricos en México ya que de acuerdo al INEGI, alcanzó un índice base de 105.8 en el 4to trimestre del 2023. Esto presenta la oportunidad de un mayor volumen de ventas para Form.
# Base de datos
vol_vehiculos <- read.csv("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\vol_vehiculos.csv")
vol_vehiculos:
Periodos: Año y trimestre.
indice: Índice del volumen físico de la producción.
plot(vol_vehiculos$Date, vol_vehiculos$Indice, type = "l", col = "orange", lwd = 2, xlab = "Fecha", ylab = "Índice", main = "Índice del volumen físico de la producción")
#### Descompocisión
temporariedad1<-ts(vol_vehiculos$Indice,start=c(2005),end=c(2023),frequency=4)
temporariedad1_decompose<-decompose(temporariedad1)
plot(temporariedad1_decompose)
decompose_plot1 <- autoplot(temporariedad1_decompose)
A través de las visualizaciones previas, podemos concluir lo siguiente:
A través de las visualizaciones previas, podemos concluir lo siguiente:
Al igual que la producción de autopartes, existe estacionalidad en los datos. En el 3er trimestre de cada año existe una alza en cuanto al índice de producción de automóviles. Conociendo este dato, Form puede elaborar un análisis de demanda de acuerdo a la estacionalidad y generar estrategias de planeación para suplir con la alta demanda de cartón y empaques para autopartes.
El 2023 fue el año más alto histórico en cuanto al índice de producción de automóviles. Podemos combinar esto con la tendencia positiva que existe en los datos y se puede concluir que el mercado se está expandiendo en México.
# Base de datos
flujos_carton <- read_xlsx("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\flujos_ied_porsector_historico_2023_2.xlsx", sheet = "flujos_papel")
De la base de datos de “flujos_carton”, podemos ver las siguientes variables:
año: Año en el cual se presentan los datos.
trimestre: Trimestre del año en el cual se presentan los datos.
flujo_industria: Flujo total de la industria de papel.
fab_ppc: Fabricación de pulpa, papel y cartón.
fab_prod_pc: Fabricación de productos de papel y cartón.
plot(flujos_carton$fecha, flujos_carton$flujo_industria, type = "l", col = "orange", lwd = 2, xlab = "Fecha", ylab = "Índice", main = "Flujo de la Industria de Papel, Pulpa y Cartón")
ts_industry<-ts(flujos_carton$flujo_industria,start=c(2005),end=c(2023),frequency=4)
ts_industry_decompose<-decompose(ts_industry)
plot(ts_industry_decompose)
decompose_plot <- autoplot(ts_industry_decompose)
adf.test(ts_industry)
##
## Augmented Dickey-Fuller Test
##
## data: ts_industry
## Dickey-Fuller = -3.7549, Lag order = 4, p-value = 0.02623
## alternative hypothesis: stationary
De acuerdo a la prueba Dickey-Fuller, tenemos suficiente evidencia para concluir que la serie de tiempo es estacionaria.
acf(flujos_carton$flujo_industria,main="Significant Autocorrelations")
El ACF plot no muestra autocorrelación serial.
Box.test(flujos_carton$flujo_industria,lag=4,type="Ljung-Box")
##
## Box-Ljung test
##
## data: flujos_carton$flujo_industria
## X-squared = 2.2695, df = 4, p-value = 0.6863
El Box-Ljung Test sugiere que no existe autocorrelación serial de acuerdo a la cantidad de lags que ingresamos en el modelo.
industry_ARMA <- arima(flujos_carton$flujo_industria, order = c(4, 0, 4))
summary(industry_ARMA)
##
## Call:
## arima(x = flujos_carton$flujo_industria, order = c(4, 0, 4))
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4
## 0.2938 -0.1682 0.0287 -0.7430 -0.3405 0.3897 -0.1459 0.8605
## s.e. 0.2827 0.2439 0.2560 0.3077 0.2815 0.2417 0.1680 0.2452
## intercept
## 61.097
## s.e. 15.444
##
## sigma^2 estimated as 13734: log likelihood = -440.38, aic = 900.76
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.1387552 117.1938 68.16661 44.65385 543.6709 0.6652215
## ACF1
## Training set -0.01997132
plot(industry_ARMA)
fitted_values <- fitted(industry_ARMA)
residuals <- residuals(industry_ARMA)
adf_test_result <- adf.test(na.omit(fitted_values))
print(adf_test_result)
##
## Augmented Dickey-Fuller Test
##
## data: na.omit(fitted_values)
## Dickey-Fuller = -9.2028, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Box_test_result <- Box.test(residuals, lag = 4, type = "Ljung-Box")
print(Box_test_result)
##
## Box-Ljung test
##
## data: residuals
## X-squared = 0.24062, df = 4, p-value = 0.9933
Al visualizar nuestras raíces inversas, podemos ver que el modelo es confiable ya que ningún punto reside en el exterior
De acuerdo a la prueba Dickey-Fuller, tenemos suficiente evidencia para concluir que la serie de tiempo es estacionaria.
El Box-Ljung Test sugiere que no existe autocorrelación serial de acuerdo a la cantidad de lags que imputamos en el modelo.
industry_ARMA_forecast <- forecast(industry_ARMA, h = 5)
print(industry_ARMA_forecast)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 72 -17.41155 -169.08117 134.2581 -249.3702 214.5471
## 73 59.44057 -92.28502 211.1662 -172.6037 291.4848
## 74 18.69601 -136.21737 173.6094 -218.2236 255.6156
## 75 51.23540 -103.93779 206.4086 -186.0815 288.5523
## 76 123.61424 -31.72100 278.9495 -113.9505 361.1790
autoplot(industry_ARMA_forecast)
Entregas urgentes y servicio rápido: Son capaces de responder a sus clientes en menos de 24 horas y entregarle en menos de 2 semanas, como el caso que tuvieron con Yanfeng.
Anticipación de la demanda: Las alternativas de solución que ofrecen no se limitan a algún material o proceso productivo, diseñan y fabrican el mejor producto de acuerdo a la necesidad del cliente.
Anticipación al riesgo: Los diferencia el poder identificar potenciales riesgos que afecten el suministro de empaques a todas las líneas de producción.
Modelo de negocio único: Identifican problemática, desarrollo de ingeniería, soporte eficiente, y especialización en proyectos. La eficiencia de su modelo de negocio se puede ver avalado por el Premio Nacional de Envase que ganaron en múltiples ocasiones.
Falta de marketing: No tienen presencia en Instagram, su perfil no tiene publicaciones y solo tiene un link a su página web , su página en Facebook y Linkedin tiene pocas interacciones y seguidores.
Alcance de marca débil: Al contar con un portafolio de clientes limitado no se le da la suficiente importancia a la promoción de los servicios que ofrece la empresa ni a su brand awareness que les podría ayudar a conseguir más clientes.
Alta rotación laboral por separación voluntaria: Se han implementado diversos incentivos, prestaciones y beneficios pero sigue habiendo una tasa muy alta del personal que decide irse por cuenta propia y sin una razón específica.
Estilo de trabajo rápido: Una de las mayores fortalezas y diferenciador de la empresa es su capacidad de realizar entregas urgentes y de calidad a sus clientes, sin embargo, también podría ser una de las principales razones por las que muchos colaboradores consideran salirse de la empresa al no lograr adaptarse al ritmo de trabajo.
Expansión a Estados Unidos: FORM encuentra una oportunidad de crecimiento en el mercado estadounidense, y esta idea es viable , ya que Estados Unidos se encuentra bien establecido dentro de la industria del cartón.
Nearshoring: Se pueden notar tendencias de crecimiento en el mercado automotriz en Nuevo León, empresas reconocidas internacionalmente como Tesla buscan implementar operaciones en el estado.
Dirigirse un nuevo segmento de mercado: Existe la presencia actual de manufactura de autopartes en el estado y la posibilidad de que más empresas se establezcan en un futuro cercano, por lo que FORM podría buscar ofrecer sus servicios a empresas grandes e internacionales como Kia, Ford, y Tesla, que tienen altas cantidades de producción y podrían ser beneficiadas por su modelo de trabajo único.
Cobertura de tipo de cambio: La industria del cartón depende fuertemente de las importaciones de insumos valorados en divisas (principalmente dólares y euros), por lo que, las fluctuaciones en el tipo de cambio podrían impactar de manera negativa a las empresas en esta industria. Para mantener sus costos de producción estables ante riesgos sobre tasas de cambio, FORM debe contar con estrategias de cobertura de tipo de cambio.
Nearshoring: El mercado Alemán y de los Países Bajos de cartón pueden representar una amenaza para FORM. Un gran porcentaje de la industria automotriz y de autopartes se encuentra ubicada en Alemania, siendo este el país con mayores exportaciones de cartón en el mundo. Además, los Países Bajos han experimentado un notable crecimiento del 56% en cuanto a exportaciones de cartón en el 2021. Por lo que, la interconexión entre ambos países podría facilitar la entrada de competidores alemanes en el mercado neerlandés, intensificando así la competencia.
Beneficios ofrecidos por la competencia: A pesar de que FORM ha intentado implementar diversos beneficios para sus colaboradores, ninguno ha ayudado a disminuir la alta rotación laboral y FORM no puede permitirse el implementar múltiples beneficios como sus competidores más grandes.
Fluctuaciones y estacionalidad en la industria automotriz y de autopartes: Aunque ha existido una tendencia positiva en los últimos años, existen muchas fluctuaciones en el comportamiento de la serie de tiempo de la industria automotriz. Esto puede indicar que existen temporadas más volátiles que otras, por lo que es necesario que FORM genere un plan de gestión de riesgos que los ayude a navegar mejor esa variación.
Automatización en la industria del cartón: Los procesos de producción de FORM todavía dependen de gran manera de la mano de obra, mientras que competidores más grandes y reconocidos pueden invertir en la compra de máquinas que permitan una mayor automatización en sus procesos, FORM tiene una alta tasa de rotación laboral y no puede permitirse una inversión al nivel de competidores más grandes.
1. Implementar estrategias de cobertura de tipo de cambio para minimizar el impacto de las fluctuaciones en la industria del cartón.
2. Invertir en estrategias de employer branding para mejorar la imagen de la empresa y reducir la rotación laboral.
3. Mejorar los beneficios ofrecidos a los colaboradores, tomando como referencia los que mejor les funcionaron en el pasado o aquellos ofrecidos por su competencia.
El tratado del libre comercio entre Estados Unidos y México permite que las mercancías pasen con facilidad y con impuestos casi nulos por la misma alianza política y aduanera.
Políticas de inmigración (Visas de trabajos / Inmigración ilegal), hacen que mover trabajadores atravez de paises sea mas complicado.
Las regulaciones laborales, incluyendo las relacionadas con la rotación de personal y los incentivos laborales, influyen en la capacidad de Form para retener talento y mantener una fuerza laboral estable.
Las economías de ambos países son muy buenas y favorables para la empresa sin embargo Estados Unidos destaca más por su economía que en México.
La competencia global puede influir en los precios y la demanda de los productos de Form, especialmente si surgen competidores internacionales con ventajas de costo o tecnología, como seria en el nearshoring.
Los cambios en los salarios mínimos y los costos laborales pueden afectar los costos de producción de Form y su competitividad en el mercado, de esta manera teniendo una mayor rotación de empleados al igual que es posible entrar en números rojos.
Estados Unidos a lo largo de la historia se ha destacado por llevar la innovación de ramas tecnológicas y es un país que tiene demasiados fondos para el desarrollo de tecnologías y procesos.
IA avanzando en el mercado Latino, lo cual dejaría sin trabajo a miles de personas pero aceleraría los procesos.
Nuevas máquinas tecnológicas para automatizar y eficientar el proceso de pegado de cajas.
Las leyes laborales relacionadas con la contratación, el despido y los incentivos pueden influir en las prácticas de recursos humanos de Form.
Normativas ambientales y de seguridad industrial.
Las regulaciones ambientales, como las relacionadas con la gestión de residuos y las emisiones es un tema muy valorado en ambos países, lo cual causa que Form tenga que tener actualizado todos los servicios relacionados a estas regulaciones.
México * Impacto ambiental de la industria, incluida la gestión de residuos y emisiones.
Estados Unidos * Políticas ambientales y sus implicaciones para la industria, incluidas las regulaciones sobre emisiones y energía renovable.
1. DIVERSIFICACIÓN GEOGRÁFICA Y REDUCCIÓN DE RIESGOS: Búsqueda de oportunidades extranjeras con economías estables y proyectos a futuro. Todo por medio de diversificar más su presencia geográfica.
2. INVERSIÓN EN TECNOLOGÍA E INNOVACIÓN: Las inteligencias artificiales y las automatizaciones han tenido un boom espectacular en los últimos años el cual la empresa debería empezar el análisis para implementar nuevas medidas de automatización de procesos para así exponencial izar su eficiencia y productividad de fábrica y entrega de proyectos ayudando así a mantener la competitividad que tienen en el mercado.
3. DESARROLLO DE ESTRATEGIAS DE RETENCIÓN DE TALENTO: La empresa debe de buscar un nuevo enfoque, es cuestión a recursos humanos, ya que deben de buscar nuevas maneras para retener el talento dentro de la planta industrial para así reducir costos variables dentro de capacitaciones. Buscando oportunidades laborales y manteniendo la fuerza laboral estable y altamente calificada.
A partir de la sesión de inicio del reto con el Socio Formador FORM especificar las dos situaciones problema.
1. ¿Cuál es el puesto con más bajas al mes?
En los tres años analizados, el puesto con más bajas al mes es el de
ayudante genereal, siendo el año 2023 donde hubo más renuncias de este
puesto, lo cual parece que FORM mejoró al año siguiente al haber una
disminución significativa. Después de ayudante general seguiría ayudante
de embarques con 3 renuncias en 2023 y luego ayudante general cedis con
2 renuncias en 2024.
2. ¿Cuánto duran los colaboradores? Én la gráfica se puede apreciar el pico más alto en el 0, indicando que la mayoría de colaboradores que renuncian no llegan ni a completar el mes trabajando para FORM.
3. ¿Existe relación entre la residencia y edad de los colaboradores y su propensión a renunciar? En este caso se tomaron los municipios como referencia para la residencia de los colaboradores. El municipio con mayores renuncias fue Monterrey, y el municipio con más valores atípicos fue Apodaca. Además, se puede apreciar que la mediana de edad de las personas que renuncian en la mayoría de los municipios es de 30 años.
4. ¿Existe relación entre el puesto y edad de los colaboradores y su propensión a renunciar? El puesto con más renuncias es costurera y la mediana de edad es aproximadamente 30 años. Siguiéndole ayudante general de cedis con mediana de 45 años, y luego chofer con mediana de 30 años. Ayudante general es donde hay más valores atípicos.
5. ¿Cuál es el promedio de ventas por mes para Form? El promedio de ventas por mes en el año 2023 de FORM fue de aproximadamente 400 productos (ya que se uso la variable cantidad). Teniendo un pico en diciembre. El promedio de ventas por mes en el año 2022 de FORM fue de aproximadamente 350 productos (ya que se uso la variable cantidad). Teniendo un pico en diciembre. El promedio de ventas por mes en el año 2021 de FORM fue de aproximadamente 350 productos (ya que se uso la variable cantidad). Teniendo un pico en julio.
6. ¿Cúales son los mejores clientes de FORM? El mejor cliente de FORM con es Stabilus, siguiéndole Aptiv Services Us, Llc, y en tercer lugar Hella Automotive Mexico.
# Bases de datos relevantes para responder las preguntas de análisis
# Base de datos RH
RH <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Form_RH_Junta (1).xlsx")
# Base de datos RH Encuesta
Encuesta <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Encuesta_Datos_FORM_Fall2023.xlsx")
# Base de datos Ventas por años
# 2023
Ventas23 <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx", sheet = 3)
# 2022
Ventas22 <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx", sheet = 2)
# 2021
Ventas21 <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx", sheet = 1)
# Base de datos Ventas General
datos_2021 <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx", sheet = 1)
datos_2022 <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx", sheet = 2)
datos_2023 <- read_excel("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx", sheet = 3)
VentasG <- rbind(datos_2021, datos_2022, datos_2023)
# Nuevo df de Recursos Humanos con solo las columnas necesarias
RH1 <- RH[, !(names(RH) %in% c("No.", "RFC", "Imss", "SD", "Factor de Crédito Infonavit", "No. De Crédito Infonavit", "CURP", "Banco", "Correo Electronico", "Observaciones de baja", "Número de Télefono","Fecha de Baja", "dia", "mes", "año"))]
RH1
## # A tibble: 625 × 20
## Apellido Nombre `Fecha de nacimiento` Edad Género `Fecha de Alta`
## <chr> <chr> <dttm> <dbl> <chr> <dttm>
## 1 Luna Lopez Yolan… 1985-08-18 00:00:00 39 Femen… 2017-02-20 00:00:00
## 2 Suarez Romo Julio… 1969-06-27 00:00:00 55 Mascu… 2017-12-01 00:00:00
## 3 Cruz Ramos Victo… 1989-06-21 00:00:00 35 Mascu… 2018-03-23 00:00:00
## 4 Esparza Pasaron Lucer… 1997-11-20 00:00:00 27 Femen… 2018-09-06 00:00:00
## 5 Garcia Perales Yulia… 1984-08-19 00:00:00 40 Femen… 2019-05-02 00:00:00
## 6 Yabert Alvarado Mario… 1990-06-24 00:00:00 34 Mascu… 2019-07-30 00:00:00
## 7 Lopez Torres Martin 1978-02-27 00:00:00 46 Mascu… 2020-08-20 00:00:00
## 8 Rodriguez More… Nicol… 1992-01-11 00:00:00 32 Mascu… 2020-11-03 00:00:00
## 9 Celestino Barb… Jaime 1982-06-02 00:00:00 42 Mascu… 2021-02-16 00:00:00
## 10 Hernandez Felix Emili… 1993-06-22 00:00:00 31 Femen… 2021-03-25 00:00:00
## # ℹ 615 more rows
## # ℹ 14 more variables: `Primer Mes` <dttm>, `Cuarto Mes` <dttm>,
## # `Fecha Baja` <chr>, Puesto <chr>, Dpto <chr>, `Lugar de Nacimiento` <chr>,
## # Calle <chr>, Número <chr>, Colonia <chr>, Municipio <chr>, Estado <chr>,
## # CP <chr>, `Estado Civil` <chr>, `Causa de Baja` <chr>
# Nuevo df de Ventas con columnas necesarias
Ventas21 <- Ventas21[, !(names(Ventas21) %in% c("Folio de Factura", "No. OC Cliente", "Ref. cliente", "Estado", "Categoría de producto"))]
Ventas21
## # A tibble: 6,563 × 4
## Fecha Cliente Producto Cantidad
## <dttm> <chr> <chr> <dbl>
## 1 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [CAJA R… 100
## 2 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [CELDA … 80
## 3 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180022… 1000
## 4 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180003… 100
## 5 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180203… 50
## 6 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180203… 300
## 7 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180111… 70
## 8 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180111… 60
## 9 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180111… 100
## 10 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180112… 60
## # ℹ 6,553 more rows
Ventas22 <- Ventas22[, !(names(Ventas22) %in% c("Folio de Factura", "No. OC Cliente", "Ref. cliente", "Estado", "Categoría de producto"))]
Ventas22
## # A tibble: 4,868 × 4
## Fecha Cliente Producto Cantidad
## <dttm> <chr> <chr> <dbl>
## 1 2022-01-03 00:00:00 DENSO MEXICO [PART#: CHAROLA A 24 CHAROLA … 13
## 2 2022-01-03 00:00:00 DENSO MEXICO [MX989001-0650 PALLET 330 MCA… 2
## 3 2022-01-03 00:00:00 DENSO MEXICO [PART#: Retrabajo de 19 charo… 1
## 4 2022-01-03 00:00:00 DENSO MEXICO [PART# TAPA A24 TAPA DE TERMO… 1212
## 5 2022-01-03 00:00:00 DENSO MEXICO [PART#: CHAROLA A 24 CHAROLA … 12
## 6 2022-01-03 00:00:00 DENSO MEXICO [PART#: CHAROLA FPI 16 EN PLA… 25
## 7 2022-01-03 00:00:00 TOKAI RIKA MEXICO [CELDA CON MICRO CORUUGAD O E… 150
## 8 2022-01-03 00:00:00 TOKAI RIKA MEXICO [CAJA RSC ECT 36 DK PAD ECT 3… 200
## 9 2022-01-03 00:00:00 TOKAI RIKA MEXICO [TR14085 KIT 95161] KIT 95161 250
## 10 2022-01-03 00:00:00 TOKAI RIKA MEXICO [TR13776 CAJA RSC CK 44 ECT C… 295
## # ℹ 4,858 more rows
Ventas23 <- Ventas23[, !(names(Ventas23) %in% c("Folio de Factura", "No. OC Cliente", "Ref. cliente", "Estado", "Categoría de producto"))]
Ventas23
## # A tibble: 5,275 × 4
## Fecha Cliente Producto Cantidad
## <dttm> <chr> <chr> <dbl>
## 1 2023-12-22 00:00:00 Aptiv Services US, LLC "[CMP- … 7488
## 2 2023-12-22 00:00:00 Aptiv Services US, LLC "[CMP-C… 698
## 3 2023-12-21 00:00:00 HELLA AUTOMOTIVE MEXICO "[467.4… 800
## 4 2023-12-21 00:00:00 HELLA AUTOMOTIVE MEXICO "[467.9… 3200
## 5 2023-12-20 00:00:00 Aptiv Services US, LLC "[CMP- … 7488
## 6 2023-12-20 00:00:00 FAURECIA SISTEMAS AUTOMOTRICES DE MEXI… "[BOX-0… 624
## 7 2023-12-20 00:00:00 FAURECIA SISTEMAS AUTOMOTRICES DE MEXI… "[PALLE… 52
## 8 2023-12-19 00:00:00 AVANZAR INTERIOR PRODUCTS DE MEXICO "[Dunna… 77
## 9 2023-12-19 00:00:00 AVANZAR INTERIOR PRODUCTS DE MEXICO "[ROPAC… 77
## 10 2023-12-18 00:00:00 HELLA AUTOMOTIVE MEXICO "[467.4… 200
## # ℹ 5,265 more rows
# Nuevo df de Ventas con columnas necesarias
VentasG <- VentasG[, !(names(VentasG) %in% c("Folio de Factura", "No. OC Cliente", "Ref. cliente", "Estado", "Categoría de producto"))]
VentasG
## # A tibble: 16,706 × 4
## Fecha Cliente Producto Cantidad
## <dttm> <chr> <chr> <dbl>
## 1 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [CAJA R… 100
## 2 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [CELDA … 80
## 3 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180022… 1000
## 4 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180003… 100
## 5 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180203… 50
## 6 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180203… 300
## 7 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180111… 70
## 8 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180111… 60
## 9 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180111… 100
## 10 2021-01-04 00:00:00 GRUPO ANTOLIN SALTILLO, S. de R.L de C… [180112… 60
## # ℹ 16,696 more rows
Base de datos Recursos Humanos
Base de datos Ventas
Base de datos RH Encuesta
# Recursos Humanos
str(RH1)
## tibble [625 × 20] (S3: tbl_df/tbl/data.frame)
## $ Apellido : chr [1:625] "Luna Lopez" "Suarez Romo" "Cruz Ramos" "Esparza Pasaron" ...
## $ Nombre : chr [1:625] "Yolanda Judith" "Julio Cesar" "Victor Abel" "Lucero Shanyeza" ...
## $ Fecha de nacimiento: POSIXct[1:625], format: "1985-08-18" "1969-06-27" ...
## $ Edad : num [1:625] 39 55 35 27 40 34 46 32 42 31 ...
## $ Género : chr [1:625] "Femenino" "Masculino" "Masculino" "Femenino" ...
## $ Fecha de Alta : POSIXct[1:625], format: "2017-02-20" "2017-12-01" ...
## $ Primer Mes : POSIXct[1:625], format: "2017-03-22" "2017-12-31" ...
## $ Cuarto Mes : POSIXct[1:625], format: "2017-06-20" "2018-03-31" ...
## $ Fecha Baja : chr [1:625] "2/10/2023" "5/1/2023" "31/10/2023" "0/1/1900" ...
## $ Puesto : chr [1:625] "Costurera" "Gestor" "Chofer" "Lider" ...
## $ Dpto : chr [1:625] "Costura" "Embarques" "Embarques" "Produccion Cartón Mdl" ...
## $ Lugar de Nacimiento: chr [1:625] NA NA NA NA ...
## $ Calle : chr [1:625] "De Los Carniceros" "Mar Rojo" "Altamura" "Dolores Hidalgo" ...
## $ Número : chr [1:625] NA NA "216" NA ...
## $ Colonia : chr [1:625] "C. H. Blas Chumacero C.T.M" "Loma Linda" "Lomas De San Martin" "Insurgentes" ...
## $ Municipio : chr [1:625] "San Nicolas De Los G" "Monterrey" "Pesqueria" "Apodaca" ...
## $ Estado : chr [1:625] "Nuevo León" "Nuevo León" "Nuevo León" "Nuevo León" ...
## $ CP : chr [1:625] "66473" "64120" "66673" "66612" ...
## $ Estado Civil : chr [1:625] "Casado" "Casado" "Casado" "Soltero" ...
## $ Causa de Baja : chr [1:625] "Personal" "Interna" "No le agradaba horario de entrada/salida" "Inducida" ...
# Ventas
str(Ventas23)
## tibble [5,275 × 4] (S3: tbl_df/tbl/data.frame)
## $ Fecha : POSIXct[1:5275], format: "2023-12-22" "2023-12-22" ...
## $ Cliente : chr [1:5275] "Aptiv Services US, LLC" "Aptiv Services US, LLC" "HELLA AUTOMOTIVE MEXICO" "HELLA AUTOMOTIVE MEXICO" ...
## $ Producto: chr [1:5275] "[CMP- C0027158] CMP-C0027158 Centro de Cartón de 0.940\" Blue" "[CMP-C0030139] CMP-C0030139 Núcleo de Cartón de 0.500\" Red" "[467.416-21 COMPARTIMENT INSERT 1132X712X231MM CC] Sudáfrica. Celdas en Contenedor." "[467.905-59 INSERT 368.3X60X25.4 MM FOAM] Sudáfrica. Inserto Foam." ...
## $ Cantidad: num [1:5275] 7488 698 800 3200 7488 ...
str(Ventas22)
## tibble [4,868 × 4] (S3: tbl_df/tbl/data.frame)
## $ Fecha : POSIXct[1:4868], format: "2022-01-03" "2022-01-03" ...
## $ Cliente : chr [1:4868] "DENSO MEXICO" "DENSO MEXICO" "DENSO MEXICO" "DENSO MEXICO" ...
## $ Producto: chr [1:4868] "[PART#: CHAROLA A 24 CHAROLA DE PLASTICO CORRUGADO 6 CAVIDADES, COLOR NEGRO EN 4MM + ACCESORIOS DE PLASTICO COR"| __truncated__ "[MX989001-0650 PALLET 330 MCA ACP] PALLET 330 MCA ACP" "[PART#: Retrabajo de 19 charolas (diferentes issues)] PART#: Retrabajo de 19 charolas (diferentes issues)" "[PART# TAPA A24 TAPA DE TERMOFORMADO PARA A24 EN LA COMPRA MINIMA DE 3000 TAPAS, PRECIO OTORGADO SI SE RECIBE P"| __truncated__ ...
## $ Cantidad: num [1:4868] 13 2 1 1212 12 ...
str(Ventas21)
## tibble [6,563 × 4] (S3: tbl_df/tbl/data.frame)
## $ Fecha : POSIXct[1:6563], format: "2021-01-04" "2021-01-04" ...
## $ Cliente : chr [1:6563] "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." ...
## $ Producto: chr [1:6563] "[CAJA RSC 180302840] 180302840" "[CELDA ARMADA 180302870] 180302870" "[180022270 LINNER CMP-1210] LINNER 180022270 (L42 P)" "[180003720 CAJA RSC] 180003720 CAJA RSC" ...
## $ Cantidad: num [1:6563] 100 80 1000 100 50 300 70 60 100 60 ...
# Ventas General
str(VentasG)
## tibble [16,706 × 4] (S3: tbl_df/tbl/data.frame)
## $ Fecha : POSIXct[1:16706], format: "2021-01-04" "2021-01-04" ...
## $ Cliente : chr [1:16706] "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." "GRUPO ANTOLIN SALTILLO, S. de R.L de C.V." ...
## $ Producto: chr [1:16706] "[CAJA RSC 180302840] 180302840" "[CELDA ARMADA 180302870] 180302870" "[180022270 LINNER CMP-1210] LINNER 180022270 (L42 P)" "[180003720 CAJA RSC] 180003720 CAJA RSC" ...
## $ Cantidad: num [1:16706] 100 80 1000 100 50 300 70 60 100 60 ...
# Ver los nombres de las columnas del df de RH
colnames(RH1)
## [1] "Apellido" "Nombre" "Fecha de nacimiento"
## [4] "Edad" "Género" "Fecha de Alta"
## [7] "Primer Mes" "Cuarto Mes" "Fecha Baja"
## [10] "Puesto" "Dpto" "Lugar de Nacimiento"
## [13] "Calle" "Número" "Colonia"
## [16] "Municipio" "Estado" "CP"
## [19] "Estado Civil" "Causa de Baja"
# Cambiar nombres de columnas a que no tengan espacios del df RH1
# Nombres de las columnas que deseas cambiar
columnas_a_cambiar <- c("Fecha de nacimiento", "Fecha de Alta", "Primer Mes", "Cuarto Mes",
"Fecha Baja", "Lugar de Nacimiento", "Estado Civil", "Causa de Baja")
# Nuevos nombres para estas columnas
nuevos_nombres <- c("Fecha_de_nacimiento", "Fecha_de_Alta", "Primer_Mes", "Cuarto_Mes",
"Fecha_Baja", "Lugar_de_Nacimiento", "Estado_Civil", "Causa_de_Baja")
# Iterar sobre las columnas que deseas cambiar y asignarles los nuevos nombres
for (i in seq_along(columnas_a_cambiar)) {
colnames(RH1)[colnames(RH1) == columnas_a_cambiar[i]] <- nuevos_nombres[i]
}
# Verificar que cambiaron los nombres
colnames(RH1)
## [1] "Apellido" "Nombre" "Fecha_de_nacimiento"
## [4] "Edad" "Género" "Fecha_de_Alta"
## [7] "Primer_Mes" "Cuarto_Mes" "Fecha_Baja"
## [10] "Puesto" "Dpto" "Lugar_de_Nacimiento"
## [13] "Calle" "Número" "Colonia"
## [16] "Municipio" "Estado" "CP"
## [19] "Estado_Civil" "Causa_de_Baja"
# Quitar tildes de las columnas del df RH1
colnames(RH1)[colnames(RH1) == "Género"] <- "Genero"
colnames(RH1)[colnames(RH1) == "Número"] <- "Numero"
# Verificar cambios
colnames(RH1)
## [1] "Apellido" "Nombre" "Fecha_de_nacimiento"
## [4] "Edad" "Genero" "Fecha_de_Alta"
## [7] "Primer_Mes" "Cuarto_Mes" "Fecha_Baja"
## [10] "Puesto" "Dpto" "Lugar_de_Nacimiento"
## [13] "Calle" "Numero" "Colonia"
## [16] "Municipio" "Estado" "CP"
## [19] "Estado_Civil" "Causa_de_Baja"
# Convertir la columna "Fecha Baja" a formato fecha
RH1$Fecha_Baja <- as.Date(RH1$Fecha_Baja, format = "%d/%m/%Y")
# Manejar valores atípicos
RH1$Fecha_Baja[RH1$Fecha_Baja == "0/1/1900"] <- NA
# Asegurar que también la fecha de alta este en formato Date
RH1$Fecha_de_Alta <- as.Date(RH1$Fecha_de_Alta)
# Convertir la columna "Fecha" del DF de Ventas a formato fecha
# 2023
Ventas23$Fecha <- as.Date(Ventas23$Fecha, format = "%Y-%m-%d")
# Manejar valores atípicos
Ventas23$Fecha[Ventas23$Fecha == as.Date("1900-01-01")] <- NA
# 2022
Ventas22$Fecha <- as.Date(Ventas22$Fecha, format = "%Y-%m-%d")
# Manejar valores atípicos
Ventas22$Fecha[Ventas22$Fecha == as.Date("1900-01-01")] <- NA
# 2021
Ventas21$Fecha <- as.Date(Ventas21$Fecha, format = "%Y-%m-%d")
# Manejar valores atípicos
Ventas21$Fecha[Ventas21$Fecha == as.Date("1900-01-01")] <- NA
# Convertir la columna "Fecha" del DF Ventas General a formato fecha
VentasG$Fecha <- as.Date(VentasG$Fecha, format = "%Y-%m-%d")
# Manejar valores atípicos
VentasG$Fecha[VentasG$Fecha == as.Date("1900-01-01")] <- NA
# Cambiar de columna "Puesto" a que todo sea en minusculas
RH1$Puesto <- tolower(RH1$Puesto)
# Cambiar de columna "Cliente" a que todo sea en minusculas
Ventas23$Cliente <- tolower(Ventas23$Cliente)
Ventas22$Cliente <- tolower(Ventas22$Cliente)
Ventas21$Cliente <- tolower(Ventas21$Cliente)
# Cambiar de columna "Cliente" a que todo sea en minusculas
VentasG$Cliente <- tolower(VentasG$Cliente)
colSums(is.na(RH1)) # Hay NAs en las columnas "Edad", "Primer_Mes", "Cuarto_Mes", "Puesto", "Dpto", "Lugar_de_Nacimiento", "Calle", "Número", "Estado", "CP" y "Causa_de_Baja". Aunque "Fecha_Baja" tiene NAs, estos no serán reemplazados ya que se usarán como filtro entre los trabajadores dados de baja y los que siguen trabajando en FORM.
## Apellido Nombre Fecha_de_nacimiento Edad
## 0 0 0 427
## Genero Fecha_de_Alta Primer_Mes Cuarto_Mes
## 0 0 21 9
## Fecha_Baja Puesto Dpto Lugar_de_Nacimiento
## 141 2 418 17
## Calle Numero Colonia Municipio
## 1 8 0 0
## Estado CP Estado_Civil Causa_de_Baja
## 1 4 0 383
# Reemplazar NAs con la mediana al ser num
mediana_Edad <- median(RH1$Edad, na.rm = TRUE)
RH1$Edad[is.na(RH1$Edad)] <- mediana_Edad
mediana_Primer_Mes <- median(RH1$Primer_Mes, na.rm = TRUE)
RH1$Primer_Mes[is.na(RH1$Primer_Mes)] <- mediana_Primer_Mes
mediana_Cuarto_Mes <- median(RH1$Cuarto_Mes, na.rm = TRUE)
RH1$Cuarto_Mes[is.na(RH1$Cuarto_Mes)] <- mediana_Cuarto_Mes
# Reemplazar NAs con la moda al ser chr
moda_Puesto <- names(sort(table(RH1$Puesto), decreasing = TRUE))[1]
RH1$Puesto[is.na(RH1$Puesto)] <- moda_Puesto
moda_Dpto <- names(sort(table(RH1$Dpto), decreasing = TRUE))[1]
RH1$Dpto[is.na(RH1$Dpto)] <- moda_Dpto
moda_Lugar_de_Nacimiento <- names(sort(table(RH1$Lugar_de_Nacimiento), decreasing = TRUE))[1]
RH1$Lugar_de_Nacimiento[is.na(RH1$Lugar_de_Nacimiento)] <- moda_Lugar_de_Nacimiento
moda_Calle <- names(sort(table(RH1$Calle), decreasing = TRUE))[1]
RH1$Calle[is.na(RH1$Calle)] <- moda_Calle
moda_Numero <- names(sort(table(RH1$Numero), decreasing = TRUE))[1]
RH1$Numero[is.na(RH1$Numero)] <- moda_Numero
moda_Estado <- names(sort(table(RH1$Estado), decreasing = TRUE))[1]
RH1$Estado[is.na(RH1$Estado)] <- moda_Estado
moda_CP <- names(sort(table(RH1$CP), decreasing = TRUE))[1]
RH1$CP[is.na(RH1$CP)] <- moda_CP
moda_Causa_de_Baja <- names(sort(table(RH1$Causa_de_Baja), decreasing = TRUE))[1]
RH1$Causa_de_Baja[is.na(RH1$Causa_de_Baja)] <- moda_Causa_de_Baja
colSums(is.na(Ventas21)) # No hay NAs en esta base de datos.
## Fecha Cliente Producto Cantidad
## 0 0 0 0
colSums(is.na(Ventas22)) # No hay NAs en esta base de datos.
## Fecha Cliente Producto Cantidad
## 0 0 0 0
colSums(is.na(Ventas23)) # No hay NAs en esta base de datos.
## Fecha Cliente Producto Cantidad
## 0 0 0 0
colSums(is.na(VentasG)) # No hay NAs en esta base de datos.
## Fecha Cliente Producto Cantidad
## 0 0 0 0
# Recursos Humanos
summary(RH1)
## Apellido Nombre Fecha_de_nacimiento
## Length:625 Length:625 Min. :1962-12-29 00:00:00.00
## Class :character Class :character 1st Qu.:1984-08-19 00:00:00.00
## Mode :character Mode :character Median :1994-03-09 00:00:00.00
## Mean :1991-09-11 03:52:42.24
## 3rd Qu.:2000-05-29 00:00:00.00
## Max. :2022-10-31 00:00:00.00
##
## Edad Genero Fecha_de_Alta
## Min. :19.00 Length:625 Min. :2017-02-20
## 1st Qu.:31.00 Class :character 1st Qu.:2023-01-05
## Median :31.00 Mode :character Median :2023-06-10
## Mean :31.91 Mean :2023-04-07
## 3rd Qu.:31.00 3rd Qu.:2023-09-11
## Max. :60.00 Max. :2024-03-07
##
## Primer_Mes Cuarto_Mes
## Min. :2017-03-22 00:00:00.00 Min. :2017-06-20 00:00:00.00
## 1st Qu.:2023-02-13 00:00:00.00 1st Qu.:2023-05-13 00:00:00.00
## Median :2023-07-19 00:00:00.00 Median :2023-10-19 00:00:00.00
## Mean :2023-05-18 06:52:24.96 Mean :2023-08-16 15:46:56.64
## 3rd Qu.:2023-10-09 00:00:00.00 3rd Qu.:2024-01-11 00:00:00.00
## Max. :2024-04-06 00:00:00.00 Max. :2024-07-07 00:00:00.00
##
## Fecha_Baja Puesto Dpto Lugar_de_Nacimiento
## Min. :2022-01-25 Length:625 Length:625 Length:625
## 1st Qu.:2023-03-13 Class :character Class :character Class :character
## Median :2023-07-01 Mode :character Mode :character Mode :character
## Mean :2023-06-12
## 3rd Qu.:2023-09-08
## Max. :2024-02-22
## NA's :141
## Calle Numero Colonia Municipio
## Length:625 Length:625 Length:625 Length:625
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Estado CP Estado_Civil Causa_de_Baja
## Length:625 Length:625 Length:625 Length:625
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
describe(RH1)
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## vars n mean sd median trimmed mad min max
## Apellido* 1 625 297.10 171.07 295 296.98 217.94 1 595
## Nombre* 2 625 285.96 161.62 293 286.84 201.63 1 567
## Fecha_de_nacimiento 3 625 NaN NA NA NaN NA Inf -Inf
## Edad 4 625 31.91 6.31 31 31.06 0.00 19 60
## Genero* 5 625 1.91 0.99 1 1.88 0.00 1 4
## Fecha_de_Alta 6 625 NaN NA NA NaN NA Inf -Inf
## Primer_Mes 7 625 NaN NA NA NaN NA Inf -Inf
## Cuarto_Mes 8 625 NaN NA NA NaN NA Inf -Inf
## Fecha_Baja 9 484 NaN NA NA NaN NA Inf -Inf
## Puesto* 10 625 14.74 9.67 11 12.06 0.00 1 49
## Dpto* 11 625 16.41 4.27 18 17.51 0.00 1 23
## Lugar_de_Nacimiento* 12 625 117.35 47.71 109 120.20 66.72 1 211
## Calle* 13 625 256.73 138.66 272 259.41 166.05 1 493
## Numero* 14 625 158.15 100.78 150 154.33 128.99 1 350
## Colonia* 15 625 121.21 55.72 147 124.58 50.41 1 216
## Municipio* 16 625 4.05 4.70 1 3.30 0.00 1 19
## Estado* 17 625 3.07 0.51 3 3.04 0.00 1 4
## CP* 18 625 38.83 11.67 38 38.99 4.45 1 70
## Estado_Civil* 19 625 6.08 2.79 6 6.34 4.45 1 12
## Causa_de_Baja* 20 625 9.47 2.16 10 10.00 0.00 1 13
## range skew kurtosis se
## Apellido* 594 0.00 -1.20 6.84
## Nombre* 566 -0.05 -1.16 6.46
## Fecha_de_nacimiento -Inf NA NA NA
## Edad 41 1.85 4.81 0.25
## Genero* 3 0.22 -1.87 0.04
## Fecha_de_Alta -Inf NA NA NA
## Primer_Mes -Inf NA NA NA
## Cuarto_Mes -Inf NA NA NA
## Fecha_Baja -Inf NA NA NA
## Puesto* 48 2.40 4.56 0.39
## Dpto* 22 -2.46 5.24 0.17
## Lugar_de_Nacimiento* 210 -0.46 -0.35 1.91
## Calle* 492 -0.18 -1.16 5.55
## Numero* 349 0.26 -1.13 4.03
## Colonia* 215 -0.56 -0.61 2.23
## Municipio* 18 1.11 -0.27 0.19
## Estado* 3 -1.35 7.30 0.02
## CP* 69 -0.36 2.37 0.47
## Estado_Civil* 11 -0.63 -0.89 0.11
## Causa_de_Baja* 12 -2.96 7.63 0.09
# Ventas 2023
summary(Ventas23)
## Fecha Cliente Producto Cantidad
## Min. :2023-01-02 Length:5275 Length:5275 Min. : 1.0
## 1st Qu.:2023-03-23 Class :character Class :character 1st Qu.: 21.0
## Median :2023-06-22 Mode :character Mode :character Median : 100.0
## Mean :2023-06-23 Mean : 427.1
## 3rd Qu.:2023-09-28 3rd Qu.: 342.0
## Max. :2023-12-22 Max. :36220.0
describe(Ventas23)
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## vars n mean sd median trimmed mad min max range skew
## Fecha 1 5275 NaN NA NA NaN NA Inf -Inf -Inf NA
## Cliente* 2 5275 14.54 5.34 17 14.87 2.97 1 21 20 -0.78
## Producto* 3 5275 152.02 101.54 115 147.04 124.54 1 344 343 0.33
## Cantidad 4 5275 427.13 1170.43 100 198.10 133.43 1 36220 36219 12.00
## kurtosis se
## Fecha NA NA
## Cliente* -1.01 0.07
## Producto* -1.23 1.40
## Cantidad 254.02 16.12
# Ventas 2022
summary(Ventas22)
## Fecha Cliente Producto Cantidad
## Min. :2022-01-03 Length:4868 Length:4868 Min. : 1.0
## 1st Qu.:2022-03-31 Class :character Class :character 1st Qu.: 24.0
## Median :2022-06-30 Mode :character Mode :character Median : 80.0
## Mean :2022-06-28 Mean : 349.9
## 3rd Qu.:2022-09-28 3rd Qu.: 250.5
## Max. :2022-12-21 Max. :19000.0
describe(Ventas22)
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## vars n mean sd median trimmed mad min max range skew
## Fecha 1 4868 NaN NA NA NaN NA Inf -Inf -Inf NA
## Cliente* 2 4868 10.67 3.33 11 11.04 1.48 1 18 17 -1.11
## Producto* 3 4868 141.24 95.53 103 134.23 94.89 1 344 343 0.57
## Cantidad 4 4868 349.92 849.12 80 158.72 103.78 1 19000 18999 7.45
## kurtosis se
## Fecha NA NA
## Cliente* 1.62 0.05
## Producto* -0.87 1.37
## Cantidad 99.83 12.17
# Ventas 2021
summary(Ventas21)
## Fecha Cliente Producto Cantidad
## Min. :2021-01-04 Length:6563 Length:6563 Min. : 1.0
## 1st Qu.:2021-02-22 Class :character Class :character 1st Qu.: 40.0
## Median :2021-04-23 Mode :character Mode :character Median : 70.0
## Mean :2021-05-18 Mean : 327.2
## 3rd Qu.:2021-08-05 3rd Qu.: 200.0
## Max. :2021-12-20 Max. :21755.0
describe(Ventas21)
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## vars n mean sd median trimmed mad min max range skew
## Fecha 1 6563 NaN NA NA NaN NA Inf -Inf -Inf NA
## Cliente* 2 6563 11.28 4.93 14 11.24 1.48 1 21 20 -0.33
## Producto* 3 6563 168.49 127.75 130 155.28 120.09 1 457 456 0.74
## Cantidad 4 6563 327.16 837.55 70 128.85 74.13 1 21755 21754 7.08
## kurtosis se
## Fecha NA NA
## Cliente* -1.26 0.06
## Producto* -0.50 1.58
## Cantidad 96.62 10.34
# Ventas General
summary(VentasG)
## Fecha Cliente Producto Cantidad
## Min. :2021-01-04 Length:16706 Length:16706 Min. : 1.0
## 1st Qu.:2021-06-08 Class :character Class :character 1st Qu.: 30.0
## Median :2022-05-12 Mode :character Mode :character Median : 80.0
## Mean :2022-05-13 Mean : 365.4
## 3rd Qu.:2023-03-09 3rd Qu.: 250.0
## Max. :2023-12-22 Max. :36220.0
describe(VentasG)
## Warning in FUN(newX[, i], ...): ningún argumento finito para min; retornando
## Inf
## Warning in FUN(newX[, i], ...): ningun argumento finito para max; retornando
## -Inf
## vars n mean sd median trimmed mad min max range skew
## Fecha 1 16706 NaN NA NA NaN NA Inf -Inf -Inf NA
## Cliente* 2 16706 23.28 8.18 27 24.22 2.97 1 36 35 -1.01
## Producto* 3 16706 292.71 222.79 176 270.55 160.12 1 799 798 0.69
## Cantidad 4 16706 365.36 959.15 80 158.87 100.82 1 36220 36219 10.29
## kurtosis se
## Fecha NA NA
## Cliente* -0.21 0.06
## Producto* -0.81 1.72
## Cantidad 219.51 7.42
# Recursos Humanos
# Seleccionar solo las columnas numéricas
RH1_numeric <- RH1[, sapply(RH1, is.numeric)]
# Media
media <- colMeans(RH1_numeric, na.rm = TRUE)
# Mediana
mediana <- apply(RH1_numeric, 2, median, na.rm = TRUE)
# Moda
moda <- apply(RH1_numeric, 2, function(x) {
table_x <- table(x)
mode <- as.numeric(names(table_x)[which.max(table_x)])
return(mode)
})
# Desviación estándar
desviacion_estandar <- apply(RH1_numeric, 2, sd, na.rm = TRUE)
# Varianza
varianza <- apply(RH1_numeric, 2, var, na.rm = TRUE)
resultados <- data.frame(Media = media, Mediana = mediana, Moda = moda, `Desviación Estándar` = desviacion_estandar, Varianza = varianza)
print(resultados)
## Media Mediana Moda Desviación.Estándar Varianza
## Edad 31.9136 31 31 6.311535 39.83547
# Ventas (para las bases por año como la general)
# Seleccionar solo las columnas numéricas
Ventas21_numeric <- Ventas21[, sapply(Ventas21, is.numeric)]
# Media
media <- colMeans(Ventas21_numeric, na.rm = TRUE)
# Mediana
mediana <- apply(Ventas21_numeric, 2, median, na.rm = TRUE)
# Moda
moda <- apply(Ventas21_numeric, 2, function(x) {
table_x <- table(x)
mode <- as.numeric(names(table_x)[which.max(table_x)])
return(mode)
})
# Desviación estándar
desviacion_estandar <- apply(Ventas21_numeric, 2, sd, na.rm = TRUE)
# Varianza
varianza <- apply(Ventas21_numeric, 2, var, na.rm = TRUE)
resultados <- data.frame(Media = media, Mediana = mediana, Moda = moda, `Desviación Estándar` = desviacion_estandar, Varianza = varianza)
print(resultados)
## Media Mediana Moda Desviación.Estándar Varianza
## Cantidad 327.1566 70 50 837.5473 701485.5
1. ¿Cuál es el puesto con más bajas al mes?
# Filtrar los datos para excluir filas con NA en la columna "Fecha_Baja"
RH1 <- RH1[complete.cases(RH1$Fecha_Baja), ]
# Extraer el mes y el año de la fecha de baja
RH1 <- RH1 %>%
mutate(Mes = format(Fecha_Baja, "%m"),
Año = format(Fecha_Baja, "%Y"))
# Calcular el número de bajas por puesto y mes
bajas_por_puesto_mes <- RH1 %>%
group_by(Año, Mes, Puesto) %>%
summarise(Numero_Bajas = n()) %>%
ungroup()
# Identificar los cinco puestos con más bajas en cada mes
top5_puestos_por_mes <- bajas_por_puesto_mes %>%
group_by(Año, Mes) %>%
top_n(5, Numero_Bajas) %>%
arrange(Año, Mes, desc(Numero_Bajas))
# Filtrar los datos para excluir las filas con NA en la columna "Puesto"
top_puestos <- top5_puestos_por_mes %>%
filter(!is.na(Puesto)) %>%
group_by(Año) %>%
slice(1:5) # Tomar los primeros 5 puestos con más bajas por año
# Obtener los niveles únicos de la variable "Puesto"
niveles_puesto <- unique(top_puestos$Puesto)
# Definir las paletas de colores
paleta_1 <- brewer.pal(8, "YlOrBr")
paleta_2 <- brewer.pal(8, "Oranges")
# Combinar las paletas
mis_colores <- c(paleta_1, paleta_2)
# Graficarlo
ggplot(top_puestos, aes(x = reorder(Puesto, -Numero_Bajas), y = Numero_Bajas, fill = Puesto)) +
geom_bar(stat = "identity") +
geom_text(aes(label = Numero_Bajas), vjust = -0.5, size = 3, color = "black") +
facet_wrap(~ Año, scales = "free") +
labs(x = "Puesto", y = "Número de Bajas", fill = "Puesto") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_fill_manual(values = mis_colores) +
ggtitle("Top 5 puestos con Mayores Bajas al Mes")
2. ¿Cuánto duran los colaboradores?
# Calcular la diferencia en meses, obteniendo como resultado un número flotante
RH1$Duracion_Meses <- as.numeric(interval(RH1$Fecha_de_Alta, RH1$Fecha_Baja) / months(1))
# Redondear al mes más cercano cuando sea necesario
RH1$Duracion_Meses <- round(RH1$Duracion_Meses, 0)
# Graficarlo
# Filtrar valores no finitos
RH1_filtrado <- RH1 %>% filter(is.finite(Duracion_Meses))
# Graficar con límites de eje x ajustados
ggplot(RH1_filtrado, aes(x = Duracion_Meses)) +
geom_histogram(binwidth = 1, fill = "orange", color = "black") +
theme_minimal() +
labs(title = "Distribución de la Duración de Colaboradores en Meses",
x = "Duración en Meses",
y = "Frecuencia") +
coord_cartesian(xlim = c(0, max(RH1_filtrado$Duracion_Meses, na.rm = TRUE) + 1))
3. ¿Existe relación entre la residencia y edad de los colaboradores y su propensión a renunciar?
# Filtrar solo las personas que se han dado de baja (aquellas con fecha de baja)
datos_baja <- RH1 %>% filter(!is.na(Fecha_Baja))
# Municipios con mayores bajas
municipios_mostrar <- c("Apodaca", "Cadereyta", "Guadalupe","Juarez","Monterrey","Pesqueria","Ramos Arizpe","Saltillo","San Nicolas De Los G")
# Subconjunto de datos con solo las filas correspondientes a los municipios que deseas mostrar
datos_filtrados <- datos_baja %>% filter(Municipio %in% municipios_mostrar)
# Boxplot de la relación entre la edad, municipio y propensión a renunciar de los colaboradores
ggplot(datos_filtrados, aes(x = factor(Municipio, levels = municipios_mostrar), y = Edad, fill = Fecha_Baja)) +
geom_boxplot(fill ="orange") +
labs(title = "Relación entre Residencia, Edad y Renuncias",
x = "Municipio",
y = "Edad",
fill = "Fecha de Baja") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
4. ¿Existe relación entre el puesto y edad de los colaboradores y su propensión a renunciar?
# Puestos con mayor cantidad de bajas
puestos_mostrar <- c("costurero", "calidad", "ayudante general","ay.general","ayudante general cedis","chofer","costurera","inspectora de calidad","limpieza","montacarguista","soldador")
# Subconjunto de datos con solo las filas correspondientes a los puestos que deseas mostrar
datos_filtrados <- subset(datos_baja, Puesto %in% puestos_mostrar)
# Boxplot de la relación entre la edad, puesto y propensión a renunciar de los colaboradores
ggplot(datos_filtrados, aes(x = factor(Puesto, levels = puestos_mostrar), y = Edad, fill = Fecha_Baja)) +
geom_boxplot(fill ="orange") +
labs(title = "Relación entre Puesto, Edad y Renuncias",
x = "Puesto",
y = "Edad",
fill = "Fecha de Baja") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
5. ¿Cuál es el promedio de ventas por mes para Form?
# 2023
# Seleccionar solo el mes de la variable "Fecha" y extraer el nombre del mes
Ventas23 <- Ventas23 %>%
mutate(Mes = format(Fecha, "%m"),
Mes_nombre23 = month(Fecha, label = TRUE))
# Calcular el promedio de ventas por mes
ventas_por_mes23 <- Ventas23 %>%
group_by(Mes_nombre23) %>%
summarise(Promedio_Ventas23 = mean(Cantidad))
# Gráfico de barras
ggplot(ventas_por_mes23, aes(x = Mes_nombre23, y = Promedio_Ventas23)) +
geom_bar(stat = "identity", fill = "orange") +
labs(title = "Promedio de Ventas por Mes del 2023",
x = "Mes",
y = "Promedio de Ventas") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# 2022
# Seleccionar solo el mes de la variable "Fecha" y extraer el nombre del mes
Ventas22 <- Ventas22 %>%
mutate(Mes = format(Fecha, "%m"),
Mes_nombre22 = month(Fecha, label = TRUE))
# Calcular el promedio de ventas por mes
ventas_por_mes22 <- Ventas22 %>%
group_by(Mes_nombre22) %>%
summarise(Promedio_Ventas22 = mean(Cantidad))
# Gráfico de barras
ggplot(ventas_por_mes22, aes(x = Mes_nombre22, y = Promedio_Ventas22)) +
geom_bar(stat = "identity", fill = "orange") +
labs(title = "Promedio de Ventas por Mes del 2022",
x = "Mes",
y = "Promedio de Ventas") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# 2021
# Seleccionar solo el mes de la variable "Fecha" y extraer el nombre del mes
Ventas21 <- Ventas21 %>%
mutate(Mes = format(Fecha, "%m"),
Mes_nombre21 = month(Fecha, label = TRUE))
# Calcular el promedio de ventas por mes
ventas_por_mes21 <- Ventas21 %>%
group_by(Mes_nombre21) %>%
summarise(Promedio_Ventas21 = mean(Cantidad))
# Gráfico de barras
ggplot(ventas_por_mes21, aes(x = Mes_nombre21, y = Promedio_Ventas21)) +
geom_bar(stat = "identity", fill = "orange") +
labs(title = "Promedio de Ventas por Mes del 2021",
x = "Mes",
y = "Promedio de Ventas") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
6. ¿Cúales son los mejores clientes de FORM?
# 2023
clientes_totales23 <- Ventas23 %>%
group_by(Cliente) %>%
summarise(Cantidad_Total23 = sum(Cantidad)) %>%
arrange(desc(Cantidad_Total23))
# Mostrar los mejores 5 clientes
mejores_clientes23 <- head(clientes_totales23, 5)
# Crear el gráfico de barras
ggplot(mejores_clientes23, aes(x = reorder(Cliente, -Cantidad_Total23), y = Cantidad_Total23)) +
geom_bar(stat = "identity", fill = "orange") +
geom_text(aes(label = Cantidad_Total23), vjust = -0.5, color = "black", size = 3.5) +
labs(title = "Top 5 Mejores Clientes 2023",
x = "Cliente",
y = "Cantidad Total de Productos Comprados") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# 2022
clientes_totales22 <- Ventas22 %>%
group_by(Cliente) %>%
summarise(Cantidad_Total22 = sum(Cantidad)) %>%
arrange(desc(Cantidad_Total22))
# Mostrar los mejores 5 clientes
mejores_clientes22 <- head(clientes_totales22, 5)
# Crear el gráfico de barras
ggplot(mejores_clientes22, aes(x = reorder(Cliente, -Cantidad_Total22), y = Cantidad_Total22)) +
geom_bar(stat = "identity", fill = "orange") +
geom_text(aes(label = Cantidad_Total22), vjust = -0.5, color = "black", size = 3.5) +
labs(title = "Top 5 Mejores Clientes 2022",
x = "Cliente",
y = "Cantidad Total de Productos Comprados") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# 2021
clientes_totales21 <- Ventas21 %>%
group_by(Cliente) %>%
summarise(Cantidad_Total21 = sum(Cantidad)) %>%
arrange(desc(Cantidad_Total21))
# Mostrar los mejores 5 clientes
mejores_clientes21 <- head(clientes_totales21, 5)
# Crear el gráfico de barras
ggplot(mejores_clientes21, aes(x = reorder(Cliente, -Cantidad_Total21), y = Cantidad_Total21)) +
geom_bar(stat = "identity", fill = "orange") +
geom_text(aes(label = Cantidad_Total21), vjust = -0.5, color = "black", size = 3.5) +
labs(title = "Top 5 Mejores Clientes 2021",
x = "Cliente",
y = "Cantidad Total de Productos Comprados") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Análisis de sentimientos de la encuesta a los colaboradores
library(readtext)
library(SnowballC)
library(RColorBrewer)
library(wordcloud)
library(tm)
# Importar texto del archivo "Encuesta_Datos_FORM_Fall2023"
text <- readLines(("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Encuesta_Datos_FORM_Fall2023.txt"), warn=FALSE)
texto <- iconv(text,"WINDOWS-1252","UTF-8")
# Hacerlo Corpus
docs <- Corpus(VectorSource(texto))
# Limpieza del texto
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("spanish"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
texto_palabras <- get_tokens(texto)
emociones_df <- get_nrc_sentiment(texto_palabras, language = 'spanish')
barplot(colSums(prop.table(emociones_df[, 1:8])))
sentimientos <- (emociones_df$negative*-1) + emociones_df$positive
simple_plot(sentimientos)
wordcloud(words=texto_palabras, min.freq = 5)
# Cargar base de datos
df1 <- read_xlsx("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\nearshoring_datos_series_de_tiempo_trimestral.xlsx")
#View(df)
roman_to_arabic <- function(roman) {
roman_numerals <- c("I", "II", "III", "IV")
arabic_numerals <- c(1, 2, 3, 4)
arabic_numerals[match(roman, roman_numerals)]
}
df1$Quarter <- sapply(df1$Quarter, roman_to_arabic)
df1$fecha <- as.Date(as.yearmon(paste(df1$Year, df1$Quarter, sep = "-")))
df1$fecha <- as.Date(as.yearqtr(paste(df1$Year, df1$Quarter), format = "%Y %q"))
df1 <- df1[, c("Year", "Quarter", "fecha", names(df1)[!names(df1) %in% c("Year", "Quarter", "fecha")])]
DataExplorer::plot_histogram(df1)
#### Time Series
# converting to time series format
IED_Flujos_time<-ts(df1$new_fdi_inflows_mxn,start=c(1997,1),end=c(2022,4),frequency=4)
# plotting time series data
par(mfrow=c(2,3))
plot(IED_Flujos_time, type="l", col="orange", lwd=2, xlab="Date", ylab="Non-Store Retail",main="IED_Flujos_time")
#### Decomposing
IED_Flujos_time_dec<-decompose(IED_Flujos_time)
plot(IED_Flujos_time_dec)
# it is important to assess whether the variables under study are stationary or not
adf.test(df1$new_fdi_inflows_mxn) # stationary (p-value > 0.05)
##
## Augmented Dickey-Fuller Test
##
## data: df1$new_fdi_inflows_mxn
## Dickey-Fuller = -5.4066, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
acf(df1$new_fdi_inflows_mxn,main="Significant Autocorrelations") # Generally, non-stationary time series data show the presence of serial autocorrelation.
# ARIMA
plot(df1$fecha,df1$new_fdi_inflows_mxn, type="l",col="orange", lwd=2, xlab ="Año",ylab ="IED_Flujos", main = "IED_Flujos")
plot(df1$fecha,log(df1$new_fdi_inflows_mxn), type="l",col="orange", lwd=2, xlab ="Año",ylab ="log(IED_Flujos)", main = "IED_Flujos")
plot(diff(log(df1$new_fdi_inflows_mxn)),type="l",ylab="first order difference",main = "IED_Flujos")
#### Model Evaluation
adf.test((df1$log_new_fdi_inflows_mxn))
##
## Augmented Dickey-Fuller Test
##
## data: (df1$log_new_fdi_inflows_mxn)
## Dickey-Fuller = -3.4897, Lag order = 4, p-value = 0.04934
## alternative hypothesis: stationary
adf.test(diff((df1$log_new_fdi_inflows_mxn)))
##
## Augmented Dickey-Fuller Test
##
## data: diff((df1$log_new_fdi_inflows_mxn))
## Dickey-Fuller = -9.3026, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
IED_ARIMA <- Arima(df1$new_fdi_inflows_mxn,order=c(4,0,4))
print(IED_ARIMA)
## Series: df1$new_fdi_inflows_mxn
## ARIMA(4,0,4) with non-zero mean
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4
## 0.6828 -0.1883 0.4243 -0.7685 -0.9067 0.1683 -0.3806 0.7031
## s.e. 0.3378 0.4171 0.2998 0.2282 0.4135 0.5865 0.4021 0.2954
## mean
## 52666.883
## s.e. 2703.971
##
## sigma^2 = 1.218e+09: log likelihood = -817.36
## AIC=1654.71 AICc=1658.5 BIC=1677.05
plot(IED_ARIMA$residuals,main="ARIMA(1,1,1) - IED_Flujos")
acf(IED_ARIMA$residuals,main="ACF - ARIMA (1,1,1)")
Box.test(IED_ARIMA$residuals,lag=1,type="Ljung-Box")
##
## Box-Ljung test
##
## data: IED_ARIMA$residuals
## X-squared = 0.033304, df = 1, p-value = 0.8552
adf.test(IED_ARIMA$residuals)
##
## Augmented Dickey-Fuller Test
##
## data: IED_ARIMA$residuals
## Dickey-Fuller = -3.8382, Lag order = 4, p-value = 0.02216
## alternative hypothesis: stationary
# Forecast
IED_ARIMA_forecast<-forecast(IED_ARIMA,h=5)
IED_ARIMA_forecast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 70 36229.84 -9088.965 81548.65 -33079.292 105539.0
## 71 55038.76 8830.413 101247.11 -15630.808 125708.3
## 72 55560.94 8775.121 102346.75 -15991.795 127113.7
## 73 69844.32 23032.548 116656.09 -1748.106 141436.7
## 74 77488.96 30097.735 124880.18 5010.336 149967.6
plot(IED_ARIMA_forecast)
autoplot(IED_ARIMA_forecast)
# Cargar base de datos
df2 <- read_xlsx("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\nearshoring_datos_series_de_tiempo.xlsx")
#View(df)
df2[] <- lapply(df2, as.numeric)
summary(df2)
## Año IED_Flujos Exportaciones Empleo Educación
## Min. :1997 Min. : 8374 Min. : 9088 Min. :95.06 Min. :7.198
## 1st Qu.:2003 1st Qu.:21367 1st Qu.:13260 1st Qu.:95.90 1st Qu.:7.864
## Median :2010 Median :27698 Median :21188 Median :96.53 Median :8.457
## Mean :2010 Mean :26770 Mean :23601 Mean :96.47 Mean :8.424
## 3rd Qu.:2016 3rd Qu.:32183 3rd Qu.:31601 3rd Qu.:97.08 3rd Qu.:9.004
## Max. :2022 Max. :48354 Max. :46478 Max. :97.83 Max. :9.579
## NA's :3 NA's :3
## Salario_Diario Innovación Inseguridad_Robo Inseguridad_Homicidio
## Min. : 24.30 Min. :11.28 Min. :120.5 Min. : 8.037
## 1st Qu.: 41.97 1st Qu.:12.56 1st Qu.:148.3 1st Qu.:10.250
## Median : 54.48 Median :13.09 Median :181.8 Median :16.928
## Mean : 65.16 Mean :13.11 Mean :185.4 Mean :17.292
## 3rd Qu.: 72.31 3rd Qu.:13.75 3rd Qu.:209.9 3rd Qu.:22.433
## Max. :172.87 Max. :15.11 Max. :314.8 Max. :29.592
## NA's :2 NA's :1
## Tipo_de_Cambio Densidad_Carretera Densidad_Población CO2_Emisiones
## Min. : 8.064 Min. :0.05205 Min. :47.44 Min. :3.592
## 1st Qu.:10.752 1st Qu.:0.05954 1st Qu.:52.78 1st Qu.:3.832
## Median :13.016 Median :0.06989 Median :58.09 Median :3.925
## Mean :13.910 Mean :0.07106 Mean :57.33 Mean :3.946
## 3rd Qu.:18.489 3rd Qu.:0.08275 3rd Qu.:61.39 3rd Qu.:4.106
## Max. :20.664 Max. :0.09020 Max. :65.60 Max. :4.221
## NA's :3
## PIB_Per_Cápita INPC
## Min. :126739 Min. : 33.28
## 1st Qu.:130964 1st Qu.: 56.15
## Median :136845 Median : 73.35
## Mean :138550 Mean : 75.17
## 3rd Qu.:146148 3rd Qu.: 91.29
## Max. :153236 Max. :126.48
##
DataExplorer::plot_histogram(df2)
# Buscar NAs
num_na <- sum(is.na(df2))
print(num_na)
## [1] 12
# Limpiar los NAs
for (col in names(df2)) {
col_mean <- mean(df2[[col]], na.rm = TRUE) # Calcular la media de la columna
df2[[col]][is.na(df2[[col]])] <- col_mean }
num_na <- sum(is.na(df2))
print(num_na)
## [1] 0
# Converting to time series format
Exportaciones_time<-ts(df2$Exportaciones,start=c(1997,1),end=c(2022,4),frequency=4)
# Plotting time series data
par(mfrow=c(2,3))
plot(Exportaciones_time, type="l", col="blue", lwd=2, xlab="Date", ylab="Non-Store Retail",main="Exportaciones_time")
#### Decomposing
Exportaciones_time_dec<-decompose(Exportaciones_time)
plot(Exportaciones_time_dec)
#### ARIMA
plot(df2$Año,df2$Exportaciones, type="l",col="orange", lwd=2, xlab ="Año",ylab ="Exportaciones", main = "Exportaciones")
plot(df2$Año,log(df2$Exportaciones), type="l",col="orange", lwd=2, xlab ="Año",ylab ="log(Exportaciones)", main = "Exportaciones")
plot(diff(log(df2$Exportaciones)),type="l",ylab="first order difference",main = "Exportaciones")
adf.test(log(df2$Exportaciones))
##
## Augmented Dickey-Fuller Test
##
## data: log(df2$Exportaciones)
## Dickey-Fuller = -2.989, Lag order = 2, p-value = 0.1956
## alternative hypothesis: stationary
adf.test(diff(log(df2$Exportaciones)))
##
## Augmented Dickey-Fuller Test
##
## data: diff(log(df2$Exportaciones))
## Dickey-Fuller = -4.1992, Lag order = 2, p-value = 0.01631
## alternative hypothesis: stationary
De acuerdo a la prueba Dickey-Fuller, no tenemos suficiente evidencia para concluir que la serie de tiempo es estacionaria.
El Box-Ljung Test sugiere que no existe autocorrelación serial de acuerdo a la cantidad de lags que imputamos en el modelo.
Exp_ARIMA <- Arima(df2$Exportaciones,order=c(4,0,4))
print(Exp_ARIMA)
## Series: df2$Exportaciones
## ARIMA(4,0,4) with non-zero mean
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4
## 0.7072 -0.6810 0.9419 -0.0114 0.7763 1.9109 0.7668 0.9890
## s.e. 0.3167 0.2174 0.2029 0.3015 0.2928 1.5213 1.3614 1.5711
## mean
## 27954.45
## s.e. 14678.86
##
## sigma^2 = 2663360: log likelihood = -230.83
## AIC=481.65 AICc=496.32 BIC=494.24
plot(Exp_ARIMA$residuals,main="ARIMA(1,1,1) - IED_Flujos")
acf(IED_ARIMA$residuals,main="ACF - ARIMA (1,1,1)")
Box.test(Exp_ARIMA$residuals,lag=1,type="Ljung-Box")
##
## Box-Ljung test
##
## data: Exp_ARIMA$residuals
## X-squared = 1.3316, df = 1, p-value = 0.2485
adf.test(Exp_ARIMA$residuals)
## Warning in adf.test(Exp_ARIMA$residuals): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: Exp_ARIMA$residuals
## Dickey-Fuller = -4.7084, Lag order = 2, p-value = 0.01
## alternative hypothesis: stationary
# Forecast
Exp_ARIMA_forecast<-forecast(Exp_ARIMA,h=5)
Exp_ARIMA_forecast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 27 45882.09 43654.73 48109.45 42475.63 49288.54
## 28 47498.83 43562.66 51434.99 41478.98 53518.67
## 29 47674.12 41486.38 53861.87 38210.78 57137.47
## 30 45632.93 37789.21 53476.65 33637.00 57628.86
## 31 45229.41 35861.54 54597.29 30902.48 59556.34
plot(Exp_ARIMA_forecast)
autoplot(Exp_ARIMA_forecast)
# Cargar base
df3 <- read_xlsx("C:\\Users\\kathi\\OneDrive\\Escritorio\\EVIDENCIA1_IA_\\Datos_FORM_Ventas_FJ2024.xlsx")
# Buscar NAs
num_na1 <- sum(is.na(df3))
print(num_na1)
## [1] 3
for (col in names(df3)) {
col_mean1 <- mean(df3[[col]], na.rm = TRUE) # Calcular la media de la columna
df3[[col]][is.na(df3[[col]])] <- col_mean1 }
num_na1 <- sum(is.na(df3))
print(num_na1)
## [1] 3
df_cantidades <- df3 %>%
group_by(Fecha) %>%
summarise(Total_Cantidad = sum(Cantidad))
# Mostrar el dataframe resultante
print(df_cantidades)
## # A tibble: 272 × 2
## Fecha Total_Cantidad
## <dttm> <dbl>
## 1 2021-01-04 00:00:00 30828
## 2 2021-01-05 00:00:00 9360
## 3 2021-01-06 00:00:00 7664
## 4 2021-01-07 00:00:00 8612
## 5 2021-01-08 00:00:00 9399
## 6 2021-01-09 00:00:00 8520
## 7 2021-01-11 00:00:00 7408
## 8 2021-01-12 00:00:00 7953
## 9 2021-01-13 00:00:00 11411
## 10 2021-01-14 00:00:00 11352
## # ℹ 262 more rows
### converting to time series format
ventas_form_time<-ts(df_cantidades$Total_Cantidad,start=c(1997,1),end=c(2022,4),frequency=4)
# plotting time series data
par(mfrow=c(2,3))
plot(ventas_form_time, type="l", col="blue", lwd=2, xlab="Date", ylab="Non-Store Retail",main="ventas_form_time")
#### Decomposing
ventas_form_time_dec<-decompose(ventas_form_time)
plot(ventas_form_time_dec)
#### ARIMA
plot(df_cantidades$Fecha,df_cantidades$Total_Cantidad, type="l",col="orange", lwd=2, xlab ="Fecha",ylab ="Cantidad", main = "Cantidad")
plot(df_cantidades$Fecha,log(df_cantidades$Total_Cantidad), type="l",col="orange", lwd=2, xlab ="Fecha",ylab ="log(Cantidad)", main = "Cantidad")
plot(diff(log(df_cantidades$Total_Cantidad)),type="l",ylab="first order difference",main = "Cantidad")
adf.test(log(df_cantidades$Total_Cantidad))
##
## Augmented Dickey-Fuller Test
##
## data: log(df_cantidades$Total_Cantidad)
## Dickey-Fuller = -5.2794, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
adf.test(diff(log(df_cantidades$Total_Cantidad)))
##
## Augmented Dickey-Fuller Test
##
## data: diff(log(df_cantidades$Total_Cantidad))
## Dickey-Fuller = -9.7013, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
# forecast (ARIMA)
Cant_ARIMA <- Arima(df_cantidades$Total_Cantidad,order=c(6,2,6))
print(Cant_ARIMA)
## Series: df_cantidades$Total_Cantidad
## ARIMA(6,2,6)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ar6 ma1 ma2
## -0.7296 -1.1203 -0.8913 -0.9223 -0.2204 -0.1003 -1.2935 0.6522
## s.e. NaN NaN NaN NaN 0.0582 NaN NaN NaN
## ma3 ma4 ma5 ma6
## -0.6507 0.3751 -0.7739 0.6992
## s.e. NaN NaN NaN 0.1402
##
## sigma^2 = 66234213: log likelihood = -2814.62
## AIC=5655.25 AICc=5656.67 BIC=5702.03
plot(Cant_ARIMA$residuals,main="ARIMA(1,1,1) - IED_Flujos")
acf(Cant_ARIMA$residuals,main="ACF - ARIMA (1,1,1)")
Box.test(Cant_ARIMA$residuals,lag=1,type="Ljung-Box")
##
## Box-Ljung test
##
## data: Cant_ARIMA$residuals
## X-squared = 0.027022, df = 1, p-value = 0.8694
adf.test(Cant_ARIMA$residuals)
##
## Augmented Dickey-Fuller Test
##
## data: Cant_ARIMA$residuals
## Dickey-Fuller = -6.3164, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
# Forecast
Cant_ARIMA_forecast<-forecast(Cant_ARIMA,h=5)
Cant_ARIMA_forecast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 273 2346.471 -8083.405 12776.35 -13604.648 18297.59
## 274 7312.206 -3120.458 17744.87 -8643.177 23267.59
## 275 9370.829 -1069.442 19811.10 -6596.187 25337.84
## 276 6791.051 -3670.795 17252.90 -9208.963 22791.07
## 277 4631.571 -5840.530 15103.67 -11384.126 20647.27
plot(Cant_ARIMA_forecast)
autoplot(Cant_ARIMA_forecast)
El puesto con más renuncias es costurera y la mediana de edad es 30 años aproximadamente. Esto podría deberse al hecho de que FORM depende mucho de sus costureras y les puede estar exigiendo una alta carga de trabajo al diferenciarse por sus proyectos a la medida de las necesidades de sus clientes.
En los últimos dos años ha habido un pico de ventas en el mes de diciembre, lo que podría indicar un patrón de cuando deberían preparar más inventario.
En casi todos los municipios la mediana se encuentra posicionada en el rango de edad 30. Por lo que podría significar que el problema no radica tanto en la distancia que hacen al trabajo, sino más en lo que buscan los colaboradores de este rango de edad.
En el análisis de sentimientos se puede apreciar que el sentimiento más presente en las respuestas de la encuesta hecha a los colaboradores es la confianza, lo que podría indicar que la mayoría de trabajadores en FORM se encuentran conformes con su trabajo o que el ambiente con sus compañeros es armonioso.
La distribución de la duración en meses de los colaboradores que se dan de baja tiene un sesgo marcado hacia los primeros meses, indicando que la mayoría tienden a darse de baja aproximadamente durante los primeros 3 meses.
El puesto de ayudante general es donde hay más valores atípicos en el boxplot de la relación entre puesto, edad y la propensión a renunciar, lo que indica que sin importar la edad este puesto es donde más bajas hay y tomando como referencia la primera gráfica de top 5 puestos con más bajas al mes, también es donde más renuncias hubo en los 3 años. Esto podría representar que la carga, las responsabilidades o las condiciones de trabajo de este puesto son las principales razones detrás de tantas renuncias.
Finalmente, la relación que existe entre los resultados estimados del pronóstico del Nearshoring y las situaciones problema, es que el Nearshoring si va a ocurrir, esto tomando como referencia la tendencia positiva pronosticada por los modelos ARIMA realizados, en los cuales se espera que el valor de la variable aumente en el futuro. Es por esto que FORM debe prepararse para utilizar el Nearshoring a su favor, ya que este puede ser tanto una oportunidad como una amenaza para la empresa. Como se mencionó antes en el FODA, FORM debe buscar ofrecer su modelo de negocio único y capacidad de respuesta rápida a estas empresas internacionales que buscan implementar operaciones en el país. Así mismo, FORM debe solucionar su alta rotación laboral para aprovechar esta oportunidad que ofrece el Nearshoring y la posible alta demanda que podría conllevar. Esto al ofrecerle mejores beneficios o condiciones laborales a sus costureras, ayudantes generales y colaboradores en el rango de edad de los 30 años, así como también ofrecer una capacitación completa y un proceso de acompañamiento y retroalimentación durante los primeros meses de los colaboradores de nuevo ingreso. Y por último, otra opción sería buscar implementar automatización gradual en sus procesos para depender menos de la mano de obra.
Vallejo, J. (2005). El mercado del papel y cartón en México. Oficina Económica y Comercial de la Embajada de España en México. https://boletines.exportemos.pe/recursos/boletin/28064.PDF
¿Qué es el análisis exploratorio de datos? | IBM. (s.f.). https://www.ibm.com/mx-es/topics/exploratory-data-analysis
What is descriptive Analytics? 5 examples | HBS Online. (2021, 9 noviembre). Business Insights Blog. https://online.hbs.edu/blog/post/descriptive-analytics
Sociales
Por la parte social en cuestión de manufactura méxico es líder a nivel mundial y más en estos momentos que muchas empresas de talla internacional como tesla, kia, honeywell entre muchas están optando por migrar su centro de operaciones y manufactura al país ya que es sumamente económico y seguro.
La tasa de homicidios en México supera el récord establecido en los sexenios anteriores.
Empresa que fabrica todo su producto en méxico siendo su manufactura mexicana y todo su mercado son empresas extranjeras como tesla (no trabajan con empresas mexicanas ni coreanas).