Este trabajo consiste en hacer un análisis estadístico descriptivo, visual, y un modelo que nos ayude a predecir si un empleado dejara o no su compañía telefónica dadas ciertas características. Las variables escogidas para el modelo son las que creemos que nos ayudaran a explicar si el cliente abandono o no la empresa en el último tiempo.

Objetivos especificos

  • Objetivo 1:

    • Explorar el Data Set y eliminar variables que no nos sirvan para el análisis.
  • Objetivo 2:

    • Hacer un modelo de regresion logística.
  • Objetivo 3:

    • Identificar los coeficientes de regresión y hacer algunos gráficos para explicar visual y cuantitativamente los resultados.

Primeras observaciones del data set:

Dimensión del data set:

El dataset tiene una dimension de 5000 filas y 33 columnas.

Chequeo de los valores únicos del ID:

El dataset tiene 5000 filas y 5000 IDs diferentes

Chequeo de la estructura del archivo importado:

tibble [5,000 x 32] (S3: tbl_df/tbl/data.frame)
 $ Indicador_geografico                     : num [1:5000] 1 5 3 4 2 4 2 3 2 2 ...
 $ Genero                                   : num [1:5000] 1 0 1 0 0 0 1 1 1 0 ...
 $ Edad_en_años                             : num [1:5000] 20 22 67 23 26 64 52 44 66 47 ...
 $ Categoria_de_edad                        : num [1:5000] 2 2 6 2 3 5 5 4 6 4 ...
 $ Años_de_educacion                        : num [1:5000] 15 17 14 16 16 17 14 16 12 11 ...
 $ Nivel_educativo                          : num [1:5000] 3 4 2 3 3 4 2 3 2 1 ...
 $ Categoria_laboral                        : num [1:5000] 1 2 2 2 2 3 1 1 1 6 ...
 $ Numero_de_meses_con_servicio             : num [1:5000] 5 39 65 36 21 28 15 46 53 3 ...
 $ Cambio_de_proveedor_en_el_ultimo_mes     : num [1:5000] 1 0 0 0 0 0 0 0 0 1 ...
 $ Larga_distancia_en_el_ultimo_mes         : num [1:5000] 6.5 8.9 28.4 6 3.05 ...
 $ Larga_distancia_durante_la_permanencia   : num [1:5000] 34.4 330.6 1858.3 199.4 74.1 ...
 $ Servicio_de_llamadas_gratuitas           : num [1:5000] 1 0 0 0 1 1 0 1 0 0 ...
 $ Llamadas_gratuitas_en_el_ultimo_mes      : num [1:5000] 29 0 0 0 16.5 ...
 $ Llamadas_gratuitas_durante_la_permanencia: num [1:5000] 161 0 0 0 388 ...
 $ Alquiler_de_equipos                      : num [1:5000] 1 1 0 0 0 1 0 0 0 0 ...
 $ Equipos_en_el_ultimo_mes                 : num [1:5000] 29.5 54.9 0 0 0 ...
 $ Equipos_durante_la_permanencia           : num [1:5000] 126 1975 0 0 0 ...
 $ Servicio_de_tarjeta_de_llamada           : num [1:5000] 1 1 1 1 1 1 0 1 1 0 ...
 $ Tarjeta_de_llamada_en_el_ultimo_mes      : num [1:5000] 14.2 16 23 21 17.2 ...
 $ Tarjeta_de_llamada_durante_la_permanencia: num [1:5000] 60 610 1410 685 360 765 0 630 830 0 ...
 $ Servicio_inalambrico                     : num [1:5000] 0 1 0 0 1 0 0 0 0 0 ...
 $ Inalambrico_en_el_ultimo_mes             : num [1:5000] 0 45.6 0 0 19.1 ...
 $ Inalambrico_durante_la_permanencia       : num [1:5000] 0 1684 0 0 411 ...
 $ Lineas_multiples                         : num [1:5000] 1 1 1 1 0 0 0 1 1 0 ...
 $ Mensajes_de_voz                          : num [1:5000] 1 1 0 0 1 0 0 0 0 0 ...
 $ Servicio_busca                           : num [1:5000] 1 1 0 0 0 1 0 0 0 0 ...
 $ Internet                                 : num [1:5000] 0 4 0 2 3 0 1 0 0 0 ...
 $ Identificador_de_llamadas                : num [1:5000] 0 1 0 0 1 1 0 1 0 0 ...
 $ Llamada_en_espera                        : num [1:5000] 1 0 0 0 1 1 0 1 0 0 ...
 $ Desvio_de_llamadas                       : num [1:5000] 1 1 0 0 1 1 1 1 0 0 ...
 $ Llamada_a_3                              : num [1:5000] 1 0 0 0 1 1 0 1 0 0 ...
 $ Facturacion_electronica                  : num [1:5000] 0 1 0 1 0 0 0 0 0 0 ...

Analisis estadístico descriptivo de todo el dataset

  ID_cliente        Indicador_geografico     Genero        Edad_en_años   Categoria_de_edad
 Length:5000        Min.   :1.000        Min.   :0.0000   Min.   :18.00   Min.   :2.000    
 Class :character   1st Qu.:2.000        1st Qu.:0.0000   1st Qu.:31.00   1st Qu.:3.000    
 Mode  :character   Median :3.000        Median :1.0000   Median :47.00   Median :4.000    
                    Mean   :3.001        Mean   :0.5036   Mean   :47.03   Mean   :4.239    
                    3rd Qu.:4.000        3rd Qu.:1.0000   3rd Qu.:62.00   3rd Qu.:5.000    
                    Max.   :5.000        Max.   :1.0000   Max.   :79.00   Max.   :6.000    
                                                                                           
 Años_de_educacion Nivel_educativo Categoria_laboral Numero_de_meses_con_servicio
 Min.   : 6.00     Min.   :1.000   Min.   :1.000     Min.   : 0.0                
 1st Qu.:12.00     1st Qu.:2.000   1st Qu.:1.000     1st Qu.:18.0                
 Median :14.00     Median :2.000   Median :2.000     Median :38.0                
 Mean   :14.54     Mean   :2.672   Mean   :2.753     Mean   :38.2                
 3rd Qu.:17.00     3rd Qu.:4.000   3rd Qu.:4.000     3rd Qu.:59.0                
 Max.   :23.00     Max.   :5.000   Max.   :6.000     Max.   :72.0                
                                                                                 
 Cambio_de_proveedor_en_el_ultimo_mes Larga_distancia_en_el_ultimo_mes
 Min.   :0.0000                       Min.   :  0.90                  
 1st Qu.:0.0000                       1st Qu.:  5.70                  
 Median :0.0000                       Median :  9.55                  
 Mean   :0.2532                       Mean   : 13.47                  
 3rd Qu.:1.0000                       3rd Qu.: 16.55                  
 Max.   :1.0000                       Max.   :179.85                  
                                                                      
 Larga_distancia_durante_la_permanencia Servicio_de_llamadas_gratuitas
 Min.   :    0.9                        Min.   :0.0000                
 1st Qu.:  104.6                        1st Qu.:0.0000                
 Median :  350.0                        Median :0.0000                
 Mean   :  708.9                        Mean   :0.4756                
 3rd Qu.:  913.9                        3rd Qu.:1.0000                
 Max.   :13046.5                        Max.   :1.0000                
 NA's   :3                                                            
 Llamadas_gratuitas_en_el_ultimo_mes Llamadas_gratuitas_durante_la_permanencia
 Min.   :  0.00                      Min.   :   0.0                           
 1st Qu.:  0.00                      1st Qu.:   0.0                           
 Median :  0.00                      Median :   0.0                           
 Mean   : 13.26                      Mean   : 577.8                           
 3rd Qu.: 24.50                      3rd Qu.: 885.5                           
 Max.   :173.00                      Max.   :6923.4                           
                                                                              
 Alquiler_de_equipos Equipos_en_el_ultimo_mes Equipos_durante_la_permanencia
 Min.   :0.0000      Min.   :  0.00           Min.   :   0.0                
 1st Qu.:0.0000      1st Qu.:  0.00           1st Qu.:   0.0                
 Median :0.0000      Median :  0.00           Median :   0.0                
 Mean   :0.3408      Mean   : 12.99           Mean   : 470.2                
 3rd Qu.:1.0000      3rd Qu.: 30.80           3rd Qu.: 510.2                
 Max.   :1.0000      Max.   :106.30           Max.   :6525.3                
                                                                            
 Servicio_de_tarjeta_de_llamada Tarjeta_de_llamada_en_el_ultimo_mes
 Min.   :0.0000                 Min.   :  0.00                     
 1st Qu.:0.0000                 1st Qu.:  0.00                     
 Median :1.0000                 Median : 13.75                     
 Mean   :0.7162                 Mean   : 15.44                     
 3rd Qu.:1.0000                 3rd Qu.: 22.75                     
 Max.   :1.0000                 Max.   :188.50                     
                                                                   
 Tarjeta_de_llamada_durante_la_permanencia Servicio_inalambrico Inalambrico_en_el_ultimo_mes
 Min.   :    0.0                           Min.   :0.0000       Min.   :  0.00              
 1st Qu.:    0.0                           1st Qu.:0.0000       1st Qu.:  0.00              
 Median :  425.0                           Median :0.0000       Median :  0.00              
 Mean   :  720.5                           Mean   :0.2688       Mean   : 10.70              
 3rd Qu.: 1080.0                           3rd Qu.:1.0000       3rd Qu.: 20.96              
 Max.   :13705.0                           Max.   :1.0000       Max.   :186.25              
 NA's   :2                                                                                  
 Inalambrico_durante_la_permanencia Lineas_multiples Mensajes_de_voz Servicio_busca  
 Min.   :    0.00                   Min.   :0.0000   Min.   :0.000   Min.   :0.0000  
 1st Qu.:    0.00                   1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.0000  
 Median :    0.00                   Median :0.0000   Median :0.000   Median :0.0000  
 Mean   :  421.99                   Mean   :0.4884   Mean   :0.303   Mean   :0.2436  
 3rd Qu.:   89.96                   3rd Qu.:1.0000   3rd Qu.:1.000   3rd Qu.:0.0000  
 Max.   :12858.65                   Max.   :1.0000   Max.   :1.000   Max.   :1.0000  
                                                                                     
    Internet   Identificador_de_llamadas Llamada_en_espera Desvio_de_llamadas  Llamada_a_3   
 Min.   :0.0   Min.   :0.0000            Min.   :0.000     Min.   :0.0000     Min.   :0.000  
 1st Qu.:0.0   1st Qu.:0.0000            1st Qu.:0.000     1st Qu.:0.0000     1st Qu.:0.000  
 Median :1.0   Median :0.0000            Median :0.000     Median :0.0000     Median :0.000  
 Mean   :1.2   Mean   :0.4752            Mean   :0.479     Mean   :0.4806     Mean   :0.478  
 3rd Qu.:2.0   3rd Qu.:1.0000            3rd Qu.:1.000     3rd Qu.:1.0000     3rd Qu.:1.000  
 Max.   :4.0   Max.   :1.0000            Max.   :1.000     Max.   :1.0000     Max.   :1.000  
                                                                                             
 Facturacion_electronica
 Min.   :0.0000         
 1st Qu.:0.0000         
 Median :0.0000         
 Mean   :0.3486         
 3rd Qu.:1.0000         
 Max.   :1.0000         
                        

Explorando el tipo de variables:

la columna ID_cliente es del tipo character 
la columna Indicador_geografico es del tipo double 
la columna Genero es del tipo double 
la columna Edad_en_años es del tipo double 
la columna Categoria_de_edad es del tipo double 
la columna Años_de_educacion es del tipo double 
la columna Nivel_educativo es del tipo double 
la columna Categoria_laboral es del tipo double 
la columna Numero_de_meses_con_servicio es del tipo double 
la columna Cambio_de_proveedor_en_el_ultimo_mes es del tipo double 
la columna Larga_distancia_en_el_ultimo_mes es del tipo double 
la columna Larga_distancia_durante_la_permanencia es del tipo double 
la columna Servicio_de_llamadas_gratuitas es del tipo double 
la columna Llamadas_gratuitas_en_el_ultimo_mes es del tipo double 
la columna Llamadas_gratuitas_durante_la_permanencia es del tipo double 
la columna Alquiler_de_equipos es del tipo double 
la columna Equipos_en_el_ultimo_mes es del tipo double 
la columna Equipos_durante_la_permanencia es del tipo double 
la columna Servicio_de_tarjeta_de_llamada es del tipo double 
la columna Tarjeta_de_llamada_en_el_ultimo_mes es del tipo double 
la columna Tarjeta_de_llamada_durante_la_permanencia es del tipo double 
la columna Servicio_inalambrico es del tipo double 
la columna Inalambrico_en_el_ultimo_mes es del tipo double 
la columna Inalambrico_durante_la_permanencia es del tipo double 
la columna Lineas_multiples es del tipo double 
la columna Mensajes_de_voz es del tipo double 
la columna Servicio_busca es del tipo double 
la columna Internet es del tipo double 
la columna Identificador_de_llamadas es del tipo double 
la columna Llamada_en_espera es del tipo double 
la columna Desvio_de_llamadas es del tipo double 
la columna Llamada_a_3 es del tipo double 
la columna Facturacion_electronica es del tipo double 

Hay 32 variables cuantitativas y 1 variables cualitativas en el set de datos.

Las variables cuantitativas son las siguientes:
 Indicador_geografico, Genero, Edad_en_años, Categoria_de_edad, Años_de_educacion, Nivel_educativo, Categoria_laboral, Numero_de_meses_con_servicio, Cambio_de_proveedor_en_el_ultimo_mes, Larga_distancia_en_el_ultimo_mes, Larga_distancia_durante_la_permanencia, Servicio_de_llamadas_gratuitas, Llamadas_gratuitas_en_el_ultimo_mes, Llamadas_gratuitas_durante_la_permanencia, Alquiler_de_equipos, Equipos_en_el_ultimo_mes, Equipos_durante_la_permanencia, Servicio_de_tarjeta_de_llamada, Tarjeta_de_llamada_en_el_ultimo_mes, Tarjeta_de_llamada_durante_la_permanencia, Servicio_inalambrico, Inalambrico_en_el_ultimo_mes, Inalambrico_durante_la_permanencia, Lineas_multiples, Mensajes_de_voz, Servicio_busca, Internet, Identificador_de_llamadas, Llamada_en_espera, Desvio_de_llamadas, Llamada_a_3, Facturacion_electronica, .

Las variables cualitativas son las siguientes:
 ID_cliente, .

Análisis de datos nulos:

La variable ID_cliente tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Indicador_geografico tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Genero tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Edad_en_años tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Categoria_de_edad tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Años_de_educacion tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Nivel_educativo tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Categoria_laboral tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Numero_de_meses_con_servicio tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Cambio_de_proveedor_en_el_ultimo_mes tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Larga_distancia_en_el_ultimo_mes tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Larga_distancia_durante_la_permanencia tiene 3 registros nulos, el 0.06 % del total de sus registros.
La variable Servicio_de_llamadas_gratuitas tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Llamadas_gratuitas_en_el_ultimo_mes tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Llamadas_gratuitas_durante_la_permanencia tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Alquiler_de_equipos tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Equipos_en_el_ultimo_mes tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Equipos_durante_la_permanencia tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Servicio_de_tarjeta_de_llamada tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Tarjeta_de_llamada_en_el_ultimo_mes tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Tarjeta_de_llamada_durante_la_permanencia tiene 2 registros nulos, el 0.04 % del total de sus registros.
La variable Servicio_inalambrico tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Inalambrico_en_el_ultimo_mes tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Inalambrico_durante_la_permanencia tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Lineas_multiples tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Mensajes_de_voz tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Servicio_busca tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Internet tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Identificador_de_llamadas tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Llamada_en_espera tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Desvio_de_llamadas tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Llamada_a_3 tiene 0 registros nulos, el 0 % del total de sus registros.
La variable Facturacion_electronica tiene 0 registros nulos, el 0 % del total de sus registros.

Al ser solo 2 observaciones nulas se eliminan del data set

Modelo

Ejecutamos el modelo de regresión logística con todas las variables del data set para estimar los parámetros que nos ayudarán a predecir los valores de la variable dependiente:


Call:
glm(formula = Cambio_de_proveedor_en_el_ultimo_mes ~ ., family = "binomial", 
    data = df[, -c(1)])

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2697  -0.6771  -0.3656   0.5176   2.9080  

Coefficients:
                                            Estimate Std. Error z value Pr(>|z|)    
(Intercept)                               -1.197e+00  4.432e-01  -2.700 0.006935 ** 
Indicador_geografico                      -2.091e-02  2.698e-02  -0.775 0.438351    
Genero                                    -1.212e-01  7.685e-02  -1.577 0.114857    
Edad_en_años                              -1.066e-02  9.349e-03  -1.141 0.254036    
Categoria_de_edad                          9.964e-02  1.205e-01   0.827 0.408431    
Años_de_educacion                          9.508e-02  4.776e-02   1.991 0.046489 *  
Nivel_educativo                           -7.927e-02  1.244e-01  -0.637 0.523833    
Categoria_laboral                          6.847e-03  2.317e-02   0.296 0.767589    
Numero_de_meses_con_servicio              -4.210e-02  4.331e-03  -9.721  < 2e-16 ***
Larga_distancia_en_el_ultimo_mes          -5.136e-02  1.842e-02  -2.788 0.005304 ** 
Larga_distancia_durante_la_permanencia     6.591e-04  2.774e-04   2.376 0.017507 *  
Servicio_de_llamadas_gratuitas             3.420e-01  1.841e-01   1.857 0.063268 .  
Llamadas_gratuitas_en_el_ultimo_mes       -6.402e-03  1.036e-02  -0.618 0.536767    
Llamadas_gratuitas_durante_la_permanencia -1.565e-04  1.695e-04  -0.923 0.355996    
Alquiler_de_equipos                        4.110e-01  3.086e-01   1.332 0.182964    
Equipos_en_el_ultimo_mes                   1.332e-02  1.078e-02   1.236 0.216416    
Equipos_durante_la_permanencia            -1.522e-04  1.275e-04  -1.195 0.232271    
Servicio_de_tarjeta_de_llamada             6.535e-02  1.291e-01   0.506 0.612610    
Tarjeta_de_llamada_en_el_ultimo_mes       -2.073e-03  7.138e-03  -0.290 0.771457    
Tarjeta_de_llamada_durante_la_permanencia -1.501e-04  1.673e-04  -0.897 0.369640    
Servicio_inalambrico                      -1.223e-01  2.175e-01  -0.562 0.573890    
Inalambrico_en_el_ultimo_mes               7.710e-03  9.494e-03   0.812 0.416727    
Inalambrico_durante_la_permanencia         4.818e-05  1.448e-04   0.333 0.739303    
Lineas_multiples                           2.586e-01  1.014e-01   2.550 0.010783 *  
Mensajes_de_voz                            3.218e-04  1.156e-01   0.003 0.997778    
Servicio_busca                             1.900e-01  1.218e-01   1.559 0.118950    
Internet                                   1.084e-01  3.485e-02   3.112 0.001860 ** 
Identificador_de_llamadas                  4.418e-03  1.149e-01   0.038 0.969320    
Llamada_en_espera                         -3.652e-02  1.138e-01  -0.321 0.748350    
Desvio_de_llamadas                        -1.426e-01  1.132e-01  -1.259 0.207930    
Llamada_a_3                               -5.280e-02  1.164e-01  -0.454 0.649993    
Facturacion_electronica                    3.332e-01  9.982e-02   3.338 0.000843 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5654.3  on 4996  degrees of freedom
Residual deviance: 4253.5  on 4965  degrees of freedom
AIC: 4317.5

Number of Fisher Scoring iterations: 6

Las variables estadisticamente significativas al 0.05 o menos son las siguientes:

                           (Intercept)                      Años_de_educacion 
                          6.935313e-03                           4.648936e-02 
          Numero_de_meses_con_servicio       Larga_distancia_en_el_ultimo_mes 
                          2.456991e-22                           5.304377e-03 
Larga_distancia_durante_la_permanencia                       Lineas_multiples 
                          1.750697e-02                           1.078285e-02 
                              Internet                Facturacion_electronica 
                          1.860217e-03                           8.428862e-04 

Se estimará el siguiente modelo con las siguientes variables:

\[Y = β_0 + X_1β_1 + X_2β_2 + X_3β_3 + X_4β_4 + X_5β_5 \] \[ Donde: \]

\[ \textbf{Xi}\] \[ \textbf{Variable}\] \[ \textbf{Descripcion}\] \[ \textbf{Tipo}\]
\[ X_1\] \[Larga \: distancia\: en \:el \:ultimo \:mes\] \[ De \: 0.9\: a \:179.85\] \[ Numérica\]
\[ X_2\] \[Años \: de\: educacion \] \[ De \: 6\: a \:23\] \[ Numérica\]
\[ X_3\] \[Factura \: Electronica\] \[ Si = 1 \: No = 0:\] \[ Binaria\]
\[ X_4\] \[Numero \: de\: meses \: con \: servicio\] \[ De \: 0\: a \:72\] \[ Numérica\]
\[ X_5\] \[Lineas \: Multiples\] \[ Si = 1 \: No = 0:\] \[ Binaria\]

Gráficos de densidad

Podemos observar que la variable sigue una distribución muy sesgada a la derecha

Podemos observar que la variable sigue una distribución normal

Podemos observar que la variable sigue una distribución bimodal

Para eso volvemos a ejecutar el modelo con solo las variables significativas:


Call:
glm(formula = Cambio_de_proveedor_en_el_ultimo_mes ~ Larga_distancia_en_el_ultimo_mes + 
    +Años_de_educacion + Facturacion_electronica + Numero_de_meses_con_servicio + 
    Lineas_multiples, family = "binomial", data = df)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9842  -0.7007  -0.3881   0.6147   2.8923  

Coefficients:
                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                      -1.613688   0.199648  -8.083 6.34e-16 ***
Larga_distancia_en_el_ultimo_mes -0.016750   0.007160  -2.340   0.0193 *  
Años_de_educacion                 0.109288   0.013366   8.177 2.92e-16 ***
Facturacion_electronica           0.864933   0.084169  10.276  < 2e-16 ***
Numero_de_meses_con_servicio     -0.047544   0.002871 -16.561  < 2e-16 ***
Lineas_multiples                  0.537428   0.094273   5.701 1.19e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5654.3  on 4996  degrees of freedom
Residual deviance: 4405.2  on 4991  degrees of freedom
AIC: 4417.2

Number of Fisher Scoring iterations: 6

Los coeficientes del modelo quedarían:

\[Y = -1.619879 + -0.016838X_1 + 0.109619X_2 + 0.866248X_3 + -0.047436X_4 + 0.532589X_5 \]

Si se incrementa en una unidad los números de meses con servicios y todas las demás variables permanecen constantes, la probabilidad de cambiar de compañía disminuye en promedio 0.04 aproximadamente.

En cambio, por cada año que se incrementa la variable años de educación, la probabilidad de cambiar de compañía aumenta en promedio un 0.10.

Con la ecuación estimada podemos reemplazar los valores de X y estimar la probabilidad de que el usuario deje o no la compañía

Para calcular las probabilidades:

\[ P_i = \frac{1}{1 + exp^Y} \]

Predicciones

Le agregamos al Data Frame del modelo los resultados de la predicción como columna:

Comparamos la realidad con nuestro modelo:

Verificamos la precisión del modelo:

El modelo estimado tiene una precision de  78.61 %

Luego de ejecutar el modelo y predecir la variable dependiente, a los valores mayores de 0.5 se les asigno el numero 1, es decir, dejo el servicio, y a los valores menores de 0.5 se les asigno el numero 0

La precisión del modelo se calculo en base a la comparación entre los valores reales y estimados

Gráficos

Podemos visualizar, que la probabilidad de cambiar de compañía se hace casi 0 cuando la cantidad de llamadas a larga distancia superan las 20 en el ultimo mes

Gráfico Multivariado de componentes principales

Podemos visualizar la relación negativa entre cambio de proveedor y las variables meses de servicio y larga distancia como así también la relación positiva entre las variables cambio de proveedor, años de edad y factura electrónica

LS0tDQp0aXRsZTogIk1vZGVsbyBEYXRhIFNldCBUZWxlcGhvbmljYSINCmF1dGhvcjogIk1heGltaWxpYW5vIEdhbG90byINCmRhdGU6ICIwMS8xMC8yMDIxIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCg0KLS0tDQoNCg0KDQpfRXN0ZSB0cmFiYWpvIGNvbnNpc3RlIGVuIGhhY2VyIHVuIGFuw6FsaXNpcyBlc3RhZMOtc3RpY28gKipkZXNjcmlwdGl2byoqLCAqKnZpc3VhbCoqLCB5IHVuICoqbW9kZWxvKiogcXVlIG5vcyBheXVkZQ0KYSBwcmVkZWNpciBzaSB1biBlbXBsZWFkbyBkZWphcmEgbyBubyBzdSBjb21wYcOxw61hIHRlbGVmw7NuaWNhIGRhZGFzIGNpZXJ0YXMgY2FyYWN0ZXLDrXN0aWNhcy5fDQpfTGFzICoqdmFyaWFibGVzKiogZXNjb2dpZGFzIHBhcmEgZWwgbW9kZWxvIHNvbiBsYXMgcXVlIGNyZWVtb3MgcXVlIG5vcyBheXVkYXJhbiBhIGV4cGxpY2FyIHNpIGVsIGNsaWVudGUgYWJhbmRvbm8gbyBubyBsYSBlbXByZXNhIGVuIGVsIMO6bHRpbW8gdGllbXBvLl8NCg0KDQogIA0KIyBPYmpldGl2b3MgZXNwZWNpZmljb3MNCg0KICArICoqT2JqZXRpdm8gMToqKg0KICANCiAgDQogICAgICogRXhwbG9yYXIgZWwgRGF0YSBTZXQgeSBlbGltaW5hciB2YXJpYWJsZXMgcXVlIG5vIG5vcyBzaXJ2YW4gcGFyYSBlbCBhbsOhbGlzaXMuIA0KICAgICANCiAgICAgDQogICsgKipPYmpldGl2byAyOioqDQogIA0KICANCiAgICAgKiBIYWNlciB1biBtb2RlbG8gZGUgcmVncmVzaW9uIGxvZ8Otc3RpY2EuDQogICAgIA0KICAgICANCiAgKyAqKk9iamV0aXZvIDM6KioNCiAgDQogIA0KICAgICAqIElkZW50aWZpY2FyIGxvcyBjb2VmaWNpZW50ZXMgZGUgcmVncmVzacOzbiB5IGhhY2VyIGFsZ3Vub3MgZ3LDoWZpY29zIHBhcmEgZXhwbGljYXIgdmlzdWFsIHkgY3VhbnRpdGF0aXZhbWVudGUgbG9zIHJlc3VsdGFkb3MuDQogICAgIA0KDQoNCg0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCg0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpICANCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkoY3JheW9uKQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KHByZXR0eWRvYykNCmxpYnJhcnkocGFjbWFuKQ0KbGlicmFyeShwbG90bHkpDQoNCmBgYA0KDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQojZGlyKCkNCg0KZGYgPSByZWFkX2V4Y2VsKCd0ZWxlcGhvbmljYS54bHN4JykNCg0KDQoNCg0KY29sbmFtZXMoZGYpID0gIGdzdWIoIiAiLCAiXyIsIGNvbG5hbWVzKGRmKSkNCg0KY29sbmFtZXMoZGYpID0gZ3N1Yignw6EnLCAnYScsIGNvbG5hbWVzKGRmKSkNCmNvbG5hbWVzKGRmKSA9IGdzdWIoJ8OpJywgJ2UnLCBjb2xuYW1lcyhkZikpDQpjb2xuYW1lcyhkZikgPSBnc3ViKCfDuicsICd1JywgY29sbmFtZXMoZGYpKQ0KY29sbmFtZXMoZGYpID0gZ3N1Yignw7MnLCAnbycsIGNvbG5hbWVzKGRmKSkNCmNvbG5hbWVzKGRmKSA9IGdzdWIoJ8OtJywgJ2knLCBjb2xuYW1lcyhkZikpDQpjb2xuYW1lcyhkZikgPSBnc3ViKCcsJywgJycsIGNvbG5hbWVzKGRmKSkNCg0KDQoNCm5hbWVzKGRmKQ0KDQpkZiRMYXJnYV9kaXN0YW5jaWFfZW5fZWxfdWx0aW1vX21lcyA9IGFzLm51bWVyaWMoZGYkTGFyZ2FfZGlzdGFuY2lhX2VuX2VsX3VsdGltb19tZXMpDQpkZiRMYXJnYV9kaXN0YW5jaWFfZHVyYW50ZV9sYV9wZXJtYW5lbmNpYSA9IGFzLm51bWVyaWMoZGYkTGFyZ2FfZGlzdGFuY2lhX2R1cmFudGVfbGFfcGVybWFuZW5jaWEpDQpkZiRMbGFtYWRhc19ncmF0dWl0YXNfZW5fZWxfdWx0aW1vX21lcyA9IGFzLm51bWVyaWMoZGYkTGxhbWFkYXNfZ3JhdHVpdGFzX2VuX2VsX3VsdGltb19tZXMpDQpkZiRMbGFtYWRhc19ncmF0dWl0YXNfZHVyYW50ZV9sYV9wZXJtYW5lbmNpYSA9IGFzLm51bWVyaWMoZGYkTGxhbWFkYXNfZ3JhdHVpdGFzX2R1cmFudGVfbGFfcGVybWFuZW5jaWEpDQpkZiRFcXVpcG9zX2VuX2VsX3VsdGltb19tZXMgPSBhcy5udW1lcmljKGRmJEVxdWlwb3NfZW5fZWxfdWx0aW1vX21lcykNCmRmJEVxdWlwb3NfZHVyYW50ZV9sYV9wZXJtYW5lbmNpYSA9IGFzLm51bWVyaWMoZGYkRXF1aXBvc19kdXJhbnRlX2xhX3Blcm1hbmVuY2lhKQ0KZGYkVGFyamV0YV9kZV9sbGFtYWRhX2VuX2VsX3VsdGltb19tZXMgPSBhcy5udW1lcmljKGRmJFRhcmpldGFfZGVfbGxhbWFkYV9lbl9lbF91bHRpbW9fbWVzKQ0KZGYkVGFyamV0YV9kZV9sbGFtYWRhX2R1cmFudGVfbGFfcGVybWFuZW5jaWEgPSBhcy5udW1lcmljKGRmJFRhcmpldGFfZGVfbGxhbWFkYV9kdXJhbnRlX2xhX3Blcm1hbmVuY2lhKQ0KZGYkSW5hbGFtYnJpY29fZW5fZWxfdWx0aW1vX21lcyA9IGFzLm51bWVyaWMoZGYkSW5hbGFtYnJpY29fZW5fZWxfdWx0aW1vX21lcykNCmRmJEluYWxhbWJyaWNvX2R1cmFudGVfbGFfcGVybWFuZW5jaWEgPSBhcy5udW1lcmljKGRmJEluYWxhbWJyaWNvX2R1cmFudGVfbGFfcGVybWFuZW5jaWEpDQoNCg0KDQoNCmBgYA0KDQoNCg0KDQojIFByaW1lcmFzIG9ic2VydmFjaW9uZXMgZGVsIGRhdGEgc2V0Og0KDQoqKl9EaW1lbnNpw7NuIGRlbCBkYXRhIHNldDpfKioNCg0KYGBge3IsIGVjaG89Rn0NCg0KDQpkaW1fZGF0YSA8LSBkaW0oZGYpDQpjYXQoIkVsIGRhdGFzZXQgdGllbmUgdW5hIGRpbWVuc2lvbiBkZSIsIGJvbGQoZGltX2RhdGFbMV0pLCJmaWxhcyB5Iixib2xkKGRpbV9kYXRhWzJdKSwiY29sdW1uYXMuXG4iKQ0KDQoNCmBgYA0KKipfQ2hlcXVlbyBkZSBsb3MgdmFsb3JlcyDDum5pY29zIGRlbCBJRDpfKioNCg0KYGBge3IsIGVjaG89Rn0NCg0KDQoNCmRpbV9kYXRhIDwtIGRpbShkZikNCmNhdCgiRWwgZGF0YXNldCB0aWVuZSIsIGJvbGQoZGltX2RhdGFbMV0pLCJmaWxhcyB5Iixib2xkKGxlbmd0aChkZiRJRF9jbGllbnRlKSksIklEcyBkaWZlcmVudGVzXG4iKQ0KDQoNCmBgYA0KDQoNCioqX0NoZXF1ZW8gZGUgbGEgZXN0cnVjdHVyYSBkZWwgYXJjaGl2byBpbXBvcnRhZG86XyoqDQoNCmBgYHtyLCBlY2hvPUZ9DQoNCnN0cihkZlssLTFdKQ0KDQpgYGANCg0KIyBBbmFsaXNpcyBlc3RhZMOtc3RpY28gZGVzY3JpcHRpdm8gZGUgdG9kbyBlbCBkYXRhc2V0DQoNCmBgYHtyLCBlY2hvPUZ9DQoNCnN1bW1hcnkoZGYpDQoNCmBgYA0KDQoqKl9FeHBsb3JhbmRvIGVsIHRpcG8gZGUgdmFyaWFibGVzOl8qKg0KDQoNCg0KDQpgYGB7ciwgZWNobz1GfQ0KY291bnRfY3VhbnRpdGF0aXZhcyAgPC0gMCAgICMgQ29udGFkb3IgZGUgdmFyaWFibGVzIGN1YW50aXRhdGl2YXMgcGFyYSBlbCBkYXRhc2V0IA0KY291bnRfY3VhbGl0YXRpdmFzICA8LSAwICAgICMgQ29udGFkb3IgZGUgdmFyaWFibGVzIGN1YWxpdGF0aXZhcyBwYXJhIGVsIGRhdGFzZXQgDQpsaXN0X2N1YW50aXRhdGl2YXMgPC0gYygpICAgIyBMaXN0YSBxdWUgYWxtYWNlbmEgbGFzIHZhcmlhYmxlcyBjYXRlZ29yaWNhcyBwYXJhIGVsIGRhdGFzZXQgDQpsaXN0X2N1YWxpdGF0aXZhcyA8LSBjKCkgICAgIyBMaXN0YSBxdWUgYWxtYWNlbmEgbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIHBhcmEgZWwgZGF0YXNldCANCg0KZm9yIChpIGluIGNvbG5hbWVzKGRmKSkNCnsNCiAgY2F0KCJsYSBjb2x1bW5hIixib2xkKGkpLCJlcyBkZWwgdGlwbyIsYm9sZCh0eXBlb2YoZGZbW2ldXSkpLCAiXG4iKQ0KICBpZiAoaXMuY2hhcmFjdGVyKGRmW1tpXV0pKXsNCiAgICBjb3VudF9jdWFsaXRhdGl2YXMgPSBjb3VudF9jdWFsaXRhdGl2YXMgKyAxDQogICAgbGlzdF9jdWFsaXRhdGl2YXMgPC0gYyhsaXN0X2N1YWxpdGF0aXZhcywgaSkNCiAgICANCiAgfSBlbHNlIHsNCiAgICBjb3VudF9jdWFudGl0YXRpdmFzID0gY291bnRfY3VhbnRpdGF0aXZhcyArIDENCiAgICBsaXN0X2N1YW50aXRhdGl2YXMgPC0gYyhsaXN0X2N1YW50aXRhdGl2YXMsIGkpDQogIH0NCn0NCg0KY2F0KCJcbkhheSIsIGJvbGQoY291bnRfY3VhbnRpdGF0aXZhcyksICJ2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyB5IiwgYm9sZChjb3VudF9jdWFsaXRhdGl2YXMpLCAidmFyaWFibGVzIGN1YWxpdGF0aXZhcyBlbiBlbCBzZXQgZGUgZGF0b3MuXG4iKQ0KY2F0KCJcbkxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBzb24gbGFzIHNpZ3VpZW50ZXM6XG4iLCBwYXN0ZTAobGlzdF9jdWFudGl0YXRpdmFzLCAiLCIpLCAiLlxuIikNCmNhdCgiXG5MYXMgdmFyaWFibGVzIGN1YWxpdGF0aXZhcyBzb24gbGFzIHNpZ3VpZW50ZXM6XG4iLCBwYXN0ZTAobGlzdF9jdWFsaXRhdGl2YXMsICIsIiksICIuXG4iKQ0KDQoNCg0KDQpgYGANCg0KDQoNCg0KKipfQW7DoWxpc2lzIGRlIGRhdG9zIG51bG9zOl8qKg0KDQoNCg0KYGBge3IsIGVjaG89Rn0NCg0KY29sX25hbWVzPC1uYW1lcyhkZikNCmZvciAoaSBpbiBjb2xfbmFtZXMpDQp7DQogIG5hX3N1bSA9IHN1bShpcy5uYShkZltpXSkpDQogIG5hID0gbmFfc3VtDQogIG5hX3BlcmNlbnQgPSBuYV9zdW0NCiAgaWYgKG5hX3N1bSA+IDApIHsNCiAgICBuYSA9IHJlZChuYV9zdW0pDQogICAgbmFfcGVyY2VudCA9IHJlZCgxMDAgKiBuYV9zdW0gLyBsZW5ndGgoZGZbW2ldXSkgKQ0KICB9DQogIGNhdCgiTGEgdmFyaWFibGUiLGJvbGQoaSksICJ0aWVuZSIsIGJvbGQobmEpLCAicmVnaXN0cm9zIG51bG9zLCBlbCIsIGJvbGQobmFfcGVyY2VudCksICIlIGRlbCB0b3RhbCBkZSBzdXMgcmVnaXN0cm9zLlxuIikNCn0NCg0KYGBgDQoNCg0KDQoqKl9BbCBzZXIgc29sbyAyIG9ic2VydmFjaW9uZXMgbnVsYXMgc2UgZWxpbWluYW4gZGVsIGRhdGEgc2V0XyoqDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KDQoNCmRmID0gbmEub21pdChkZikNCg0KDQpgYGANCg0KDQoNCiMgTW9kZWxvDQoNCg0KKipfRWplY3V0YW1vcyBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2fDrXN0aWNhIGNvbiB0b2RhcyBsYXMgdmFyaWFibGVzIGRlbCBkYXRhIHNldCBwYXJhIGVzdGltYXIgbG9zIHBhcsOhbWV0cm9zIHF1ZSBub3MgYXl1ZGFyw6FuIGEgcHJlZGVjaXIgbG9zIHZhbG9yZXMgZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGU6XyoqDQoNCg0KDQpgYGB7ciwgZWNobz1GfQ0KDQoNCg0KbW9kZWxvIDwtIGdsbShmb3JtdWxhID0gQ2FtYmlvX2RlX3Byb3ZlZWRvcl9lbl9lbF91bHRpbW9fbWVzIH4gLiwgZGF0YSA9IGRmWywtYygxKV0sDQogICAgICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiKQ0KDQoNCg0Kc3VtbWFyeShtb2RlbG8pDQoNCmBgYA0KDQoqKl9MYXMgdmFyaWFibGVzIGVzdGFkaXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgYWwgMC4wNSBvIG1lbm9zIHNvbiBsYXMgc2lndWllbnRlczpfKioNCg0KDQpgYGB7ciwgZWNobz1GfQ0KDQoNCnZhcmlhYmxlc19zaWduaWZpY2F0aXZhcyA9IHN1bW1hcnkobW9kZWxvKSRjb2VmW3N1bW1hcnkobW9kZWxvKSRjb2VmWyw0XSA8PSAuMDUsIDRdDQp2YXJpYWJsZXNfc2lnbmlmaWNhdGl2YXMNCg0KDQpgYGANCg0KDQoqKl9TZSBlc3RpbWFyw6EgZWwgc2lndWllbnRlIG1vZGVsbyBjb24gbGFzIHNpZ3VpZW50ZXMgdmFyaWFibGVzOl8qKg0KDQoNCiQkWSA9IM6yXzAgKyBYXzHOsl8xICsgWF8yzrJfMiArIFhfM86yXzMgKyBYXzTOsl80ICsgWF81zrJfNSAkJA0KJCQgICAgRG9uZGU6ICAgICAgICQkDQoNCg0KfCQkIFx0ZXh0YmZ7WGl9JCQgfCAkJCBcdGV4dGJme1ZhcmlhYmxlfSQkIHwgJCQgXHRleHRiZntEZXNjcmlwY2lvbn0kJCB8JCQgXHRleHRiZntUaXBvfSQkIHwNCnwtLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfA0KfCAkJCBYXzEkJCAgICAgfCAgICQkTGFyZ2EgXDogZGlzdGFuY2lhXDogZW4gXDplbCBcOnVsdGltbyBcOm1lcyQkICAgICAgICAgfCAkJCBEZSBcOiAwLjlcOiBhIFw6MTc5Ljg1JCQgICAgICAgICB8JCQgTnVtw6lyaWNhJCQgICAgICAgICB8DQp8ICQkIFhfMiQkICAgICB8ICQkQcOxb3MgXDogZGVcOiBlZHVjYWNpb24gJCQgICAgICAgICB8JCQgRGUgXDogNlw6IGEgXDoyMyQkICAgICAgICAgfCQkIE51bcOpcmljYSQkICAgICAgICAgfA0KfCAkJCBYXzMkJCAgICAgfCAkJEZhY3R1cmEgXDogRWxlY3Ryb25pY2EkJCAgICAgICAgIHwgJCQgU2kgPSAxIFw6IE5vID0gMDokJCAgICAgICAgICB8JCQgQmluYXJpYSQkICAgICAgICAgIHwNCnwgJCQgWF80JCQgICAgIHwgJCROdW1lcm8gXDogZGVcOiBtZXNlcyBcOiBjb24gXDogc2VydmljaW8kJCAgICAgICAgfCAkJCBEZSBcOiAwXDogYSBcOjcyJCQgICAgICAgICAgfCAkJCBOdW3DqXJpY2EkJCAgICAgICAgICB8DQp8ICQkIFhfNSQkICAgICB8ICQkTGluZWFzIFw6IE11bHRpcGxlcyQkICAgICAgICAgICAgfCAkJCBTaSA9IDEgXDogTm8gPSAwOiQkICAgICAgIHwkJCBCaW5hcmlhJCQgICAgICAgfA0KDQoNCg0KIyBHcsOhZmljb3MgIGRlIGRlbnNpZGFkDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KZGVuc2l0eV9sYXJnYV9kaXN0YW5jaWEgPSBnZ3Bsb3QoZGZfbW9kZWxvXzIpICsgDQogIGdlb21fZGVuc2l0eShhZXMoTGFyZ2FfZGlzdGFuY2lhX2VuX2VsX3VsdGltb19tZXMsIGZpbGw9IkxhcmdhIERpc3RhbmNpYSIpLCBmaWxsID0gJ2JsdWUnLCBjb2xvciA9ICdibGFjaycsYWxwaGE9MC4zLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSsNCiAgbGFicyh0aXRsZSA9ICdMYXJnYSBkaXN0YW5jaWEgbGxhbWFkYXMgw7psdGltbyBtZXMnKQ0KDQpnZ3Bsb3RseShkZW5zaXR5X2xhcmdhX2Rpc3RhbmNpYSx0b29sdGlwPWMoIngiLCAieSIgKSkNCmBgYA0KDQoNCl9Qb2RlbW9zIG9ic2VydmFyIHF1ZSBsYSB2YXJpYWJsZSBzaWd1ZSB1bmEgZGlzdHJpYnVjacOzbiBtdXkgc2VzZ2FkYSBhIGxhIGRlcmVjaGFfDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KZGVuc2l0eV9hw7Fvc19lZCA9IGdncGxvdChkZl9tb2RlbG9fMikgKyANCiAgZ2VvbV9kZW5zaXR5KGFlcyhBw7Fvc19kZV9lZHVjYWNpb24sIGZpbGw9IkHDsW9zIGRlIGVkdWNhY2lvbiIpLGZpbGwgPSAnIzczZWJjOScsIGNvbG9yID0gJ2JsYWNrJywgYWxwaGE9MC41LCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIGxhYnModGl0bGUgPSAnQcOxb3MgZGUgZWR1Y2FjacOzbicpDQoNCg0KZ2dwbG90bHkoZGVuc2l0eV9hw7Fvc19lZCx0b29sdGlwPWMoIngiLCAieSIgKSkNCmBgYA0KDQpfUG9kZW1vcyBvYnNlcnZhciBxdWUgbGEgdmFyaWFibGUgc2lndWUgdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsXw0KDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KZGVuc2l0eV9tZXNlc19zZXJ2ID0gZ2dwbG90KGRmX21vZGVsb18yKSArIA0KICBnZW9tX2RlbnNpdHkoYWVzKE51bWVyb19kZV9tZXNlc19jb25fc2VydmljaW8sIGZpbGw9Ik1lc2VzIGNvbiBlbCBzZXJ2aWNpbyIpLGZpbGwgPSAnIzM1ZWNmMicsIGNvbG9yID0gJ2JsYWNrJywgYWxwaGE9MC4zLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArIA0KICBsYWJzKHRpdGxlID0gJ051bWVybyBkZSBtZXNlcyBjb24gc2VydmljaW8nKQ0KDQoNCmdncGxvdGx5KGRlbnNpdHlfbWVzZXNfc2Vydix0b29sdGlwPWMoIngiLCAieSIgKSkNCg0KDQpgYGANCl9Qb2RlbW9zIG9ic2VydmFyIHF1ZSBsYSB2YXJpYWJsZSBzaWd1ZSB1bmEgZGlzdHJpYnVjacOzbiBiaW1vZGFsXw0KDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KYmFyX2ZhY3R1cmEgPSBnZ3Bsb3QoZGZfbW9kZWxvXzIpICsgDQogIGdlb21fYmFyKGFlcyhhcy5mYWN0b3IoZGZfbW9kZWxvXzIkRmFjdHVyYWNpb25fZWxlY3Ryb25pY2EpLCBmaWxsPSJGYWN0dXJhY2lvbiBlbGVjdHJvbmljYSIpLGZpbGwgPSAnIzRlODRmMicsIGNvbG9yID0gJ2JsYWNrJywgYWxwaGE9MC4zLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArIA0KICBsYWJzKHRpdGxlID0gJ0ZhY3R1cmFjaW9uIGVsZWN0cm9uaWNhJywNCiAgICAgICB4ID0gJ0ZhY3R1cmFjaW9uIGVsZWN0cm9uaWNhICgwID0gTm8sIDEgPSBTaSknLA0KICAgICAgIHkgPSAnQ2FudGlkYWQnKQ0KDQoNCmdncGxvdGx5KGJhcl9mYWN0dXJhLHRvb2x0aXA9YygiY291bnQiLCAiY291bnQiKSkNCg0KDQoNCg0KYGBgDQoNCg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NCmJhcl9saW5lYXMgPSBnZ3Bsb3QoZGZfbW9kZWxvXzIpICsgDQogIGdlb21fYmFyKGFlcyhhcy5mYWN0b3IoZGZfbW9kZWxvXzIkTGluZWFzX211bHRpcGxlcyksIGZpbGw9IkxpbmVhcyBtdWx0aXBsZXMiKSxmaWxsID0gJyM0ZTg0ZjInLCBjb2xvciA9ICdibGFjaycsIGFscGhhPTAuMywgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKyANCiAgbGFicyh0aXRsZSA9ICdMaW5lYXMgbXVsdGlwbGVzJywNCiAgICAgICB4ID0gJ0xpbmVhcyBtdWx0aXBsZXMgKDAgPSBObywgMSA9IFNpKScsDQogICAgICAgeSA9ICdDYW50aWRhZCcpDQoNCg0KZ2dwbG90bHkoYmFyX2xpbmVhcyx0b29sdGlwPWMoImNvdW50IiwgImNvdW50IikpDQoNCg0KDQoNCmBgYA0KDQoNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KYmFyX3Byb3YgPSBnZ3Bsb3QoZGZfbW9kZWxvXzIpICsgDQogIGdlb21fYmFyKGFlcyhhcy5mYWN0b3IoZGZfbW9kZWxvXzIkQ2FtYmlvX2RlX3Byb3ZlZWRvcl9lbl9lbF91bHRpbW9fbWVzKSwgZmlsbD0iQ2FtYmlvIGRlIHByb3ZlZWRvciIpLGZpbGwgPSAnIzRlODRmMicsIGNvbG9yID0gJ2JsYWNrJywgYWxwaGE9MC4zLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArIA0KICBsYWJzKHRpdGxlID0gJ0NhbWJpbyBkZSBwcm92ZWVkb3InLA0KICAgICAgIHggPSAnQ2FtYmlvIGRlIHByb3ZlZWRvciAoMCA9IE5vLCAxID0gU2kpJywNCiAgICAgICB5ID0gJ0NhbnRpZGFkJykNCg0KDQpnZ3Bsb3RseShiYXJfcHJvdix0b29sdGlwPWMoImNvdW50IiwgImNvdW50IikpDQoNCg0KDQoNCmBgYA0KDQoNCg0KKipfUGFyYSBlc28gdm9sdmVtb3MgYSBlamVjdXRhciBlbCBtb2RlbG8gY29uIHNvbG8gbGFzIHZhcmlhYmxlcyBzaWduaWZpY2F0aXZhczpfKioNCg0KDQoNCg0KYGBge3IsIGVjaG89Rn0NCg0KDQoNCg0KDQptb2RlbG9fMiA8LSBnbG0oZm9ybXVsYSA9IENhbWJpb19kZV9wcm92ZWVkb3JfZW5fZWxfdWx0aW1vX21lcyB+ICAgTGFyZ2FfZGlzdGFuY2lhX2VuX2VsX3VsdGltb19tZXMgKyANCiAgICAgICAgICAgICAgICAgICArIEHDsW9zX2RlX2VkdWNhY2lvbiArIA0KICAgICAgICAgICAgICAgICBGYWN0dXJhY2lvbl9lbGVjdHJvbmljYSArIE51bWVyb19kZV9tZXNlc19jb25fc2VydmljaW8gKyBMaW5lYXNfbXVsdGlwbGVzICAsIGRhdGEgPSBkZiwNCiAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIpDQoNCmRmX21vZGVsb18yID0gZGYgJT4lIHNlbGVjdChJRF9jbGllbnRlICAgLExhcmdhX2Rpc3RhbmNpYV9lbl9lbF91bHRpbW9fbWVzICwNCiAgICAgICAgICAgICAgICAgICAgQcOxb3NfZGVfZWR1Y2FjaW9uICwNCiAgICAgICAgICAgICAgICAgRmFjdHVyYWNpb25fZWxlY3Ryb25pY2EgLE51bWVyb19kZV9tZXNlc19jb25fc2VydmljaW8gLCBMaW5lYXNfbXVsdGlwbGVzICwNCiAgICAgICAgICAgICAgICBDYW1iaW9fZGVfcHJvdmVlZG9yX2VuX2VsX3VsdGltb19tZXMpDQoNCnN1bW1hcnkobW9kZWxvXzIpDQoNCg0KDQoNCmBgYA0KDQoNCg0KKipfTG9zIGNvZWZpY2llbnRlcyBkZWwgbW9kZWxvIHF1ZWRhcsOtYW46XyoqDQoNCg0KJCRZID0gLTEuNjE5ODc5ICsgLTAuMDE2ODM4WF8xICsgMC4xMDk2MTlYXzIgKyAwLjg2NjI0OFhfMyArIC0wLjA0NzQzNlhfNCArIDAuNTMyNTg5WF81ICAkJA0KDQoqKl9TaSBzZSBpbmNyZW1lbnRhIGVuIHVuYSB1bmlkYWQgbG9zIG7Dum1lcm9zIGRlIG1lc2VzIGNvbiBzZXJ2aWNpb3MgeSB0b2RhcyBsYXMgZGVtw6FzIHZhcmlhYmxlcyBwZXJtYW5lY2VuIGNvbnN0YW50ZXMsIGxhIHByb2JhYmlsaWRhZCBkZSBjYW1iaWFyIGRlIGNvbXBhw7HDrWEgZGlzbWludXllIGVuIHByb21lZGlvIDAuMDQgYXByb3hpbWFkYW1lbnRlLl8qKg0KDQoqKl9FbiBjYW1iaW8sIHBvciBjYWRhIGHDsW8gcXVlIHNlIGluY3JlbWVudGEgbGEgdmFyaWFibGUgYcOxb3MgZGUgZWR1Y2FjacOzbiwgbGEgcHJvYmFiaWxpZGFkIGRlIGNhbWJpYXIgZGUgY29tcGHDscOtYSBhdW1lbnRhIGVuIHByb21lZGlvIHVuIDAuMTAuXyoqDQoNCg0KKipfQ29uIGxhIGVjdWFjacOzbiBlc3RpbWFkYSBwb2RlbW9zIHJlZW1wbGF6YXIgbG9zIHZhbG9yZXMgZGUgWCB5IGVzdGltYXIgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBlbCB1c3VhcmlvIGRlamUgbyBubyBsYSBjb21wYcOxw61hXyoqDQoNCioqX1BhcmEgY2FsY3VsYXIgbGFzIHByb2JhYmlsaWRhZGVzOl8qKg0KDQokJCBQX2kgPSBcZnJhY3sxfXsxICsgZXhwXll9ICQkDQoNCg0KDQojIFByZWRpY2Npb25lcw0KDQpgYGB7ciwgZWNobz1GfQ0KDQpwcmVkaWNjaW9uX3kgPSBwcmVkaWN0KG9iamVjdCA9IG1vZGVsb18yLCBuZXdkYXRhID0gZGZfbW9kZWxvXzIsIHR5cGUgPSAncmVzcG9uc2UnKQ0KDQpkZl9tb2RlbG9fMiRwcmVkaWN0ID0gcm91bmQocHJlZGljY2lvbl95LDIpDQoNCnByZWRpY2Npb25feSA9IGlmZWxzZSh0ZXN0ID0gcHJlZGljY2lvbl95ID4gMC41LCB5ZXMgPSAxLCBubyA9IDApDQoNCmRmX21vZGVsb18yJHByZWRpY2Npb24gPSBwcmVkaWNjaW9uX3kNCg0KDQoNCmBgYA0KDQoNCioqX0xlIGFncmVnYW1vcyBhbCBEYXRhIEZyYW1lIGRlbCBtb2RlbG8gbG9zIHJlc3VsdGFkb3MgZGUgbGEgcHJlZGljY2nDs24gY29tbyBjb2x1bW5hOl8qKg0KDQoNCmBgYHtyLCBlY2hvPUZ9DQoNCmRmX21vZGVsb18yJHByZWRpY2Npb24gPSBwcmVkaWNjaW9uX3kNCg0KZGZfbW9kZWxvXzIgICU+JSBzZWxlY3QoQ2FtYmlvX2RlX3Byb3ZlZWRvcl9lbl9lbF91bHRpbW9fbWVzLCBwcmVkaWNjaW9uKQ0KDQpgYGANCg0KDQoqKl9Db21wYXJhbW9zIGxhIHJlYWxpZGFkIGNvbiBudWVzdHJvIG1vZGVsbzpfKioNCg0KDQpgYGB7ciwgZWNobz1GfQ0KDQoNCmRmX21vZGVsb18yJHZhbGlkYWNpb24gPSBkZl9tb2RlbG9fMiRDYW1iaW9fZGVfcHJvdmVlZG9yX2VuX2VsX3VsdGltb19tZXMgPT0gZGZfbW9kZWxvXzIkcHJlZGljY2lvbg0KDQpkZl9tb2RlbG9fMiAgJT4lIHNlbGVjdChDYW1iaW9fZGVfcHJvdmVlZG9yX2VuX2VsX3VsdGltb19tZXMsIHByZWRpY2Npb24sIHZhbGlkYWNpb24pDQoNCg0KYGBgDQoNCioqX1ZlcmlmaWNhbW9zIGxhIHByZWNpc2nDs24gZGVsIG1vZGVsbzpfKioNCg0KDQpgYGB7ciwgZWNobz1GfQ0KDQoNCg0KcG9yY2VudGFqZSA9IHJvdW5kKHN1bShkZl9tb2RlbG9fMiR2YWxpZGFjaW9uKSAvIGxlbmd0aChkZl9tb2RlbG9fMiR2YWxpZGFjaW9uKSw0KSoxMDANCg0KDQoNCmNhdCgiRWwgbW9kZWxvIGVzdGltYWRvIHRpZW5lIHVuYSBwcmVjaXNpb24gZGUgIixib2xkKHBvcmNlbnRhamUpLCIlXG4iKQ0KDQoNCg0KDQpgYGANCg0KDQoNCioqX0x1ZWdvIGRlIGVqZWN1dGFyIGVsIG1vZGVsbyB5IHByZWRlY2lyIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlLCBhIGxvcyB2YWxvcmVzIG1heW9yZXMgZGUgMC41IHNlIGxlcyBhc2lnbm8gZWwgbnVtZXJvIDEsIGVzIGRlY2lyLCBkZWpvIGVsIHNlcnZpY2lvLCB5IGEgbG9zIHZhbG9yZXMgbWVub3JlcyBkZSAwLjUgc2UgbGVzIGFzaWdubyBlbCBudW1lcm8gMF8qKg0KDQoqKl9MYSBwcmVjaXNpw7NuIGRlbCBtb2RlbG8gc2UgY2FsY3VsbyBlbiBiYXNlIGEgbGEgY29tcGFyYWNpw7NuIGVudHJlIGxvcyB2YWxvcmVzIHJlYWxlcyB5IGVzdGltYWRvc18qKg0KDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQoNCg0Kd3JpdGUuY3N2KGRmX21vZGVsb18yLCJkZm1vZGVsX3RlbGVjXzIuY3N2Iiwgcm93Lm5hbWVzID0gRikNCg0KDQoNCmBgYA0KDQoNCg0KIyBHcsOhZmljb3MgDQoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQoNCmdyYWZpY29fYcOxb3NfZWRhZCA9ICAgZ2dwbG90KGRmX21vZGVsb18yLCBhZXMoQcOxb3NfZGVfZWR1Y2FjaW9uLCBwcmVkaWNjaW9uKSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMSwgY29sb3IgPSAnIzQxOTg5YycpICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLCBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gImJpbm9taWFsIiksIGx3ZCA9IDEuNSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgbGFicygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiUmVncmVzacOzbiAgbG9nw61zdGljYSBhw7FvcyBkZSBlZHVjYWNpw7NuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAiQcOxb3MgZGUgZWR1Y2FjacOzbiAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gIlByb2JhYmlsaWRhZCBkZSBjYW1iaWFyIGRlIGVtcHJlc2EiKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3Q9MC41KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjZTZlNmU4IiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNlNmU2ZTgiKSkNCg0KZ2dwbG90bHkoZ3JhZmljb19hw7Fvc19lZGFkKQ0KDQpgYGANCg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQpncmFmaWNvX2xhcmdhX2Rpc3QgPSAgIGdncGxvdChkZl9tb2RlbG9fMiwgYWVzKExhcmdhX2Rpc3RhbmNpYV9lbl9lbF91bHRpbW9fbWVzLHByZWRpY2Npb24pKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21fcG9pbnQoYWxwaGEgPSAwLjEsIGNvbG9yID0gJyM0MTk4OWMnKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLCBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gImJpbm9taWFsIiksIGx3ZCA9IDEuNSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlJlZ3Jlc2nDs24gbG9nw61zdGljYSBsYXJnYSBkaXN0YW5jaWEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gIkxhcmdhIGRpc3RhbmNpYSB1bHRpbW8gbWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gIlByb2JhYmlsaWRhZCBkZSBjYW1iaWFyIGRlIGVtcHJlc2EiKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3Q9MC41KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjZTZlNmU4IiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNlNmU2ZTgiKSkNCg0KZ2dwbG90bHkoZ3JhZmljb19sYXJnYV9kaXN0KQ0KDQpgYGANCg0KKipfUG9kZW1vcyB2aXN1YWxpemFyLCBxdWUgbGEgcHJvYmFiaWxpZGFkIGRlIGNhbWJpYXIgZGUgY29tcGHDscOtYSBzZSBoYWNlIGNhc2kgMCBjdWFuZG8gbGEgY2FudGlkYWQgZGUgbGxhbWFkYXMgYSBsYXJnYSBkaXN0YW5jaWEgc3VwZXJhbiBsYXMgMjAgZW4gZWwgdWx0aW1vIG1lc18qKg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NCg0KZ3JhZmljb19udW1fbWVzID0gICBnZ3Bsb3QoZGZfbW9kZWxvXzIsIGFlcyhOdW1lcm9fZGVfbWVzZXNfY29uX3NlcnZpY2lvICwgcHJlZGljY2lvbikpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMSwgY29sb3IgPSAnIzQxOTg5YycpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbV9zbW9vdGgoIG1ldGhvZCA9ICJnbG0iLCBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gImJpbm9taWFsIiksIGx3ZCA9IDEuNSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJzKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlJlZ3Jlc2lvbiBsb2fDrXN0aWNhIG1lc2VzIGNvbiBlbCBzZXJ2aWNpbyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAiTnVtZXJvIGRlIG1lc2VzIGNvbiBlbCBzZXJ2aWNpbyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9ICJQcm9iYWJpbGlkYWQgZGUgY2FtYmlhciBkZSBlbXByZXNhIikgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0PTAuNSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI2U2ZTZlOCIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICIjZTZlNmU4IikpDQoNCmdncGxvdGx5KGdyYWZpY29fbnVtX21lcykNCg0KDQoNCg0KYGBgDQoNCg0KDQojIEdyw6FmaWNvIE11bHRpdmFyaWFkbyBkZSBjb21wb25lbnRlcyBwcmluY2lwYWxlcw0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NCg0KDQpsaWJyYXJ5KHVyY2EpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShGYWN0b01pbmVSKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoZGV2dG9vbHMpDQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQoNCmFjcCA9IGRmX21vZGVsb18yWywtYygxLDgsOSwxMCldDQoNCg0KY29sbmFtZXMoYWNwKSA9IGMoJ0xhcmdhIERpc3QnLCdBw7FvcyBFZCcsJ0ZhY3QgRWxlY3QnLCdNZXNlcyBTZXJ2aWNpbycsJ0xpbmVhcyBNdWx0JywnQ2FtYmlvIFByb3ZlZWRvcicpDQoNCg0KcGMxID0gUENBKGFjcCwgZ3JhcGggPSBGQUxTRSkNCg0KDQoNCmZ2aXpfcGNhX3ZhcihwYzEsIGNvbC52YXIgPSJjb250cmliIiwNCiAgICAgICAgICAgICBncmFkaWVudC5jb2xzID0gYygiIzA1MDU5YyIsICIjNmJjOWFmIiwgIiM5OWNmYzAiLCAiI2EyYTJmYyIsICIjNWQ1ZGNmIiksDQogICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gIkNvbnQuVmFyIikNCg0KYGBgDQoNCioqX1BvZGVtb3MgdmlzdWFsaXphciBsYSByZWxhY2nDs24gbmVnYXRpdmEgZW50cmUgY2FtYmlvIGRlIHByb3ZlZWRvciB5IGxhcyB2YXJpYWJsZXMgbWVzZXMgZGUgc2VydmljaW8geSBsYXJnYSBkaXN0YW5jaWEgY29tbyBhc8OtIHRhbWJpw6luIGxhIHJlbGFjacOzbiBwb3NpdGl2YSBlbnRyZSBsYXMgdmFyaWFibGVzIGNhbWJpbyBkZSBwcm92ZWVkb3IsIGHDsW9zIGRlIGVkYWQgeSBmYWN0dXJhIGVsZWN0csOzbmljYV8qKg==