El Clustering es una tarea que consiste en agrupar un conjunto de objetos (no etiquetados) en subconjuntos de objetos llamados Clusters. Cada Cluster está formado por una colección de objetos que son similares (o se consideran similares) entre sí, pero que son distintos respecto a los objetos de otros Clusters. (Montoya, 2016)
En esta ocación tomaremos la data ‘clientes’ como caso de estudio donde cuenta con las siguientes variables:
Id_cliente : es el numero de orden del cliente.
edad : la cantidad de años del cliente.
educación : en que nivel de educación quedó primaria(1), secundaria(2) o superior(3)
años_empleo: la cantidad de años que estuvo empleado.
Ingreso : cuanto de dinero inició su tarjeta de crédito.
Tarjeta_credito: cantidad de dinero que se tiene en la tarjeta de credito(en miles).
otra_tarjeta: cantidad de dinero que se tiene en otras tarjetas (en miles).
Direccion : el domicilio del cliente.
Ratio.ingreso.deuda : el promedio entre la deuda y sus ingresos.
Después de haber explicado los datos se realizará un pequeño análisis utilizando los algoritmos de PAM, CLARA, DIANA, FANNY, AGNES, SOM.Para dicho análisis solo se tomará 7 variables de la data.
Comenzaremos con la carga y limpieza de datos:
##CARGA DE DATA Y SU VISUALIZACIÓN
cliente<-read.csv("https://raw.githubusercontent.com/VictorGuevaraP/Mineria-de-datos-2019-2/master/clientes.csv", sep = ";")
##MUESTRA LA ESTRUCTURA
str(cliente)
## 'data.frame': 850 obs. of 9 variables:
## $ ID_cliente : int 1 2 3 4 5 6 7 8 9 10 ...
## $ edad : int 41 47 33 29 47 40 38 42 26 47 ...
## $ educacion : int 2 1 2 2 1 1 2 3 1 3 ...
## $ años_empleo : int 6 26 10 4 31 23 4 0 5 23 ...
## $ Ingreso : int 19 100 57 19 253 81 56 64 18 115 ...
## $ Tarjeta_credito : num 0.124 4.582 6.111 0.681 9.308 ...
## $ otra_tarjeta : num 1.073 8.218 5.802 0.516 8.908 ...
## $ Direccion : Factor w/ 32 levels "NBA000","NBA001",..: 2 22 14 10 9 17 14 10 7 12 ...
## $ Ratio.ingreso.deuda: num 6.3 12.8 20.9 6.3 7.2 10.9 1.6 6.6 15.5 4 ...
Se puede apreciar que la data cuenta con 850 datos y 9 variables. Tambien se visc ualiza el tipo de dato de cada uno.
##MUESTRA EL RESUMEN DE LA DATA
summary(cliente)
## ID_cliente edad educacion años_empleo
## Min. : 1.0 Min. :20.00 Min. :1.000 Min. : 0.000
## 1st Qu.:213.2 1st Qu.:29.00 1st Qu.:1.000 1st Qu.: 3.000
## Median :425.5 Median :34.00 Median :1.000 Median : 7.000
## Mean :425.5 Mean :35.03 Mean :1.711 Mean : 8.566
## 3rd Qu.:637.8 3rd Qu.:41.00 3rd Qu.:2.000 3rd Qu.:13.000
## Max. :850.0 Max. :56.00 Max. :5.000 Max. :33.000
##
## Ingreso Tarjeta_credito otra_tarjeta Direccion
## Min. : 13.00 Min. : 0.0120 Min. : 0.046 NBA001 : 71
## 1st Qu.: 24.00 1st Qu.: 0.3825 1st Qu.: 1.046 NBA002 : 71
## Median : 35.00 Median : 0.8850 Median : 2.003 NBA000 : 60
## Mean : 46.68 Mean : 1.5768 Mean : 3.079 NBA004 : 58
## 3rd Qu.: 55.75 3rd Qu.: 1.8985 3rd Qu.: 3.903 NBA003 : 55
## Max. :446.00 Max. :20.5610 Max. :35.197 NBA006 : 50
## (Other):485
## Ratio.ingreso.deuda
## Min. : 0.10
## 1st Qu.: 5.10
## Median : 8.70
## Mean :10.17
## 3rd Qu.:13.80
## Max. :41.30
##
El código ‘summary’ muestra un resumen de toda la data y en esto me muestra Min(el valor minimo),1st Qu.(primer cuartil), Median(valor mediana), Mean(valor media), 3rd(tercer cuartil), Max.(el valor máximo que puede tomar).
##LIMPIEZA DE DATA
#Fijarse si existe missing
library(Amelia)
## Loading required package: Rcpp
## ##
## ## Amelia II: Multiple Imputation
## ## (Version 1.7.5, built: 2018-05-07)
## ## Copyright (C) 2005-2019 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
missmap(cliente)
missing(cliente)
## [1] FALSE
Para empezar en la limpieza de la data se utilizará la librería ‘Amelia’.Luego usamos el código missmap para que muestre un cuadro para ver los valores perdidos (missing), pero en nuestro caso no muestra ningun valor perdido pero para asegurarnos utilizamos el código ‘missing’ y pues reafirma lo que se dijo anteriormente (que no hay valores perdidos) ya que con ‘missing’ muestra FALSE.
#Crear nueva variable
cliente1<-cliente[ ,c(2:7,9)]
# Análisis de datos atípicos
par(mfrow=c(2,3))
boxplot(cliente1$educacion)
boxplot(cliente1$años_empleo)
boxplot(cliente1$Ingreso)
boxplot(cliente1$Tarjeta_credito)
boxplot(cliente1$otra_tarjeta)
boxplot(cliente1$Ratio.ingreso.deuda)
Despues de analizar los valores perdidos se crea una nueva variable y dentro de esa variable se pondrá 7 columnas de la data principal pues solo será necesario esa cantidad para el análisis.
#Eliminando datos atípicos
par(mfrow=c(2,3))
cliente1<- cliente1[-which(cliente1$educacion %in% boxplot(cliente1$educacion, plot = FALSE)$out),]
cliente1<- cliente1[-which(cliente1$años_empleo %in% boxplot(cliente1$años_empleo, plot = FALSE)$out),]
cliente1<- cliente1[-which(cliente1$Ingreso %in% boxplot(cliente1$Ingreso, plot = FALSE)$out),]
cliente1<- cliente1[-which(cliente1$Tarjeta_credito %in% boxplot(cliente1$Tarjeta_credito, plot = FALSE)$out),]
cliente1<- cliente1[-which(cliente1$otra_tarjeta %in% boxplot(cliente1$otra_tarjeta, plot = FALSE)$out),]
cliente1<- cliente1[-which(cliente1$Ratio.ingreso.deuda %in% boxplot(cliente1$Ratio.ingreso.deuda, plot = FALSE)$out),]
#Reduccion de datos atípicos
par(mfrow=c(2,3))
boxplot(cliente1$educacion)
boxplot(cliente1$años_empleo)
boxplot(cliente1$Ingreso)
boxplot(cliente1$Tarjeta_credito)
boxplot(cliente1$otra_tarjeta)
boxplot(cliente1$Ratio.ingreso.deuda)
En la gráfica anterior se mostró muchos valores atípicos, y eso no es bueno para el análisis.Por ello aplicamos codigos de reducción de outliers, y si queremos visualizar los datos volvemos a utilizar el código ‘boxplot’ Nos damos cuenta que se ha reducido la cantidad de valores atípicos.
##APLICAMOS EL ALGORITMO PAM
cliente1_scale<- scale(cliente1)
library(cluster)
library(factoextra)
## Loading required package: ggplot2
## Welcome! Related Books: `Practical Guide To Cluster Analysis in R` at https://goo.gl/13EFCZ
Para empezar el algoritmo de PAM se necesita que los datos estén en una misma unidad por ello se aplica el código ‘scale’.
#Identificar el número óptimo de clusters,como existen Outliers se utiliza manhattan
fviz_nbclust(x = cliente1_scale,FUNcluster = pam, method="wss" , k.max = 15,
diss = dist(cliente1_scale,method = "manhattan"))
Luego aplicamos el metodo del codo para ver cuantos clusters se formarán, y por ello ponemos que la cantidad maxima de clusters sea 15. Ademas se puede ver que se utilizó el método de ’Manhattan’porque apesar de que se redujo los outliers aún sigue existiendo valores atípicos .
#Específica la cantidad de grupos
set.seed(111)
pam_cluster <- pam(x = cliente1_scale,k = 3,metric = "manhattan")
pam_cluster
## Medoids:
## ID edad educacion años_empleo Ingreso Tarjeta_credito
## 226 165 -0.3534715 -0.7380080 -0.03610448 -0.7075797 -0.86227702
## 105 76 -0.8797466 0.7403964 -0.57679821 -0.7661113 0.29598326
## 678 491 0.9622162 -0.7380080 1.22551422 0.9898362 0.08074325
## otra_tarjeta Ratio.ingreso.deuda
## 226 -0.7391985 -0.7115077
## 105 -0.0281568 1.0358696
## 678 0.7884544 -0.2062420
## Clustering vector:
## 1 4 7 8 9 11 12 13 14 15 16 17 19 20 21 22 24 26
## 1 2 1 3 2 3 1 1 3 2 1 1 3 3 1 2 3 3
## 27 28 29 30 32 33 34 35 36 37 38 39 41 45 47 48 49 50
## 1 3 3 3 3 2 2 3 2 1 2 1 1 2 2 1 1 3
## 51 54 56 57 58 59 60 61 62 65 66 67 68 69 70 71 73 74
## 3 3 2 1 2 3 1 3 3 1 1 3 2 2 2 1 3 2
## 75 76 77 78 80 84 86 88 89 91 92 93 94 95 96 97 98 99
## 1 2 1 2 3 3 1 2 2 3 1 1 2 1 1 1 1 2
## 100 103 104 105 107 108 109 110 111 113 114 115 116 117 118 120 121 122
## 1 3 3 2 1 2 1 3 3 1 2 1 1 1 3 1 2 2
## 124 125 126 127 128 129 130 131 132 133 134 135 137 138 139 140 141 142
## 3 3 3 1 1 2 1 1 3 2 1 2 3 2 3 2 3 2
## 143 144 146 147 148 149 150 151 153 154 155 159 160 161 162 163 164 165
## 2 1 2 3 2 2 1 1 2 1 3 2 2 1 3 3 3 2
## 167 168 169 172 173 174 175 177 178 179 180 182 183 187 188 189 193 194
## 1 1 1 1 1 2 1 3 1 2 3 3 1 1 1 3 3 1
## 195 196 197 200 202 203 204 205 207 209 211 212 213 215 216 219 220 221
## 3 2 1 1 1 2 1 1 1 3 1 1 3 1 2 3 3 2
## 223 225 226 228 230 231 232 234 236 237 238 240 241 242 243 244 245 247
## 1 1 1 1 3 1 3 2 1 3 2 1 1 1 2 1 1 3
## 251 252 253 255 257 258 259 260 261 263 264 266 267 269 270 271 272 273
## 1 2 1 3 3 1 1 1 1 3 1 3 3 1 1 2 1 1
## 274 275 276 277 279 280 281 284 286 288 291 292 293 295 296 297 298 301
## 3 2 1 2 1 2 1 1 2 1 1 3 1 1 2 2 1 3
## 302 303 304 305 306 309 310 311 312 313 314 315 316 317 318 319 320 322
## 3 1 1 2 3 2 3 3 1 1 1 3 1 1 2 3 1 1
## 324 325 326 327 328 330 331 333 334 336 337 339 340 341 342 343 344 346
## 1 1 3 2 1 3 3 2 2 3 1 2 3 2 3 1 2 1
## 347 348 349 350 353 354 355 356 359 360 362 363 365 366 367 370 371 372
## 2 2 1 1 1 1 1 1 1 2 2 1 3 2 3 3 1 2
## 373 374 376 378 379 380 381 382 383 384 386 387 388 389 390 391 393 395
## 3 1 2 3 1 2 2 1 1 1 3 3 2 1 1 2 1 2
## 396 397 399 400 401 402 403 404 405 407 410 411 412 415 416 418 420 421
## 2 2 1 1 2 1 2 2 2 2 1 1 3 2 3 2 1 3
## 423 424 426 427 428 429 430 432 433 434 436 437 438 440 441 442 443 445
## 2 2 3 1 3 2 1 3 2 2 1 1 1 3 3 3 1 3
## 446 447 448 449 450 452 453 454 456 458 459 461 464 465 466 467 468 469
## 2 1 3 3 1 2 2 1 2 2 1 1 2 1 2 3 1 3
## 472 473 474 475 476 477 478 479 481 483 484 485 486 489 490 491 493 495
## 2 3 3 3 2 3 1 1 2 3 2 2 1 2 1 2 3 3
## 496 497 499 500 501 502 505 506 507 509 510 511 513 515 516 517 518 519
## 2 2 3 1 2 2 1 2 1 3 2 2 2 3 3 2 2 1
## 522 524 525 526 527 528 530 531 535 536 537 538 539 540 542 543 544 545
## 2 2 3 2 1 3 2 1 1 3 1 1 1 3 1 1 3 3
## 546 547 548 549 550 555 556 558 559 560 561 562 563 565 566 567 568 570
## 3 3 2 3 1 3 2 1 2 1 3 3 2 1 3 3 1 1
## 571 573 574 575 577 578 579 580 583 584 585 587 588 589 591 593 596 597
## 1 3 1 3 2 1 2 3 3 3 3 3 1 1 2 3 1 1
## 598 599 600 601 602 603 605 609 610 611 612 613 614 616 617 618 619 620
## 1 3 3 1 3 2 2 2 2 1 1 1 1 2 3 1 3 1
## 622 623 625 626 627 628 629 632 633 634 636 637 639 640 641 642 644 645
## 2 2 1 3 1 1 3 3 3 3 1 3 1 3 1 1 1 3
## 648 649 650 651 652 655 656 657 660 661 662 663 665 666 667 668 669 670
## 2 1 1 1 2 1 1 1 1 1 1 3 3 1 3 1 1 1
## 672 674 675 677 678 679 680 681 682 683 684 685 687 688 689 690 691 692
## 3 1 2 1 3 2 3 3 1 2 3 2 2 3 1 1 1 1
## 693 695 696 698 699 700 702 703 704 705 707 708 710 715 717 719 721 722
## 2 1 1 3 2 1 3 2 1 1 2 1 2 1 1 3 2 1
## 723 724 727 728 729 730 731 733 734 736 737 738 739 740 742 743 746 749
## 1 3 1 2 1 2 3 2 1 3 2 2 2 3 3 1 3 2
## 750 751 752 753 754 755 756 757 758 759 763 764 765 767 768 769 770 771
## 2 1 1 1 2 2 1 2 1 3 1 3 2 1 3 1 3 1
## 772 773 774 776 778 779 781 782 783 784 786 787 788 789 790 791 795 796
## 1 2 1 3 2 3 1 1 1 3 1 3 1 2 3 3 1 1
## 798 799 800 801 803 804 805 806 807 808 811 812 813 814 815 816 817 818
## 1 2 1 1 1 2 3 1 3 2 1 2 1 3 1 1 1 1
## 819 820 821 823 825 828 829 830 832 833 835 836 837 838 839 840 841 842
## 2 3 2 1 2 2 1 1 2 2 2 2 2 2 1 1 1 3
## 843 844 845 846 847 849 850
## 1 1 1 1 2 1 3
## Objective function:
## build swap
## 4.376560 4.259651
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call" "data"
Para que nos salga los mismos resultados ponemos una semilla de ‘111’, luego especificamos la cantidad de clusters con ‘pam’ y se especifica que ‘metric’ (metrica) sea ‘manhattan’.(en nuestro caso la cantidad óptima de cluster es 3)
#Diagrama de dispersión
fviz_cluster(object = pam_cluster, data = cliente1_scale,geom = "point",
ellipse.type = "t",repel = TRUE)+
theme_bw() +
labs(title = "RESULTADOS ALGORITMO PAM")
Para la mejor visualización del algoritmo PAM se aplicó un diagrama de dispersión donde mustra los 3 grupos(clusters).
##APLICAMOS EL ALGORITMO CLARA
# Diagrama de dispersión
clara_cluster<-clara(cliente1,2)
fviz_cluster(clara_cluster,stand = T,geom = "point",pointsize = 1)+
theme_bw() +
labs(title = "RESULTADOS ALGORITMO CLARA")
Para aplicar CLARA solamente aplicamos el codigo que se mostró porque anteriormente ya hicimos el análisis respectivo. Aparte de lo mencionado CLARA es similar PAM, pues CLARA se define el punto centro de los clusters mientras que en PAM lo hace aleatorio.
##APLICAMOS EL ALGORITMO DIANA
matriz_diana <- diana(cliente1_scale)
#Gráfica de DIANA
pltree(matriz_diana, cex = 0.6, hang = -1, main = "Dendrograma de DIANA")
Para aplicar este algoritmo se aplica la matriz DIANA (ahi se utiliza la varible cliente1_scale). Despues se grafica el algoritmo con el código ‘pltree’. Aparte de ello, tambien cabe mencionar que el dendrograma se nota es una forma de graficar el algoritmo, pero tambien se puede visualizar mejor con un diagrama de dispersión.
#Diagrama de dispersiÓn
cluster <- cutree(matriz_diana, k = 3)
library(factoextra)
fviz_cluster(list(data = cliente1_scale, cluster = cluster)) +
labs(title = "RESULTADOS ALGORITMO DIANA")
Como se mencionó anteriormente el diagrama de dispersión es para que se visualice mejor el agrupamiento de datos.
##ALGORITMO AGNES
#Vector de métodos para comparar
m <- c( "average", "single", "complete", "ward")
names(m) <- c( "average", "single", "complete", "ward")
Aqui podemos ver la asiganacion de vectores a una variable, en este caso la llamaremos “m”
#FUNCION PARA CALCULAR EL COEFICIENTE
library(purrr)
ac <- function(x) {
agnes(cliente1_scale, method = x)$ac
}
map_dbl(m, ac)
## average single complete ward
## 0.8176646 0.6708739 0.8970442 0.9778713
En este caso se utilizó la libreria “purrr” la cual tiene un conjunto de funciones que nos permite manipular vectores(vectores atomicos,listas y data frames)
##APLICAMOS EL ALGORITMO AGNES
#Se aplicó ward por que es el mejor , el valor se aproxima a 1
matriz_agnes <- agnes(cliente1_scale, method = "ward")
pltree(matriz_agnes, cex = 0.6, hang = -1, main = "Dendrograma de agnes")
En esta parte del codigo aplicamos la función agnes que nos permite calcular el agrupamiento jerárquico aglomerativo del conjunto de datos, ademas usamos el metodo “ward” que se encarga de hacer un procedimeinto general donde el criterio para la eleccion del par de clusters a mezclar se base en el valor óptimo de una función objetivo
##ALGORITMO FANNY
#Usamos el método de slope (método del codo)
#Se crea una sentencia de iteración
wss=as.numeric()
for(k in 2:10){
agrupa = kmeans(cliente1, k)
wss[k-1]=agrupa$tot.withinss
}
Se usa una sentencia de iteración para poder encontrar el valor óptimo de clusters mediante el uso del método del codo
#Se grafica y analiza la cantidad de cluster óptimo
plot(2:10, wss, type = "b")
#Se puede apreciar el cluster óptimo sería de 4
Dentro de esta gráfica podemos ver que según el método del codo, la cantidad óptima de clusters es 4
#Método Fanny
library(cluster)
library(rgl)
library(ggplot2)
cliente1_agrupa=fanny(cliente1, diss = FALSE, 3, metric = "euclidean", stand = FALSE)
## Warning in fanny(cliente1, diss = FALSE, 3, metric = "euclidean", stand =
## FALSE): FANNY algorithm has not converged in 'maxit' = 500 iterations
cliente1_agrupa
## Fuzzy Clustering object of class 'fanny' :
## m.ship.expon. 2
## objective 2463.082
## tolerance 1e-15
## iterations -1
## converged 0
## maxit 500
## n 619
## Membership coefficients (in %, rounded):
## [,1] [,2] [,3]
## 1 42 17 42
## 4 44 11 44
## 7 22 57 22
## 8 23 54 23
## 9 43 14 43
## 11 26 48 26
## 12 32 37 32
## 13 43 14 43
## 14 37 26 37
## 15 44 11 44
## 16 43 14 43
## 17 43 14 43
## 19 20 59 20
## 20 37 26 37
## 21 44 11 44
## 22 28 45 28
## 24 24 53 24
## 26 21 59 21
## 27 43 14 43
## 28 31 38 31
## 29 19 63 19
## 30 25 50 25
## 32 21 58 21
## 33 34 32 34
## 34 41 17 41
## 35 27 45 27
## 36 37 26 37
## 37 36 27 36
## 38 42 15 42
## 39 43 15 43
## 41 42 16 42
## 45 37 26 37
## 47 41 17 41
## 48 44 12 44
## 49 44 12 44
## 50 21 57 21
## 51 25 50 25
## 54 24 52 24
## 56 44 12 44
## 57 44 12 44
## 58 44 12 44
## 59 19 61 19
## 60 32 36 32
## 61 20 59 20
## 62 35 30 35
## 65 43 13 43
## 66 28 44 28
## 67 24 52 24
## 68 44 12 44
## 69 42 15 42
## 70 42 16 42
## 71 22 57 22
## 73 28 45 28
## 74 33 33 33
## 75 40 19 40
## 76 44 13 44
## 77 25 50 25
## 78 44 12 44
## 80 21 59 21
## 84 31 38 31
## 86 43 14 43
## 88 44 13 44
## 89 42 15 42
## 91 23 54 23
## 92 40 21 40
## 93 44 13 44
## 94 42 15 42
## 95 43 15 43
## 96 24 52 24
## 97 43 13 43
## 98 36 27 36
## 99 43 14 43
## 100 43 15 43
## 103 20 60 20
## 104 24 52 24
## 105 44 12 44
## 107 38 24 38
## 108 42 15 42
## 109 20 60 20
## 110 24 51 24
## 111 18 64 18
## 113 34 32 34
## 114 42 16 42
## 115 45 10 45
## 116 39 22 39
## 117 44 12 44
## 118 24 53 24
## 120 44 11 44
## 121 45 11 45
## 122 38 24 38
## 124 19 63 19
## 125 29 41 29
## 126 22 55 22
## 127 27 45 27
## 128 44 12 44
## 129 42 16 42
## 130 42 15 42
## 131 34 33 34
## 132 19 62 19
## 133 45 11 45
## 134 44 11 44
## 135 43 13 43
## 137 26 48 26
## 138 44 13 44
## 139 37 27 37
## 140 36 27 36
## 141 30 40 30
## 142 43 13 43
## 143 34 31 34
## 144 44 11 44
## 146 40 20 40
## 147 19 61 19
## 148 29 42 29
## 149 34 32 34
## 150 44 13 44
## 151 34 33 34
## 153 41 18 41
## 154 39 22 39
## 155 20 59 20
## 159 43 14 43
## 160 22 55 22
## 161 43 14 43
## 162 32 36 32
## 163 25 50 25
## 164 24 51 24
## 165 45 11 45
## 167 22 55 22
## 168 42 17 42
## 169 43 15 43
## 172 44 12 44
## 173 42 15 42
## 174 31 38 31
## 175 42 16 42
## 177 18 65 18
## 178 44 12 44
## 179 39 23 39
## 180 26 47 26
## 182 31 39 31
## 183 44 13 44
## 187 39 22 39
## 188 42 17 42
## 189 29 43 29
## 193 23 53 23
## 194 40 21 40
## 195 22 56 22
## 196 43 15 43
## 197 42 16 42
## 200 40 19 40
## 202 42 15 42
## 203 42 15 42
## 204 42 16 42
## 205 38 23 38
## 207 43 15 43
## 209 27 46 27
## 211 44 13 44
## 212 22 57 22
## 213 18 64 18
## 215 41 17 41
## 216 42 16 42
## 219 25 50 25
## 220 21 58 21
## 221 42 15 42
## 223 43 15 43
## 225 45 10 45
## 226 44 11 44
## 228 43 15 43
## 230 22 56 22
## 231 36 28 36
## 232 40 21 40
## 234 42 15 42
## 236 43 14 43
## 237 28 43 28
## 238 42 16 42
## 240 40 21 40
## 241 44 12 44
## 242 30 39 30
## 243 42 15 42
## 244 40 19 40
## 245 41 19 41
## 247 21 58 21
## 251 43 14 43
## 252 38 25 38
## 253 39 22 39
## 255 25 50 25
## 257 29 41 29
## 258 43 13 43
## 259 42 16 42
## 260 43 15 43
## 261 42 15 42
## 263 22 56 22
## 264 26 47 26
## 266 31 38 31
## 267 32 36 32
## 269 41 17 41
## 270 31 38 31
## 271 44 13 44
## 272 43 13 43
## 273 31 39 31
## 274 22 57 22
## 275 42 16 42
## 276 43 14 43
## 277 41 17 41
## 279 44 12 44
## 280 44 12 44
## 281 43 14 43
## 284 43 15 43
## 286 44 12 44
## 288 41 17 41
## 291 41 18 41
## 292 27 47 27
## 293 43 15 43
## 295 40 20 40
## 296 45 11 45
## 297 44 12 44
## 298 43 14 43
## 301 22 56 22
## 302 19 62 19
## 303 43 14 43
## 304 45 11 45
## 305 43 13 43
## 306 20 60 20
## 309 34 33 34
## 310 30 40 30
## 311 21 58 21
## 312 44 13 44
## 313 41 18 41
## 314 43 15 43
## 315 24 52 24
## 316 43 14 43
## 317 44 13 44
## 318 44 13 44
## 319 29 42 29
## 320 43 14 43
## 322 40 20 40
## 324 44 13 44
## 325 42 16 42
## 326 18 64 18
## 327 42 16 42
## 328 44 12 44
## 330 23 54 23
## 331 19 62 19
## 333 43 14 43
## 334 37 26 37
## 336 37 27 37
## 337 42 16 42
## 339 40 20 40
## 340 27 46 27
## 341 31 38 31
## 342 21 59 21
## 343 39 22 39
## 344 39 23 39
## 346 29 42 29
## 347 43 14 43
## 348 25 50 25
## 349 42 15 42
## 350 41 18 41
## 353 27 45 27
## 354 41 18 41
## 355 41 18 41
## 356 36 28 36
## 359 45 11 45
## 360 42 17 42
## 362 41 19 41
## 363 44 13 44
## 365 24 53 24
## 366 43 14 43
## 367 21 59 21
## 370 19 62 19
## 371 44 12 44
## 372 41 18 41
## 373 23 54 23
## 374 36 28 36
## 376 41 18 41
## 378 27 46 27
## 379 44 13 44
## 380 43 15 43
## 381 40 21 40
## 382 43 14 43
## 383 42 17 42
## 384 38 24 38
## 386 38 23 38
## 387 24 52 24
## 388 43 15 43
## 389 38 24 38
## 390 43 14 43
## 391 43 15 43
## 393 30 40 30
## 395 44 12 44
## 396 27 46 27
## 397 44 11 44
## 399 34 32 34
## 400 44 11 44
## 401 42 17 42
## 402 43 14 43
## 403 43 14 43
## 404 43 13 43
## 405 44 12 44
## 407 36 29 36
## 410 38 23 38
## 411 32 35 32
## 412 18 64 18
## 415 39 22 39
## 416 33 34 33
## 418 42 15 42
## 420 43 13 43
## 421 20 59 20
## 423 43 14 43
## 424 42 16 42
## 426 33 35 33
## 427 39 21 39
## 428 35 29 35
## 429 35 31 35
## 430 44 12 44
## 432 36 27 36
## 433 43 14 43
## 434 43 15 43
## 436 44 11 44
## 437 42 16 42
## 438 44 12 44
## 440 24 53 24
## 441 25 50 25
## 442 32 35 32
## 443 44 12 44
## 445 19 62 19
## 446 33 34 33
## 447 22 57 22
## 448 21 58 21
## 449 26 48 26
## 450 28 44 28
## 452 42 16 42
## 453 42 16 42
## 454 44 12 44
## 456 42 16 42
## 458 44 12 44
## 459 45 10 45
## 461 32 36 32
## 464 41 18 41
## 465 38 23 38
## 466 39 21 39
## 467 25 51 25
## 468 45 10 45
## 469 20 59 20
## 472 35 30 35
## 473 23 54 23
## 474 27 46 27
## 475 22 56 22
## 476 43 14 43
## 477 21 59 21
## 478 44 12 44
## 479 41 19 41
## 481 26 48 26
## 483 24 52 24
## 484 41 17 41
## 485 42 16 42
## 486 41 17 41
## 489 41 17 41
## 490 43 14 43
## 491 42 17 42
## 493 36 28 36
## 495 39 21 39
## 496 45 11 45
## 497 43 15 43
## 499 21 57 21
## 500 43 13 43
## 501 38 24 38
## 502 43 15 43
## 505 45 11 45
## 506 30 39 30
## 507 36 27 36
## 509 21 58 21
## 510 40 20 40
## 511 44 11 44
## 513 40 21 40
## 515 20 61 20
## 516 36 27 36
## 517 44 13 44
## 518 37 27 37
## 519 43 14 43
## 522 39 21 39
## 524 43 13 43
## 525 30 39 30
## 526 44 13 44
## 527 42 15 42
## 528 21 59 21
## 530 42 16 42
## 531 45 10 45
## 535 42 15 42
## 536 28 45 28
## 537 45 11 45
## 538 43 15 43
## 539 43 14 43
## 540 27 46 27
## 542 33 34 33
## 543 35 31 35
## 544 30 40 30
## 545 23 53 23
## 546 26 48 26
## 547 20 59 20
## 548 43 13 43
## 549 27 45 27
## 550 43 14 43
## 555 31 38 31
## 556 38 23 38
## 558 39 21 39
## 559 42 16 42
## 560 44 12 44
## 561 23 54 23
## 562 22 57 22
## 563 43 15 43
## 565 44 13 44
## 566 21 57 21
## 567 24 52 24
## 568 44 12 44
## 570 44 12 44
## 571 32 36 32
## 573 39 22 39
## 574 43 13 43
## 575 22 56 22
## 577 43 15 43
## 578 45 11 45
## 579 44 13 44
## 580 25 50 25
## 583 32 36 32
## 584 22 56 22
## 585 25 51 25
## 587 28 43 28
## 588 39 22 39
## 589 44 12 44
## 591 42 15 42
## 593 26 47 26
## 596 45 10 45
## 597 43 14 43
## 598 42 16 42
## 599 25 51 25
## 600 32 37 32
## 601 36 28 36
## 602 19 61 19
## 603 43 15 43
## 605 44 11 44
## 609 43 14 43
## 610 36 28 36
## 611 44 12 44
## 612 44 13 44
## 613 43 13 43
## 614 37 26 37
## 616 31 38 31
## 617 31 38 31
## 618 42 15 42
## 619 30 40 30
## 620 39 22 39
## 622 44 12 44
## 623 43 14 43
## 625 44 13 44
## 626 38 24 38
## 627 44 13 44
## 628 42 15 42
## 629 21 59 21
## 632 42 16 42
## 633 22 56 22
## 634 20 60 20
## 636 44 11 44
## 637 40 21 40
## 639 40 20 40
## 640 25 51 25
## 641 43 14 43
## 642 43 13 43
## 644 42 15 42
## 645 24 52 24
## 648 44 12 44
## 649 40 19 40
## 650 39 21 39
## 651 43 14 43
## 652 44 12 44
## 655 44 12 44
## 656 41 17 41
## 657 41 18 41
## 660 30 40 30
## 661 45 11 45
## 662 23 54 23
## 663 23 53 23
## 665 41 18 41
## 666 20 59 20
## 667 24 51 24
## 668 43 14 43
## 669 43 15 42
## 670 40 21 40
## 672 25 50 25
## 674 43 13 43
## 675 43 13 43
## 677 31 37 31
## 678 18 64 18
## 679 40 20 40
## 680 39 22 39
## 681 26 47 26
## 682 44 12 44
## 683 30 39 30
## 684 27 46 27
## 685 43 15 43
## 687 42 17 42
## 688 22 57 22
## 689 39 23 39
## 690 45 11 45
## 691 42 15 42
## 692 35 30 35
## 693 42 17 42
## 695 44 11 44
## 696 28 45 28
## 698 40 20 40
## 699 44 12 44
## 700 43 14 43
## 702 34 33 34
## 703 41 18 41
## 704 43 15 43
## 705 43 14 43
## 707 42 15 42
## 708 42 16 42
## 710 40 21 40
## 715 30 40 30
## 717 38 23 38
## 719 21 57 21
## 721 44 12 44
## 722 41 18 41
## 723 41 18 41
## 724 37 27 37
## 727 30 40 30
## 728 41 18 41
## 729 44 13 44
## 730 32 35 32
## 731 23 54 23
## 733 30 40 30
## 734 27 46 27
## 736 20 61 20
## 737 40 20 40
## 738 22 57 22
## 739 35 30 35
## 740 22 56 22
## 742 24 52 24
## 743 44 13 44
## 746 23 53 23
## 749 41 17 41
## 750 35 29 35
## 751 42 15 42
## 752 44 11 44
## 753 37 26 37
## 754 42 17 42
## 755 42 15 42
## 756 39 22 39
## 757 45 11 45
## 758 43 13 43
## 759 24 52 24
## 763 43 13 43
## 764 21 57 21
## 765 43 14 43
## 767 20 59 20
## 768 31 38 31
## 769 39 22 39
## 770 23 54 23
## 771 43 14 43
## 772 43 14 43
## 773 44 12 44
## 774 32 36 32
## 776 19 61 19
## 778 40 21 40
## 779 28 45 28
## 781 27 46 27
## 782 27 45 27
## 783 32 36 32
## 784 31 37 31
## 786 43 15 43
## 787 25 50 25
## 788 40 21 40
## 789 44 12 44
## 790 34 32 34
## 791 18 63 18
## 795 43 14 43
## 796 42 15 42
## 798 39 23 39
## 799 38 23 38
## 800 45 11 45
## 801 44 12 44
## 803 43 15 43
## 804 43 15 43
## 805 34 31 34
## 806 41 17 41
## 807 19 62 19
## 808 26 48 26
## 811 43 15 43
## 812 42 15 42
## 813 43 14 43
## 814 23 54 23
## 815 44 11 44
## 816 36 28 36
## 817 43 14 43
## 818 44 12 44
## 819 39 23 39
## 820 32 36 32
## 821 43 14 43
## 823 40 20 40
## 825 40 21 40
## 828 38 25 38
## 829 40 20 40
## 830 37 26 37
## 832 43 13 43
## 833 29 42 29
## 835 39 22 39
## 836 35 30 35
## 837 44 13 44
## 838 43 15 43
## 839 43 13 43
## 840 45 11 45
## 841 41 18 41
## 842 22 56 22
## 843 35 30 35
## 844 27 47 27
## 845 27 46 27
## 846 45 11 45
## 847 40 19 40
## 849 41 17 41
## 850 23 55 23
## Fuzzyness coefficients:
## dunn_coeff normalized
## 0.38046886 0.07070329
## Closest hard clustering:
## 1 4 7 8 9 11 12 13 14 15 16 17 19 20 21 22 24 26
## 1 1 2 2 1 2 2 1 3 1 1 1 2 3 1 2 2 2
## 27 28 29 30 32 33 34 35 36 37 38 39 41 45 47 48 49 50
## 1 2 2 2 2 3 3 2 3 3 1 1 1 3 1 1 1 2
## 51 54 56 57 58 59 60 61 62 65 66 67 68 69 70 71 73 74
## 2 2 1 1 1 2 2 2 3 1 2 2 1 1 1 2 2 3
## 75 76 77 78 80 84 86 88 89 91 92 93 94 95 96 97 98 99
## 3 1 2 1 2 2 1 1 3 2 3 1 1 3 2 3 3 1
## 100 103 104 105 107 108 109 110 111 113 114 115 116 117 118 120 121 122
## 1 2 2 1 3 1 2 2 2 3 1 1 3 1 2 1 1 3
## 124 125 126 127 128 129 130 131 132 133 134 135 137 138 139 140 141 142
## 2 2 2 2 1 1 1 3 2 1 1 1 2 1 3 3 2 1
## 143 144 146 147 148 149 150 151 153 154 155 159 160 161 162 163 164 165
## 3 1 1 2 2 3 1 3 3 3 2 1 2 1 2 2 2 1
## 167 168 169 172 173 174 175 177 178 179 180 182 183 187 188 189 193 194
## 2 3 1 1 3 2 3 2 1 3 2 2 1 3 3 2 2 3
## 195 196 197 200 202 203 204 205 207 209 211 212 213 215 216 219 220 221
## 2 3 1 3 1 1 1 3 3 2 1 2 2 3 1 2 2 1
## 223 225 226 228 230 231 232 234 236 237 238 240 241 242 243 244 245 247
## 3 1 1 3 2 3 3 1 1 2 1 3 1 2 1 3 3 2
## 251 252 253 255 257 258 259 260 261 263 264 266 267 269 270 271 272 273
## 3 3 3 2 2 1 1 1 1 2 2 2 2 3 2 1 1 2
## 274 275 276 277 279 280 281 284 286 288 291 292 293 295 296 297 298 301
## 2 3 1 1 1 1 1 1 1 1 3 2 1 3 1 1 3 2
## 302 303 304 305 306 309 310 311 312 313 314 315 316 317 318 319 320 322
## 2 1 1 1 2 3 2 2 1 3 1 2 1 3 1 2 1 3
## 324 325 326 327 328 330 331 333 334 336 337 339 340 341 342 343 344 346
## 1 1 2 1 1 2 2 1 3 3 1 3 2 2 2 3 3 2
## 347 348 349 350 353 354 355 356 359 360 362 363 365 366 367 370 371 372
## 1 2 1 3 2 3 3 3 1 1 1 1 2 1 2 2 1 3
## 373 374 376 378 379 380 381 382 383 384 386 387 388 389 390 391 393 395
## 2 3 1 2 1 1 3 1 1 3 3 2 1 3 1 1 2 1
## 396 397 399 400 401 402 403 404 405 407 410 411 412 415 416 418 420 421
## 2 1 3 1 1 1 1 1 1 3 3 2 2 3 2 1 1 2
## 423 424 426 427 428 429 430 432 433 434 436 437 438 440 441 442 443 445
## 1 3 2 3 3 3 1 3 1 1 1 3 1 2 2 2 3 2
## 446 447 448 449 450 452 453 454 456 458 459 461 464 465 466 467 468 469
## 2 2 2 2 2 3 1 1 3 3 1 2 3 3 3 2 1 2
## 472 473 474 475 476 477 478 479 481 483 484 485 486 489 490 491 493 495
## 3 2 2 2 1 2 3 3 2 2 1 3 3 1 1 1 3 3
## 496 497 499 500 501 502 505 506 507 509 510 511 513 515 516 517 518 519
## 1 1 2 1 3 1 1 2 3 2 1 1 3 2 3 1 3 1
## 522 524 525 526 527 528 530 531 535 536 537 538 539 540 542 543 544 545
## 3 1 2 1 3 2 1 1 3 2 1 3 1 2 2 3 2 2
## 546 547 548 549 550 555 556 558 559 560 561 562 563 565 566 567 568 570
## 2 2 1 2 1 2 3 1 1 1 2 2 1 1 2 2 1 1
## 571 573 574 575 577 578 579 580 583 584 585 587 588 589 591 593 596 597
## 2 3 1 2 1 1 1 2 2 2 2 2 3 1 3 2 1 1
## 598 599 600 601 602 603 605 609 610 611 612 613 614 616 617 618 619 620
## 1 2 2 3 2 1 1 1 3 1 1 1 3 2 2 3 2 3
## 622 623 625 626 627 628 629 632 633 634 636 637 639 640 641 642 644 645
## 1 1 1 3 1 1 2 3 2 2 1 3 3 2 1 1 1 2
## 648 649 650 651 652 655 656 657 660 661 662 663 665 666 667 668 669 670
## 1 3 3 1 1 1 1 3 2 1 2 2 3 2 2 1 1 3
## 672 674 675 677 678 679 680 681 682 683 684 685 687 688 689 690 691 692
## 2 1 1 2 2 3 3 2 1 2 2 1 1 2 3 1 1 3
## 693 695 696 698 699 700 702 703 704 705 707 708 710 715 717 719 721 722
## 3 1 2 3 1 1 3 3 1 1 1 1 3 2 3 2 1 3
## 723 724 727 728 729 730 731 733 734 736 737 738 739 740 742 743 746 749
## 3 3 2 3 1 2 2 2 2 2 3 2 3 2 2 1 2 1
## 750 751 752 753 754 755 756 757 758 759 763 764 765 767 768 769 770 771
## 3 1 1 3 1 1 3 1 1 2 1 2 1 2 2 3 2 1
## 772 773 774 776 778 779 781 782 783 784 786 787 788 789 790 791 795 796
## 1 1 2 2 3 2 2 2 2 2 1 2 3 3 3 2 1 3
## 798 799 800 801 803 804 805 806 807 808 811 812 813 814 815 816 817 818
## 3 3 1 1 1 1 3 1 2 2 3 1 1 2 1 3 3 1
## 819 820 821 823 825 828 829 830 832 833 835 836 837 838 839 840 841 842
## 3 2 1 3 3 3 3 3 1 2 3 3 1 1 1 1 3 2
## 843 844 845 846 847 849 850
## 3 2 2 1 3 3 2
##
## Available components:
## [1] "membership" "coeff" "memb.exp" "clustering" "k.crisp"
## [6] "objective" "convergence" "diss" "call" "silinfo"
## [11] "data"
Para la aplicación del algoritmo Fanny se necesitara la instalación de tres paquetes “cluster”, “rgl”,“ggplot2”, los cuales usaremos para hacer la busqueda de grupos de los datos(clusters),visualización 3d de los gráficos(rgl) y la creación del diseño de la visualización de datos(ggplot2)
#Retornamos la primera o ultima parte de un objeto
head(cliente1_agrupa$clustering)
## 1 4 7 8 9 11
## 1 1 2 2 1 2
El comando Head nos sirve para ver los encabezados de los 6 primeros datos
#Lo visualizamos con una gráfica
plot(cliente1_agrupa)
El comando plot nos permitirá realizar una gráfica a partir de los datos que le ingresemos
#Instalamos los paquetes necesarios para realizar una grafica tridimencional
library(plot3D)
#Asisgnamos los vectores
x <- edad <- cliente1$edad
y <- ingreso <- cliente1$Ingreso
z <- anios <- cliente1$años_empleo
#Usamos la grafica de dispersion tridimencional e identificacion de puntos
scatter3D(x, y, z, clab = c("años", "empleo (cm)"))
Para este caso se usó la libreria “plot3d” el cual nos sirve para el trazado de datos multidimencionales. Luego Asignaremos los datos a cada vector para realizar la gráfica. Por Ultimo, se usara la función scatter3D para poder realizar los gráficos de dispersión tridimensionales e identificación de puntos
##ALGORITMO SOM
#Instalamos los paquetes de la libreria kohonen
library(kohonen)
##
## Attaching package: 'kohonen'
## The following object is masked from 'package:purrr':
##
## map
Para la aplicación del algoritmo SOM se instalará la libreria “kohonen” para poder utilizar sus funciones para el analisis de la data
#Usamos la funcion scale para escalar las columnas de una matriz numerica
cliente1_scale<- scale(cliente1)
Primero escalamos la data para que no exista error alguno al momento de hacer las operaciones
#Usamos la funcion som
cliente.som <- som(as.matrix(cliente1_scale), somgrid(4,4,"hexagonal"))
Crearemos una variable donde se le asignará la función SOM que sirve para la asignacion de espectros o patrones 2D
#Utilizamos esta funcion para separar el gráfico en dos cuadrantes
par(mfrow = c(1,2))
plot(cliente.som, type="codes")
plot(cliente.som, type="mapping", col = cliente1$edad, pch=19 )
En este par de graficos podemos observar la clasificación por rangos y por puntos
#Instalamos la libreria sombrero
library(SOMbrero)
## Loading required package: igraph
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:purrr':
##
## compose, simplify
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
##
## ***********************************************************
##
## This is 'SOMbrero' package, v 1.2
##
## Citation details with citation('SOMbrero')
##
## Further information with help(SOMbrero)...
##
## Use sombreroGUI() to start the Graphical Interface.
##
## ***********************************************************
Instalaremos el paquete SOMbrero para poder utilizar sus funciones en el analisis de nuestra data
#Insertamos una semilla
set.seed(255)
#Ejecutamos el algoritmo som con la funcion trainSOM
cliente1 <- trainSOM(x.data = cliente1, verbose = FALSE, nb.save=5)
cliente1
## Self-Organizing Map object...
## online learning, type: numeric
## 8 x 8 grid with square topology
## neighbourhood type: gaussian
## distance type: euclidean
Se implementa una semilla para poder obtener los mismos resultados con la data. Luego usaremos la función “trainSOM”, la cual devuelve un objeto de clase somRes que contiene las salidas del algoritmo
#Creamos el gráfico de evolución
par(mfrow = c(1,1))
plot(cliente1, what="energy")
Se diseña el gráfico de la evolución de la data
#Creamos 4 cuadrantes para ubicar los gráficos
par(mfrow=c(2,2))
plot(cliente1, what="obs", type="color",variable=1, print.title=TRUE, main="edad")
plot(cliente1, what="obs", type="color",variable=2, print.title=TRUE, main="educacion")
plot(cliente1, what="obs", type="color",variable=3, print.title=TRUE, main="anios_empleo")
plot(cliente1, what="obs", type="color",variable=4, print.title=TRUE, main="ingreso")
plot(cliente1, what="obs", type="color",variable=5, print.title=TRUE, main="tarjeta_credito")
plot(cliente1, what="obs", type="color",variable=6, print.title=TRUE, main="otra_tarjeta")
plot(cliente1, what="obs", type="color",variable=7, print.title=TRUE, main="ratio.ingreso.deuda")