Distribución del Año de Proyección de Ingres

# Gráfico de barras para la distribución de los años de proyección
ggplot(data, aes(x = factor(AnioProyeccionIngreso))) +
  geom_bar(fill = "steelblue") +
  labs(title = "Distribución del Año de Proyección de Ingresos", x = "Año", y = "Conteo")

valores faltantes en Campaña

## [1] 1.3

Gráfico de barras para la distribución de productos

# Gráfico de barras para la distribución de productos
ggplot(data, aes(x = CategoriaProducto)) +
  geom_bar(fill = "darkgreen") +
  labs(title = "Distribución de Categoría de Producto", x = "Producto", y = "Conteo") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

# Gráfico de barras para el estado de avance de las oportunidades

ggplot(data, aes(x = EstadoAvanceOportunidad)) +
  geom_bar(fill = "purple") +
  labs(title = "Distribución del Estado de Avance de Oportunidades", x = "Estado", y = "Conteo")

Boxplot de suboportunidades ganadas y caídas

ggplot(data, aes(x = "", y = SubOportunidadesGanadas)) +
  geom_boxplot(fill = "lightblue") +
  labs(title = "SubOportunidades Ganadas", x = "", y = "Ganadas")

ggplot(data, aes(x = "", y = SubOportunidadesCaidas)) +
  geom_boxplot(fill = "salmon") +
  labs(title = "SubOportunidades Caídas", x = "", y = "Caídas")

# Histograma de días desde el último estado

ggplot(data, aes(x = DiasUltimoEstado)) +
  geom_histogram(binwidth = 20, fill = "orange", color = "black") +
  labs(title = "Días desde el Último Estado", x = "Días", y = "Frecuencia")

# Histograma de la proyección anual de ingresos

# Histograma de la proyección anual de ingresos
ggplot(data, aes(x = ProyeccionAnual)) +
  geom_histogram(binwidth = 50000, fill = "darkblue", color = "black") +
  labs(title = "Proyección Anual de Ingresos", x = "Ingresos proyectados", y = "Frecuencia")

# Resumen de suboportunidades ganadas y caídas por estado de avance

Cargar librerías

library(randomForest) library(caret) library(dplyr) library(lubridate)

Paso 1: Cargar los datos

Aquí cargamos los datos desde tu archivo. Debes ajustar el nombre de archivo según corresponda

data <- read.csv(“nombre_del_archivo.csv”)

Paso 2: Inspección inicial de los datos

str(data) # Para ver la estructura de las columnas summary(data) # Resumen estadístico de las columnas

Paso 3: Limpieza de datos

Convertir fechas

data\(Fecha_ultimo_estado <- as.Date(data\)Fecha_ultimo_estado, format=“%Y-%m-%d”) data\(Fecha_proyeccion_ing <- as.Date(data\)Fecha_proyeccion_ing, format=“%Y-%m-%d”)

Reemplazar valores nulos

data <- data %>% mutate(across(everything(), ~replace_na(., 0))) # Aquí rellenamos valores nulos con 0, puedes personalizarlo.

Paso 4: Transformación de variables

Convertir variables categóricas a factores

data\(Producto_Homologado_C <- as.factor(data\)Producto_Homologado_C) data\(Estado_Avance_Oportunidad <- as.factor(data\)Estado_Avance_Oportunidad) data\(Cliente <- as.factor(data\)Cliente) data\(Campaña <- as.factor(data\)Campaña) data\(Categoría_Producto <- as.factor(data\)Categoría_Producto)

Crear nueva variable: Días en el último estado

data\(Dias_en_estado <- as.numeric(difftime(Sys.Date(), data\)Fecha_ultimo_estado, units = “days”))

Paso 5: Selección de características importantes (opcional)

Ver la correlación entre variables y elegir las más significativas

cor(data %>% select_if(is.numeric)) # Correlación entre variables numéricas

Paso 6: División del conjunto de datos en entrenamiento y prueba (80%-20%)

set.seed(123) trainIndex <- createDataPartition(data$Estado_Avance_Oportunidad, p = .8, list = FALSE, times = 1) dataTrain <- data[ trainIndex,] dataTest <- data[-trainIndex,]

Paso 7: Entrenamiento del modelo Random Forest

modelo_rf <- randomForest(Estado_Avance_Oportunidad ~ ., data = dataTrain, importance = TRUE)

Paso 8: Predicciones en el conjunto de prueba

predicciones <- predict(modelo_rf, dataTest)

Paso 9: Evaluar el rendimiento del modelo

confusionMatrix(predicciones, dataTest$Estado_Avance_Oportunidad)

Paso 10: Importancia de las variables

varImpPlot(modelo_rf)

Paso 11: Guardar el modelo para reproducibilidad

saveRDS(modelo_rf, “modelo_next_best_action.rds”)

state_summary <- data %>%
  group_by(EstadoAvanceOportunidad) %>%
  summarise(Ganadas = mean(SubOportunidadesGanadas),
            Caidas = mean(SubOportunidadesCaidas))
state_summary
## # A tibble: 9 × 3
##   EstadoAvanceOportunidad Ganadas Caidas
##   <chr>                     <dbl>  <dbl>
## 1 Aceptación no formal       4.88   5.15
## 2 Caída                      5.82   5.03
## 3 En gestión                 5.48   4.97
## 4 Ganada                     4.86   4.92
## 5 Implementación             4.65   4.81
## 6 Negociación                5.33   5.31
## 7 Presentación               5.31   5.06
## 8 Propuesta                  5.36   5.09
## 9 Siembra                    4.86   5.35
# Visualización
ggplot(state_summary, aes(x = EstadoAvanceOportunidad, y = Ganadas)) +
  geom_bar(stat = "identity", fill = "lightgreen") +
  labs(title = "SubOportunidades Ganadas por Estado", x = "Estado", y = "Promedio de Ganadas") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

ggplot(state_summary, aes(x = EstadoAvanceOportunidad, y = Caidas)) +
  geom_bar(stat = "identity", fill = "lightcoral") +
  labs(title = "SubOportunidades Caídas por Estado", x = "Estado", y = "Promedio de Caídas") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

# Distribución de mes fiscal

ggplot(data, aes(x = factor(MesFiscal))) +
  geom_bar(fill = "darkorange") +
  labs(title = "Distribución por Mes Fiscal", x = "Mes Fiscal", y = "Conteo")

# Distribución de H_Fiscal
ggplot(data, aes(x = HFiscal)) +
  geom_bar(fill = "lightblue") +
  labs(title = "Distribución por H_Fiscal", x = "H_Fiscal", y = "Conteo")