Apellidos: Jurado Cuesta
Nombre: Xavier
Contexto del problema
Con el objetivo de mejorar los tiempos de atención al cliente en ventanilla de un Banco, se ha recolectado información anónimamente de cada cajero y transacción realizada. Para el estudio, el Banco ha suministrado un archivo de excel con tres hojas:
- Sucursal: tiene información de las transacciones, columnas: Sucursal, Cajero, ID Transacción, Transacción, Tiempo Servicio seg, Nivel de satisfacción, Monto de la transacción.
- Data_Sucursal: información referente a la ubicación y si en la sucursal se ha puesto o no un nuevo sistema.
- Data_Cajero: información referente a datos del cajero.
Nota: Es necesario tener presente los tipos de datos que tenemos en el archivo de excel, para cada una de las hojas. Por ejemplo, en la hoja Sucursal: La variable Sucursal, debe ser considerada como una variable categórica nominal (en R se considera a las variables categóricas como factores); Cajero: La variable Cajero, es una variable categórica nominal; IDTransaccion: La variable IDTransaccion,es una variable categórica nominal; Transaccion: La variable Transaccion, es una variable categórica nominal; TiempoServicioseg: La variable TiempoServicioseg, es una variable numérica; Satisfaccion: La variable Satisfaccion, es una variable categórica ordinal; Monto: La variable Monto, es una variable numérica.
Enunciado del problema:
Determinar la tipología de las transacciones a través del uso de métodos de clasificación, además dentro de cada clase realizar el perfilamiento de los cajeros que tiene el banco para la clase. Debido a la cantidad de transacciones, se recomienda realizar una caracterización (puede ser en función del volumen, monto, tiempo, etc.) que mínimo este consituida por tres clases. Para la caracterización puede utilizar un índice (componentes princiales) que permita realizar un ranking y definir las clases.
Una vez, que se tenga creada las clases utilizar la metodología de machine learning para validar y seleccionar un modelo que mejor clasifique la caracterización realizada.
Por otro lado, como bono de un punto para cada clase puede aplicar un método de clustering para descubir la tipología de los cajeros en función del nivel de satisfacción evaluado por el cliente, considerando los tiempos de servicio que dependen del tipo de transacción. Además, de otras características que considere que puedan describir el perfil del cajero.
Lectura de los datos
Empezamos con la lectura de los datos y procedemos a cambiar el tipo de dato de ser necesario.
## Primera hoja -> sucursal
sucursal <- read_excel("Data_Banco.xlsx",sheet = 1)
## Segunda hoja -> data_sucursal
data_sucursal <- read_excel("Data_Banco.xlsx",sheet = 2)
## Tercera hoja -> data_cajero
data_cajero <- read_excel("Data_Banco.xlsx",sheet = 3)
## Revisamos nuestros datos
summary(sucursal)
## Sucursal Cajero ID_Transaccion Transaccion
## Min. : 62.0 Min. : 56 Length:24299 Length:24299
## 1st Qu.: 85.0 1st Qu.: 472 Class :character Class :character
## Median : 85.0 Median :3678 Mode :character Mode :character
## Mean :208.1 Mean :2919
## 3rd Qu.:443.0 3rd Qu.:3983
## Max. :586.0 Max. :5286
## Tiempo_Servicio_seg Satisfaccion Monto
## Min. : 18.13 Length:24299 Min. : 53.82
## 1st Qu.: 75.69 Class :character 1st Qu.:1417.73
## Median : 122.45 Mode :character Median :2087.43
## Mean : 155.58 Mean :1996.16
## 3rd Qu.: 197.73 3rd Qu.:2482.09
## Max. :1602.70 Max. :6278.02
summary(data_sucursal)
## ID_Sucursal Sucursal Nuevo_Sistema
## Min. : 62.0 Length:5 Length:5
## 1st Qu.: 85.0 Class :character Class :character
## Median :267.0 Mode :character Mode :character
## Mean :288.6
## 3rd Qu.:443.0
## Max. :586.0
summary(data_cajero)
## Cajero Edad Sexo Nivel_Formacion
## Min. : 56.0 Min. :22.00 Length:27 Length:27
## 1st Qu.: 414.5 1st Qu.:26.00 Class :character Class :character
## Median :3023.0 Median :30.00 Mode :character Mode :character
## Mean :2794.3 Mean :32.96
## 3rd Qu.:4388.5 3rd Qu.:38.00
## Max. :5286.0 Max. :55.00
## Anio Ingreso
## Min. :1984
## 1st Qu.:2002
## Median :2011
## Mean :2008
## 3rd Qu.:2014
## Max. :2017
## Realizamos el cambio de tipo de dato
sucursal$Satisfaccion = factor(sucursal$Satisfaccion,levels = c("Muy Bueno","Malo","Bueno","Regular","Muy Malo"))
sucursal$ID_Transaccion = factor(sucursal$ID_Transaccion, levels=c(2,3,10))
sucursal$Tiempo_Servicio_seg = as.numeric(sucursal$Tiempo_Servicio_seg)
sucursal$Monto = as.numeric(sucursal$Monto)
Una vez realizado este análisis previo junto con las correcciones necesarias, procedemos a realizar lo que se pide.
1.- (40%) Caracterización de las transacciones.
Determine almenos 3 clases que permitan caracterizar las transacciones con el objetivo de evaluar y mejorar los tiempos de atención.
Solución.
Como se deben caracterizar al menos tres clases que permitan caracterizas las transacciones, realizaré un análisis por conglomerados para evaluar y mejorar los tiempos de atención.
## Seleccionamos las variables que nos interesan
data_tiemp_ser <- data.frame(sucursal$Monto,sucursal$Tiempo_Servicio_seg)
km.res <- kmeans(data_tiemp_ser, 3, nstart = 25)
fviz_cluster(km.res, data = data_tiemp_ser, frame.type = "convex")
## Warning: argument frame is deprecated; please use ellipse instead.
## Warning: argument frame.type is deprecated; please use ellipse.type instead.
#km.res$cluster -> A que cluster es asignado cada dato
Notemos que se crean 3 clusters, que vendrian a representar las categorias encontradas. Podemos resaltar la dispersión en los diferentes clusters encontrados siendo la de color verde (categoría 2) es la de mayor disperción y la rosa (categoría 1) con menor disperción, para la celeste (categoría 3) no presenta mayor disperción en los datos.
tipo <- as.data.frame(km.res$cluster)
cluster <- data.frame(data_tiemp_ser,tipo)
barplot(table(tipo))
Notemos que podemos ver los tres diferentes tipos de observaciones que tiene el dataframe Sucursal. Teniendo en cuenta el tiempo de servicio y el monto de la trasnferencia en cada cajero, cabe mencionar que el procedimiento se realizo con el método de k-means para las observaciones.
* La de primer tipo tiene alrededor de 8000 observaciones.
* La de segundo tipo tiene alrededor de 4000 observaciones.
* La de tercer tipo tiene al parecer un poco más de 12000 observaciones.
Como se mostró, podemos decir que existe una diferencia significativa entre los tipos 1,2,3.
Porcedemos a realizar un análisis para ver si existen datos atípicos en función del monto en cada transacción del cajero, para lo cual usaleros el método LOF.
boxplot(cluster$sucursal.Monto)
Como podemos observar, existen muchos datos atípicos por lo que procedemos a quitarlos.
# Estandarización de los datos
data_sucursal_scale <- scale(cluster$sucursal.Monto)
# Por facilidad computacional tomamos k=20
data_sucursal_lof <- lof(data_sucursal_scale, k=20)
# De donde conseguimos el indicador
data_sucursal_lof <- as.data.frame(data_sucursal_lof)
# Procedemos a ver los datos atípicos
atipicos<- data.frame(cluster,data_sucursal_lof)
### BASE SIN DATOS ATIPICOS
# criterio del metodo LOF, si son menores o iguales a uno es menos probable de que sean datos anomalos
sn_atipicos<-filter(atipicos,data_sucursal_lof<=1)
Una vez eliminados los datos atipicos, procedemos a visualizar los datos.
boxplot(sn_atipicos$sucursal.Monto)
Como podemos observar existen muchos menos datos atípicos, por lo que procedemos a visualizar las observaciones etiquetadas sin los datos atípicos.
barplot(table(sn_atipicos$km.res.cluster))
Y por tanto podemos decir que las categorías no se ven afectadas por la eliminación de los datos atípicos y podemos continuar con la selección de un modelo de predicción y validación.
2.- (60%) Modelo de predicción, validación y selección del modelo.
Realizar un informe que solvente la selección y aplicación del modelo utilizado para la clasificación de las transacciones según las clases definidas con el objetivo de mejorar los tiempos de atención.
2.1.- (30%) Proponer y Aplicar modelos propuestos para la clasificación.
Solucion.
Método de Naive Bayes
modelo_naive_bayes <- naiveBayes(factor(sn_atipicos$km.res.cluster) ~ ., data = sn_atipicos)
table(predict(modelo_naive_bayes, sn_atipicos), sn_atipicos[,3])
##
## 1 2 3
## 1 3091 0 168
## 2 6 1416 107
## 3 38 226 4924
Así, con el método de Naive Bayes podemos concluir que:
Para la categoría 1: Se clasifican de manera correcta 3091 observaciones y 168 no se clasifican de manera correcta.
Para la categoría 2: Se clasifican de manera correcta 4924 observaciones y 264 no se clasifican de manera correcta.
Para la categoría 3: Se clasifican de manera correcta 1416 observaciones y 113 no se clasifican de manera correcta.
Método de Análisis de Discriminante
metodo_analisis_discriminante <- lda(factor(sn_atipicos$km.res.cluster)~sn_atipicos$sucursal.Monto+sn_atipicos$sucursal.Tiempo_Servicio_seg,sn_atipicos)
probs <- predict(metodo_analisis_discriminante,sn_atipicos,type="prob")
table(probs$class,factor(sn_atipicos$km.res.cluster))
##
## 1 2 3
## 1 2958 0 2
## 2 0 1312 7
## 3 177 330 5190
Así, con el método de análisis de discriminante podemos concluir que:
Para la categoría 1: Se clasifican de manera correcta 2958 observaciones y 2 no se clasifican de manera correcta.
Para la categoría 2: Se clasifican de manera correcta 1312 observaciones y 7 no se clasifican de manera correcta.
Para la categoría 3: Se clasifican de manera correcta 5190 observaciones y 507 no se clasifican de manera correcta.
2.2.- (30%) Análisis y conclusiones (validación y selección del modelo).
Con el método de Naive Bayes se tuvieron un total de 545 mal clasificados que representa el 5.4% de los datos.
Por otro lado, con el método de Análisis de Discriminante obtuvimos 456 mal clasificados, lo que representa el 4.5 de los datos.
Por lo que, se selecciona el método de Análisis de Discriminante para la clasificación de los datos.
Observación: para el desarrollo del examen pueden utilizar cualquier software, sin embargo se recomienda utilizar el software estadístico R (subir un proyecto comprimido con el nombre del estudiante al aula virtual o mail miguel.flores@epn.edu.ec). En el caso que no se pueda reproducir los resultados se calificará la parte práctica con la nota de cero.