Informe fugas de clientes

El documento ha sido convertido a PDF con la librería pdfkit de Python de la web pública responsive que se puede visitar en la siguiente URL: https://rpubs.com/rtovcan/877300










Metodología seguida en el análisis

1) Lectura e inspección de datos.

Información sobre variables.

Variables Descripción
ID Identificador único de Cliente
Genero Género binario (Male/Female)
Mayor65 Cliente mayor de 65 años
Conyuge Cliente con conyuge/compañero/compañera
PersCargo Cliente con personas a su cargo
Antig.fc.edad Antigúedad en meses del contrato
Telf_serv Cliente tiene servicios de teléfono contratados
VariasLineas Cliente tiene varias líneas de teléfono
Int_serv Cliente tiene servicios de internet contratados
Seguridad Cliente tiene servicio de seguridad contratado
CopiaSeguridad Cliente tiene servicio de copia de seguridad contratado
Antivirus_disp Cliente tiene antivirus en dispositivo
Soporte_tecnico Cliente tiene soporte técnico contratado
TV_streaming Cliente tiene TV en streaming contratado
Peliculas Cliente tiene servicio de películas contratado
Contrato Tipo de contrato de cliente
Fact_sinPapel Factura sin papel
MetodoPago Método de pago
FacturaMes Importe facturado mensual
FacturaTotal Importe facturado total
Fuga Cliente abandona la compañía












Tipo de variables.

## 'data.frame':    6353 obs. of  21 variables:
##  $ ID             : Factor w/ 6353 levels "0002-ORFBO","0003-MKNFE",..: 4858 3587 2338 4997 5879 5915 911 4316 5063 4102 ...
##  $ Genero         : Factor w/ 2 levels "Female","Male": 1 2 2 NA 1 1 2 1 NA 2 ...
##  $ Mayor65        : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Conyuge        : Factor w/ 2 levels "No","Yes": 2 1 1 1 1 1 1 1 2 1 ...
##  $ PersCargo      : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 2 1 1 2 ...
##  $ Antig.fc.edad  : num  1 34 2 45 NA 8 22 10 28 62 ...
##  $ Telf_serv      : Factor w/ 2 levels "No","Yes": 1 2 2 1 2 2 2 1 2 2 ...
##  $ VariasLineas   : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 2 2 1 2 1 ...
##  $ Int_serv       : Factor w/ 3 levels "DSL","Fiber optic",..: 1 1 1 1 2 2 2 NA 2 1 ...
##  $ Seguridad      : Factor w/ 2 levels "No","Yes": 1 2 2 2 1 1 1 2 1 2 ...
##  $ CopiaSeguridad : Factor w/ 2 levels "No","Yes": 2 1 2 1 1 1 2 1 1 2 ...
##  $ Antivirus_disp : Factor w/ 2 levels "No","Yes": 1 2 1 2 1 2 1 1 2 1 ...
##  $ Soporte_tecnico: Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 1 1 2 1 ...
##  $ TV_streaming   : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 2 2 1 2 1 ...
##  $ Peliculas      : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 2 1 1 2 1 ...
##  $ Contrato       : Factor w/ 3 levels "Month-to-month",..: 1 2 1 2 1 1 1 1 1 NA ...
##  $ Fact_sinPapel  : Factor w/ 2 levels "No","Yes": 2 1 2 1 2 2 2 1 2 1 ...
##  $ MetodoPago     : Factor w/ 4 levels "Bank transfer (automatic)",..: NA 4 4 NA 3 NA 2 4 3 NA ...
##  $ FacturaMes     : num  NA NA 53.9 42.3 70.7 ...
##  $ FacturaTotal   : num  29.9 1889.5 108.2 1840.8 151.7 ...
##  $ Fuga           : Factor w/ 2 levels "0","1": 1 1 2 1 2 2 1 1 2 1 ...

Lo primero que observamos en esta vista general es que la variable ID es del tipo factor y tiene más de 10 levels por lo que se decide transformar el tipo de dato a character.

##  chr [1:6353] "7590-VHVEG" "5575-GNVDE" "3668-QPYBK" "7795-CFOCW" ...

Al mismo tiempo se comprueba si hay algún ID duplicado, no es así en este caso. Por otro lado, aparte de no utilizar para modelar la variable ID del Cliente ya que no aporta información relevante tampoco vamos a utilizar para modelar la variable Genero.
























Distribuciones de las variables

Antig.fc.edad FacturaMes FacturaTotal
Min. : 0.00 Min. : 18.25 Min. : 18.8
1st Qu.: 9.00 1st Qu.: 35.55 1st Qu.: 394.5
Median :29.00 Median : 70.30 Median :1384.2
Mean :32.38 Mean : 64.68 Mean :2268.7
3rd Qu.:55.00 3rd Qu.: 89.80 3rd Qu.:3781.5
Max. :72.00 Max. :118.75 Max. :8672.5
NA’s :394 NA’s :394 NA’s :11

A simple vista podemos observar en los datos porcentajes de NAs tanto en las variables categóricas como cuantitativas.














Su distribuciones son las siguientes:


Valores extraños.

A simple vista no observamos ningún valor estraño fuera de rango.








2) Depuración de los datos.

Separamos variable objetivo

##  Factor w/ 2 levels "0","1": 1 1 2 1 2 2 1 1 2 1 ...

Valores atípicos

% Outliers por variable
Antig.fc.edad 0
FacturaMes 0
FacturaTotal 0

Valores perdidos

Como podemos observar no tenemos un indice de NAs muy grande. De todas maneras agregamos una variable con el porcentaje de los mismos en cada registro para tenerlos indentificado a la hora de modelar. Estos son los 5 ID en lo que vamos a realizar un mayor número de imputaciones:


ID Genero Mayor65 Conyuge PersCargo Antig.fc.edad Telf_serv VariasLineas Int_serv Seguridad CopiaSeguridad Antivirus_disp Soporte_tecnico TV_streaming Peliculas Contrato Fact_sinPapel MetodoPago FacturaMes FacturaTotal prop_missings
2866-IKBTM Female NA No No NA Yes No No No No No No No No Month-to-month No NA 19.55 19.55 0.15
7501-IWUNG NA 0 Yes Yes NA Yes No DSL No No Yes Yes Yes Yes Two year NA Bank transfer (automatic) 73.80 4616.05 0.15
7596-ZYWBB Female NA No No 65 Yes No NA Yes Yes No Yes No No Two year Yes NA 59.60 3739.80 0.15
9489-UTFKA Male NA Yes No 8 NA No DSL Yes No No No Yes No Month-to-month No NA 60.90 551.95 0.15
3845-JHAMY NA 0 Yes Yes 16 No No DSL No No No No No Yes NA NA Credit card (automatic) 35.50 552.70 0.15











Finalmente imputamos, creamos dos variables de forma aleatoria y comprobamos que todo se haya realizado correctamente, como ha sido el caso:







3) Estudio de variables y relaciones con la variable objetivo.

Realizamos V de Cramer para ver la relaciónes de las variables con la variable objetivo:

Oberservamos la primera y última variable antes de las creadas aletoriamente que nos muestra Vcramer:

Por lo tanto la variable parece tener mayor relación es el Contrato, sin embargo, es cierto que menos la variable Telf_serv el resto parece que pueden introducirse en un modelo y ha sido el punto de partida inicial por el que he empezado. El ranking que nos muestra Vcramer es el siguiente:

1- Contrato

2- Antig.fc.edad

3- Int_serv

4- MetodoPago

5- FacturaMes

7- FacturaTotal

6- Fact_sinPapel

8- Seguridad

9- Soporte_tecnico

10- PersCargo

11- Conyuge

12- Mayor65

13- Copia de Seguridad

14_ Antivirus_disp

15- TV_Streaming

16- Peliculas

17- VariasLineas

Observamos el efecto producido de las variables cuantitativas sobre la variable objetivo:

A simple vista parece que los clientes con la factura más alta al mes tienen mayor porcentaje de fuga. Podemos observar también como hay un mayor porcentaje de fuga de clientes en las edades de antiguedad más bajas. Además de ello parece que la factura total es más baja cuando existe un mayor porcentaje de fuga. Depues de generar las transformaciones de la variables continuas comprobamos V de Cramer:

Aparentemente no se observan grandes cambios en la toma de decisión anterior, solo una leve mejoría.


4) Modelado manual.

Obeservamos la frecuencia a priori del evento. El modelo va tener dificultad a reconocer a los 1.

n % val%
0 4667 73.5 73.5
1 1686 26.5 26.5

Partición training-test

Hacemos el training test de manera satifastoria.

Train:

n % val%
0 3734 73.5 73.5
1 1349 26.5 26.5

Test:

n % val%
0 933 73.5 73.5
1 337 26.5 26.5
Modelo seudoR2 Param AIC Null.dev dev.resid
Inicial 0.2830424 27 4271.354 5882.292 4217.354
Modelo 1 0.2481018 6 4434.885 5882.292 4422.885
Modelo 2 0.2613963 8 4360.683 5882.292 4344.683
Modelo 3 0.2481018 6 4434.885 5882.292 4422.885
Modelo 4 0.2790598 20 4280.781 5882.292 4240.781
Modelo 5 0.2873889 31 4253.787 5882.292 4191.787
Modelo 6 0.2936497 44 4242.959 5882.292 4154.959
Modelo 7 0.2732350 20 4315.044 5882.292 4275.044
Modelo 8 0.2988146 61 4246.577 5882.292 4124.577
Modelo 9 0.2989116 63 4250.007 5882.292 4124.007




5) Modelado por selección de variables.

Clásica.

Selección de variables clásica con variables originales y sus interacciones

Se generan los modelos modeloStepAIC, modeloBackAIC,modeloStepAIC_int y modeloStepBIC_int.

Selección de variables clásica con variables originales y transformaciones

Se genera los modelos modeloStepAIC_trans y modeloStepBIC_trans.

Selección de variables clásica con variables originales y transformaciones y sus interacciones

Se generan los modelos modeloStepAIC_transInt y modeloStepBIC_transInt.

Aleatoria.

Seleccionaremos 3 modelos aleatorios.

Lasso.

Generamos el modelo Lasso con las variables transformadas.

6) Comparación de modelos por validación cruzada repetida.

Mejor modelo manual

Modelo seudoR2 Param AIC Null.dev dev.resid
Inicial 0.2830424 27 4271.354 5882.292 4217.354
Modelo 1 0.2481018 6 4434.885 5882.292 4422.885
Modelo 2 0.2613963 8 4360.683 5882.292 4344.683
Modelo 3 0.2481018 6 4434.885 5882.292 4422.885
Modelo 4 0.2790598 20 4280.781 5882.292 4240.781
Modelo 5 0.2873889 31 4253.787 5882.292 4191.787
Modelo 6 0.2936497 44 4242.959 5882.292 4154.959
Modelo 7 0.2732350 20 4315.044 5882.292 4275.044
Modelo 8 0.2988146 61 4246.577 5882.292 4124.577
Modelo 9 0.2989116 63 4250.007 5882.292 4124.007

He decidido seleccionar el Modelo manual 2 ya que tiene un menor número de parametros y se nota solo una leve perdida en su capacidad predictiva.




Mejor de selección clásica

Modelo seudoR2 Param AIC dev.resid roc_mean roc_sd
modeloStepAIC 0.2812849 22 5366.437 5322.437 0.8399946 0.0114345
modeloStepBIC 0.2725863 14 5399.577 5371.577 0.8379235 0.0115781
modeloStepAIC_int 0.3039398 55 5255.506 5145.506 0.8466676 0.0114117
modeloStepBIC_int 0.2778310 17 5371.033 5337.033 0.8398724 0.0116995
modeloStepAIC_trans 0.2926913 23 5246.059 5200.059 0.8479122 0.0105255
modeloStepBIC_trans 0.2877306 15 5266.528 5236.528 0.8471121 0.0106437
modeloStepAIC_transInt 0.3071746 42 5177.579 5093.579 0.8521659 0.0105911
modeloStepBIC_transInt 0.3071746 17 5224.662 5190.662 0.8496906 0.0109403

Mejor de selección aleatoria

Modelo seudoR2 Param AIC dev.resid roc_mean roc_sd
modelo_ale_1 0.2923026 23 5248.916 5202.916 0.8478317 0.0104643
modelo_ale_2 0.2915492 23 5254.455 5208.455 0.8473195 0.0106529
modelo_ale_3 0.2915492 23 5254.455 5208.455 0.8478727 0.0103429

7) Elección justificada del modelo final.

Decido quedarme con el modelo modeloStepBIC_transInt en base al seudo R y ROC. Además me parece coherente con la realidad.

8) Evaluación e interpretación de parámetros.

¿Cuáles son las variables que más influyen?

## varObjBin ~ Contrato + Int_serv + raiz4FacturaTotal + TV_streaming + 
##     Fact_sinPapel + VariasLineas + Peliculas + Seguridad + MetodoPago + 
##     Soporte_tecnico + Int_serv:Peliculas

¿En qué sentido lo hacen?

##                       (Intercept)                  ContratoOne year 
##                         1.0399354                        -0.6935653 
##                  ContratoTwo year               Int_servFiber optic 
##                        -1.4436797                         1.0032401 
##                        Int_servNo                 raiz4FacturaTotal 
##                        -1.4040519                        -3.3518306 
##                   TV_streamingYes                  Fact_sinPapelYes 
##                         0.4641880                         0.4475235 
##                   VariasLineasYes                      PeliculasYes 
##                         0.4299594                         0.1730015 
##                      SeguridadYes MetodoPagoCredit card (automatic) 
##                        -0.3224069                        -0.1277074 
##        MetodoPagoElectronic check            MetodoPagoMailed check 
##                         0.2513995                        -0.2108761 
##                Soporte_tecnicoYes  Int_servFiber optic:PeliculasYes 
##                        -0.2790801                         0.3351592 
##           Int_servNo:PeliculasYes 
##                         3.7132982

9) Búsqueda del punto de corte óptimo para la probabilidad estimada.

Posibles puntos de cortes:

## [1] 0.23
## [1] 0.44




## Predicción para los datos de test.

Se realiza la predicción con la variable continua transformada (FacturaTotal) y sin transformar.

Construcción del dataset de entrega con el ID y Fuga_pred.

Se construye el dataset de entrega con la variable continua transformada y sin transformar.