Una entidad financiera busca clasificar a sus clientes en dos grupos, aquellos que prefieren un Crédito Personal y aquellos que optan por un Ahorro a Plazo Fijo. El objetivo del análisis discriminante es utilizar características demográficas y financieras de los clientes para predecir su preferencia de producto. Desarrollar un modelo que, con base en las características de los clientes, pueda predecir si un cliente prefiere un Crédito Personal (0) o un Ahorro a Plazo Fijo (1).
##Importación de datos
data=read.csv(file.choose())
head(data)
## Edad Ingresos_Mensuales Ahorros_Totales Deuda_Actual Tipo_Vivienda
## 1 29 1387 3831 14815 Propia
## 2 25 1770 2632 9980 Alquilada
## 3 32 2980 766 4270 Alquilada
## 4 27 1535 4871 12052 Propia
## 5 34 2485 751 11612 Alquilada
## 6 34 1307 2884 2810 Propia
## Nivel_Educativo Estado_Civil Producto_Preferido
## 1 Secundaria Divorciado 0
## 2 Postgrado Soltero 0
## 3 Secundaria Casado 0
## 4 Postgrado Casado 0
## 5 Universitario Casado 0
## 6 Secundaria Divorciado 0
#Filtrando columnas
data=data[,c(1,2,3,4,8)]
head(data)
## Edad Ingresos_Mensuales Ahorros_Totales Deuda_Actual Producto_Preferido
## 1 29 1387 3831 14815 0
## 2 25 1770 2632 9980 0
## 3 32 2980 766 4270 0
## 4 27 1535 4871 12052 0
## 5 34 2485 751 11612 0
## 6 34 1307 2884 2810 0
Prueba de hipotesis de Lambda de Wilks
H0 : La función discriminante no posee capacidad discriminante.
Ha : La función discriminante permite distinguir las categorias gracias a al menos una variable
alfa=0.05
Xm = manova(data=data,
cbind(Edad,Ingresos_Mensuales,
Ahorros_Totales,Deuda_Actual)~Producto_Preferido)
final = summary(Xm,test="Wilks")
final
## Df Wilks approx F num Df den Df Pr(>F)
## Producto_Preferido 1 0.036988 65057 4 9995 < 2.2e-16 ***
## Residuals 9998
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Pvalor = 2.2^(-16) aprox = 0 Decisión = Pvalor < alfa Rechazo Ho.
Conclusión A un nivel de significación del 5%, se puede afirmar que la función discriminante permite distinguir las categorias gracias a al menos una variable
library(MASS)
modelo = lda(data=data,
Producto_Preferido~Edad + Ingresos_Mensuales+
Ahorros_Totales+Deuda_Actual)
modelo
## Call:
## lda(Producto_Preferido ~ Edad + Ingresos_Mensuales + Ahorros_Totales +
## Deuda_Actual, data = data)
##
## Prior probabilities of groups:
## 0 1
## 0.5 0.5
##
## Group means:
## Edad Ingresos_Mensuales Ahorros_Totales Deuda_Actual
## 0 29.5206 1987.550 2475.497 7763.289
## 1 49.4684 7490.323 35114.528 7692.912
##
## Coefficients of linear discriminants:
## LD1
## Edad 9.838860e-02
## Ingresos_Mensuales 9.873249e-04
## Ahorros_Totales 8.603983e-05
## Deuda_Actual -1.994808e-06
Función discriminante
Di = Edad * 9.838860e-02+ Ingresos_Mensuales * 9.873249e-04 + Ahorros_Totales * 8.603983e-05 + Deuda_Actual*-1.994808e-06
Calidad del ajuste (n^2)
autovalor=final$Eigenvalues[,1]
calidad = autovalor/(1+autovalor)
round(calidad*100,2) ## En %
## Producto_Preferido
## 96.3
El ajuste (varianza explicada) es del 96.3% (relativamente muy bueno) El 96.3% de la variabilidad de la función discriminante es explicada por las variables independientes.
Correlación Canónica
correlacion = sqrt(calidad)
round(correlacion*100,2) ## En %
## Producto_Preferido
## 98.13
la función discriminante presenta una alta correlación (canónica) con la variable binaria a clasificar del 98.13%.
Tabla de clasificación
# calidad de la clasificación
pro = predict(modelo)
Tabla = table(data$Producto_Preferido,pro$class)
Tabla
##
## 0 1
## 0 5000 0
## 1 0 5000
Se tiene una “Perfecta clasificación”.
Correcta_clasi= (5000+5000)/10000
Correcta_clasi*100 # En %
## [1] 100
CASO: USARRESTS El departamento de investigación de seguridad pública en Estados Unidos está buscando formas de entender mejor los patrones de criminalidad a lo largo del país. Para ello, han decidido analizar el dataset USArrests, que contiene estadísticas sobre crímenes en diferentes estados para el año 1973. El objetivo es identificar grupos de estados con perfiles de criminalidad similares, lo que podría ayudar en la formulación de políticas de seguridad pública y en la asignación de recursos.
datos <- USArrests
head(datos)
## Murder Assault UrbanPop Rape
## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
Importante
#Normalizar
datos.z = scale(datos)
head(datos.z)
## Murder Assault UrbanPop Rape
## Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
## Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
## Arizona 0.07163341 1.4788032 0.9989801 1.042878388
## Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
## California 0.27826823 1.2628144 1.7589234 2.067820292
## Colorado 0.02571456 0.3988593 0.8608085 1.864967207
Matriz de distancia
md.e<-dist(datos.z, method="euclidean", diag=T)
##md.e
Revisión de distancias cortas, implica primeros juntes de las unidades observacionales como un cluster.
Dendograma
clust.h<-hclust(md.e,method="ward.D2")
plot(clust.h, xlab="", cex=1.2)
Piden 4 clusters.
plot(clust.h, xlab="", cex=1.2)
rect.hclust(clust.h, k = 4, border = "blue")
Identificando el cluster por cada ciudad
res.hc=cutree(clust.h, k=4)
table(res.hc)
## res.hc
## 1 2 3 4
## 7 12 19 12
Cantidad de ciudades por cada cluster (table).
Reagrupando para visualizar los cluster en la BD original
datos_cluster=cbind(datos,res.hc)
head(datos_cluster)
## Murder Assault UrbanPop Rape res.hc
## Alabama 13.2 236 58 21.2 1
## Alaska 10.0 263 48 44.5 2
## Arizona 8.1 294 80 31.0 2
## Arkansas 8.8 190 50 19.5 3
## California 9.0 276 91 40.6 2
## Colorado 7.9 204 78 38.7 2
Resumen de cluster
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
cuadro_resumen= datos_cluster %>%
group_by(res.hc) %>%
summarise(
Murder=mean(Murder),
Assault=mean(Assault),
UrbanPop=mean(UrbanPop),
Rape=mean(Rape),
)
cuadro_resumen
## # A tibble: 4 × 5
## res.hc Murder Assault UrbanPop Rape
## <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 14.7 251. 54.3 21.7
## 2 2 11.0 264 76.5 33.6
## 3 3 6.21 142. 71.3 19.2
## 4 4 3.09 76 52.1 11.8