Caso de negocio Bolivar Conmigo - Analista
Introducción
En la actualidad, el comportamiento de los usuarios en aplicaciones móviles está en constante cambio, en el caso de la app Bolívar Conmigo de Seguros Bolívar, hemos observado un aumento significativo en el número de registros durante los últimos meses, seguido de un incremento similar en el número de usuarios inactivos, este patrón plantea un desafío para la empresa, cuyo objetivo es posicionarse como líder en el uso de aplicaciones que mejoren la calidad de vida y protejan la salud de sus usuarios.
El reto consiste en identificar las causas de la inactividad y proponer una estrategia eficaz que no solo atraiga a más usuarios, sino que también fomente su participación continua en la app; a través de un análisis exhaustivo de los datos de interacción y demográficos, exploraremos posibles soluciones que permitan mejorar la retención y activar a los usuarios inactivos, asegurando así un mayor compromiso con la plataforma.
En esta presentación, compartiré mis propuestas de análisis y las estrategias de marketing que considero fundamentales para enfrentar este desafío y contribuir al éxito de Seguros Bolívar en el mercado digital.
Librerias utilizadas
paquetes <- c("ggplot2", "tidyr", "readr", "dplyr", "corrplot", "Rcmdr", "knitr", "readxl", "DescTools")
paquetes_instalados <- paquetes %in% installed.packages()[, "Package"]
if (any(!paquetes_instalados)) {
install.packages(paquetes[!paquetes_instalados], dependencies = TRUE, repos = "http://cran.r-project.org")
}
library(readxl)
library(lubridate)
library(dplyr)
library(tidyr)
library(ggplot2)
library(margins)
library(randomForest)Exploración de las bases de datos
En esta sección, procederé a explorar y describir las dos bases de datos que se utilizarán para el análisis, estas bases contienen información clave sobre los usuarios de la aplicación Bolívar Conmigo y sus interacciones, así como datos demográficos que nos permitirán obtener una visión más detallada de su comportamiento.
Datos Demográficos:
Esta base contiene información relevante sobre los clientes, como su identificación, género, fecha de nacimiento, estado civil, ingresos, actividad económica y otros datos personales. A continuación, se describen los campos más importantes:
- key_id: Identificación única del cliente.
- Genero: Género del cliente.
- Fec_Nacimiento: Fecha de nacimiento del cliente (AAAA-MM-DD).
- Estad_Civil: Estado civil del cliente.
- Ingresos: Ingresos mensuales del cliente.
- Act_Economica: Actividad económica en la que se desempeña el cliente.
- Persona_Cargo: Número de personas a cargo del cliente.
- Num_Hijos: Número de hijos del cliente.
- prod_seguros: Cantidad de productos de seguros que tiene el cliente.
- Salud: Número de productos de salud contratados.
- Vida: Número de productos de vida contratados.
- Autos: Número de productos de seguros de autos contratados.
path <- "C:/Users/nicor/OneDrive/Escritorio/Proceso Seguros Bolivar"
setwd(path)
datos_demograficos <- read_excel("Datos Caso.xlsx", sheet = "Datos Demográficos")
datos_demograficos$Fec_Nacimiento <- as.Date(datos_demograficos$Fec_Nacimiento, format = "%Y-%m-%dT%H:%M:%SZ")
datos_demograficos$Edad <- floor(interval(datos_demograficos$Fec_Nacimiento, Sys.Date()) / years(1));datos_demograficosPara facilitar el análisis, se modificó la variable de fecha para que sea más clara y esté en el formato adecuado. Además, se incorporó la variable Edad, que contiene la edad del cliente.
Nota: Se ha detectado un posible error en los datos de Estado Civil del cliente, ya que existen categorías como “UNIÓN ALL LIBRE” y “UNIÓN LIBRE”. Debido a la falta de información adicional, no se ha podido determinar si se trata de un error o si estas categorías corresponden a una clasificación especial para ese grupo igual sucede con la categoria “0”. Por tal motivo, no se les ha aplicado ningún tratamiento especial en estos casos.
datos_demograficos$Fec_Nacimiento <- ymd_hms(datos_demograficos$Fec_Nacimiento)
DescTools::Desc(datos_demograficos)## ------------------------------------------------------------------------------
## Describe datos_demograficos (tbl_df, tbl, data.frame):
##
## data frame: 2764 obs. of 14 variables
## 0 complete cases (0.0%)
##
## Nr ColName Class NAs Levels
## 1 id numeric .
## 2 Genero character 39 (1.4%)
## 3 Fec_Nacimiento POSIXct, POSIXt 2764 (100.0%)
## 4 Estad_Civil character 761 (27.5%)
## 5 Ingresos numeric 119 (4.3%)
## 6 Act_Economica character 1080 (39.1%)
## 7 Educacion logical 2764 (100.0%)
## 8 Persona_Cargo numeric 2733 (98.9%)
## 9 Num_Hijos numeric 1523 (55.1%)
## 10 prod_seguros numeric .
## 11 Salud numeric .
## 12 Vida numeric .
## 13 Autos numeric 500 (18.1%)
## 14 Edad numeric 404 (14.6%)
##
##
## ------------------------------------------------------------------------------
## 1 - id (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 2'764 0 = n 1 1'381.50 1'351.74
## 100.0% 0.0% 0.0% 1'411.26
##
## .05 .10 .25 median .75 .90 .95
## 138.15 276.30 690.75 1'381.50 2'072.25 2'486.70 2'624.85
##
## range sd vcoef mad IQR skew kurt
## 2'763.00 798.04 0.58 1'024.48 1'381.50 0.00 -1.20
##
## lowest : 0.0, 1.0, 2.0, 3.0, 4.0
## highest: 2'759.0, 2'760.0, 2'761.0, 2'762.0, 2'763.0
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 2 - Genero (character)
##
## length n NAs unique levels dupes
## 2'764 2'725 39 3 3 y
## 98.6% 1.4%
##
## level freq perc cumfreq cumperc
## 1 MASCULINO 1'312 48.1% 1'312 48.1%
## 2 FEMENINO 1'087 39.9% 2'399 88.0%
## 3 NO INFO 326 12.0% 2'725 100.0%
## ------------------------------------------------------------------------------
## 3 - Fec_Nacimiento (POSIXct, POSIXt)
##
## $xname
## [1] "Fec_Nacimiento"
##
## $label
## NULL
##
## $class
## [1] "POSIXct"
##
## $classlabel
## [1] "POSIXct, POSIXt"
##
## $length
## [1] 2764
##
## $n
## [1] 0
##
## $NAs
## [1] 2764
##
## $main
## [1] "3 - Fec_Nacimiento (POSIXct, POSIXt)"
##
## $unique
## [1] NA
##
## $noplot
## [1] TRUE
##
## $plotit
## [1] FALSE
##
## ------------------------------------------------------------------------------
## 4 - Estad_Civil (character)
##
## length n NAs unique levels dupes
## 2'764 2'003 761 8 8 y
## 72.5% 27.5%
##
## level freq perc cumfreq cumperc
## 1 SOLTERO 963 48.1% 963 48.1%
## 2 CASADO 606 30.3% 1'569 78.3%
## 3 UNION ALL LIBRE 198 9.9% 1'767 88.2%
## 4 0.0 133 6.6% 1'900 94.9%
## 5 UNION LIBRE 42 2.1% 1'942 97.0%
## 6 SEPARADO 26 1.3% 1'968 98.3%
## 7 DIVORCIADO 19 0.9% 1'987 99.2%
## 8 VIUDO 16 0.8% 2'003 100.0%
## ------------------------------------------------------------------------------
## 5 - Ingresos (numeric)
##
## length n NAs unique 0s'
## 2'764 2'645 119 2'119 0
## 95.7% 4.3% 0.0%
##
## .05 .10 .25 median .75
## 1'000'000.00 1'332'074.00 1'739'898.00 2'835'172.00 5'604'167.00
##
## range sd vcoef mad IQR
## 9.90e+07 6'002'591.62 1.24 2'127'786.01 3'864'269.00
##
## mean meanCI
## 4'830'285.75 4'601'424.16
## 5'059'147.34
##
## .90 .95
## 1.02e+07 1.50e+07
##
## skew kurt
## 5.13 46.79
##
## lowest : 45'342.0, 48'018.0, 59'767.0, 260'106.0, 360'000.0
## highest: 5.38e+07, 6.22e+07, 6.22e+07, 7.80e+07, 9.90e+07
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 6 - Act_Economica (character)
##
## length n NAs unique levels dupes
## 2'764 1'684 1'080 8 8 y
## 60.9% 39.1%
##
## level freq perc cumfreq cumperc
## 1 EMPLEADO 1'269 75.4% 1'269 75.4%
## 2 INDEPENDIENTE 315 18.7% 1'584 94.1%
## 3 PENSIONADO 57 3.4% 1'641 97.4%
## 4 ESTUDIANTE 29 1.7% 1'670 99.2%
## 5 SERVIDOR PUBLICO 8 0.5% 1'678 99.6%
## 6 AMA DE CASA 3 0.2% 1'681 99.8%
## 7 SOCIO / RENTISTA DE CAPITAL 2 0.1% 1'683 99.9%
## 8 NO TIENE 1 0.1% 1'684 100.0%
## ------------------------------------------------------------------------------
## 7 - Educacion (logical)
##
## length n NAs unique
## 2'764 0 2'764 NA
## 0.0% 100.0%
##
## Nothing to plot in Educacion
##
## ------------------------------------------------------------------------------
## 8 - Persona_Cargo (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 31 2'733 4 1 1.58 1.30
## 1.1% 98.9% 0.0% 1.86
##
## .05 .10 .25 median .75 .90 .95
## 1.00 1.00 1.00 1.00 2.00 3.00 3.00
##
## range sd vcoef mad IQR skew kurt
## 3.00 0.76 0.48 1.48 1.00 0.39 -0.69
##
##
## value freq perc cumfreq cumperc
## 1 0 1 3.2% 1 3.2%
## 2 1 15 48.4% 16 51.6%
## 3 2 11 35.5% 27 87.1%
## 4 3 4 12.9% 31 100.0%
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 9 - Num_Hijos (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 1'241 1'523 8 808 0.62 0.56
## 44.9% 55.1% 29.2% 0.68
##
## .05 .10 .25 median .75 .90 .95
## 0.00 0.00 0.00 0.00 1.00 2.00 3.00
##
## range sd vcoef mad IQR skew kurt
## 8.00 1.00 1.61 0.00 1.00 1.85 4.55
##
##
## value freq perc cumfreq cumperc
## 1 0 808 65.1% 808 65.1%
## 2 1 187 15.1% 995 80.2%
## 3 2 182 14.7% 1'177 94.8%
## 4 3 48 3.9% 1'225 98.7%
## 5 4 10 0.8% 1'235 99.5%
## 6 5 3 0.2% 1'238 99.8%
## 7 6 2 0.2% 1'240 99.9%
## 8 8 1 0.1% 1'241 100.0%
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 10 - prod_seguros (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 2'764 0 15 1'120 1.48 1.40
## 100.0% 0.0% 40.5% 1.55
##
## .05 .10 .25 median .75 .90 .95
## 0.00 0.00 0.00 1.00 2.00 4.00 6.00
##
## range sd vcoef mad IQR skew kurt
## 14.00 2.04 1.38 1.48 2.00 2.16 5.49
##
## lowest : 0.0 (1'120), 1.0 (753), 2.0 (365), 3.0 (168), 4.0 (119)
## highest: 10.0 (15), 11.0 (8), 12.0 (2), 13.0 (2), 14.0
##
## heap(?): remarkable frequency (40.5%) for the mode(s) (= 0)
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 11 - Salud (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 2'764 0 4 2'485 0.10 0.09
## 100.0% 0.0% 89.9% 0.12
##
## .05 .10 .25 median .75 .90 .95
## 0.00 0.00 0.00 0.00 0.00 1.00 1.00
##
## range sd vcoef mad IQR skew kurt
## 4.00 0.32 3.06 0.00 0.00 3.21 13.61
##
##
## value freq perc cumfreq cumperc
## 1 0 2'485 89.9% 2'485 89.9%
## 2 1 274 9.9% 2'759 99.8%
## 3 2 4 0.1% 2'763 100.0%
## 4 4 1 0.0% 2'764 100.0%
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 12 - Vida (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 2'764 0 5 2'638 0.05 0.04
## 100.0% 0.0% 95.4% 0.07
##
## .05 .10 .25 median .75 .90 .95
## 0.00 0.00 0.00 0.00 0.00 0.00 0.00
##
## range sd vcoef mad IQR skew kurt
## 4.00 0.27 4.98 0.00 0.00 6.17 47.92
##
##
## value freq perc cumfreq cumperc
## 1 0 2'638 95.4% 2'638 95.4%
## 2 1 105 3.8% 2'743 99.2%
## 3 2 17 0.6% 2'760 99.9%
## 4 3 3 0.1% 2'763 100.0%
## 5 4 1 0.0% 2'764 100.0%
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 13 - Autos (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 2'264 500 5 1'701 0.27 0.25
## 81.9% 18.1% 61.5% 0.29
##
## .05 .10 .25 median .75 .90 .95
## 0.00 0.00 0.00 0.00 0.00 1.00 1.00
##
## range sd vcoef mad IQR skew kurt
## 4.00 0.50 1.84 0.00 0.00 1.77 3.38
##
##
## value freq perc cumfreq cumperc
## 1 0 1'701 75.1% 1'701 75.1%
## 2 1 517 22.8% 2'218 98.0%
## 3 2 42 1.9% 2'260 99.8%
## 4 3 3 0.1% 2'263 100.0%
## 5 4 1 0.0% 2'264 100.0%
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 14 - Edad (numeric)
##
## length n NAs unique 0s mean meanCI'
## 2'764 2'360 404 66 0 42.82 42.32
## 85.4% 14.6% 0.0% 43.32
##
## .05 .10 .25 median .75 .90 .95
## 27.00 29.00 33.00 41.00 51.00 61.00 67.00
##
## range sd vcoef mad IQR skew kurt
## 70.00 12.40 0.29 11.86 18.00 0.70 -0.01
##
## lowest : 17.0 (3), 20.0, 21.0 (7), 22.0 (6), 23.0 (14)
## highest: 81.0, 82.0, 83.0, 84.0 (2), 87.0
##
## ' 95%-CI (classic)
Datos de Interacción:
Esta base contiene las interacciones que los usuarios tienen dentro de la aplicación Bolívar Conmigo, cada registro incluye detalles sobre la fecha y hora de la interacción, el canal y la plataforma utilizados, y el tipo de actividad realizada. Los campos relevantes son:
- Id: Identificación única del usuario.
- fecha_interaccion: Fecha y hora de la interacción.
- canal_interaccion: Canal de interacción utilizado (e.g., App Bolívar Conmigo).
- plataforma_interaccion: Plataforma en la que se realiza la interacción.
- medio_interaccion: Medio de registro del usuario.
- Interacción: Tipo de interacción realizada, que puede incluir:
- Registro: Primer registro en la aplicación.
- Survey: Contestación a una encuesta.
- Goals: Registro de una meta.
- Points: Recepción de puntos por actividades.
- Workout: Registro manual de entrenamientos.
- Group_member: Unión a un grupo.
- Challenge: Ingreso a un reto.
- Inactivo: Falta de interacciones durante el mes.
datos_interacciones <- read_excel("Datos Caso.xlsx", sheet = "Datos Interacciones")
datos_interacciones$fecha_interaccion <- as.POSIXct(datos_interacciones$fecha_interaccion, format = "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
datos_interacciones$Mes_Año <- format(datos_interacciones$fecha_interaccion, "%Y-%m");datos_interacciones## ------------------------------------------------------------------------------
## Describe datos_interacciones (tbl_df, tbl, data.frame):
##
## data frame: 17274 obs. of 7 variables
## 17274 complete cases (100.0%)
##
## Nr ColName Class NAs Levels
## 1 id numeric .
## 2 fecha_interaccion POSIXct, POSIXt .
## 3 interaccion character .
## 4 canal_interaccion character .
## 5 plataforma_interaccion character .
## 6 medio_interaccion character .
## 7 Mes_Año character .
##
##
## ------------------------------------------------------------------------------
## 1 - id (numeric)
##
## length n NAs unique 0s mean meanCI'
## 17'274 17'274 0 3'739 3 1'931.81 1'893.02
## 100.0% 0.0% 0.0% 1'970.59
##
## .05 .10 .25 median .75 .90 .95
## 127.65 338.00 546.00 1'367.00 1'917.00 4'109.70 7'672.00
##
## range sd vcoef mad IQR skew kurt
## 17'189.00 2'600.72 1.35 994.82 1'371.00 3.32 12.03
##
## lowest : 0.0 (3), 1.0 (2), 2.0 (2), 3.0 (2), 4.0 (2)
## highest: 17'070.0 (2), 17'078.0 (3), 17'152.0 (2), 17'164.0 (2), 17'189.0 (2)
##
## heap(?): remarkable frequency (6.8%) for the mode(s) (= 421)
##
## ' 95%-CI (classic)
## ------------------------------------------------------------------------------
## 2 - fecha_interaccion (POSIXct, POSIXt)
##
## $xname
## [1] "fecha_interaccion"
##
## $label
## NULL
##
## $class
## [1] "POSIXct"
##
## $classlabel
## [1] "POSIXct, POSIXt"
##
## $length
## [1] 17274
##
## $n
## [1] 17274
##
## $NAs
## [1] 0
##
## $main
## [1] "2 - fecha_interaccion (POSIXct, POSIXt)"
##
## [[9]]
## [1] "unhandled class"
##
## ------------------------------------------------------------------------------
## 3 - interaccion (character)
##
## length n NAs unique levels dupes
## 17'274 17'274 0 11 11 y
## 100.0% 0.0%
##
## level freq perc cumfreq cumperc
## 1 Workout 5'718 33.1% 5'718 33.1%
## 2 registro 2'505 14.5% 8'223 47.6%
## 3 survey 2'344 13.6% 10'567 61.2%
## 4 Points 2'173 12.6% 12'740 73.8%
## 5 Enviado 2'106 12.2% 14'846 85.9%
## 6 Inactivo 776 4.5% 15'622 90.4%
## 7 Goal 745 4.3% 16'367 94.7%
## 8 Challenge 424 2.5% 16'791 97.2%
## 9 Group 202 1.2% 16'993 98.4%
## 10 Conversación con chatbot whatsapp 177 1.0% 17'170 99.4%
## 11 Unsuscribed 104 0.6% 17'274 100.0%
## ------------------------------------------------------------------------------
## 4 - canal_interaccion (character)
##
## length n NAs unique levels dupes
## 17'274 17'274 0 3 3 y
## 100.0% 0.0%
##
## level freq perc cumfreq cumperc
## 1 App Bolivar Conmigo 14'887 86.2% 14'887 86.2%
## 2 Correo 2'210 12.8% 17'097 99.0%
## 3 CHATBOT 177 1.0% 17'274 100.0%
## ------------------------------------------------------------------------------
## 5 - plataforma_interaccion (character)
##
## length n NAs unique levels dupes
## 17'274 17'274 0 3 3 y
## 100.0% 0.0%
##
## level freq perc cumfreq cumperc
## 1 App Bolivar Conmigo 14'887 86.2% 14'887 86.2%
## 2 Marketo 2'210 12.8% 17'097 99.0%
## 3 INFOBIP 177 1.0% 17'274 100.0%
## ------------------------------------------------------------------------------
## 6 - medio_interaccion (character - dichotomous)
##
## length n NAs unique
## 17'274 17'274 0 2
## 100.0% 0.0%
##
## freq perc lci.95 uci.95'
## Correo 17'097 99.0% 98.8% 99.1%
## Celular 177 1.0% 0.9% 1.2%
##
## ' 95%-CI (Wilson)
## ------------------------------------------------------------------------------
## 7 - Mes_Año (character)
##
## length n NAs unique levels dupes
## 17'274 17'274 0 21 21 y
## 100.0% 0.0%
##
## level freq perc cumfreq cumperc
## 1 2022-08 6'536 37.8% 6'536 37.8%
## 2 2022-07 2'126 12.3% 8'662 50.1%
## 3 2022-09 1'823 10.6% 10'485 60.7%
## 4 2022-02 1'223 7.1% 11'708 67.8%
## 5 2022-06 1'196 6.9% 12'904 74.7%
## 6 2022-01 936 5.4% 13'840 80.1%
## 7 2022-03 629 3.6% 14'469 83.8%
## 8 2022-04 590 3.4% 15'059 87.2%
## 9 2022-05 530 3.1% 15'589 90.2%
## 10 2021-11 514 3.0% 16'103 93.2%
## 11 2021-12 317 1.8% 16'420 95.1%
## 12 2021-10 245 1.4% 16'665 96.5%
## ... etc.
## [list output truncated]
Clientes activos por mes
resumen_actividad <- datos_interacciones |>
group_by(Mes_Año) |>
summarise(
Total_Usuarios = n_distinct(id),
Usuarios_Activos = n_distinct(id[interaccion != "Inactivo"])
) |>
mutate(Porcentaje_Activos = (Usuarios_Activos / Total_Usuarios) * 100); resumen_actividad ggplot(resumen_actividad, aes(x = Mes_Año)) +
geom_line(aes(y = Total_Usuarios, color = "Usuarios Totales"), size = 1.5, linetype = "solid") +
geom_point(aes(y = Total_Usuarios, color = "Usuarios Totales"), size = 3) +
geom_line(aes(y = Usuarios_Activos, color = "Usuarios Activos"), size = 1.5, linetype = "solid") +
geom_point(aes(y = Usuarios_Activos, color = "Usuarios Activos"), size = 3) +
labs(
title = "Cantidad de Usuarios y Usuarios Activos por Mes",
x = "Mes-Año",
y = "Cantidad de Usuarios",
color = "Tipo"
) +
scale_color_manual(values = c("Usuarios Totales" = "skyblue", "Usuarios Activos" = "orange")) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
legend.position = "bottom",
legend.title = element_blank(),
legend.text = element_text(size = 12)
) +
geom_smooth(aes(y = Total_Usuarios, color = "Usuarios Totales"), method = "loess", se = FALSE, linetype = "dashed") +
geom_smooth(aes(y = Usuarios_Activos, color = "Usuarios Activos"), method = "loess", se = FALSE, linetype = "dashed")Base cruzada
Modelos explicativos
Regresión Logística
# Se crea una variable dummy: 1 para todos los activos, 0 para "Inactivo"
base_combinada <- base_combinada |>
mutate(interaccion_binaria = ifelse(interaccion == "Inactivo", 0, 1))
modelo_log <- glm(interaccion_binaria ~ Genero + Edad + Ingresos + Estad_Civil + prod_seguros,
family = binomial(link = "logit"), data = base_combinada)
summary(modelo_log)##
## Call:
## glm(formula = interaccion_binaria ~ Genero + Edad + Ingresos +
## Estad_Civil + prod_seguros, family = binomial(link = "logit"),
## data = base_combinada)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.078e+00 2.199e-01 13.998 < 2e-16 ***
## GeneroMASCULINO -2.273e-01 8.280e-02 -2.746 0.006042 **
## GeneroNO INFO -1.383e-01 1.066e+00 -0.130 0.896720
## Edad 2.094e-03 4.443e-03 0.471 0.637490
## Ingresos 8.856e-09 6.148e-09 1.440 0.149768
## Estad_CivilCASADO -2.024e-01 1.878e-01 -1.077 0.281326
## Estad_CivilDIVORCIADO -1.238e+00 3.722e-01 -3.325 0.000883 ***
## Estad_CivilSEPARADO -9.897e-01 3.797e-01 -2.607 0.009141 **
## Estad_CivilSOLTERO -9.763e-02 1.694e-01 -0.576 0.564414
## Estad_CivilUNION ALL LIBRE 2.651e-01 2.122e-01 1.249 0.211721
## Estad_CivilUNION LIBRE -1.250e+00 3.168e-01 -3.946 7.94e-05 ***
## Estad_CivilVIUDO 5.153e-01 7.446e-01 0.692 0.488934
## prod_seguros -4.603e-02 1.722e-02 -2.673 0.007512 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5464.9 on 13065 degrees of freedom
## Residual deviance: 5406.8 on 13053 degrees of freedom
## (4208 observations deleted due to missingness)
## AIC: 5432.8
##
## Number of Fisher Scoring iterations: 6
Los efectos marginales nos indican el cambio en la probabilidad de que el usuario sea activo (en lugar de inactivo) con un cambio unitario en la variable correspondiente, manteniendo las demás constantes.
Edad:
AME = 0.0001
p = 0.6348
Esto significa que un aumento de 1 año en la edad del usuario tiene un aumento muy pequeño en la probabilidad de ser activo (aunque no es estadísticamente significativo dado que el p-valor es mayor que 0.05).
Estad_CivilCASADO:
AME = -0.0101
p = 0.2585
Ser casado disminuye en un 1% la probabilidad de ser activo (aunque este resultado no es estadísticamente significativo, pues el p-valor es mayor que 0.05).
Estad_CivilDIVORCIADO:
AME = -0.0997
p = 0.0181
Ser divorciado disminuye la probabilidad de ser activo en aproximadamente un 10%. Este resultado es estadísticamente significativo (p-valor < 0.05).
Estad_CivilSEPARADO:
AME = -0.0712
p = 0.0509
Ser separado disminuye la probabilidad de ser activo en aproximadamente un 7%, con un p-valor cercano al umbral de significancia (0.05), lo que lo hace estadísticamente significativo.
Estad_CivilSOLTERO:
AME = -0.0047
p = 0.5505
Ser soltero tiene un efecto insignificante, ya que el cambio en la probabilidad es muy pequeño y el p-valor es alto (no significativo).
Estad_CivilUNION ALL LIBRE:
AME = 0.0107
p = 0.2275
Estar en una relación libre (sin vínculo legal) tiene un efecto pequeño y no significativo en la probabilidad de ser activo.
Estad_CivilUNION LIBRE:
AME = -0.1012
p = 0.0043
Estar en una relación libre sin matrimonio disminuye la probabilidad de ser activo en aproximadamente un 10%, y este es un efecto estadísticamente significativo (p-valor < 0.05).
Estad_CivilVIUDO:
AME = 0.0187
p = 0.3942
Ser viudo tiene un efecto pequeño y no significativo en la probabilidad de ser activo.
GeneroMASCULINO:
AME = -0.0115
p = 0.0066
Ser masculino disminuye la probabilidad de ser activo en aproximadamente un 1%, y este es un efecto estadísticamente significativo (p-valor < 0.05).
GeneroNO INFO:
AME = -0.0067
p = 0.9028
Tener información de género desconocida tiene un efecto insignificante en la probabilidad de ser activo, ya que el p-valor es alto (no significativo).
Ingresos:
AME = 0.0000
p = 0.0317
Un aumento en los ingresos tiene un efecto pequeño y positivo, lo que implica que un aumento en los ingresos de 1 unidad (por ejemplo, 1 peso) aumenta ligeramente la probabilidad de ser activo. Este es estadísticamente significativo.
prod_seguros:
AME = -0.0023
p = 0.0085
Un aumento en el número de productos de seguros disminuye la probabilidad de ser activo en aproximadamente un 0.23%, lo cual es estadísticamente significativo.
¿Porque un Logit y no un Probit?
La elección entre un modelo logit y un probit depende de las características de los datos, los objetivos del análisis y los supuestos subyacentes, en este caso, el logit podría ser más adecuado por varias razones, en primer lugar, la interpretación de los coeficientes del logit es más sencilla, ya que están expresados en términos de log-odds, lo que permite transformarlos fácilmente en probabilidades o razones de odds, esto resulta particularmente útil si los resultados deben comunicarse a un público diverso o no técnico, por el contrario, los coeficientes del modelo probit están relacionados con la función de distribución acumulativa normal, lo que complica su interpretación práctica.
Además, el logit es ampliamente utilizado en investigaciones aplicadas y en problemas prácticos debido a su flexibilidad y facilidad de implementación, su relación directa con las odds ratios lo hace particularmente útil en áreas como el análisis de decisiones o el marketing, donde los cambios relativos en las odds son significativos, por otro lado, el probit es más común en contextos teóricos o académicos, especialmente en modelos de utilidad latente donde los errores se asumen normalmente distribuidos.
Modelo RandomForest
data_ml <- base_combinada |>
select(interaccion, Genero, Edad, Ingresos, Estad_Civil, prod_seguros) |>
mutate(interaccion = as.factor(interaccion))
data_ml <- na.omit(data_ml)
modelo_rf <- randomForest(interaccion ~ Genero + Edad + Ingresos + Estad_Civil + prod_seguros,
data = data_ml, ntree = 500, importance = TRUE)
importance(modelo_rf)## Challenge Conversación con chatbot whatsapp Enviado Goal
## Genero 14.11003 -1.001002 14.69223 62.83857
## Edad 19.46619 0.000000 21.80442 96.81181
## Ingresos 15.73701 -1.675946 21.29372 92.01240
## Estad_Civil 11.73033 -1.001002 16.30067 81.86698
## prod_seguros 15.77595 -1.594032 19.81479 88.49957
## Group Inactivo Points registro survey Unsuscribed
## Genero -2.590478 8.616821 -44.74422 -87.4576 -78.02630 0
## Edad -8.355325 1.744297 -59.21977 -114.8561 -110.63757 0
## Ingresos -5.070292 2.965362 -64.10262 -116.1565 -104.19722 0
## Estad_Civil -7.194651 9.255243 -37.18690 -104.1246 -98.81142 0
## prod_seguros -2.146855 7.115580 -65.63566 -102.2373 -106.40266 0
## Workout MeanDecreaseAccuracy MeanDecreaseGini
## Genero 102.2598 91.15451 230.1208
## Edad 133.3198 117.46007 1266.3463
## Ingresos 151.9420 134.90274 1614.2813
## Estad_Civil 71.3606 58.66274 355.2395
## prod_seguros 115.2159 97.30345 787.7895
- Genero:
- MeanDecreaseAccuracy: 87.34
- MeanDecreaseGini: 243.46
El género es una de las variables más importantes para el modelo, ya que tiene un valor relativamente alto tanto en MeanDecreaseAccuracy como en MeanDecreaseGini.
- Edad:
- MeanDecreaseAccuracy: 111.64
- MeanDecreaseGini: 1247.36
La edad es también una de las variables más importantes para predecir la interacciones. Su impacto es notablemente alto en la disminución de la pureza de los nodos, lo que sugiere que ayuda significativamente a las particiones en el modelo.
- Ingresos:
- MeanDecreaseAccuracy: 151.69
- MeanDecreaseGini: 1639.05
Los ingresos son una de las variables más influyentes, con un impacto muy alto tanto en precisión como en pureza de los nodos, lo que indica que el modelo depende fuertemente de esta variable.
- Estad_Civil:
- MeanDecreaseAccuracy: 59.18
- MeanDecreaseGini: 359.30
El estado civil es importante, pero en menor grado comparado con las variables anteriores. Aunque tiene un impacto moderado, su importancia es menor en términos de precisión y pureza.
- prod_seguros:
- MeanDecreaseAccuracy: 102.99
- MeanDecreaseGini: 778.47
La variable prod_seguros también es relevante para el modelo, pero no tan importante como Ingresos o Edad. Aun así, sigue siendo una variable significativa.
Propuesta de análisis o de mercadeo
Notificaciones personalizadas: Enviar notificaciones o correos electrónicos (ya que las estadisticas nos arrojan que es el principal medio por el cual llegar a los clientes es con el correo y dentro de la App Bolivar conmigo) personalizados basados en la segmentación, por ejemplo, si un usuario no ha realizado ninguna interacción en los últimos 30 días, enviarle un recordatorio con beneficios específicos enfocados directamente hacia el cliente.
Gamificación: Implementar un sistema de recompensas (puntos, descuentos, beneficios) que incentive la interacción frecuente con la app, esto puede incluir recompensas por completar encuestas, registrar actividades, o realizar compras de seguros. Implantación de los “Puntos Bolívar” estrategia de acumulación ganados al momento de interactuar con la app, donde el cliente podrá redimir esos puntos en bonos, beneficios, descuentos.
Estrategia de racha: Aprovechar uno de los instintos más básicos del ser humano: el sentido de la competencia, al iniciar sesión en la app, el cliente podrá visualizar su “racha” de días consecutivos activos, además, se podría implementar una funcionalidad novedosa que fomente la competitividad, como competencias dentro de la app, al finalizar el año, se podría premiar a los 20 clientes con las mejores rachas con un regalo especial, incentivando así el uso continuo y reforzando la fidelidad hacia la plataforma.
Ofertas segmentadas: Basado en los datos demográficos y productos contratados, enviar ofertas personalizadas. Por ejemplo, si un usuario tiene un seguro de vida, ofrecer descuentos en productos de salud o viceversa.
Encuestas de satisfacción: Realizar encuestas dentro de la app para obtener retroalimentación de los usuarios sobre la experiencia y los motivos de su inactividad, usar estos datos para ajustar las estrategias de comunicación.
Integración con otros servicios: Ofrecer integración con plataformas de terceros (p. ej., aplicaciones de fitness) para aumentar la utilidad percibida.
Soporte proactivo: Ofrecer soporte a los usuarios inactivos para entender sus razones de inactividad y ofrecer soluciones o incentivos para fomentar su regreso a la app.
Información adicional necesaria
Estrato y/o gastos mensuales del cliente: El modelo indicó que una de las variables más importantes son los ingresos del cliente, si bien el ingreso puede ser una proxy del nivel socioeconómico de la persona, no necesariamente refleja su estilo de vida.
Datos sobre dispositivos: Saber si los usuarios acceden a la app desde dispositivos móviles o de escritorio, lo que podría ayudar a entender si la app está optimizada para todos los usuarios.Saber qué dispositivos (Android, iOS) y versiones de sistema operativo usan los usuarios puede ayudar a entender si existen problemas técnicos específicos relacionados con ciertos dispositivos.
Feedback directo de usuarios: Encuestas o comentarios de usuarios inactivos para entender barreras específicas (p. ej., complejidad de uso, falta de valor percibido).
Datos de comparación: Tener información sobre otras aplicaciones de seguros o bienestar que están en el mercado podría ayudar a entender por qué los usuarios prefieren otras opciones o abandonan la app, analizar características, precios, ofertas o funcionalidades de la competencia puede proporcionar ideas sobre cómo mejorar la app.
Duración de las sesiones: Información sobre cuánto tiempo los usuarios permanecen en la app durante cada sesión, los usuarios que pasan más tiempo en la app pueden ser más propensos a ser activos en el futuro.