Actividad 1 - Métodos de Muestreo

Telco Customer Churn

Author

Fernando G. Loayza Pizarro

Published

October 22, 2024

1 Enunciado de la actividad

Trabajo grupal síncrono. Realizar una busca de una población de datos en que se pueda obtener una muestra que correspondan a los tipos de muestreo. Describir el problema, describir los datos y aplicar un muestreo simple, estratificado, sistemático o conglomerado para esos datos. También se puede obtener algunas medidas estadísticas y conclusiones. Presentar estos resultados por medio de un informe (pdf). La fecha de entrega: desde 19 de octubre hasta 26 de octubre.

Adjunto link de este trabajo para mejorar la visualización de algunos outputs: https://rpubs.com/LPFernando/1235658

2 Descripción del problema

Una alta tasa de abandono de clientes indica que un gran porcentaje de tus clientes ya no desea comprar tus productos o servicios por varias razones, lo que puede ser un signo que el negocio es insatisfactorio.

Este estudio pretende analizar y aplicar los diferentes métodos de muestreo de una población de clientes para posteriormente dar recomendaciones o implementar estrategias de retención.

3 Descripción del dataset

El dataset contiene datos demográficos, de servicio, estado de clientes que solicitaron servicios de empresa de Telecomunicaciones en California - USA. Se usó los datos registrados en la plataforma Kaggle (ir Link).

New names:
• `` -> `...22`

Cuenta con 7043 clientes al primer trimestre (no especifican año)

  1. Distribución de ciudad principal de residencia del cliente. La mayoria de nuestros clientes residen principalmente en California-Estados Unidos.

  2. Hasta el primer trimestre tenemos que 67% de nuestros clientes permanecen suscritos a algun servicio de la compañia. 6% (454) son nuevos clientes y el 27% ya no son clientes.

  3. Los principales motivos que dan los clientes al abandonar el servicio, son debido a que la competencia ofrece mejores servicios a menor precio y a una mala atención al cliente.

4 Muestreo aleatorio simple sin reposición

Obtener una muestra de 100 clientes sin reposición, y analizar la variable edad.


Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
set.seed(2)
clientes.elegidos.100.sin=sample(1:7043,100,replace=FALSE)
muestra.clientes.100.sin = datos_clientes[clientes.elegidos.100.sin,]

Una vez obtenida la muestra procedemos a mostrar algunos datos estadisticos, la media de edad de la muestra es 46.19 mientras que el de la población es 47.46.

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  19.00   33.00   44.00   46.19   60.00  109.00 

5 Muestreo aleatorio sistemático

Vamos a tomar el tamaño y caso del muestreo simple anterior aplicado a la variable tarifa del plan contratado. Ordenaremos el CustomerID es probable con esto que el muestreo sistemático sea más preciso que el muestreo aleatorio.

# A tibble: 6 × 2
  CustomerID Monthly_Charges
       <int>           <dbl>
1          1            18.2
2          2            18.4
3          3            18.6
4          4            18.7
5          5            18.7
6          6            18.8
N <- dim(precios_ordenados)[1]
n <- 100

q <- floor(N/n) # Definimos intervalo
q
[1] 70
set.seed(2) # Obtenemos q0 inicial aleatorio
u <- runif(1)
q0 <- round((q-0)*u + 0)
q0
[1] 13

La muestra está compuesta por los elementos: primero obtenemos el corte de los intervalos.

vector_multiplos_q <- q*0:(n-1)
#length(vector_multiplos_q)
vector_multiplos_q
  [1]    0   70  140  210  280  350  420  490  560  630  700  770  840  910  980
 [16] 1050 1120 1190 1260 1330 1400 1470 1540 1610 1680 1750 1820 1890 1960 2030
 [31] 2100 2170 2240 2310 2380 2450 2520 2590 2660 2730 2800 2870 2940 3010 3080
 [46] 3150 3220 3290 3360 3430 3500 3570 3640 3710 3780 3850 3920 3990 4060 4130
 [61] 4200 4270 4340 4410 4480 4550 4620 4690 4760 4830 4900 4970 5040 5110 5180
 [76] 5250 5320 5390 5460 5530 5600 5670 5740 5810 5880 5950 6020 6090 6160 6230
 [91] 6300 6370 6440 6510 6580 6650 6720 6790 6860 6930

Obtenemos el índice de los elementos.

indice_elementos <- round(q0 + vector_multiplos_q)
#indice_elementos
muestra.precios.100.sin = precios_ordenados[indice_elementos,]
#muestra.precios.100.sin

Nuestra muestra sistematica tiene una media de 64.16 dolares mientras que la media de la población es 64.76.

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  18.80   35.02   70.12   64.16   89.41  113.65 

6 Muestra estratificada para proporciones

Antes de obtener la muestra ya sabemos (ver gráfico pie del inicio) que la variable Customer_Status no está balanceada, por lo tanto, se decide considerar las proporciones de cada segmento de dicha variable y asi mantener su comportamiento. Que hubiera pasado con la muestra si no preservamos la proporcionalidad?

La variable Customer_Status será nuestro estrato.

¿Cuántas personas hay y cuál es la tarifa promedio mensual?

dato1 %>% summarise(num_personas = n_distinct(CustomerID), promedio_tarifa = mean(Monthly_Charges), sd_tarifa = sd(Monthly_Charges), min_tarifa = min(Monthly_Charges), max_tarifa = max(Monthly_Charges))
# A tibble: 1 × 5
  num_personas promedio_tarifa sd_tarifa min_tarifa max_tarifa
         <int>           <dbl>     <dbl>      <dbl>      <dbl>
1         7043            64.8      30.1       18.2       119.

¿Cuál es el número de elementos (personas) por estrato?

dato1 %>% group_by(Customer_Status) %>% 
  summarise(num_personas = n_distinct(CustomerID), promedio_tarifa = mean(Monthly_Charges), sd_tarifa = sd(Monthly_Charges))
# A tibble: 3 × 4
  Customer_Status num_personas promedio_tarifa sd_tarifa
  <chr>                  <int>           <dbl>     <dbl>
1 Churned                 1869            74.4      24.7
2 Joined                   454            43.5      24.1
3 Stayed                  4720            63.0      31.2

¿Cuánta muestra se necesita si se quisiera estimar la tarifa promedio con un margen de error de 2 dolares y para un intervalo de confianza del 95%?

alpha <- 0.05
z <- qnorm(1-alpha/2)
me <- 2
s <- 30.09005

((z*s)/me)**2
[1] 869.5249

Estamos tomando la sd total sin haber realizado limpieza de nuestros datos. Así, nuestra muestra debe ser de 870.

Calcular el tamaño de muestra para cada estrato, así como su factor de expansión correspondiente

El tamaño de muestra en cada estrato está dado por: nh = n*(Wh).

# A tibble: 3 × 4
  Customer_Status    Nh    nh factorh
  <chr>           <int> <dbl>   <dbl>
1 Churned          1869   231    8.09
2 Joined            454    56    8.11
3 Stayed           4720   583    8.10

Seleccionamos una muestra estratificada

[1] 870  30

7 Muestra de conglomerados

Queremos encontrar aglemoraciones de la ubicacion de clientes que abandonaron la empresa.

[1] 1869    2

Estimación del número óptimo de conglomerados.

Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Según el gráfico, el número sugerido de grupos es 2. 

#Computación CLARA
clara.res <- clara(dato2, 4, samples=50, pamLike = TRUE)

#Componentes de clara.res
print(clara.res)
Call:    clara(x = dato2, k = 4, samples = 50, pamLike = TRUE) 
Medoids:
     Latitude Longitude
[1,] 34.11044 -118.1570
[2,] 37.97450 -121.3196
[3,] 39.88439 -122.5875
[4,] 32.96106 -117.1349
Objective function:  0.8381597
Clustering vector:   int [1:1869] 1 2 1 2 2 2 3 4 4 4 1 2 1 1 2 2 4 2 ...
Cluster sizes:           621 670 225 353 
Best sample:
 [1]   19   22   86  199  240  256  296  362  377  406  455  462  528  617  622
[16]  647  653  668  686  751  756  803  840  846  855  898  942 1006 1098 1160
[31] 1305 1328 1389 1416 1455 1466 1473 1491 1501 1533 1549 1551 1672 1735 1772
[46] 1797 1814 1816

Available components:
 [1] "sample"     "medoids"    "i.med"      "clustering" "objective" 
 [6] "clusinfo"   "diss"       "call"       "silinfo"    "data"      

La salida de la función clara() presenta componentes clave, incluyendo los medoides que representan los clusters y el vector de clustering que asigna a cada objeto un número de cluster.

dd <- cbind(dato2, cluster=clara.res$cluster)
head(dd, n=10)
   Latitude Longitude cluster
1  33.64567 -117.9226       1
2  38.01446 -122.1154       2
3  34.22785 -119.0799       1
4  37.68084 -122.4813       2
5  37.16154 -121.6494       2
6  39.22743 -120.0918       2
7  40.76660 -123.8046       3
8  33.30985 -116.8231       4
9  32.96106 -117.1349       4
10 33.83280 -116.2510       4
#Medoids
#clara.res$medoids

La muestra que toma el modelo en su ultma iteración podemos recuperarlo con clara.res$sample el cual contiene los indices. Son 48 registros.

8 Conclusiones y observaciones

  • Se logró aplicar los 4 métodos de muestreo, cada una debe aplicarse para el caso correcto. Está pendiente saber (evaluar) si las muestras obtenidas describen a la poblacion.

  • Al aplicar el M.A.S y muestreo sistematico obtuvimos medias diferente al de la población, estpy seguro que las desviaciones. Se puede aplicar pruebas de hipotesis?

  • En el muestreo estratificado, surgió una duda, que pasa si la población que se pretende encuestar decide no responder, hay algun impacto o como amortiguar costos en este caso.

  • Cuando uno aplica clustering a la población, que ocurre si 2 o más cluster se traslapan, como se decide a que grupo pertenecerán.