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:

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")