Teoría

Agrupamiento o Clustering es una técnica de aprendizaje automático no supervisado que agrupa datos en función de su similitud.

Algunos usos típicos de esta técnica son: * Segmentación de clientes * Detección de anormalidades * Categorización de documentos

Instalar paquetes y llamar librerías

#install.packages("cluster")
library("cluster")
#install.packages("ggplot2")
library("ggplot2")
#install.packages("data.table")
library("data.table")
#install.packages("factoextra")
library("factoextra")
#install.packages("datasets")
library("datasets")
library("tidyverse")

Ejercicio 1. Puntos

Contexto

Agrupa los siguientes 8 puntos.

Base de datos

df1 = data.frame(x=c(2,2,8,5,7,6,1,4), y=c(10,5,4,8,5,4,2,9))

Entender los datos

summary(df1)
##        x               y         
##  Min.   :1.000   Min.   : 2.000  
##  1st Qu.:2.000   1st Qu.: 4.000  
##  Median :4.500   Median : 5.000  
##  Mean   :4.375   Mean   : 5.875  
##  3rd Qu.:6.250   3rd Qu.: 8.250  
##  Max.   :8.000   Max.   :10.000
str(df1)
## 'data.frame':    8 obs. of  2 variables:
##  $ x: num  2 2 8 5 7 6 1 4
##  $ y: num  10 5 4 8 5 4 2 9
plot(df1$x,df1$y)

Escalar datos

# datos_escalados = scale(datos_originales)

Asignar número de grupos

grupos1 = 3

Agrupar los puntos

set.seed(123)
clusters1 = kmeans(df1,grupos1)
clusters1
## K-means clustering with 3 clusters of sizes 2, 3, 3
## 
## Cluster means:
##          x        y
## 1 1.500000 3.500000
## 2 3.666667 9.000000
## 3 7.000000 4.333333
## 
## Clustering vector:
## [1] 2 1 3 2 3 3 1 2
## 
## Within cluster sum of squares by cluster:
## [1] 5.000000 6.666667 2.666667
##  (between_SS / total_SS =  85.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Optimizar número de grupos

set.seed(123)
optimizacion1 = clusGap(df1, FUN=kmeans, nstart=1, K.max=7)
# el k.max normalmente lo ponemos en 10 en este ejercicio al ser 8 datos se dejo en 7.
plot(optimizacion1, xlab="Número de clusters K", main="Optimización de Clusters")

# Se selecciona como óptimo el primer punto más alto.
# si es diferente hay que regresar al original y ajustar.

Gráficar los grupos

fviz_cluster(clusters1,data=df1)

## Agregar grupos a la base de datos

df1_clusters = cbind(df1, cluster = clusters1$cluster)
head(df1_clusters)
##   x  y cluster
## 1 2 10       2
## 2 2  5       1
## 3 8  4       3
## 4 5  8       2
## 5 7  5       3
## 6 6  4       3

Conclusiones

La técnica de clustering permite identificar patrones o grupos naturales en los datos sin necesidad de etiquetas previas. Es una técnica de ML no supervisado.

Ejercicio 2. USArrests

Contexto

La base de datos USArrests contiene estadíticas en arrestos por cada 100,00 residentes por agresión, asesinato y violación en cada uno de los 50 estados de EE.UU. en 1973

Base de datos

df2 = USArrests
df2 = df2 %>% select(-UrbanPop)

Entender los datos

summary(df2)
##      Murder          Assault           Rape      
##  Min.   : 0.800   Min.   : 45.0   Min.   : 7.30  
##  1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:15.07  
##  Median : 7.250   Median :159.0   Median :20.10  
##  Mean   : 7.788   Mean   :170.8   Mean   :21.23  
##  3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:26.18  
##  Max.   :17.400   Max.   :337.0   Max.   :46.00
str(df2)
## 'data.frame':    50 obs. of  3 variables:
##  $ Murder : num  13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
##  $ Assault: int  236 263 294 190 276 204 110 238 335 211 ...
##  $ Rape   : num  21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...

Escalar datos

df2_escalados = scale(df2)
summary(df2_escalados)
##      Murder           Assault             Rape        
##  Min.   :-1.6044   Min.   :-1.5090   Min.   :-1.4874  
##  1st Qu.:-0.8525   1st Qu.:-0.7411   1st Qu.:-0.6574  
##  Median :-0.1235   Median :-0.1411   Median :-0.1209  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.7949   3rd Qu.: 0.9388   3rd Qu.: 0.5277  
##  Max.   : 2.2069   Max.   : 1.9948   Max.   : 2.6444

Asignar número de grupos

grupos2 = 5

Agrupar los puntos

set.seed(123)
clusters2 = kmeans(df2_escalados,grupos2)
clusters2
## K-means clustering with 5 clusters of sizes 7, 14, 17, 4, 8
## 
## Cluster means:
##       Murder    Assault        Rape
## 1  0.8292944  1.3313823  0.90560938
## 2 -1.0812577 -1.0779212 -1.00700542
## 3 -0.2754591 -0.2999280 -0.12336985
## 4  0.4562038  0.9358314  2.26533514
## 5  1.5238170  0.8908337  0.09934463
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              5              4              1              3              4 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              4              2              3              1              5 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              2              2              1              3              2 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              3              3              5              2              1 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              3              1              2              5              3 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              3              2              4              2              3 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              1              1              5              2              3 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              3              3              3              2              5 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              2              5              5              3              2 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              3              3              2              2              3 
## 
## Within cluster sum of squares by cluster:
## [1] 3.380664 5.645542 9.205038 1.346517 4.683603
##  (between_SS / total_SS =  83.5 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Optimizar número de grupos

set.seed(123)
optimizacion2 = clusGap(df2_escalados, FUN=kmeans, nstart=1, K.max=10)
plot(optimizacion2, xlab="Número de clusters K", main="Optimización de Clusters")

# Se selecciona como óptimo el primer punto más alto.
# si es diferente hay que regresar al original y ajustar.

Gráficar los grupos

fviz_cluster(clusters2,data=df2_escalados)

## Agregar grupos a la base de datos

df2_clusters = cbind(df2, cluster = clusters2$cluster)
head(df2_clusters)
##            Murder Assault Rape cluster
## Alabama      13.2     236 21.2       5
## Alaska       10.0     263 44.5       4
## Arizona       8.1     294 31.0       1
## Arkansas      8.8     190 19.5       3
## California    9.0     276 40.6       4
## Colorado      7.9     204 38.7       4
df2_clusters %>% group_by(cluster) %>% summarise_all(mean) %>% mutate(indicador_inseguridad=Murder+Assault+Rape)
## # A tibble: 5 × 5
##   cluster Murder Assault  Rape indicador_inseguridad
##     <int>  <dbl>   <dbl> <dbl>                 <dbl>
## 1       1  11.4    282.   29.7                 323. 
## 2       2   3.08    80.9  11.8                  95.8
## 3       3   6.59   146.   20.1                 172. 
## 4       4   9.78   249.   42.4                 301. 
## 5       5  14.4    245    22.2                 282.
df2_clusters = df2_clusters %>%
  mutate(cluster = case_when(
    cluster == 1 ~ "Inseguridad Muy Alta",
    cluster == 2 ~ "Inseguridad Alta",
    cluster == 3 ~ "Inseguridad Media",
    cluster == 4 ~ "Inseguridad Baja",
    cluster == 5 ~ "Inseguridad Muy Baja",
  ))
head(df2_clusters)
##            Murder Assault Rape              cluster
## Alabama      13.2     236 21.2 Inseguridad Muy Baja
## Alaska       10.0     263 44.5     Inseguridad Baja
## Arizona       8.1     294 31.0 Inseguridad Muy Alta
## Arkansas      8.8     190 19.5    Inseguridad Media
## California    9.0     276 40.6     Inseguridad Baja
## Colorado      7.9     204 38.7     Inseguridad Baja

Conclusiones

La técnica de clustering permite identificar patrones o grupos naturales en los datos sin necesidad de etiquetas previas. En este caso fue utilizado para agrupar estados en EE.UU. en cuestión de inseguridad, siendo el cluster 1 el que tiene más indices de inseguridad.

Ejercicio 3. Segmentación de Clientes

hay que segmentarlos por frecuencia de compra/numero de visitas, y ticket promedio. y recomendaciones de negocio para los 4 tipos de clientes esto es teoria.cantidad por precio y totalizar por tickect sacar cuantas veces van

Contexto

La base de datos ventas tiene los registros entre el 1 de Diciembre de 2020 y el 9 de Diciembre de 2011 de las ventas de una empresa minorista en línea sin tienda física, basada en Reino Unido. La empresa vende principalmente regalos únicos para toda ocasión y muchos de sus clientes son mayoristas. Objetivo: segmentar clientes, asignarles nombre y caracteristicas de comportamiento y proponer sugerencias a la empresa para aumentar ventas.

Ejercicio 3. Segmentación de Clientes

Contexto

La base de datos ventas tiene los registros entre el 1 de Diciembre de 2020 y el 9 de Diciembre de 2011 de las ventas de una empresa minorista en línea sin tienda física, basada en Reino Unido. La empresa vende principalmente regalos únicos para toda ocasión y muchos de sus clientes son mayoristas. Objetivo: segmentar clientes, asignarles nombre y caracteristicas de comportamiento y proponer sugerencias a la empresa para aumentar ventas. ## Base de datos

ventas = read.csv(file.choose(), fileEncoding = "UTF-8-BOM")

Entender los datos

summary(ventas)
##        Ticket            Producto         Cantidad              Fecha       
##  Length   :522064   Length   :522064   Min.   :-9600.00   Length   :522064  
##  N.unique : 21663   N.unique :  4183   1st Qu.:    1.00   N.unique :   305  
##  N.blank  :     0   N.blank  :  1455   Median :    3.00   N.blank  :     0  
##  Min.nchar:     6   Min.nchar:     0   Mean   :   10.09   Min.nchar:    10  
##  Max.nchar:     7   Max.nchar:    36   3rd Qu.:   10.00   Max.nchar:    10  
##                                        Max.   :80995.00                     
##                                                                             
##         Hora            Precio              Cliente              País       
##  Length   :522064   Min.   :-11062.060   Min.   :12346    Length   :522064  
##  N.unique :   739   1st Qu.:     1.250   1st Qu.:13950    N.unique :    30  
##  N.blank  :     0   Median :     2.080   Median :15265    N.blank  :     0  
##  Min.nchar:     8   Mean   :     3.827   Mean   :15317    Min.nchar:     3  
##  Max.nchar:     8   3rd Qu.:     4.130   3rd Qu.:16837    Max.nchar:    20  
##                     Max.   : 13541.330   Max.   :18287                      
##                                          NAs    :134041
str(ventas)
## 'data.frame':    522064 obs. of  8 variables:
##  $ Ticket  : chr  "536365" "536365" "536365" "536365" ...
##  $ Producto: chr  "WHITE HANGING HEART T-LIGHT HOLDER" "WHITE METAL LANTERN" "CREAM CUPID HEARTS COAT HANGER" "KNITTED UNION FLAG HOT WATER BOTTLE" ...
##  $ Cantidad: int  6 6 8 6 6 2 6 6 6 32 ...
##  $ Fecha   : chr  "01/12/2010" "01/12/2010" "01/12/2010" "01/12/2010" ...
##  $ Hora    : chr  "08:26:00" "08:26:00" "08:26:00" "08:26:00" ...
##  $ Precio  : num  2.55 3.39 2.75 3.39 3.39 7.65 4.25 1.85 1.85 1.69 ...
##  $ Cliente : int  17850 17850 17850 17850 17850 17850 17850 17850 17850 13047 ...
##  $ País    : chr  "United Kingdom" "United Kingdom" "United Kingdom" "United Kingdom" ...

Limpiar y preparar variables

# Quitar registros sin cliente identificado (Cliente = NA)
ventas = ventas %>% filter(!is.na(Cliente))

# Quitar devoluciones/cancelaciones (Cantidad o Precio negativos)
ventas = ventas %>% filter(Cantidad > 0, Precio > 0)

# Total de cada línea de producto (cantidad x precio)
ventas = ventas %>% mutate(Total = Cantidad * Precio)

# Total por ticket (cada ticket = una visita/compra)
tickets = ventas %>%
  group_by(Cliente, Ticket) %>%
  summarise(Total_ticket = sum(Total), .groups = "drop")

# Frecuencia (número de visitas) y ticket promedio por cliente
df3 = tickets %>%
  group_by(Cliente) %>%
  summarise(
    Frecuencia = n(),
    Ticket_promedio = mean(Total_ticket)
  )

df3 = as.data.frame(df3)
rownames(df3) = df3$Cliente
df3 = df3 %>% select(-Cliente)

summary(df3)
##    Frecuencia      Ticket_promedio   
##  Min.   :  1.000   Min.   :    3.45  
##  1st Qu.:  1.000   1st Qu.:  178.30  
##  Median :  2.000   Median :  292.00  
##  Mean   :  4.227   Mean   :  415.62  
##  3rd Qu.:  5.000   3rd Qu.:  426.63  
##  Max.   :209.000   Max.   :84236.25
str(df3)
## 'data.frame':    4296 obs. of  2 variables:
##  $ Frecuencia     : int  1 7 1 1 8 1 1 1 3 1 ...
##  $ Ticket_promedio: num  77184 616 1758 334 313 ...
plot(df3$Frecuencia, df3$Ticket_promedio)

# Transformación log: corrige el sesgo extremo de los clientes mayoristas (outliers)
df3_log = df3
df3_log$Frecuencia = log1p(df3_log$Frecuencia)
df3_log$Ticket_promedio = log1p(df3_log$Ticket_promedio)

plot(df3_log$Frecuencia, df3_log$Ticket_promedio)

## Escalar datos

df3_escalados = scale(df3_log)
summary(df3_escalados)
##    Frecuencia      Ticket_promedio   
##  Min.   :-0.9578   Min.   :-5.60522  
##  1st Qu.:-0.9578   1st Qu.:-0.61486  
##  Median :-0.3622   Median : 0.04819  
##  Mean   : 0.0000   Mean   : 0.00000  
##  3rd Qu.: 0.6561   3rd Qu.: 0.55869  
##  Max.   : 5.8791   Max.   : 7.69169

Asignar número de grupos

grupos3 = 4

Agrupar los puntos

set.seed(123)
clusters3 = kmeans(df3_escalados,grupos3)
clusters3
## K-means clustering with 4 clusters of sizes 1682, 1011, 479, 1124
## 
## Cluster means:
##   Frecuencia Ticket_promedio
## 1 -0.4538713       0.1733910
## 2  1.4393161       0.2144042
## 3 -0.2890629       1.6281407
## 4 -0.4922383      -1.1461617
## 
## Clustering vector:
## 12346 12347 12349 12350 12352 12353 12354 12355 12356 12357 12358 12360 12361 
##     3     2     3     1     2     4     3     1     3     3     3     3     4 
## 12362 12363 12364 12370 12371 12373 12374 12377 12378 12379 12380 12381 12383 
##     2     1     1     1     3     1     3     3     3     1     3     2     2 
## 12384 12386 12388 12390 12393 12394 12395 12397 12398 12399 12401 12402 12407 
##     1     1     2     1     1     1     2     3     3     1     4     1     2 
## 12408 12409 12410 12413 12414 12415 12417 12418 12421 12422 12423 12424 12425 
##     2     3     1     1     4     3     2     3     1     1     2     3     3 
## 12426 12427 12429 12430 12431 12432 12433 12434 12436 12437 12438 12441 12442 
##     3     1     1     1     2     3     3     1     1     2     3     4     4 
## 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 
##     3     4     3     1     1     3     4     3     1     3     3     4     3 
## 12457 12458 12461 12462 12463 12464 12465 12468 12471 12472 12473 12474 12475 
##     2     1     1     3     1     2     1     1     2     3     3     2     3 
## 12476 12477 12478 12479 12480 12481 12483 12484 12488 12489 12490 12491 12492 
##     2     3     3     1     3     2     2     3     1     1     2     1     4 
## 12493 12494 12497 12498 12500 12501 12502 12504 12506 12507 12508 12509 12510 
##     1     2     3     4     2     3     3     1     4     1     1     4     1 
## 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 
##     4     3     3     1     3     2     2     1     2     3     4     2     2 
## 12526 12527 12528 12530 12531 12532 12534 12535 12536 12538 12539 12540 12541 
##     1     4     2     1     4     1     3     1     3     1     3     2     1 
## 12544 12545 12546 12547 12548 12550 12551 12552 12553 12556 12557 12558 12559 
##     1     1     3     4     4     3     4     1     2     1     3     1     1 
## 12560 12561 12562 12564 12565 12566 12567 12569 12571 12572 12573 12574 12576 
##     3     1     2     1     4     1     2     2     1     1     4     1     2 
## 12577 12578 12579 12580 12581 12583 12584 12585 12586 12589 12590 12591 12592 
##     1     3     1     1     4     2     2     3     4     1     3     1     1 
## 12593 12594 12596 12597 12598 12599 12600 12601 12602 12603 12604 12607 12609 
##     4     2     1     3     2     2     2     4     4     3     4     3     1 
## 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 
##     2     3     3     3     1     3     1     1     4     2     1     2     4 
## 12623 12624 12625 12626 12627 12628 12633 12635 12637 12638 12639 12640 12641 
##     1     1     3     2     2     1     3     3     2     3     1     1     4 
## 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 
##     1     2     1     1     3     2     1     1     1     4     3     3     4 
## 12656 12657 12658 12659 12660 12662 12665 12668 12669 12670 12672 12673 12674 
##     3     1     3     4     1     2     4     3     3     2     1     1     1 
## 12676 12678 12679 12680 12681 12682 12683 12684 12685 12686 12688 12689 12690 
##     2     2     1     1     2     2     2     2     2     4     3     3     1 
## 12691 12693 12694 12695 12697 12700 12701 12702 12703 12705 12707 12708 12709 
##     2     1     1     4     1     3     1     1     1     2     3     2     2 
## 12710 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 
##     1     2     3     3     1     1     1     1     1     2     2     1     4 
## 12724 12725 12726 12727 12728 12729 12731 12732 12733 12734 12735 12736 12738 
##     1     1     2     2     1     1     2     1     1     4     1     1     4 
## 12739 12740 12743 12744 12747 12748 12749 12750 12752 12753 12754 12755 12756 
##     1     1     1     3     2     2     3     1     3     3     3     3     4 
## 12757 12758 12759 12762 12763 12764 12766 12769 12770 12772 12775 12778 12779 
##     2     3     1     3     1     3     3     3     3     3     2     2     2 
## 12782 12783 12784 12785 12787 12789 12790 12791 12792 12793 12794 12795 12797 
##     2     2     1     1     4     4     1     4     1     1     1     1     1 
## 12798 12802 12808 12809 12811 12812 12814 12815 12816 12817 12818 12820 12821 
##     3     1     4     1     4     1     4     1     1     4     3     1     4 
## 12822 12823 12824 12826 12827 12828 12829 12830 12831 12832 12833 12834 12836 
##     1     2     1     2     4     2     4     3     1     4     1     1     3 
## 12837 12838 12839 12840 12841 12842 12843 12844 12845 12847 12849 12851 12852 
##     4     1     2     3     2     3     2     4     4     3     1     4     1 
## 12853 12854 12855 12856 12857 12863 12864 12865 12866 12867 12868 12871 12872 
##     2     1     4     2     3     1     4     3     1     2     2     4     1 
## 12873 12875 12876 12877 12878 12879 12881 12882 12883 12884 12885 12886 12888 
##     1     4     3     2     1     4     1     3     4     1     1     3     4 
## 12890 12891 12893 12895 12897 12901 12902 12904 12906 12908 12909 12910 12912 
##     1     4     4     4     4     2     4     1     2     1     2     2     2 
## 12913 12915 12916 12917 12919 12920 12921 12922 12923 12924 12925 12928 12929 
##     2     4     3     3     2     4     2     1     4     1     1     2     4 
## 12930 12931 12933 12935 12936 12937 12938 12939 12940 12942 12944 12945 12947 
##     1     3     1     2     1     1     4     3     1     1     1     1     2 
## 12948 12949 12950 12951 12952 12953 12955 12956 12957 12962 12963 12965 12966 
##     2     2     3     2     1     1     2     4     2     4     2     3     4 
## 12967 12968 12970 12971 12974 12976 12977 12980 12981 12982 12984 12985 12987 
##     3     4     4     2     4     3     4     2     4     1     4     3     1 
## 12988 12989 12990 12991 12993 12994 12995 12997 12999 13000 13001 13002 13003 
##     1     2     4     1     4     1     1     1     4     4     2     4     4 
## 13004 13005 13006 13008 13011 13012 13013 13014 13015 13016 13017 13018 13021 
##     2     1     4     1     4     2     2     2     3     1     1     2     2 
## 13023 13026 13027 13028 13029 13030 13032 13033 13034 13035 13037 13038 13040 
##     1     2     3     1     1     1     1     4     1     1     1     1     1 
## 13043 13044 13045 13046 13047 13048 13049 13050 13052 13055 13058 13059 13060 
##     1     1     1     1     2     1     1     2     1     1     4     4     1 
## 13061 13062 13064 13065 13066 13067 13068 13069 13070 13072 13075 13077 13078 
##     1     1     1     1     1     4     4     2     1     4     3     4     2 
## 13079 13080 13081 13082 13083 13085 13089 13090 13091 13092 13093 13094 13095 
##     4     4     3     2     4     1     2     2     1     4     2     2     4 
## 13097 13098 13099 13101 13102 13103 13104 13106 13107 13108 13109 13110 13113 
##     2     2     1     4     2     1     2     4     1     1     1     2     2 
## 13115 13116 13117 13118 13120 13121 13122 13124 13126 13127 13130 13131 13132 
##     3     1     2     2     4     1     1     3     2     1     4     1     4 
## 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13144 13145 13146 
##     4     1     3     2     2     2     2     4     2     1     4     4     1 
## 13147 13148 13149 13151 13153 13155 13157 13158 13159 13160 13161 13162 13165 
##     4     2     1     3     1     1     1     1     1     4     4     1     1 
## 13166 13167 13168 13169 13170 13171 13173 13174 13176 13177 13178 13182 13183 
##     1     1     1     1     4     4     4     3     1     1     2     4     2 
## 13184 13185 13186 13187 13188 13189 13192 13193 13194 13196 13198 13199 13200 
##     2     4     1     1     4     4     1     4     4     1     2     2     1 
## 13203 13207 13208 13209 13210 13211 13212 13213 13216 13217 13218 13220 13221 
##     1     4     2     2     1     1     1     2     1     4     4     1     1 
## 13223 13224 13225 13226 13227 13228 13229 13230 13232 13233 13235 13236 13238 
##     4     3     3     4     1     1     4     2     2     1     3     1     4 
## 13239 13240 13242 13243 13244 13245 13246 13247 13248 13249 13253 13255 13258 
##     1     4     4     3     4     1     2     4     1     1     1     1     1 
## 13259 13260 13261 13262 13263 13265 13266 13267 13268 13269 13270 13271 13272 
##     1     1     1     1     2     2     2     2     2     2     3     1     4 
## 13273 13276 13277 13278 13279 13280 13282 13283 13284 13285 13291 13292 13294 
##     4     1     4     1     4     1     1     4     1     3     1     1     1 
## 13295 13296 13297 13298 13299 13300 13301 13302 13304 13305 13307 13308 13309 
##     1     4     3     1     4     1     4     4     1     2     4     1     2 
## 13310 13311 13313 13314 13316 13317 13318 13319 13320 13321 13322 13323 13324 
##     1     1     2     1     3     2     1     2     1     1     1     4     2 
## 13325 13327 13328 13329 13330 13332 13334 13336 13338 13339 13340 13341 13343 
##     3     2     3     1     1     1     3     3     1     3     3     3     1 
## 13344 13345 13347 13348 13349 13350 13351 13352 13354 13355 13356 13357 13358 
##     3     1     1     1     1     1     1     1     3     3     3     3     1 
## 13359 13362 13363 13364 13365 13366 13368 13369 13370 13372 13373 13375 13376 
##     1     3     1     4     3     4     1     1     3     1     3     3     1 
## 13379 13381 13382 13384 13385 13388 13389 13390 13391 13394 13395 13396 13397 
##     4     2     1     2     1     1     1     1     4     2     1     3     2 
## 13398 13402 13403 13404 13405 13408 13410 13411 13414 13416 13417 13418 13419 
##     1     1     4     4     4     2     2     1     1     1     1     2     1 
## 13420 13421 13422 13425 13426 13427 13428 13429 13430 13431 13434 13435 13436 
##     4     3     3     3     2     1     1     1     1     3     1     2     4 
## 13437 13439 13441 13447 13448 13449 13450 13451 13452 13453 13455 13456 13458 
##     2     1     1     1     2     1     2     2     1     4     1     2     2 
## 13460 13461 13462 13464 13466 13467 13468 13470 13471 13473 13474 13475 13476 
##     4     1     4     3     1     1     2     4     3     1     1     1     3 
## 13477 13479 13481 13482 13483 13484 13485 13486 13487 13488 13489 13491 13492 
##     2     4     2     4     4     1     1     1     4     2     4     2     1 
## 13493 13494 13495 13496 13497 13499 13500 13501 13502 13503 13504 13505 13506 
##     1     1     2     1     4     2     1     3     4     1     1     3     1 
## 13507 13508 13509 13510 13512 13513 13514 13515 13516 13517 13518 13519 13520 
##     3     4     2     1     1     1     4     1     1     3     3     4     2 
## 13521 13522 13523 13524 13525 13527 13529 13531 13532 13533 13534 13536 13538 
##     1     4     3     4     1     2     4     1     1     4     2     2     2 
## 13539 13544 13546 13548 13549 13551 13552 13555 13557 13558 13560 13561 13562 
##     1     4     1     1     2     4     2     3     1     4     4     4     3 
## 13563 13564 13565 13566 13568 13569 13570 13571 13572 13573 13575 13576 13577 
##     1     3     4     1     4     4     1     2     3     4     4     2     1 
## 13579 13581 13583 13584 13587 13588 13589 13590 13591 13592 13593 13594 13596 
##     1     4     3     4     3     2     4     2     1     4     2     1     1 
## 13598 13599 13600 13601 13602 13603 13606 13607 13610 13611 13614 13615 13617 
##     4     2     1     1     1     4     4     3     2     1     1     1     4 
## 13618 13621 13623 13626 13627 13629 13630 13631 13632 13634 13635 13636 13637 
##     4     1     4     1     2     2     2     2     2     2     3     2     1 
## 13638 13639 13642 13643 13644 13645 13647 13649 13650 13651 13652 13654 13655 
##     4     3     1     4     3     1     1     4     2     4     1     2     1 
## 13656 13657 13658 13659 13662 13663 13666 13667 13668 13669 13670 13672 13673 
##     4     4     2     3     1     4     4     1     2     4     1     4     1 
## 13675 13678 13680 13681 13682 13684 13685 13686 13689 13690 13692 13694 13695 
##     1     1     3     1     4     4     2     4     3     4     1     2     2 
## 13697 13699 13700 13703 13704 13705 13706 13707 13708 13709 13710 13711 13712 
##     4     1     2     4     2     1     1     1     1     2     4     4     1 
## 13715 13716 13717 13718 13719 13720 13721 13722 13723 13725 13726 13727 13728 
##     2     4     2     4     2     1     1     3     1     2     1     4     2 
## 13730 13731 13732 13735 13736 13737 13739 13740 13741 13742 13743 13744 13745 
##     1     1     1     3     1     1     1     1     1     2     2     3     1 
## 13747 13748 13750 13751 13752 13753 13754 13755 13756 13758 13759 13760 13761 
##     4     2     2     1     2     3     4     2     2     2     1     4     1 
## 13762 13763 13764 13767 13769 13771 13772 13774 13777 13778 13780 13781 13782 
##     1     3     1     2     2     3     1     1     2     4     4     4     2 
## 13784 13786 13787 13790 13791 13792 13798 13799 13800 13801 13802 13803 13804 
##     2     1     4     1     3     4     2     1     1     1     3     1     2 
## 13805 13806 13807 13808 13810 13811 13812 13813 13814 13815 13816 13817 13819 
##     1     1     4     2     1     1     4     1     3     3     1     4     1 
## 13821 13822 13823 13824 13826 13827 13828 13831 13832 13833 13835 13837 13838 
##     4     1     1     2     4     4     1     2     4     1     1     4     4 
## 13841 13842 13844 13845 13846 13848 13849 13850 13851 13853 13854 13856 13858 
##     4     2     1     1     1     1     3     3     3     3     2     4     1 
## 13859 13860 13862 13863 13865 13866 13867 13868 13869 13870 13871 13873 13874 
##     1     2     2     1     4     4     1     3     3     2     2     4     1 
## 13875 13876 13877 13878 13880 13881 13882 13883 13884 13885 13886 13887 13888 
##     2     4     4     3     2     2     2     2     4     1     1     1     1 
## 13889 13890 13892 13893 13894 13895 13897 13898 13899 13900 13901 13904 13908 
##     1     2     4     3     4     3     1     4     4     1     2     4     3 
## 13911 13914 13917 13918 13922 13923 13924 13925 13926 13927 13928 13929 13930 
##     2     1     4     3     4     1     2     4     1     1     4     1     4 
## 13931 13932 13933 13934 13936 13937 13938 13939 13940 13941 13946 13947 13948 
##     3     1     1     3     1     4     4     4     1     3     4     4     4 
## 13949 13950 13951 13952 13953 13954 13955 13956 13959 13960 13962 13963 13967 
##     2     4     1     3     2     1     4     2     1     4     4     4     4 
## 13969 13971 13972 13973 13974 13975 13976 13978 13979 13980 13982 13983 13984 
##     2     2     4     1     1     2     1     4     3     1     1     2     2 
## 13985 13986 13988 13989 13990 13991 13992 13993 13994 13995 13999 14000 14001 
##     2     1     2     3     1     2     4     2     2     2     2     3     3 
## 14002 14004 14005 14006 14009 14012 14013 14014 14015 14019 14020 14021 14022 
##     1     2     2     1     1     1     4     1     3     1     1     1     1 
## 14023 14024 14027 14029 14030 14031 14032 14034 14035 14036 14037 14038 14039 
##     1     4     4     1     2     2     2     1     2     3     4     1     4 
## 14040 14041 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 
##     2     4     4     1     4     2     1     3     1     2     1     4     4 
## 14055 14056 14057 14059 14060 14062 14064 14066 14067 14068 14071 14073 14075 
##     3     2     2     4     2     2     2     4     4     1     2     4     1 
## 14076 14077 14078 14079 14080 14081 14082 14083 14085 14087 14088 14089 14090 
##     4     4     2     1     4     1     4     2     2     4     3     4     4 
## 14092 14093 14096 14098 14099 14100 14101 14102 14104 14105 14107 14108 14109 
##     2     1     3     4     2     4     3     2     4     3     2     1     4 
## 14110 14111 14112 14113 14114 14116 14117 14121 14124 14125 14126 14127 14128 
##     2     4     2     1     4     2     4     3     1     3     1     1     1 
## 14129 14130 14132 14133 14135 14138 14139 14140 14141 14142 14143 14145 14146 
##     2     1     2     1     2     1     1     1     1     1     4     3     3 
## 14147 14148 14149 14150 14152 14154 14155 14157 14158 14159 14161 14162 14163 
##     1     4     1     1     1     3     4     1     1     2     1     4     3 
## 14164 14165 14167 14171 14173 14174 14175 14176 14177 14178 14179 14180 14184 
##     3     4     4     1     4     4     3     4     4     2     1     2     1 
## 14185 14188 14189 14191 14193 14194 14195 14196 14198 14199 14201 14204 14205 
##     4     2     2     2     1     2     1     1     4     4     2     4     1 
## 14206 14208 14209 14210 14211 14212 14214 14215 14216 14217 14218 14219 14220 
##     1     4     2     2     2     3     2     2     1     2     4     4     1 
## 14221 14222 14223 14224 14226 14227 14229 14231 14232 14233 14234 14235 14236 
##     2     3     1     1     2     2     1     1     2     1     1     3     1 
## 14237 14238 14239 14240 14241 14242 14243 14245 14246 14247 14248 14250 14251 
##     4     4     2     1     1     4     2     3     1     4     1     3     2 
## 14256 14257 14258 14259 14261 14262 14264 14265 14267 14270 14271 14272 14273 
##     1     3     3     4     3     2     4     1     1     1     4     1     4 
## 14276 14277 14280 14282 14284 14285 14286 14287 14288 14289 14290 14291 14292 
##     1     3     4     2     1     1     3     4     1     2     2     2     2 
## 14293 14295 14297 14298 14299 14300 14301 14304 14305 14306 14307 14309 14311 
##     1     4     1     2     2     4     3     1     3     3     2     2     1 
## 14312 14314 14315 14317 14320 14321 14323 14326 14327 14329 14331 14332 14333 
##     2     4     2     1     1     2     1     4     1     2     1     1     1 
## 14334 14335 14336 14338 14339 14340 14341 14342 14344 14345 14346 14348 14349 
##     2     1     1     1     1     4     2     4     2     4     1     1     4 
## 14350 14351 14352 14353 14354 14355 14356 14357 14359 14360 14362 14364 14367 
##     1     4     1     4     4     4     1     1     1     3     4     2     2 
## 14368 14371 14373 14375 14377 14379 14381 14382 14383 14385 14386 14387 14388 
##     4     4     4     1     1     4     1     3     1     4     4     3     2 
## 14389 14390 14393 14395 14396 14397 14400 14401 14403 14404 14406 14407 14408 
##     1     2     4     2     1     2     1     2     1     2     4     2     2 
## 14409 14410 14411 14412 14413 14414 14415 14416 14418 14419 14420 14421 14422 
##     2     2     3     1     4     2     2     1     3     2     1     1     2 
## 14423 14424 14426 14427 14428 14431 14432 14434 14436 14437 14438 14439 14440 
##     1     1     2     4     2     1     2     2     4     4     4     3     2 
## 14441 14443 14446 14447 14448 14449 14450 14451 14452 14453 14456 14457 14459 
##     1     1     1     2     4     1     4     1     4     4     2     4     3 
## 14460 14461 14462 14463 14465 14466 14467 14470 14472 14473 14474 14475 14476 
##     4     3     2     4     1     2     4     1     2     4     1     1     1 
## 14477 14479 14480 14481 14482 14483 14484 14485 14487 14488 14489 14491 14493 
##     1     4     1     1     2     4     1     4     2     3     1     4     2 
## 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 
##     4     4     1     1     2     1     4     4     2     2     4     2     2 
## 14507 14508 14511 14512 14513 14514 14515 14517 14518 14520 14522 14523 14524 
##     2     4     2     4     4     1     2     4     4     4     1     1     2 
## 14525 14527 14528 14529 14530 14532 14533 14534 14535 14536 14537 14538 14539 
##     2     2     1     1     2     1     2     2     3     4     1     4     1 
## 14540 14541 14542 14543 14544 14546 14547 14548 14549 14550 14551 14552 14553 
##     1     2     4     2     3     2     2     1     1     1     4     4     2 
## 14554 14555 14557 14560 14561 14562 14565 14567 14569 14570 14572 14573 14576 
##     3     4     3     2     1     2     3     3     1     4     2     2     4 
## 14577 14578 14581 14582 14583 14584 14585 14586 14587 14589 14591 14592 14593 
##     1     4     4     4     2     1     4     1     2     4     1     4     1 
## 14594 14595 14597 14598 14600 14601 14603 14606 14607 14608 14609 14616 14618 
##     4     2     1     1     1     1     3     2     2     1     4     4     4 
## 14619 14620 14621 14622 14623 14624 14625 14626 14628 14629 14631 14632 14633 
##     1     1     2     1     2     4     1     3     1     1     1     4     1 
## 14636 14638 14639 14640 14641 14642 14643 14644 14645 14646 14647 14649 14651 
##     1     1     2     2     4     4     1     1     1     2     1     1     1 
## 14652 14653 14655 14656 14657 14658 14659 14660 14661 14662 14664 14665 14666 
##     4     2     1     4     1     4     2     4     4     1     1     2     4 
## 14667 14669 14670 14672 14673 14675 14676 14680 14681 14682 14684 14687 14688 
##     2     1     1     1     2     3     2     2     4     4     2     3     2 
## 14689 14690 14691 14692 14693 14696 14697 14698 14699 14700 14701 14702 14703 
##     4     4     2     4     4     2     4     2     4     3     2     2     1 
## 14704 14705 14708 14709 14710 14711 14712 14713 14714 14715 14716 14719 14720 
##     2     4     1     2     4     2     1     2     4     1     4     2     1 
## 14722 14723 14725 14727 14729 14730 14731 14732 14733 14735 14737 14738 14739 
##     4     2     3     1     1     2     4     2     2     2     1     2     2 
## 14740 14741 14744 14745 14747 14748 14752 14753 14754 14755 14756 14757 14758 
##     1     2     2     2     1     2     1     1     1     2     3     1     1 
## 14759 14760 14761 14762 14764 14765 14766 14768 14769 14770 14772 14775 14776 
##     3     4     4     1     1     4     2     4     3     1     4     1     2 
## 14778 14779 14780 14782 14784 14785 14788 14789 14790 14792 14793 14794 14795 
##     1     4     1     1     4     4     1     4     4     4     1     2     4 
## 14796 14798 14799 14800 14801 14803 14804 14805 14806 14808 14810 14813 14815 
##     2     4     4     2     4     1     1     4     4     2     2     4     1 
## 14816 14817 14818 14819 14820 14821 14823 14824 14825 14828 14829 14830 14834 
##     1     3     1     4     4     4     4     1     2     3     4     4     2 
## 14836 14837 14840 14841 14842 14844 14847 14849 14850 14851 14852 14853 14854 
##     4     1     4     2     3     3     1     2     1     1     2     1     2 
## 14855 14856 14857 14859 14860 14861 14862 14863 14865 14866 14867 14868 14869 
##     1     1     3     1     4     4     1     1     4     2     1     2     1 
## 14870 14871 14873 14875 14878 14880 14881 14882 14883 14885 14886 14887 14888 
##     1     4     1     3     2     1     1     1     4     3     1     3     1 
## 14889 14890 14891 14893 14894 14895 14896 14897 14898 14901 14902 14903 14904 
##     4     4     1     3     3     2     1     1     2     2     1     2     1 
## 14905 14907 14908 14910 14912 14913 14915 14916 14918 14920 14921 14923 14924 
##     1     2     1     4     1     1     4     1     3     1     3     3     1 
## 14929 14944 14946 14947 14948 14950 14951 14952 14953 14954 14957 14958 14959 
##     1     2     4     4     2     1     1     2     1     1     4     4     4 
## 14960 14961 14962 14963 14964 14965 14966 14967 14968 14970 14971 14972 14973 
##     4     2     4     2     1     1     4     1     4     1     1     4     1 
## 14974 14975 14976 14978 14981 14984 14985 14987 14988 14995 14997 14998 15000 
##     4     1     2     2     4     4     4     4     1     4     4     1     1 
## 15002 15004 15005 15006 15007 15009 15010 15012 15014 15016 15017 15018 15019 
##     1     3     2     1     4     1     1     1     4     4     4     4     1 
## 15021 15022 15023 15024 15025 15026 15027 15028 15030 15031 15032 15033 15034 
##     2     1     2     2     1     4     1     4     1     4     3     2     2 
## 15035 15036 15038 15039 15041 15042 15043 15044 15045 15046 15047 15048 15049 
##     1     4     4     2     4     4     1     2     1     2     1     4     4 
## 15050 15051 15052 15053 15054 15057 15058 15059 15060 15061 15062 15063 15065 
##     3     1     1     1     4     3     2     2     4     2     1     1     3 
## 15066 15067 15068 15069 15070 15071 15073 15074 15075 15076 15078 15079 15081 
##     3     3     1     3     4     1     1     3     3     3     2     1     4 
## 15083 15087 15088 15089 15090 15091 15092 15093 15095 15096 15097 15098 15099 
##     4     1     3     2     1     1     1     3     1     1     1     3     1 
## 15100 15101 15103 15104 15105 15106 15107 15109 15110 15111 15113 15114 15115 
##     1     4     1     1     2     2     4     1     1     1     3     2     1 
## 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15127 15128 15129 
##     1     2     1     1     1     1     3     3     4     2     1     1     2 
## 15130 15132 15133 15134 15135 15136 15139 15140 15142 15143 15144 15145 15146 
##     1     2     1     2     4     1     4     2     1     1     2     1     3 
## 15147 15148 15149 15150 15152 15153 15154 15156 15157 15158 15159 15160 15163 
##     3     1     1     2     2     1     1     1     3     1     2     4     4 
## 15164 15165 15167 15168 15171 15172 15174 15175 15178 15179 15180 15181 15182 
##     1     1     4     4     3     2     4     1     4     2     4     1     1 
## 15184 15185 15186 15187 15189 15192 15193 15194 15195 15197 15198 15199 15201 
##     1     1     1     2     2     1     1     2     3     1     4     1     2 
## 15203 15204 15205 15206 15208 15210 15211 15212 15213 15214 15215 15216 15218 
##     2     1     1     4     2     1     1     4     4     2     1     4     2 
## 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15230 15232 15234 
##     1     2     1     3     1     4     1     4     2     3     1     1     4 
## 15235 15236 15237 15238 15239 15240 15241 15243 15244 15245 15246 15247 15249 
##     2     1     1     1     1     2     2     1     1     3     1     1     2 
## 15251 15252 15253 15254 15255 15256 15257 15258 15260 15261 15262 15263 15264 
##     2     1     2     1     3     4     1     1     2     1     4     4     1 
## 15265 15266 15267 15269 15270 15271 15272 15274 15275 15276 15277 15279 15280 
##     3     4     2     1     2     2     1     1     3     4     1     1     4 
## 15281 15286 15287 15288 15289 15290 15291 15292 15296 15297 15298 15299 15300 
##     2     1     1     2     1     2     2     4     2     1     2     2     1 
## 15301 15303 15304 15306 15307 15308 15311 15312 15313 15314 15315 15316 15318 
##     2     1     4     1     1     1     2     1     4     1     1     4     1 
## 15319 15320 15321 15322 15325 15326 15327 15329 15330 15332 15333 15334 15335 
##     1     1     3     3     4     1     1     1     1     1     3     4     4 
## 15339 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15353 
##     1     3     1     1     4     1     1     1     4     1     4     2     1 
## 15355 15356 15358 15360 15361 15363 15364 15365 15366 15367 15368 15370 15372 
##     4     2     2     1     1     1     1     2     1     1     1     2     3 
## 15373 15374 15376 15379 15380 15381 15382 15384 15385 15386 15389 15392 15393 
##     2     4     1     2     2     1     3     1     1     1     1     1     4 
## 15394 15395 15396 15397 15398 15399 15400 15402 15405 15406 15407 15408 15410 
##     3     4     1     4     3     1     4     1     1     1     1     1     2 
## 15411 15412 15414 15415 15416 15417 15419 15421 15422 15423 15424 15426 15427 
##     1     4     1     1     3     1     4     1     4     4     4     2     1 
## 15428 15429 15432 15433 15434 15435 15436 15437 15438 15440 15442 15443 15444 
##     4     1     4     1     2     4     1     1     4     4     3     2     3 
## 15445 15447 15448 15449 15450 15452 15453 15454 15456 15457 15458 15460 15462 
##     4     4     1     1     1     4     2     4     4     1     4     1     4 
## 15463 15464 15465 15466 15467 15468 15469 15471 15472 15473 15475 15478 15480 
##     4     3     2     1     4     1     1     1     1     2     1     3     3 
## 15482 15483 15484 15485 15488 15489 15491 15492 15493 15494 15497 15498 15500 
##     2     4     3     3     4     1     2     1     2     3     3     2     1 
## 15502 15503 15504 15505 15506 15507 15508 15510 15511 15512 15513 15514 15516 
##     2     4     4     3     1     1     2     1     2     4     2     2     4 
## 15517 15518 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 
##     1     2     1     2     1     1     1     1     4     2     1     2     1 
## 15531 15532 15533 15535 15537 15539 15540 15541 15543 15544 15545 15547 15549 
##     3     1     1     4     4     1     1     4     4     2     4     2     3 
## 15550 15551 15552 15553 15554 15555 15556 15557 15561 15562 15563 15565 15567 
##     4     1     4     1     1     2     1     1     1     4     1     4     4 
## 15568 15569 15570 15571 15572 15573 15574 15576 15577 15578 15579 15581 15582 
##     1     2     2     4     2     1     4     3     4     4     4     2     1 
## 15584 15585 15587 15589 15592 15593 15594 15596 15597 15598 15599 15601 15602 
##     4     1     1     4     1     1     2     2     1     1     1     2     2 
## 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15615 15618 15619 
##     4     1     2     2     4     1     1     4     2     4     2     1     1 
## 15620 15621 15622 15623 15624 15625 15626 15628 15630 15632 15634 15636 15637 
##     1     1     2     1     4     1     1     2     3     2     1     1     1 
## 15639 15640 15641 15643 15644 15645 15646 15648 15649 15651 15652 15653 15654 
##     1     2     1     1     1     3     4     1     1     1     1     1     1 
## 15655 15656 15657 15658 15659 15660 15661 15663 15664 15665 15667 15668 15669 
##     1     4     4     2     1     2     4     4     1     3     1     4     4 
## 15670 15671 15673 15674 15675 15676 15677 15678 15679 15680 15681 15683 15687 
##     4     2     3     2     4     3     3     1     1     1     2     4     2 
## 15689 15690 15691 15692 15694 15695 15696 15699 15700 15701 15703 15704 15705 
##     4     4     4     4     2     1     2     1     1     1     1     3     4 
## 15706 15707 15708 15709 15712 15713 15714 15716 15717 15719 15720 15721 15722 
##     1     1     2     4     2     4     4     1     4     2     3     1     2 
## 15723 15724 15725 15727 15729 15730 15732 15733 15734 15737 15738 15739 15740 
##     1     4     1     2     4     1     4     4     3     2     2     1     4 
## 15743 15744 15745 15746 15747 15748 15749 15750 15752 15753 15754 15755 15756 
##     1     4     1     4     1     4     3     2     2     4     4     2     4 
## 15757 15758 15759 15762 15763 15764 15766 15768 15769 15773 15774 15775 15776 
##     1     1     4     1     1     2     1     1     2     3     1     4     1 
## 15777 15780 15781 15782 15783 15785 15786 15787 15789 15790 15791 15793 15795 
##     1     4     4     3     1     2     3     1     1     1     3     1     3 
## 15796 15797 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 
##     2     3     1     1     1     1     1     2     2     1     1     3     4 
## 15810 15811 15812 15813 15814 15815 15819 15820 15821 15822 15823 15825 15826 
##     1     2     2     3     1     2     1     1     1     1     4     1     3 
## 15827 15829 15830 15831 15832 15834 15835 15836 15837 15838 15839 15840 15841 
##     2     1     1     1     3     3     1     4     1     2     1     4     1 
## 15843 15844 15845 15847 15850 15852 15853 15854 15855 15856 15857 15858 15860 
##     4     4     2     4     4     4     4     2     4     2     1     2     2 
## 15861 15862 15863 15864 15865 15866 15867 15869 15870 15872 15874 15877 15880 
##     2     1     4     2     1     1     2     4     1     4     2     1     1 
## 15881 15882 15883 15885 15886 15888 15889 15891 15894 15895 15897 15898 15899 
##     4     4     1     4     4     4     1     1     4     4     4     2     4 
## 15900 15901 15903 15904 15906 15907 15909 15910 15912 15916 15917 15918 15919 
##     1     4     2     4     2     1     4     2     4     2     4     4     1 
## 15920 15921 15922 15923 15925 15930 15932 15933 15935 15937 15938 15939 15940 
##     4     1     1     4     1     1     2     1     1     4     4     2     4 
## 15942 15944 15945 15947 15948 15949 15950 15951 15952 15953 15955 15957 15958 
##     1     1     4     3     1     4     1     1     1     2     2     1     4 
## 15963 15965 15967 15969 15970 15971 15973 15974 15975 15976 15977 15978 15980 
##     1     1     1     1     1     2     1     2     1     1     1     3     3 
## 15981 15983 15984 15985 15986 15987 15988 15990 15992 15993 15994 15996 15998 
##     2     1     2     3     4     2     4     1     4     2     1     2     3 
## 16000 16003 16005 16006 16007 16008 16009 16010 16011 16012 16013 16014 16015 
##     3     2     4     4     1     4     1     4     2     1     2     1     1 
## 16016 16017 16018 16019 16020 16022 16023 16024 16025 16026 16027 16029 16030 
##     2     1     1     2     1     3     1     1     1     1     2     2     1 
## 16031 16033 16034 16036 16037 16038 16040 16041 16042 16043 16045 16048 16049 
##     1     2     4     1     1     4     1     3     2     1     1     4     1 
## 16050 16052 16053 16054 16055 16056 16057 16059 16062 16063 16065 16066 16070 
##     4     1     3     3     4     3     2     2     1     1     1     2     1 
## 16071 16072 16073 16076 16078 16079 16080 16081 16083 16084 16085 16086 16091 
##     1     3     4     2     4     1     4     2     3     1     2     2     4 
## 16092 16093 16094 16096 16097 16098 16099 16101 16102 16103 16104 16105 16106 
##     1     4     1     1     4     2     1     3     3     2     1     1     4 
## 16107 16108 16109 16110 16112 16113 16114 16115 16116 16117 16119 16120 16121 
##     2     3     1     1     4     4     4     2     3     1     1     1     1 
## 16122 16123 16124 16125 16126 16127 16128 16131 16133 16134 16135 16136 16139 
##     4     1     1     1     3     3     2     2     2     1     1     1     1 
## 16140 16141 16142 16143 16144 16145 16146 16147 16148 16149 16150 16152 16153 
##     1     3     1     2     4     2     1     1     4     4     2     3     2 
## 16156 16157 16159 16160 16161 16162 16163 16164 16168 16169 16170 16171 16172 
##     2     1     1     1     2     4     1     1     2     1     2     4     2 
## 16173 16174 16175 16177 16178 16179 16180 16181 16182 16183 16184 16185 16186 
##     2     1     1     1     4     1     3     1     3     1     2     1     2 
## 16187 16188 16189 16190 16191 16193 16198 16200 16201 16202 16203 16204 16205 
##     2     1     4     1     2     1     1     1     1     1     4     1     4 
## 16206 16207 16208 16209 16210 16211 16212 16213 16214 16215 16216 16217 16218 
##     4     1     1     2     2     1     1     4     1     1     3     4     2 
## 16221 16222 16224 16225 16226 16227 16229 16230 16232 16233 16235 16236 16239 
##     1     3     1     2     4     1     1     1     1     4     2     1     1 
## 16240 16241 16242 16243 16244 16245 16247 16248 16249 16250 16253 16255 16256 
##     3     2     2     1     3     1     4     4     2     4     3     2     3 
## 16257 16258 16260 16261 16265 16266 16268 16270 16271 16272 16274 16275 16276 
##     4     3     3     4     2     2     1     3     2     1     1     1     3 
## 16278 16279 16281 16282 16283 16284 16287 16292 16293 16295 16297 16298 16302 
##     1     1     3     4     2     1     4     1     2     1     1     1     1 
## 16303 16305 16306 16308 16309 16311 16313 16315 16316 16317 16318 16319 16320 
##     3     1     4     3     1     1     4     1     2     1     1     1     1 
## 16321 16322 16323 16324 16325 16326 16327 16330 16332 16333 16337 16338 16339 
##     4     4     1     4     1     2     2     4     2     2     4     1     4 
## 16340 16341 16342 16343 16344 16345 16347 16348 16349 16350 16351 16352 16353 
##     1     1     4     4     4     1     1     2     4     1     4     1     2 
## 16354 16356 16357 16358 16359 16360 16361 16362 16363 16364 16365 16366 16367 
##     1     4     1     1     2     2     1     4     4     1     2     1     1 
## 16368 16369 16370 16372 16374 16376 16377 16378 16379 16380 16383 16384 16385 
##     1     1     1     4     1     1     3     4     3     3     1     1     4 
## 16386 16387 16389 16392 16393 16394 16395 16398 16399 16400 16401 16402 16403 
##     4     4     1     1     2     2     2     3     1     1     2     4     4 
## 16404 16405 16406 16407 16409 16411 16412 16413 16414 16415 16416 16418 16419 
##     1     4     4     2     2     4     4     1     4     1     1     1     2 
## 16422 16423 16424 16425 16426 16427 16429 16430 16431 16432 16433 16434 16438 
##     2     1     4     1     2     4     1     1     1     1     4     2     4 
## 16440 16441 16442 16444 16445 16446 16447 16448 16449 16450 16451 16454 16455 
##     3     4     1     4     1     3     1     4     1     1     1     4     2 
## 16456 16457 16458 16460 16461 16462 16463 16464 16466 16468 16469 16470 16471 
##     2     1     2     1     4     4     1     1     2     4     4     4     1 
## 16473 16474 16475 16477 16478 16479 16480 16482 16483 16484 16485 16488 16491 
##     4     2     4     2     4     4     3     1     4     1     1     4     3 
## 16493 16494 16495 16496 16497 16498 16499 16500 16503 16504 16505 16506 16509 
##     1     3     1     3     2     4     4     4     1     1     3     4     1 
## 16510 16511 16513 16515 16516 16517 16518 16519 16520 16523 16525 16526 16527 
##     1     1     1     2     4     4     1     4     1     2     2     1     1 
## 16528 16529 16531 16532 16533 16535 16536 16539 16542 16545 16546 16549 16550 
##     1     1     2     3     1     3     1     1     4     1     1     2     2 
## 16551 16552 16553 16554 16555 16556 16557 16558 16560 16561 16563 16565 16566 
##     1     4     2     1     4     2     4     2     1     1     3     4     4 
## 16567 16569 16570 16571 16572 16573 16574 16581 16582 16583 16584 16586 16587 
##     1     4     2     1     1     1     1     4     1     1     1     1     1 
## 16589 16591 16592 16593 16594 16595 16596 16597 16598 16600 16601 16602 16603 
##     4     1     2     4     4     1     4     4     4     2     1     1     1 
## 16607 16609 16610 16611 16612 16613 16614 16616 16617 16618 16619 16620 16621 
##     2     2     4     4     1     3     1     1     4     2     1     4     1 
## 16623 16624 16625 16626 16627 16628 16629 16633 16634 16637 16638 16639 16641 
##     4     1     1     2     1     2     1     2     4     1     2     1     1 
## 16642 16643 16644 16647 16648 16650 16652 16653 16654 16655 16656 16657 16658 
##     1     1     1     4     1     1     3     3     4     2     2     1     4 
## 16659 16660 16665 16666 16667 16668 16669 16670 16671 16672 16674 16676 16678 
##     4     1     4     4     1     4     1     2     3     2     4     1     2 
## 16679 16680 16681 16682 16684 16685 16686 16688 16689 16690 16692 16693 16696 
##     4     4     2     2     2     4     2     1     1     4     3     1     4 
## 16697 16698 16700 16701 16705 16706 16708 16709 16710 16711 16712 16713 16714 
##     4     3     2     2     2     4     3     3     2     2     2     2     1 
## 16715 16716 16717 16718 16719 16720 16721 16722 16723 16725 16726 16727 16728 
##     1     1     2     3     2     4     1     2     1     2     2     1     1 
## 16729 16730 16732 16734 16735 16737 16738 16739 16742 16743 16744 16745 16746 
##     2     1     3     1     2     1     4     1     1     2     2     2     2 
## 16747 16748 16750 16751 16752 16753 16754 16755 16756 16757 16758 16759 16761 
##     1     2     4     3     1     1     3     1     1     4     1     1     1 
## 16762 16763 16764 16765 16766 16767 16768 16769 16770 16771 16773 16774 16775 
##     1     3     2     4     3     2     4     1     4     2     4     4     2 
## 16776 16777 16778 16779 16780 16781 16782 16784 16788 16789 16790 16791 16792 
##     1     4     4     2     1     1     2     4     1     4     2     2     4 
## 16793 16794 16795 16796 16800 16801 16803 16804 16805 16806 16807 16808 16809 
##     1     2     1     1     3     1     1     4     1     1     1     4     2 
## 16810 16811 16812 16813 16814 16816 16817 16818 16820 16823 16824 16825 16826 
##     1     1     1     2     2     4     2     2     1     1     1     1     1 
## 16828 16829 16830 16832 16833 16834 16835 16836 16837 16838 16839 16841 16842 
##     4     4     1     4     1     1     4     4     2     1     2     2     1 
## 16843 16846 16847 16848 16849 16850 16851 16852 16855 16856 16858 16859 16861 
##     2     1     4     1     4     1     4     4     4     4     1     1     4 
## 16863 16866 16869 16871 16872 16873 16875 16877 16878 16880 16881 16882 16883 
##     1     4     1     2     1     3     2     2     4     2     1     1     4 
## 16884 16885 16887 16889 16891 16892 16893 16895 16897 16898 16899 16900 16902 
##     1     4     4     1     4     4     4     1     4     4     2     1     3 
## 16903 16904 16905 16906 16907 16909 16910 16912 16913 16914 16915 16916 16917 
##     1     2     2     4     2     1     2     2     4     1     4     1     1 
## 16918 16919 16921 16923 16924 16926 16927 16928 16929 16930 16931 16932 16933 
##     2     2     4     2     1     1     4     2     2     4     2     4     1 
## 16934 16936 16938 16940 16942 16943 16945 16947 16948 16949 16950 16951 16952 
##     1     1     3     3     2     1     2     1     4     2     1     1     4 
## 16953 16954 16955 16956 16957 16959 16960 16961 16963 16965 16966 16967 16968 
##     4     2     4     1     1     4     4     1     4     1     2     1     1 
## 16969 16971 16976 16978 16979 16980 16982 16983 16984 16985 16986 16987 16988 
##     1     1     1     1     2     1     1     2     3     2     3     2     4 
## 16989 16990 16992 16996 16997 16998 16999 17001 17002 17004 17006 17007 17010 
##     2     4     2     2     1     4     1     2     1     3     1     2     4 
## 17011 17014 17015 17017 17018 17019 17022 17024 17025 17026 17027 17029 17030 
##     1     1     3     2     1     1     4     4     4     4     2     1     4 
## 17031 17033 17034 17035 17037 17038 17040 17041 17042 17043 17044 17045 17046 
##     4     1     1     1     3     4     1     1     2     1     3     4     3 
## 17047 17048 17049 17050 17051 17052 17053 17054 17058 17059 17060 17061 17062 
##     1     1     2     2     1     1     1     2     1     3     1     2     4 
## 17063 17064 17068 17069 17070 17071 17073 17075 17076 17078 17079 17080 17081 
##     2     1     2     2     1     2     1     1     1     4     4     4     4 
## 17082 17083 17084 17085 17086 17088 17090 17091 17092 17094 17095 17096 17097 
##     3     1     3     2     2     1     2     2     1     1     1     1     2 
## 17100 17101 17102 17105 17107 17109 17110 17111 17114 17115 17117 17118 17119 
##     1     1     4     1     3     2     4     1     2     1     4     4     1 
## 17120 17122 17123 17124 17125 17126 17128 17131 17133 17134 17135 17138 17139 
##     1     4     1     1     1     2     4     2     2     1     2     1     2 
## 17140 17142 17144 17146 17147 17148 17152 17153 17154 17155 17157 17158 17159 
##     1     3     1     1     1     4     3     1     1     4     4     1     1 
## 17160 17162 17163 17164 17165 17166 17169 17171 17172 17173 17174 17175 17176 
##     2     2     4     2     4     4     1     1     1     2     4     1     1 
## 17179 17180 17181 17183 17186 17187 17188 17189 17190 17191 17193 17194 17197 
##     1     1     4     2     4     1     2     4     1     2     2     4     3 
## 17198 17201 17203 17204 17205 17206 17211 17212 17213 17214 17217 17218 17219 
##     1     1     2     1     1     1     2     1     2     2     4     2     4 
## 17220 17221 17222 17223 17226 17227 17228 17229 17230 17231 17232 17233 17234 
##     2     4     1     1     1     2     2     4     2     2     1     4     4 
## 17235 17236 17237 17238 17239 17242 17243 17244 17245 17247 17248 17250 17251 
##     1     2     4     2     1     3     2     3     4     1     1     4     1 
## 17252 17253 17254 17255 17256 17259 17262 17263 17265 17266 17267 17268 17272 
##     4     4     4     4     4     1     2     4     1     4     4     4     3 
## 17274 17277 17278 17279 17282 17284 17286 17287 17288 17289 17290 17291 17293 
##     4     1     1     4     3     2     4     2     2     1     1     1     2 
## 17295 17297 17298 17299 17301 17302 17303 17306 17309 17311 17312 17313 17314 
##     4     4     1     4     4     2     1     2     4     3     1     3     2 
## 17315 17317 17320 17321 17323 17324 17325 17329 17330 17331 17333 17334 17337 
##     2     3     1     1     2     1     4     1     4     4     1     4     1 
## 17338 17339 17340 17341 17343 17344 17345 17346 17347 17348 17349 17350 17351 
##     2     4     2     1     4     4     4     2     1     2     4     1     1 
## 17353 17354 17356 17357 17358 17359 17360 17361 17362 17364 17365 17367 17368 
##     3     3     4     4     4     4     1     4     4     2     2     4     2 
## 17370 17371 17372 17373 17374 17375 17376 17377 17379 17381 17382 17383 17384 
##     4     4     2     4     1     4     4     2     1     2     4     1     4 
## 17385 17386 17387 17388 17389 17391 17392 17394 17396 17397 17398 17400 17402 
##     1     2     1     1     2     1     1     1     2     1     1     2     2 
## 17403 17404 17405 17406 17408 17409 17410 17411 17412 17414 17415 17416 17418 
##     1     2     1     3     4     1     2     1     2     1     1     3     1 
## 17419 17420 17422 17423 17425 17426 17427 17428 17429 17430 17431 17432 17433 
##     2     1     2     1     1     3     4     2     4     4     1     4     1 
## 17434 17436 17438 17440 17442 17446 17447 17449 17450 17451 17453 17454 17455 
##     2     4     1     4     2     4     1     2     2     2     1     4     4 
## 17456 17457 17458 17459 17460 17461 17462 17463 17464 17466 17468 17469 17470 
##     1     2     1     1     4     1     1     2     1     1     4     2     2 
## 17472 17475 17480 17481 17483 17486 17489 17490 17491 17492 17495 17496 17498 
##     1     4     1     1     4     1     4     2     2     1     1     1     1 
## 17499 17500 17501 17502 17503 17504 17505 17506 17507 17508 17509 17510 17511 
##     3     1     4     4     1     2     3     1     1     1     2     1     2 
## 17512 17513 17514 17515 17516 17517 17519 17520 17521 17522 17523 17524 17525 
##     2     1     1     4     4     4     2     1     1     2     4     4     1 
## 17526 17527 17528 17530 17531 17534 17535 17536 17537 17538 17540 17542 17545 
##     1     1     2     2     1     1     4     4     1     4     1     4     1 
## 17548 17549 17550 17551 17552 17553 17554 17555 17556 17557 17560 17561 17562 
##     4     4     4     1     1     3     2     1     4     4     1     4     2 
## 17564 17566 17567 17569 17571 17572 17573 17574 17576 17578 17579 17580 17581 
##     4     1     2     1     1     4     4     4     2     4     4     4     2 
## 17582 17584 17585 17588 17589 17590 17591 17593 17594 17595 17596 17597 17600 
##     4     3     1     1     3     1     2     3     1     4     2     3     4 
## 17601 17602 17603 17604 17608 17609 17611 17612 17613 17614 17615 17616 17618 
##     4     3     1     4     4     2     2     2     2     1     4     4     1 
## 17619 17620 17621 17623 17624 17625 17628 17629 17630 17631 17633 17634 17636 
##     1     4     1     1     1     1     4     2     1     4     1     2     1 
## 17637 17639 17640 17642 17643 17644 17646 17647 17648 17649 17650 17651 17652 
##     1     4     3     1     4     2     1     4     1     3     4     2     2 
## 17653 17654 17655 17656 17658 17659 17660 17663 17664 17666 17667 17668 17669 
##     1     4     2     2     1     2     4     2     1     1     2     4     2 
## 17670 17671 17672 17673 17674 17675 17676 17677 17678 17679 17680 17682 17684 
##     1     1     3     2     1     2     2     2     1     3     4     2     1 
## 17685 17686 17690 17691 17692 17693 17694 17695 17696 17697 17698 17700 17701 
##     2     2     2     4     4     1     1     1     2     1     4     3     1 
## 17702 17703 17704 17705 17706 17707 17708 17709 17711 17712 17714 17715 17716 
##     1     1     1     2     2     4     4     4     4     1     4     1     2 
## 17718 17719 17720 17722 17723 17724 17725 17727 17728 17730 17731 17732 17733 
##     4     2     1     3     2     1     2     3     3     2     1     1     1 
## 17734 17735 17736 17737 17738 17739 17742 17744 17746 17747 17749 17750 17752 
##     1     2     4     4     1     2     4     2     4     4     1     2     4 
## 17754 17757 17758 17759 17760 17761 17763 17764 17765 17767 17768 17769 17770 
##     2     2     2     1     4     3     4     1     4     1     3     2     2 
## 17771 17772 17774 17775 17777 17779 17781 17783 17785 17786 17787 17788 17789 
##     4     4     1     4     1     1     4     4     4     4     1     3     1 
## 17790 17791 17793 17795 17796 17797 17799 17800 17802 17805 17806 17809 17811 
##     2     4     1     4     4     1     2     2     1     1     1     2     2 
## 17812 17813 17816 17817 17819 17824 17827 17828 17829 17830 17831 17832 17835 
##     4     2     4     4     2     1     2     1     3     4     4     4     4 
## 17836 17837 17838 17839 17841 17843 17846 17848 17849 17850 17852 17854 17855 
##     4     2     2     1     2     1     3     2     4     2     4     4     1 
## 17856 17857 17858 17859 17860 17861 17862 17863 17864 17865 17866 17867 17869 
##     1     2     2     4     1     2     1     2     1     2     1     2     4 
## 17870 17871 17873 17874 17877 17878 17879 17880 17881 17883 17884 17885 17886 
##     2     4     2     4     1     1     4     1     4     4     4     4     1 
## 17887 17888 17889 17890 17891 17892 17893 17894 17895 17896 17897 17898 17899 
##     4     2     4     1     1     4     4     2     4     1     4     4     4 
## 17900 17901 17904 17905 17906 17908 17911 17912 17913 17914 17917 17919 17920 
##     4     4     4     1     4     1     1     4     1     1     4     3     2 
## 17921 17923 17924 17925 17926 17928 17929 17930 17931 17932 17934 17935 17936 
##     1     1     2     1     1     4     1     2     1     1     1     4     1 
## 17937 17939 17940 17941 17942 17946 17947 17948 17949 17950 17951 17954 17955 
##     2     4     2     1     4     4     4     1     2     4     1     2     4 
## 17956 17957 17958 17960 17961 17962 17964 17965 17966 17967 17968 17969 17970 
##     4     4     1     4     2     4     1     2     2     4     1     4     3 
## 17972 17973 17974 17975 17976 17977 17978 17979 17980 17984 17985 17986 17987 
##     4     1     1     2     1     1     1     4     1     4     3     4     1 
## 17988 17990 17991 17994 17995 17997 17999 18001 18004 18005 18006 18008 18009 
##     4     1     4     4     4     2     4     1     4     4     1     2     1 
## 18010 18011 18013 18014 18015 18016 18017 18018 18019 18022 18024 18027 18030 
##     4     4     4     4     4     2     4     4     4     3     4     4     4 
## 18032 18033 18034 18035 18036 18037 18040 18041 18042 18043 18044 18045 18048 
##     4     4     1     1     4     4     4     2     4     4     2     4     4 
## 18050 18053 18055 18056 18058 18059 18061 18062 18064 18065 18066 18067 18068 
##     4     1     2     1     4     4     2     1     1     2     1     1     4 
## 18069 18071 18072 18073 18074 18075 18077 18078 18079 18080 18081 18082 18084 
##     2     1     1     2     1     2     2     4     3     3     4     3     4 
## 18085 18086 18087 18088 18092 18093 18094 18095 18096 18097 18099 18101 18102 
##     1     4     3     4     2     3     2     1     1     2     4     4     2 
## 18104 18105 18106 18108 18109 18110 18112 18113 18114 18116 18117 18118 18119 
##     3     4     1     1     2     1     4     4     1     2     1     2     4 
## 18120 18121 18122 18123 18125 18126 18127 18129 18130 18133 18135 18136 18138 
##     4     1     2     1     1     1     4     4     1     3     4     1     4 
## 18139 18142 18143 18144 18145 18146 18147 18149 18150 18151 18154 18155 18156 
##     3     1     1     2     3     4     4     1     4     1     1     4     1 
## 18158 18159 18160 18161 18164 18165 18167 18168 18169 18170 18171 18172 18173 
##     1     1     1     2     1     1     1     2     1     1     2     2     3 
## 18174 18176 18177 18178 18179 18180 18181 18183 18184 18185 18188 18189 18190 
##     4     1     2     1     2     2     1     1     4     1     3     1     4 
## 18191 18192 18193 18194 18196 18198 18200 18202 18203 18204 18205 18209 18210 
##     1     3     1     3     1     2     4     1     4     3     1     4     2 
## 18211 18212 18213 18215 18216 18217 18218 18219 18220 18221 18222 18223 18224 
##     4     1     1     1     1     1     1     2     1     2     1     2     4 
## 18225 18226 18227 18228 18229 18230 18231 18232 18233 18235 18236 18237 18239 
##     2     2     4     1     2     2     2     4     1     3     2     2     2 
## 18240 18241 18242 18245 18246 18248 18249 18250 18251 18252 18255 18257 18259 
##     1     2     3     2     1     1     4     1     3     1     4     2     3 
## 18260 18261 18262 18263 18265 18268 18269 18270 18272 18273 18274 18276 18277 
##     2     4     4     1     1     4     4     4     2     4     4     1     4 
## 18278 18280 18281 18282 18283 18287 
##     4     4     4     4     2     3 
## 
## Within cluster sum of squares by cluster:
## [1]  657.8735 1082.8025  501.5911  751.0758
##  (between_SS / total_SS =  65.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Optimizar número de grupos

set.seed(123)
optimizacion3 = clusGap(df3_escalados, FUN=kmeans, nstart=1, K.max=10)
## Warning: did not converge in 10 iterations
## Warning: did not converge in 10 iterations
## Warning: did not converge in 10 iterations
plot(optimizacion3, xlab="Número de clusters K", main="Optimización de Clusters")

# Se selecciona como óptimo el primer punto más alto.
# si es diferente hay que regresar al original y ajustar.

Gráficar los grupos

fviz_cluster(clusters3,data=df3_escalados,geom="point")

## Agregar grupos a la base de datos

df3_clusters = cbind(df3, cluster = clusters3$cluster)
head(df3_clusters)
##       Frecuencia Ticket_promedio cluster
## 12346          1      77183.6000       3
## 12347          7        615.7143       2
## 12349          1       1757.5500       3
## 12350          1        334.4000       1
## 12352          8        313.2550       2
## 12353          1         89.0000       4
df3_clusters %>% group_by(cluster) %>% summarise(Frecuencia_media=mean(Frecuencia), Ticket_promedio_medio=mean(Ticket_promedio))
## # A tibble: 4 × 3
##   cluster Frecuencia_media Ticket_promedio_medio
##     <int>            <dbl>                 <dbl>
## 1       1             1.99                  333.
## 2       2            11.3                   386.
## 3       3             2.55                 1437.
## 4       4             1.94                  130.
# Revisar el orden real de los clusters con la tabla anterior y ajustar los nombres si no coincide.
df3_clusters = df3_clusters %>%
  mutate(cluster = case_when(
    cluster == 1 ~ "Clientes VIP",
    cluster == 2 ~ "Clientes Frecuentes",
    cluster == 3 ~ "Clientes Ocasionales",
    cluster == 4 ~ "Clientes Nuevos/Bajos",
  ))
head(df3_clusters)
##       Frecuencia Ticket_promedio               cluster
## 12346          1      77183.6000  Clientes Ocasionales
## 12347          7        615.7143   Clientes Frecuentes
## 12349          1       1757.5500  Clientes Ocasionales
## 12350          1        334.4000          Clientes VIP
## 12352          8        313.2550   Clientes Frecuentes
## 12353          1         89.0000 Clientes Nuevos/Bajos

Recomendaciones de negocio

  • Clientes VIP (alta frecuencia, ticket promedio alto): programa de fidelización con beneficios exclusivos, atención prioritaria y acceso anticipado a productos nuevos para mantener su alto valor.
  • Clientes Frecuentes (alta frecuencia, ticket promedio bajo/medio): estrategias de cross-selling y bundles para elevar el ticket promedio, aprovechando que ya compran seguido.
  • Clientes Ocasionales (baja frecuencia, ticket promedio alto): campañas de reactivación (email marketing, recordatorios) para aumentar la frecuencia de visita, ya que cuando compran gastan bien.
  • Clientes Nuevos/Bajos (baja frecuencia, ticket promedio bajo): incentivos de bienvenida y descuentos en la segunda compra para impulsarlos hacia otro segmento. ## Conclusiones La técnica de clustering permite identificar patrones o grupos naturales en los datos sin necesidad de etiquetas previas. En este caso fue utilizado para segmentar a los clientes de una empresa minorista en línea según su frecuencia de compra y su ticket promedio, lo que permite diseñar estrategias comerciales diferenciadas para cada tipo de cliente.
LS0tDQp0aXRsZTogIkNsdXN0ZXJzIC0gUHVudG9zLCBVU0FycmVzdHMgeSBDbGllbnRlcyINCmF1dGhvcjogIk1hcsOtYSBGZXJuYW5kYSBTYW4gUm9tw6FuIE9yb3pjbyAtIEEwMTQyNDY5MSINCmRhdGU6ICIyNS8wOC8yMDI2Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHNwYWNlbGFiDQotLS0NCiFbXShodHRwczovL21pcm8ubWVkaXVtLmNvbS92Mi8xKmIyc08yZi0teWZaaUphemM1cllTcGcuZ2lmKQ0KDQohW10oaHR0cHM6Ly9wcmV2aWV3LnJlZGQuaXQvYmx1cnNlZC1oYW5kY3VmZnMtdjAtdWticXdvaGZqdno5MS5qcGc/d2lkdGg9NjQwJmNyb3A9c21hcnQmYXV0bz13ZWJwJnM9ZDdiZGMyNmYyN2M1NGMxYWJhMTZkMjAwYmY5ZmU0OGQwYzg4OWI2ZSkNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+VGVvcsOtYSA8L3NwYW4+DQoqKkFncnVwYW1pZW50byoqIG8gKipDbHVzdGVyaW5nKiogZXMgdW5hIHTDqWNuaWNhIGRlIGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvIG5vIHN1cGVydmlzYWRvIHF1ZSBhZ3J1cGEgZGF0b3MgZW4gZnVuY2nDs24gZGUgc3Ugc2ltaWxpdHVkLg0KDQpBbGd1bm9zIHVzb3MgdMOtcGljb3MgZGUgZXN0YSB0w6ljbmljYSBzb246DQoqIFNlZ21lbnRhY2nDs24gZGUgY2xpZW50ZXMNCiogRGV0ZWNjacOzbiBkZSBhbm9ybWFsaWRhZGVzDQoqIENhdGVnb3JpemFjacOzbiBkZSBkb2N1bWVudG9zDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMgPC9zcGFuPg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNpbnN0YWxsLnBhY2thZ2VzKCJjbHVzdGVyIikNCmxpYnJhcnkoImNsdXN0ZXIiKQ0KI2luc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQ0KbGlicmFyeSgiZ2dwbG90MiIpDQojaW5zdGFsbC5wYWNrYWdlcygiZGF0YS50YWJsZSIpDQpsaWJyYXJ5KCJkYXRhLnRhYmxlIikNCiNpbnN0YWxsLnBhY2thZ2VzKCJmYWN0b2V4dHJhIikNCmxpYnJhcnkoImZhY3RvZXh0cmEiKQ0KI2luc3RhbGwucGFja2FnZXMoImRhdGFzZXRzIikNCmxpYnJhcnkoImRhdGFzZXRzIikNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+RWplcmNpY2lvIDEuIFB1bnRvcyA8L3NwYW4+DQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5Db250ZXh0byA8L3NwYW4+DQpBZ3J1cGEgbG9zIHNpZ3VpZW50ZXMgOCBwdW50b3MuDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5CYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGYxID0gZGF0YS5mcmFtZSh4PWMoMiwyLDgsNSw3LDYsMSw0KSwgeT1jKDEwLDUsNCw4LDUsNCwyLDkpKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5FbnRlbmRlciBsb3MgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpzdW1tYXJ5KGRmMSkNCnN0cihkZjEpDQpwbG90KGRmMSR4LGRmMSR5KQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5Fc2NhbGFyIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KIyBkYXRvc19lc2NhbGFkb3MgPSBzY2FsZShkYXRvc19vcmlnaW5hbGVzKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5Bc2lnbmFyIG7Dum1lcm8gZGUgZ3J1cG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZ3J1cG9zMSA9IDMNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+QWdydXBhciBsb3MgcHVudG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KY2x1c3RlcnMxID0ga21lYW5zKGRmMSxncnVwb3MxKQ0KY2x1c3RlcnMxDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPk9wdGltaXphciBuw7ptZXJvIGRlIGdydXBvcyA8L3NwYW4+DQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCm9wdGltaXphY2lvbjEgPSBjbHVzR2FwKGRmMSwgRlVOPWttZWFucywgbnN0YXJ0PTEsIEsubWF4PTcpDQojIGVsIGsubWF4IG5vcm1hbG1lbnRlIGxvIHBvbmVtb3MgZW4gMTAgZW4gZXN0ZSBlamVyY2ljaW8gYWwgc2VyIDggZGF0b3Mgc2UgZGVqbyBlbiA3Lg0KcGxvdChvcHRpbWl6YWNpb24xLCB4bGFiPSJOw7ptZXJvIGRlIGNsdXN0ZXJzIEsiLCBtYWluPSJPcHRpbWl6YWNpw7NuIGRlIENsdXN0ZXJzIikNCiMgU2Ugc2VsZWNjaW9uYSBjb21vIMOzcHRpbW8gZWwgcHJpbWVyIHB1bnRvIG3DoXMgYWx0by4NCiMgc2kgZXMgZGlmZXJlbnRlIGhheSBxdWUgcmVncmVzYXIgYWwgb3JpZ2luYWwgeSBhanVzdGFyLg0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+R3LDoWZpY2FyIGxvcyBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQpmdml6X2NsdXN0ZXIoY2x1c3RlcnMxLGRhdGE9ZGYxKQ0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+QWdyZWdhciBncnVwb3MgYSBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGYxX2NsdXN0ZXJzID0gY2JpbmQoZGYxLCBjbHVzdGVyID0gY2x1c3RlcnMxJGNsdXN0ZXIpDQpoZWFkKGRmMV9jbHVzdGVycykNCmBgYA0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkNvbmNsdXNpb25lczwvc3Bhbj4NCkxhIHTDqWNuaWNhIGRlICpjbHVzdGVyaW5nKiBwZXJtaXRlIGlkZW50aWZpY2FyIHBhdHJvbmVzIG8gZ3J1cG9zIG5hdHVyYWxlcyBlbiBsb3MgZGF0b3Mgc2luIG5lY2VzaWRhZCBkZSBldGlxdWV0YXMgcHJldmlhcy4gRXMgdW5hIHTDqWNuaWNhIGRlIE1MIG5vIHN1cGVydmlzYWRvLg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5FamVyY2ljaW8gMi4gVVNBcnJlc3RzIDwvc3Bhbj4NCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkNvbnRleHRvIDwvc3Bhbj4NCkxhIGJhc2UgZGUgZGF0b3MgKlVTQXJyZXN0cyogY29udGllbmUgZXN0YWTDrXRpY2FzIGVuIGFycmVzdG9zIHBvciBjYWRhIDEwMCwwMCByZXNpZGVudGVzIHBvciBhZ3Jlc2nDs24sIGFzZXNpbmF0byB5IHZpb2xhY2nDs24gZW4gY2FkYSB1bm8gZGUgbG9zIDUwIGVzdGFkb3MgZGUgRUUuVVUuIGVuIDE5NzMgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5CYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGYyID0gVVNBcnJlc3RzDQpkZjIgPSBkZjIgJT4lIHNlbGVjdCgtVXJiYW5Qb3ApDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkVudGVuZGVyIGxvcyBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGYyKQ0Kc3RyKGRmMikNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+RXNjYWxhciBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCmRmMl9lc2NhbGFkb3MgPSBzY2FsZShkZjIpDQpzdW1tYXJ5KGRmMl9lc2NhbGFkb3MpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkFzaWduYXIgbsO6bWVybyBkZSBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQpncnVwb3MyID0gNQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5BZ3J1cGFyIGxvcyBwdW50b3MgPC9zcGFuPg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpjbHVzdGVyczIgPSBrbWVhbnMoZGYyX2VzY2FsYWRvcyxncnVwb3MyKQ0KY2x1c3RlcnMyDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPk9wdGltaXphciBuw7ptZXJvIGRlIGdydXBvcyA8L3NwYW4+DQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCm9wdGltaXphY2lvbjIgPSBjbHVzR2FwKGRmMl9lc2NhbGFkb3MsIEZVTj1rbWVhbnMsIG5zdGFydD0xLCBLLm1heD0xMCkNCnBsb3Qob3B0aW1pemFjaW9uMiwgeGxhYj0iTsO6bWVybyBkZSBjbHVzdGVycyBLIiwgbWFpbj0iT3B0aW1pemFjacOzbiBkZSBDbHVzdGVycyIpDQojIFNlIHNlbGVjY2lvbmEgY29tbyDDs3B0aW1vIGVsIHByaW1lciBwdW50byBtw6FzIGFsdG8uDQojIHNpIGVzIGRpZmVyZW50ZSBoYXkgcXVlIHJlZ3Jlc2FyIGFsIG9yaWdpbmFsIHkgYWp1c3Rhci4NCmBgYA0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkdyw6FmaWNhciBsb3MgZ3J1cG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZnZpel9jbHVzdGVyKGNsdXN0ZXJzMixkYXRhPWRmMl9lc2NhbGFkb3MpDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5BZ3JlZ2FyIGdydXBvcyBhIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkZjJfY2x1c3RlcnMgPSBjYmluZChkZjIsIGNsdXN0ZXIgPSBjbHVzdGVyczIkY2x1c3RlcikNCmhlYWQoZGYyX2NsdXN0ZXJzKQ0KDQpkZjJfY2x1c3RlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSBzdW1tYXJpc2VfYWxsKG1lYW4pICU+JSBtdXRhdGUoaW5kaWNhZG9yX2luc2VndXJpZGFkPU11cmRlcitBc3NhdWx0K1JhcGUpDQoNCmRmMl9jbHVzdGVycyA9IGRmMl9jbHVzdGVycyAlPiUNCiAgbXV0YXRlKGNsdXN0ZXIgPSBjYXNlX3doZW4oDQogICAgY2x1c3RlciA9PSAxIH4gIkluc2VndXJpZGFkIE11eSBBbHRhIiwNCiAgICBjbHVzdGVyID09IDIgfiAiSW5zZWd1cmlkYWQgQWx0YSIsDQogICAgY2x1c3RlciA9PSAzIH4gIkluc2VndXJpZGFkIE1lZGlhIiwNCiAgICBjbHVzdGVyID09IDQgfiAiSW5zZWd1cmlkYWQgQmFqYSIsDQogICAgY2x1c3RlciA9PSA1IH4gIkluc2VndXJpZGFkIE11eSBCYWphIiwNCiAgKSkNCmhlYWQoZGYyX2NsdXN0ZXJzKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5Db25jbHVzaW9uZXM8L3NwYW4+DQpMYSB0w6ljbmljYSBkZSAqY2x1c3RlcmluZyogcGVybWl0ZSBpZGVudGlmaWNhciBwYXRyb25lcyBvIGdydXBvcyBuYXR1cmFsZXMgZW4gbG9zIGRhdG9zIHNpbiBuZWNlc2lkYWQgZGUgZXRpcXVldGFzIHByZXZpYXMuIEVuIGVzdGUgY2FzbyBmdWUgdXRpbGl6YWRvIHBhcmEgYWdydXBhciBlc3RhZG9zIGVuIEVFLlVVLiBlbiBjdWVzdGnDs24gZGUgaW5zZWd1cmlkYWQsIHNpZW5kbyBlbCBjbHVzdGVyIDEgZWwgcXVlIHRpZW5lIG3DoXMgaW5kaWNlcyBkZSBpbnNlZ3VyaWRhZC4NCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5FamVyY2ljaW8gMy4gU2VnbWVudGFjacOzbiBkZSBDbGllbnRlcyA8L3NwYW4+DQpoYXkgcXVlIHNlZ21lbnRhcmxvcyBwb3IgZnJlY3VlbmNpYSBkZSBjb21wcmEvbnVtZXJvIGRlIHZpc2l0YXMsIHkgdGlja2V0IHByb21lZGlvLiB5IHJlY29tZW5kYWNpb25lcyBkZSBuZWdvY2lvIHBhcmEgbG9zIDQgdGlwb3MgZGUgY2xpZW50ZXMgZXN0byBlcyB0ZW9yaWEuY2FudGlkYWQgcG9yIHByZWNpbyB5IHRvdGFsaXphciBwb3IgdGlja2VjdCBzYWNhciBjdWFudGFzIHZlY2VzIHZhbg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+Q29udGV4dG8gPC9zcGFuPg0KTGEgYmFzZSBkZSBkYXRvcyAqKnZlbnRhcyoqIHRpZW5lIGxvcyByZWdpc3Ryb3MgZW50cmUgZWwgMSBkZSBEaWNpZW1icmUgZGUgMjAyMCB5IGVsIDkgZGUgRGljaWVtYnJlIGRlIDIwMTEgZGUgbGFzIHZlbnRhcyBkZSB1bmEgZW1wcmVzYSBtaW5vcmlzdGEgZW4gbMOtbmVhIHNpbiB0aWVuZGEgZsOtc2ljYSwgYmFzYWRhIGVuIFJlaW5vIFVuaWRvLiBMYSBlbXByZXNhIHZlbmRlIHByaW5jaXBhbG1lbnRlIHJlZ2Fsb3Mgw7puaWNvcyBwYXJhIHRvZGEgb2Nhc2nDs24geSBtdWNob3MgZGUgc3VzIGNsaWVudGVzIHNvbiBtYXlvcmlzdGFzLg0KT2JqZXRpdm86IHNlZ21lbnRhciBjbGllbnRlcywgYXNpZ25hcmxlcyBub21icmUgeSBjYXJhY3RlcmlzdGljYXMgZGUgY29tcG9ydGFtaWVudG8geSBwcm9wb25lciBzdWdlcmVuY2lhcyBhIGxhIGVtcHJlc2EgcGFyYSBhdW1lbnRhciB2ZW50YXMuDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkVqZXJjaWNpbyAzLiBTZWdtZW50YWNpw7NuIGRlIENsaWVudGVzIDwvc3Bhbj4NCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5Db250ZXh0byA8L3NwYW4+DQpMYSBiYXNlIGRlIGRhdG9zICoqdmVudGFzKiogdGllbmUgbG9zIHJlZ2lzdHJvcyBlbnRyZSBlbCAxIGRlIERpY2llbWJyZSBkZSAyMDIwIHkgZWwgOSBkZSBEaWNpZW1icmUgZGUgMjAxMSBkZSBsYXMgdmVudGFzIGRlIHVuYSBlbXByZXNhIG1pbm9yaXN0YSBlbiBsw61uZWEgc2luIHRpZW5kYSBmw61zaWNhLCBiYXNhZGEgZW4gUmVpbm8gVW5pZG8uIExhIGVtcHJlc2EgdmVuZGUgcHJpbmNpcGFsbWVudGUgcmVnYWxvcyDDum5pY29zIHBhcmEgdG9kYSBvY2FzacOzbiB5IG11Y2hvcyBkZSBzdXMgY2xpZW50ZXMgc29uIG1heW9yaXN0YXMuDQpPYmpldGl2bzogc2VnbWVudGFyIGNsaWVudGVzLCBhc2lnbmFybGVzIG5vbWJyZSB5IGNhcmFjdGVyaXN0aWNhcyBkZSBjb21wb3J0YW1pZW50byB5IHByb3BvbmVyIHN1Z2VyZW5jaWFzIGEgbGEgZW1wcmVzYSBwYXJhIGF1bWVudGFyIHZlbnRhcy4NCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5CYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KdmVudGFzID0gcmVhZC5jc3YoZmlsZS5jaG9vc2UoKSwgZmlsZUVuY29kaW5nID0gIlVURi04LUJPTSIpDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5FbnRlbmRlciBsb3MgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpzdW1tYXJ5KHZlbnRhcykNCnN0cih2ZW50YXMpDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5MaW1waWFyIHkgcHJlcGFyYXIgdmFyaWFibGVzIDwvc3Bhbj4NCmBgYHtyfQ0KIyBRdWl0YXIgcmVnaXN0cm9zIHNpbiBjbGllbnRlIGlkZW50aWZpY2FkbyAoQ2xpZW50ZSA9IE5BKQ0KdmVudGFzID0gdmVudGFzICU+JSBmaWx0ZXIoIWlzLm5hKENsaWVudGUpKQ0KDQojIFF1aXRhciBkZXZvbHVjaW9uZXMvY2FuY2VsYWNpb25lcyAoQ2FudGlkYWQgbyBQcmVjaW8gbmVnYXRpdm9zKQ0KdmVudGFzID0gdmVudGFzICU+JSBmaWx0ZXIoQ2FudGlkYWQgPiAwLCBQcmVjaW8gPiAwKQ0KDQojIFRvdGFsIGRlIGNhZGEgbMOtbmVhIGRlIHByb2R1Y3RvIChjYW50aWRhZCB4IHByZWNpbykNCnZlbnRhcyA9IHZlbnRhcyAlPiUgbXV0YXRlKFRvdGFsID0gQ2FudGlkYWQgKiBQcmVjaW8pDQoNCiMgVG90YWwgcG9yIHRpY2tldCAoY2FkYSB0aWNrZXQgPSB1bmEgdmlzaXRhL2NvbXByYSkNCnRpY2tldHMgPSB2ZW50YXMgJT4lDQogIGdyb3VwX2J5KENsaWVudGUsIFRpY2tldCkgJT4lDQogIHN1bW1hcmlzZShUb3RhbF90aWNrZXQgPSBzdW0oVG90YWwpLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQojIEZyZWN1ZW5jaWEgKG7Dum1lcm8gZGUgdmlzaXRhcykgeSB0aWNrZXQgcHJvbWVkaW8gcG9yIGNsaWVudGUNCmRmMyA9IHRpY2tldHMgJT4lDQogIGdyb3VwX2J5KENsaWVudGUpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgRnJlY3VlbmNpYSA9IG4oKSwNCiAgICBUaWNrZXRfcHJvbWVkaW8gPSBtZWFuKFRvdGFsX3RpY2tldCkNCiAgKQ0KDQpkZjMgPSBhcy5kYXRhLmZyYW1lKGRmMykNCnJvd25hbWVzKGRmMykgPSBkZjMkQ2xpZW50ZQ0KZGYzID0gZGYzICU+JSBzZWxlY3QoLUNsaWVudGUpDQoNCnN1bW1hcnkoZGYzKQ0Kc3RyKGRmMykNCnBsb3QoZGYzJEZyZWN1ZW5jaWEsIGRmMyRUaWNrZXRfcHJvbWVkaW8pDQoNCiMgVHJhbnNmb3JtYWNpw7NuIGxvZzogY29ycmlnZSBlbCBzZXNnbyBleHRyZW1vIGRlIGxvcyBjbGllbnRlcyBtYXlvcmlzdGFzIChvdXRsaWVycykNCmRmM19sb2cgPSBkZjMNCmRmM19sb2ckRnJlY3VlbmNpYSA9IGxvZzFwKGRmM19sb2ckRnJlY3VlbmNpYSkNCmRmM19sb2ckVGlja2V0X3Byb21lZGlvID0gbG9nMXAoZGYzX2xvZyRUaWNrZXRfcHJvbWVkaW8pDQoNCnBsb3QoZGYzX2xvZyRGcmVjdWVuY2lhLCBkZjNfbG9nJFRpY2tldF9wcm9tZWRpbykNCmBgYA0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkVzY2FsYXIgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkZjNfZXNjYWxhZG9zID0gc2NhbGUoZGYzX2xvZykNCnN1bW1hcnkoZGYzX2VzY2FsYWRvcykNCmBgYA0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkFzaWduYXIgbsO6bWVybyBkZSBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQpncnVwb3MzID0gNA0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+QWdydXBhciBsb3MgcHVudG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KY2x1c3RlcnMzID0ga21lYW5zKGRmM19lc2NhbGFkb3MsZ3J1cG9zMykNCmNsdXN0ZXJzMw0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+T3B0aW1pemFyIG7Dum1lcm8gZGUgZ3J1cG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0Kb3B0aW1pemFjaW9uMyA9IGNsdXNHYXAoZGYzX2VzY2FsYWRvcywgRlVOPWttZWFucywgbnN0YXJ0PTEsIEsubWF4PTEwKQ0KcGxvdChvcHRpbWl6YWNpb24zLCB4bGFiPSJOw7ptZXJvIGRlIGNsdXN0ZXJzIEsiLCBtYWluPSJPcHRpbWl6YWNpw7NuIGRlIENsdXN0ZXJzIikNCiMgU2Ugc2VsZWNjaW9uYSBjb21vIMOzcHRpbW8gZWwgcHJpbWVyIHB1bnRvIG3DoXMgYWx0by4NCiMgc2kgZXMgZGlmZXJlbnRlIGhheSBxdWUgcmVncmVzYXIgYWwgb3JpZ2luYWwgeSBhanVzdGFyLg0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+R3LDoWZpY2FyIGxvcyBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQpmdml6X2NsdXN0ZXIoY2x1c3RlcnMzLGRhdGE9ZGYzX2VzY2FsYWRvcyxnZW9tPSJwb2ludCIpDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpncmV5Ij5BZ3JlZ2FyIGdydXBvcyBhIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkZjNfY2x1c3RlcnMgPSBjYmluZChkZjMsIGNsdXN0ZXIgPSBjbHVzdGVyczMkY2x1c3RlcikNCmhlYWQoZGYzX2NsdXN0ZXJzKQ0KZGYzX2NsdXN0ZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgc3VtbWFyaXNlKEZyZWN1ZW5jaWFfbWVkaWE9bWVhbihGcmVjdWVuY2lhKSwgVGlja2V0X3Byb21lZGlvX21lZGlvPW1lYW4oVGlja2V0X3Byb21lZGlvKSkNCiMgUmV2aXNhciBlbCBvcmRlbiByZWFsIGRlIGxvcyBjbHVzdGVycyBjb24gbGEgdGFibGEgYW50ZXJpb3IgeSBhanVzdGFyIGxvcyBub21icmVzIHNpIG5vIGNvaW5jaWRlLg0KZGYzX2NsdXN0ZXJzID0gZGYzX2NsdXN0ZXJzICU+JQ0KICBtdXRhdGUoY2x1c3RlciA9IGNhc2Vfd2hlbigNCiAgICBjbHVzdGVyID09IDEgfiAiQ2xpZW50ZXMgVklQIiwNCiAgICBjbHVzdGVyID09IDIgfiAiQ2xpZW50ZXMgRnJlY3VlbnRlcyIsDQogICAgY2x1c3RlciA9PSAzIH4gIkNsaWVudGVzIE9jYXNpb25hbGVzIiwNCiAgICBjbHVzdGVyID09IDQgfiAiQ2xpZW50ZXMgTnVldm9zL0Jham9zIiwNCiAgKSkNCmhlYWQoZGYzX2NsdXN0ZXJzKQ0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JleSI+UmVjb21lbmRhY2lvbmVzIGRlIG5lZ29jaW8gPC9zcGFuPg0KLSAqKkNsaWVudGVzIFZJUCoqIChhbHRhIGZyZWN1ZW5jaWEsIHRpY2tldCBwcm9tZWRpbyBhbHRvKTogcHJvZ3JhbWEgZGUgZmlkZWxpemFjacOzbiBjb24gYmVuZWZpY2lvcyBleGNsdXNpdm9zLCBhdGVuY2nDs24gcHJpb3JpdGFyaWEgeSBhY2Nlc28gYW50aWNpcGFkbyBhIHByb2R1Y3RvcyBudWV2b3MgcGFyYSBtYW50ZW5lciBzdSBhbHRvIHZhbG9yLg0KLSAqKkNsaWVudGVzIEZyZWN1ZW50ZXMqKiAoYWx0YSBmcmVjdWVuY2lhLCB0aWNrZXQgcHJvbWVkaW8gYmFqby9tZWRpbyk6IGVzdHJhdGVnaWFzIGRlIGNyb3NzLXNlbGxpbmcgeSBidW5kbGVzIHBhcmEgZWxldmFyIGVsIHRpY2tldCBwcm9tZWRpbywgYXByb3ZlY2hhbmRvIHF1ZSB5YSBjb21wcmFuIHNlZ3VpZG8uDQotICoqQ2xpZW50ZXMgT2Nhc2lvbmFsZXMqKiAoYmFqYSBmcmVjdWVuY2lhLCB0aWNrZXQgcHJvbWVkaW8gYWx0byk6IGNhbXBhw7FhcyBkZSByZWFjdGl2YWNpw7NuIChlbWFpbCBtYXJrZXRpbmcsIHJlY29yZGF0b3Jpb3MpIHBhcmEgYXVtZW50YXIgbGEgZnJlY3VlbmNpYSBkZSB2aXNpdGEsIHlhIHF1ZSBjdWFuZG8gY29tcHJhbiBnYXN0YW4gYmllbi4NCi0gKipDbGllbnRlcyBOdWV2b3MvQmFqb3MqKiAoYmFqYSBmcmVjdWVuY2lhLCB0aWNrZXQgcHJvbWVkaW8gYmFqbyk6IGluY2VudGl2b3MgZGUgYmllbnZlbmlkYSB5IGRlc2N1ZW50b3MgZW4gbGEgc2VndW5kYSBjb21wcmEgcGFyYSBpbXB1bHNhcmxvcyBoYWNpYSBvdHJvIHNlZ21lbnRvLg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZXkiPkNvbmNsdXNpb25lczwvc3Bhbj4NCkxhIHTDqWNuaWNhIGRlICpjbHVzdGVyaW5nKiBwZXJtaXRlIGlkZW50aWZpY2FyIHBhdHJvbmVzIG8gZ3J1cG9zIG5hdHVyYWxlcyBlbiBsb3MgZGF0b3Mgc2luIG5lY2VzaWRhZCBkZSBldGlxdWV0YXMgcHJldmlhcy4gRW4gZXN0ZSBjYXNvIGZ1ZSB1dGlsaXphZG8gcGFyYSBzZWdtZW50YXIgYSBsb3MgY2xpZW50ZXMgZGUgdW5hIGVtcHJlc2EgbWlub3Jpc3RhIGVuIGzDrW5lYSBzZWfDum4gc3UgZnJlY3VlbmNpYSBkZSBjb21wcmEgeSBzdSB0aWNrZXQgcHJvbWVkaW8sIGxvIHF1ZSBwZXJtaXRlIGRpc2XDsWFyIGVzdHJhdGVnaWFzIGNvbWVyY2lhbGVzIGRpZmVyZW5jaWFkYXMgcGFyYSBjYWRhIHRpcG8gZGUgY2xpZW50ZS4=