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_demograficos

Para 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
DescTools::Desc(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

base_combinada <- datos_interacciones |>
  left_join(datos_demograficos, by = "id");base_combinada

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
marginales <- margins(modelo_log)
summary(marginales)

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
  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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.