Mata Kuliah: Analisis Multivariat

Dosen Pengampu: Ike Fitriyaningsih, M.Si

1. Hasna Lestari (23031554033)

2. Nabila Nasywa Zen (23031554115)

3. Dafinna Artha Kirana (23031554157)

1. Dataset

library(DT)
## Warning: package 'DT' was built under R version 4.4.3
df <- read.csv("C:\\Users\\ACER\\Downloads\\CC GENERAL.csv")
datatable(df)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html

2. Pre-processing

Filter Data

Fitur yang akan digunakan adalah BALANCE, CREDIT_LIMIT, PAYMENTS, MINIMUM_PAYMENTS, PRC_FULL_PAYMENT, CASH_ADVANCE, CASH_ADVANCE_FREQUENCY, TENURE karena fitur ini merupakan fitur-fitur yang relevan dengan tujuan dari proyek ini
df <- df[, c("BALANCE",
             "CREDIT_LIMIT",
             "PAYMENTS",
             "MINIMUM_PAYMENTS",
             "PRC_FULL_PAYMENT",
             "CASH_ADVANCE",
             "CASH_ADVANCE_FREQUENCY",
             "TENURE")]

datatable(df)

Cek tipe data

hal ini memastikan bahwa data dengan tipe data sudah sesuai
str(df)
## 'data.frame':    8950 obs. of  8 variables:
##  $ BALANCE               : num  40.9 3202.5 2495.1 1666.7 817.7 ...
##  $ CREDIT_LIMIT          : num  1000 7000 7500 7500 1200 1800 13500 2300 7000 11000 ...
##  $ PAYMENTS              : num  202 4103 622 0 678 ...
##  $ MINIMUM_PAYMENTS      : num  140 1072 627 NA 245 ...
##  $ PRC_FULL_PAYMENT      : num  0 0.222 0 0 0 ...
##  $ CASH_ADVANCE          : num  0 6443 0 206 0 ...
##  $ CASH_ADVANCE_FREQUENCY: num  0 0.25 0 0.0833 0 ...
##  $ TENURE                : int  12 12 12 12 12 12 12 12 12 12 ...

Handling Missing Value

Missing value terdapat pada fitur CREDIT_LIMIT sebanyak 1 dan MINIMIM_PAYMENT sebanyak 313
Missing value perlu di drop agar analisis tidak bias
colSums(is.na(df))
##                BALANCE           CREDIT_LIMIT               PAYMENTS 
##                      0                      1                      0 
##       MINIMUM_PAYMENTS       PRC_FULL_PAYMENT           CASH_ADVANCE 
##                    313                      0                      0 
## CASH_ADVANCE_FREQUENCY                 TENURE 
##                      0                      0
missing <- data.frame(
  missing = colSums(is.na(df)),
  missing_percentage = (colSums(is.na(df)) / nrow(df)) * 100
)
missing
##                        missing missing_percentage
## BALANCE                      0         0.00000000
## CREDIT_LIMIT                 1         0.01117318
## PAYMENTS                     0         0.00000000
## MINIMUM_PAYMENTS           313         3.49720670
## PRC_FULL_PAYMENT             0         0.00000000
## CASH_ADVANCE                 0         0.00000000
## CASH_ADVANCE_FREQUENCY       0         0.00000000
## TENURE                       0         0.00000000

Drop Missing Value

df <- df[!is.na(df$CREDIT_LIMIT), ]
df <- df[!is.na(df$MINIMUM_PAYMENTS), ]
datatable(df)
colSums(is.na(df))
##                BALANCE           CREDIT_LIMIT               PAYMENTS 
##                      0                      0                      0 
##       MINIMUM_PAYMENTS       PRC_FULL_PAYMENT           CASH_ADVANCE 
##                      0                      0                      0 
## CASH_ADVANCE_FREQUENCY                 TENURE 
##                      0                      0
Memastikan data yang digunakan merupakan tipe data numerik, karena DBSCAN hanya dapat menggunakan tipe data numerik
x <- df[sapply(df, is.numeric)]
datatable(x)

Visulisasi Dataset

Box plot memiliki banyak outlier sehingga perlu dilakukan normalisasi
for (colname in names(x)) {
  boxplot(
    x[[colname]],
    main = paste("Box plot for", colname),
    col = "lightblue",
    horizontal = TRUE
  )
}

library(ggplot2)

for (colname in names(x)) {
  # Pastikan kolom bertipe numerik
  if (is.numeric(x[[colname]])) {
    ggplot(x, aes_string(x = colname)) +
      geom_histogram(aes(y = ..density..), bins = 30, fill = "skyblue", color = "black") +
      geom_density(color = "red", size = 1) +
      ggtitle(paste("Histogram for", colname)) +
      xlab(colname) +
      ylab("Density") +
      theme_minimal() -> p
    print(p)
  }
}
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

## 3. Transformasi data ##### Hal ini dilakukan untuk mengetasi skewness

for (colname in names(x)) {
  x[[colname]] <- log1p(x[[colname]])
}
Menyimpan hasil transformasi kedalam data
data <- x

4. Winsorizing

Winsorizing digunakan untuk handling extreme value
Memilih fitur yang akan dilakukan winsorizing
Fitur yang tidak digunakan yaitu ‘CASH_ADVANCE_FREQUENCY’, ‘PRC_FULL_PAYMENT’, dan ‘TENURE’ karena fitur tersebut merupakan data diskrit, tidak dilakukan winsorizing karena outlier memiliki makna
columns_to_exclude <- c('CASH_ADVANCE_FREQUENCY', 'PRC_FULL_PAYMENT', 'TENURE')
columns_to_winsorize <- setdiff(names(x), columns_to_exclude)
columns_to_winsorize
## [1] "BALANCE"          "CREDIT_LIMIT"     "PAYMENTS"         "MINIMUM_PAYMENTS"
## [5] "CASH_ADVANCE"

Winsorizing menggunakan IQR

Data yang outlier dipangkas dengan batas yang sudah dibuat
fold <- 1.5

for (col in names(data)) {
  if (!(col %in% columns_to_exclude)) {
    Q1 <- quantile(data[[col]], 0.25, na.rm = TRUE)
    Q3 <- quantile(data[[col]], 0.75, na.rm = TRUE)
    IQR <- Q3 - Q1
    
    lower_bound <- Q1 - fold * IQR
    upper_bound <- Q3 + fold * IQR
    
    data[[col]] <- ifelse(data[[col]] < lower_bound, lower_bound,
                          ifelse(data[[col]] > upper_bound, upper_bound, data[[col]]))
  }
}

Visualisasi Setelah Transformasi dan Winsorizing

Pada Boxplot dapat terlihat bahwa data sudah tidak memiliki outlier karena sudah dilakukan transformasi dan winsorizing
library(ggplot2)

for (colname in names(data)) {
  p <- ggplot(data, aes_string(x = colname)) + 
    geom_boxplot(fill = "lightblue") +
    ggtitle(paste("Box plot for", colname)) +
    theme_minimal()
  print(p)
}

for (colname in names(data)) {
  if (is.numeric(data[[colname]])) {
    p <- ggplot(data, aes_string(x = colname)) + 
      geom_histogram(aes(y = ..density..), bins = 30, fill = "lightblue", color = "black") +
      geom_density(color = "red", size = 1) +
      ggtitle(paste("Histogram for", colname)) +
      xlab(colname) +
      ylab("Density") +
      theme_minimal()
    print(p)
  }
}

5. K-Distance Graph

K-Distance Graph untuk menentukan epsilon (ε) dan minPts

K-Distance Graph digunakan untuk membantu menentukan nilai parameter epsilon (ε) dan minPts pada algoritma DBSCAN, agar proses clustering dapat berjalan dengan optimal dan menghasilkan pembentukan cluster yang akurat
Berdasarkan grafik K-Distance, terlihat adanya titik elbow pada kisaran nilai 1.0 hingga 1.5
Hal ini menunjukkan bahwa setelah nilai 1.5, jarak antar data cenderung meningkat secara signifikan.Dengan demikian, nilai epsilon yang optimal untuk digunakan berada dalam rentang antara 1.0 hingga 1.5
library(FNN)
library(ggplot2)

k <- 4
nn <- get.knn(data, k = k)

distances <- nn$nn.dist[, k]
distances_sorted <- sort(distances)

df_plot <- data.frame(
  index = 1:length(distances_sorted),
  distance = distances_sorted
)

ggplot(df_plot, aes(x = index, y = distance)) +
  geom_line() +
  ggtitle("K-distance Graph") +
  xlab("Data Points") +
  ylab(paste("Distance to", k, "-th Nearest Neighbor")) +
  theme_minimal()

##### Epsilon dan minPts yang optimal untuk data ini yaitu epsilon 1.50 dan minPts 7 dengan sillhoutte score 0.5114 ##### Silhouette Score sebesar 0.5114 menunjukkan bahwa pemisahan antar cluster cukup jelas, sehingga hasil clustering dapat dikatakan cukup representatif

library(dbscan)
## Warning: package 'dbscan' was built under R version 4.4.3
## 
## Attaching package: 'dbscan'
## The following object is masked from 'package:stats':
## 
##     as.dendrogram
library(cluster)
## Warning: package 'cluster' was built under R version 4.4.3
eps_values <- seq(1.0, 1.5, by = 0.05)
min_samples_values <- 5:19

best_score <- -1
best_eps <- 0
best_min_samples <- 0

for (eps in eps_values) {
  for (min_samples in min_samples_values) {
    # Jalankan DBSCAN
    db <- dbscan::dbscan(data, eps = eps, minPts = min_samples)
    labels <- db$cluster
    
    unique_labels <- unique(labels)
    unique_labels <- unique_labels[unique_labels != 0]
    
    if (length(unique_labels) > 1) {
      score <- silhouette_score <- silhouette(labels, dist(data))
      avg_sil <- mean(score[, 3])
      
      if (avg_sil > best_score) {
        best_score <- avg_sil
        best_eps <- eps
        best_min_samples <- min_samples
      }
    }
  }
}

cat(sprintf("Best eps: %.2f, Best min_samples: %d with Silhouette Score: %.4f\n", best_eps, best_min_samples, best_score)) 
## Best eps: 1.50, Best min_samples: 7 with Silhouette Score: 0.5114

6. DBSCAN

BDSCAN merupakan algoritma clustering berdasarkan kepadatan suatu kelompok dan dapat mengidentifikasi cluster dengan berbagai bentuk dan ukuran dari data yang memiliki noise dan outlier

Dari hasil tersebut dapat dilihat bahwa data memiliki 3 cluster yaitu 0, 1, dan 2.

library(dbscan)

db <- dbscan(data, eps = 1.50, minPts = 7)
labels <- db$cluster
labels
##    [1] 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 2 2 2 1 1 2 2 2
##   [38] 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 2 1 1 2 2 2 1 1 1 1 1 2 2 1
##   [75] 0 1 1 2 1 2 2 2 2 2 2 2 2 1 1 1 1 1 2 2 1 2 2 2 1 2 2 1 1 1 2 1 2 2 1 2 2
##  [112] 1 2 1 2 1 1 2 1 1 1 2 1 2 1 2 1 1 1 2 1 2 2 1 1 2 1 1 2 1 2 2 2 1 1 1 2 1
##  [149] 2 1 1 2 2 1 2 2 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 2 2 2
##  [186] 1 2 1 2 1 1 2 1 2 2 1 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 2
##  [223] 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 1 2 1 1 2 2 2
##  [260] 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 1 2 1 1
##  [297] 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 2 1 2 1 2 1 1 1 2 2 2 1 2 1 2 2
##  [334] 1 1 1 2 2 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 1 2
##  [371] 1 1 2 2 1 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 1
##  [408] 1 2 1 1 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 1 1
##  [445] 1 0 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 2 1
##  [482] 1 2 1 2 1 1 2 2 2 1 2 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 2 2 2 2 2 1
##  [519] 2 2 2 2 1 2 1 1 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 2 1 2 1 1 1 2 1 1 1 2
##  [556] 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1
##  [593] 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 2 2 1 1 1 1 2
##  [630] 2 2 1 2 2 1 2 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2
##  [667] 2 2 2 2 2 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 2 0 1 2 2
##  [704] 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2
##  [741] 2 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 2 0 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1
##  [778] 1 2 2 1 1 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 1 2 1 1 2 2 2 2 2 2 2 1 1 2 2 2 2
##  [815] 2 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 2 1 1 2 2 1
##  [852] 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 1 1 1 1 1 2 1
##  [889] 2 1 2 2 2 2 1 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 1 2 2 1 2 1 1 2 2
##  [926] 1 1 1 2 2 1 1 2 1 1 2 2 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1
##  [963] 2 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1
## [1000] 1 2 0 1 1 2 2 2 1 2 1 2 2 2 2 1 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 1 1 1 1 2
## [1037] 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1
## [1074] 1 2 2 2 1 1 1 2 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 1 1 1
## [1111] 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 2
## [1148] 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 2 2 1 2 1 1 2 1 2 2 1 1 1 1 1 1
## [1185] 1 1 1 1 2 1 1 2 1 1 1 2 1 1 2 1 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2
## [1222] 1 2 1 2 1 1 2 2 2 1 1 2 1 1 1 2 2 1 2 1 2 2 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2
## [1259] 2 2 1 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 2 2
## [1296] 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 1 2 1 2 0 1 1 1 1
## [1333] 2 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 1 2 1 1 1 1 1 1 2 2 2 1 2 1 1 1 1 0 1 1
## [1370] 2 2 1 2 1 1 2 2 2 1 1 1 1 1 2 1 1 2 1 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 1 1 1
## [1407] 1 2 1 1 1 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 2 1 2 1 1 1 1 2 1 2 2 2 1 2 2 1 1
## [1444] 2 2 2 2 2 2 2 1 1 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 1 1 1 2 2 1 2
## [1481] 1 2 2 2 2 1 0 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 2 2 1 2 1 1 2 1 2 2 1 1 1
## [1518] 2 1 1 1 1 1 1 1 1 2 2 2 1 2 2 1 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1
## [1555] 1 2 2 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 1
## [1592] 2 2 2 1 1 2 1 2 1 1 2 2 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 1 2 1 1 1 2 1 2
## [1629] 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1
## [1666] 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 1 1 2 2 2
## [1703] 2 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 2 2 1 1 2 1 1 2 2 1 1 2 1 2 2 1 1 2 1 1 1
## [1740] 1 2 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 2 1 2 1 1
## [1777] 2 1 1 1 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 1 1 1 2
## [1814] 1 2 2 2 1 2 2 2 2 2 2 2 1 2 2 1 2 1 2 2 2 2 2 2 2 1 2 1 2 2 2 1 1 1 1 2 2
## [1851] 2 1 1 2 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2
## [1888] 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1
## [1925] 1 2 1 1 1 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1
## [1962] 2 1 1 1 2 2 1 2 1 2 2 1 1 1 2 2 1 1 2 1 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 2 2
## [1999] 1 1 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1
## [2036] 2 1 2 1 1 2 1 2 2 2 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 1 1 1
## [2073] 2 2 2 1 2 2 1 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2
## [2110] 1 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1 2 1 2 2 1 1 1 2 1 2 2 2 2 1 1 1 1
## [2147] 2 1 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1
## [2184] 1 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 2 1 1 1 1
## [2221] 2 2 2 1 1 1 2 2 2 1 2 2 1 2 2 2 1 1 1 2 2 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 2
## [2258] 2 1 1 1 2 1 1 1 2 2 1 2 2 1 1 1 2 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 2 1 2 1
## [2295] 2 1 1 1 1 2 1 1 2 2 1 1 2 1 1 1 2 1 2 2 2 2 2 2 1 2 2 1 2 1 1 1 1 2 1 2 1
## [2332] 2 2 1 1 1 2 2 2 2 2 2 1 1 2 2 1 2 1 1 2 1 2 2 1 2 2 2 1 2 2 1 1 2 2 2 1 1
## [2369] 1 1 2 1 2 2 1 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 1 1 2 1 2 2 1 2 1 2 2 2 2 2 2
## [2406] 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 1 1 1 2 2 2 1 2 1 2 1
## [2443] 0 2 2 1 1 1 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 2 2
## [2480] 1 2 2 2 2 2 2 2 1 1 2 2 1 2 2 2 2 1 1 1 2 2 2 2 1 1 1 2 1 1 1 1 2 2 1 2 1
## [2517] 2 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 2 2 1 1 2 1 1 2
## [2554] 1 2 2 1 1 2 2 1 2 2 2 1 2 2 2 1 2 2 1 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 1 1 1
## [2591] 2 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 2
## [2628] 1 2 2 2 1 2 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 1 1 1 1 1 1 2 2
## [2665] 2 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1
## [2702] 1 2 1 2 1 1 1 2 2 2 2 2 2 2 2 2 1 1 1 2 1 2 2 2 2 1 1 1 2 2 1 1 1 1 2 2 1
## [2739] 1 1 1 2 2 2 2 2 2 1 1 2 2 2 1 2 2 1 2 1 2 2 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2
## [2776] 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 1 2 2 1 2 2 2 2 1
## [2813] 1 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 1
## [2850] 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 2 0 2 1
## [2887] 1 1 1 2 2 1 1 2 1 2 1 1 1 2 2 1 1 1 2 2 1 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 1
## [2924] 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 2 2 1 2
## [2961] 1 2 2 2 1 1 1 1 2 1 1 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 2 1 2 1 1 2 2 2 2 2 1
## [2998] 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2
## [3035] 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 2 2 2 1 2 1 1 2 1 2 2
## [3072] 1 1 1 2 2 1 2 2 2 1 2 1 2 2 1 1 2 2 2 1 1 2 2 1 2 2 2 2 2 1 1 2 1 2 2 1 1
## [3109] 2 2 1 1 1 1 1 1 1 1 2 2 1 2 1 1 2 1 2 1 2 2 1 1 1 2 1 2 2 2 2 1 2 2 1 1 2
## [3146] 2 2 2 1 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 2 1 2 1 1 2 1 2 1 2 1 1 2 1 2
## [3183] 2 1 2 2 1 2 2 1 2 0 1 2 1 2 1 1 1 1 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1
## [3220] 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 2 1 1 1 1 1 2 1 2 1 1 1 2 2 1
## [3257] 2 1 1 2 2 1 1 1 2 1 1 2 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 2 1 1 2 2 2 1 2 1 1
## [3294] 1 2 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 1 2 1 1 1
## [3331] 2 2 1 2 2 1 1 1 1 1 2 0 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2
## [3368] 1 2 2 1 2 2 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 2 2 1 2 1 1 1 2 1 1 2 1 2 2 2 1
## [3405] 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 2 2 2 1
## [3442] 2 2 2 2 1 2 2 1 2 2 1 1 1 1 2 1 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 1 2 2 2 2
## [3479] 1 1 2 1 1 1 2 1 1 2 1 1 2 2 2 2 1 1 1 2 2 1 1 1 1 2 1 1 2 2 2 2 2 2 2 2 2
## [3516] 1 2 2 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 2 1 2 1 2 2 1
## [3553] 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 2 2 2
## [3590] 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2
## [3627] 1 2 1 2 2 2 2 2 2 2 1 1 2 2 1 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1
## [3664] 2 1 2 1 2 1 1 2 2 2 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 1 2
## [3701] 2 1 1 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 2 1 2 1 1 1 1 2 1 1 1 2 1 2 2 2 1 1 1
## [3738] 2 1 2 1 2 1 2 1 1 2 2 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1
## [3775] 1 1 2 2 2 2 2 1 1 1 2 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 1 2 1 1 2 1 1 1
## [3812] 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 2
## [3849] 1 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 2 1 2 2 1 2 1 2 1 0 1 2 1
## [3886] 1 1 2 1 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 1 2 1 1 1 2 0 1 1 1 2 2 2 2 2 2 1 1
## [3923] 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1
## [3960] 2 1 1 1 2 2 2 1 1 2 1 2 1 1 2 1 2 1 2 1 1 0 2 1 2 2 1 1 2 1 2 2 2 1 1 1 2
## [3997] 2 2 1 1 2 1 2 2 1 1 1 2 1 1 2 2 1 1 2 2 1 2 2 2 2 0 1 2 2 1 1 2 2 1 2 2 1
## [4034] 2 1 2 1 1 1 2 1 1 1 2 1 1 2 2 2 1 2 2 2 1 1 2 2 2 1 1 1 1 2 1 1 0 2 2 1 2
## [4071] 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 2 1
## [4108] 1 2 1 1 1 2 1 1 2 2 1 2 1 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 2 1 1 2 1 1
## [4145] 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 2 2 1 1 2 1 1 2 2
## [4182] 2 2 2 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 1 1 1 2
## [4219] 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 2 2 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1
## [4256] 2 1 1 1 2 2 2 2 2 2 1 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2
## [4293] 1 2 1 1 1 1 2 2 1 2 2 2 2 1 1 1 2 1 2 1 1 1 1 1 1 2 2 2 1 2 1 2 1 1 2 1 2
## [4330] 1 2 1 1 2 2 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 1
## [4367] 1 1 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1
## [4404] 1 2 2 1 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1
## [4441] 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 2 1 1
## [4478] 1 1 2 1 1 2 1 2 2 2 2 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 1 1
## [4515] 0 1 2 1 2 2 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 1 1 1 2 2 2 1 2 1
## [4552] 2 1 2 1 2 2 1 1 2 2 1 2 1 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 1
## [4589] 2 2 2 1 2 2 2 2 1 2 2 2 1 1 2 1 1 1 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1
## [4626] 2 2 1 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 2 1 2 1 2 1 1 1 2 2 1 2 1 1 1 2
## [4663] 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1
## [4700] 2 1 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2
## [4737] 1 2 2 1 2 1 1 1 2 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 2 2 2 1 1
## [4774] 1 1 1 2 2 2 1 1 1 2 2 2 1 2 1 1 2 2 1 1 2 2 0 2 1 2 1 2 2 2 2 1 1 1 2 1 2
## [4811] 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1
## [4848] 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 1 1 1 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1
## [4885] 2 1 1 1 1 2 2 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 1
## [4922] 2 1 1 2 1 2 1 2 2 2 1 2 2 1 1 1 2 2 1 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 1 2 1
## [4959] 2 2 1 2 1 1 1 1 1 2 1 2 1 1 2 2 2 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 1 1 2
## [4996] 2 2 1 2 2 1 1 1 1 2 2 1 1 1 2 2 2 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 1 1 2
## [5033] 1 2 1 1 2 2 2 2 1 1 2 1 2 2 1 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 2 1 1 2 1
## [5070] 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 1 1 1 2 1 1 2 2 2 1 1 2 2 2 2 1 2 1 1 2 1 2
## [5107] 1 2 2 1 2 2 1 2 1 2 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 1 2 2 2 2 1 1
## [5144] 1 1 2 2 1 2 2 1 1 1 2 1 2 1 1 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 2 1 2 2 2 1
## [5181] 2 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 2 2 2 2
## [5218] 1 1 2 2 1 1 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1
## [5255] 1 1 2 2 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2
## [5292] 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 2 1 2 2 2 1 1 2 1 1 1 2 2 2 1 1 2 1 2 1 1
## [5329] 2 0 1 2 2 1 2 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 1 1 1 2 2 1 2
## [5366] 2 1 2 1 2 1 2 2 1 1 1 2 1 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1
## [5403] 1 2 2 1 2 1 1 2 2 2 2 2 1 2 1 2 1 2 2 2 1 0 2 1 2 1 2 2 1 1 1 1 1 2 1 1 1
## [5440] 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 1 2 2 2 2 1 2 1 1 2 2 1 2 1 1 1 2 1 2 1 1 1
## [5477] 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 2 1 2 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2
## [5514] 1 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 2 1 2
## [5551] 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 1 2 2 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 1
## [5588] 2 1 2 2 1 1 1 2 2 1 1 2 2 2 1 2 2 1 2 1 1 2 2 1 0 2 2 2 2 1 1 1 2 1 1 2 1
## [5625] 2 2 2 1 2 2 2 1 2 2 2 2 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2
## [5662] 2 1 2 1 1 2 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 1 1 1 1 2 2 1 1 2 1 1 2 2
## [5699] 1 2 2 2 2 1 2 1 1 1 1 2 2 2 2 1 1 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2
## [5736] 2 1 1 2 1 2 2 1 1 1 2 1 1 1 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 2 1
## [5773] 1 1 2 2 2 2 2 1 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 2 2 2 2 2 2 2 1 2 1 2 2 1 2
## [5810] 1 2 2 2 1 1 2 2 2 1 2 2 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2
## [5847] 2 2 2 2 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 2 2 1 2 2 1 1 2 2
## [5884] 1 1 1 2 1 2 1 1 1 2 1 1 1 1 1 2 1 1 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 2 2 1
## [5921] 1 2 2 2 2 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1
## [5958] 2 1 1 1 2 2 2 2 1 2 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 1 2 1 1 1 2 2
## [5995] 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 2 1 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 2 2 1
## [6032] 2 2 2 1 1 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 2 2 1 1 0 1 2 1 2 1 2 2
## [6069] 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 2 2 1 2 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 2 2 2
## [6106] 1 1 1 2 2 2 1 2 2 2 1 2 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 1 2 2 2 1 2 2 1
## [6143] 1 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 1 1 1
## [6180] 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 2 2 1 1 2 2 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1
## [6217] 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2
## [6254] 2 1 2 2 2 1 2 1 2 2 1 2 2 2 1 1 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1
## [6291] 1 2 1 1 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 1 2 2 2 1 2 1 1 1 2 1 2 1 2 1 1
## [6328] 2 2 1 1 2 2 2 2 2 1 1 1 2 1 1 2 2 2 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 1 1
## [6365] 1 1 2 1 2 1 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 1 1 2
## [6402] 2 2 2 1 1 1 2 1 2 2 1 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 1 1 2 1 2 2 1 1
## [6439] 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 1 1 1 1 1 2 1 1 2
## [6476] 2 1 1 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 2 1 1 2
## [6513] 1 1 1 2 1 2 1 1 1 2 2 1 1 2 1 1 2 1 1 1 1 2 2 2 1 2 2 1 2 1 1 1 1 1 2 2 1
## [6550] 2 2 1 1 1 1 1 1 2 2 1 1 1 2 2 2 2 1 1 2 2 1 2 1 1 2 1 2 1 2 2 1 1 2 1 2 1
## [6587] 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 2 2 1 1 2 1 1 2 1 1 1 1 1 2 2 1 2 2 2 2 1 1
## [6624] 2 2 1 1 2 1 1 2 1 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2
## [6661] 2 1 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 1 2 1 2 1 1 2 2 2 1 1 1 2 2 1 2 1 1 1 1
## [6698] 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 1 0 1 1 1 2 2 2 2
## [6735] 2 1 1 1 2 2 2 2 1 2 2 1 1 2 1 1 2 1 2 1 1 1 1 2 1 1 2 1 1 1 2 1 2 1 2 1 2
## [6772] 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 2 2 1
## [6809] 1 1 1 2 2 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 2
## [6846] 2 1 2 2 2 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 1 1 2 2 1 2
## [6883] 2 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 1 1 1 2 2 1 1 1 1
## [6920] 1 1 1 1 1 1 2 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 1 1 1 2 1 1 2 2 1 1 1 1
## [6957] 2 1 2 1 2 2 1 2 1 2 2 2 2 1 2 2 2 1 1 1 1 1 2 2 2 2 1 2 2 2 2 2 1 1 2 2 1
## [6994] 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1
## [7031] 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 1
## [7068] 1 2 2 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 2 2 2 2 1 2 2 1 1 2 2 2 1 1
## [7105] 2 2 1 1 1 2 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2
## [7142] 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 2 1 1
## [7179] 1 2 1 1 2 2 1 1 1 2 0 2 2 2 2 1 2 2 1 2 2 1 1 1 2 2 2 1 2 1 2 1 1 2 2 1 1
## [7216] 1 1 1 2 2 1 2 2 1 1 2 2 1 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1
## [7253] 2 1 1 2 2 1 1 1 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 1 2
## [7290] 2 1 2 1 1 2 2 1 0 2 2 1 2 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 2 2 2 2 1 2 1
## [7327] 2 1 2 1 1 2 1 1 1 1 1 2 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 1 2
## [7364] 1 1 1 1 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 2 1 1 1 2 1 2 2 2 1 2 1 1 1 1
## [7401] 2 1 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 1 1
## [7438] 2 2 2 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 1 2 1 1 1
## [7475] 1 2 1 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 1 1 1 2 1 2 0 2 1 2 1 2 2 1 2 1 2
## [7512] 2 1 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 1 2
## [7549] 1 1 2 1 2 1 1 1 2 1 2 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1
## [7586] 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 1 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 1 2
## [7623] 2 2 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 2 1 1
## [7660] 1 2 1 1 1 1 2 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 2
## [7697] 1 1 1 2 2 2 1 2 2 2 1 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1
## [7734] 1 1 2 1 2 2 2 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 2 2 2 1 2
## [7771] 1 2 1 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 2 1 1 1 2 1 1 1 1 2 1
## [7808] 1 2 1 2 2 2 2 1 2 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 1 2 1 1 1 1 1 2
## [7845] 1 2 1 1 1 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 2 2 2 1
## [7882] 2 2 1 1 2 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 1 2
## [7919] 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 2 2 1 1 2 2 1 2 2 2 1 1 1 1 2 2 1 1 2 2
## [7956] 1 2 1 1 1 1 2 1 2 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2
## [7993] 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 1 1 2 1 1 1 2 2 2 1 1 2 2 1 1
## [8030] 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 2 1 1 1 1 1 2 1 1 1 1 1 2
## [8067] 1 2 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1
## [8104] 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 2 1 1 2 2 1 2 2 2 1
## [8141] 2 2 2 2 2 1 1 2 1 1 1 1 1 2 2 2 2 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 2 1
## [8178] 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2
## [8215] 2 2 2 2 2 1 1 1 1 1 2 2 1 1 2 1 2 1 1 1 2 1 1 1 2 1 1 2 2 1 2 1 1 1 2 2 1
## [8252] 1 1 2 2 2 1 2 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 2 2
## [8289] 2 2 2 2 2 1 2 2 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 2 2 2 1 1 1 1
## [8326] 1 1 1 2 2 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 2 2 2 2 1 2 1 2 1 2 1 1 1 2
## [8363] 2 1 1 2 1 2 1 1 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 2 2 1 2 1 2 1 2 1 2 1 1
## [8400] 2 2 2 1 1 1 1 2 1 1 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 1 2 2 1 2 2 1 0 1 2 1 2
## [8437] 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 1 2 1 1 1 1 1 2 2
## [8474] 2 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 2 1 2 2
## [8511] 1 1 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 1 2 1 2 2
## [8548] 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 1 2 1 1 2
## [8585] 2 1 2 2 1 2 0 1 2 1 1 1 1 2 1 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 1 1 1 2 1
## [8622] 1 2 1 1 2 2 2 1 2 1 1 1 1 0 2
Menyimpan hasil label ke dalam tabel
df$Cluster <- labels
datatable(df)

Visualisasi Hasil Clustering

library(ggplot2)

# PCA reduksi
pca <- prcomp(data, scale. = TRUE)
data_reduced <- data.frame(pca$x[, 1:2])

# Buat label cluster: ubah 0 jadi "Noise", lainnya tetap
data_reduced$Cluster <- as.character(labels)
data_reduced$Cluster[data_reduced$Cluster == "0"] <- "Noise"
data_reduced$Cluster <- factor(data_reduced$Cluster)

# Buat warna secara eksplisit
cluster_levels <- levels(data_reduced$Cluster)
n_clusters <- length(cluster_levels)

# Buat vektor warna: "Noise" hitam, sisanya rainbow
colors <- setNames(
  c("black", rainbow(n_clusters - 1)),
  cluster_levels
)

# Plot
ggplot(data_reduced, aes(x = PC1, y = PC2, color = Cluster)) +
  geom_point(size = 3, alpha = 1) +
  scale_color_manual(values = colors) +
  ggtitle("DBSCAN Clustering (PCA Reduced Data)") +
  theme_minimal()

Label

Jumlah data pada label 0 sangat sedikit dibandingkan dengan label 1 dan 2, yang menandakan adanya noise dalam dataset. Sementara itu, label 1 dan 2 memiliki jumlah yang hampir seimbang, menunjukkan distribusi data antar cluster yang baik.
table(labels)
## labels
##    0    1    2 
##   30 4430 4176

Visualisasi Cluster 1

Dari hasil visualisasi ini dapat terlihat bahwa pada cluster 1 memiliki persebaran yang padat dan pola perilaku yang cukup konsisten
data_cluster1 <- subset(data_reduced, Cluster == "1")
ggplot(data_cluster1, aes(x = PC1, y = PC2)) +
  geom_point(color = "blue", size = 3, alpha = 0.7) +
  ggtitle("DBSCAN - Cluster 1") +
  theme_minimal()

Visualisasi Cluster 2

Cluster 2 memiliki persebaran data yang lebih tersebar dibandingkan cluster 1 karena memiliki pola perilaku yang lebih bervariasi
data_cluster2 <- subset(data_reduced, Cluster == "2")
ggplot(data_cluster2, aes(x = PC1, y = PC2)) +
  geom_point(color = "red", size = 3, alpha = 0.7) +
  ggtitle("DBSCAN - Cluster 2") +
theme_minimal()

7. Analisis Cluster

Hasil analisis menunjukkan bahwa:

- Cluster 0: Nasabah dalam cluster ini memiliki nilai BALANCE dan MINIMUM_PAYMENT yang rendah, namun memiliki CREDIT_LIMIT dan PAYMENTS yang tinggi. Selain itu, nilai CASH_ADVANCE, CASH_ADVANCE_FREQUENCY, dan PRC_FULL_PAYMENT juga tergolong cukup tinggi. Hal ini menunjukkan bahwa nasabah memiliki limit kredit yang besar dan rutin melakukan pembayaran, namun juga cukup sering menggunakan fasilitas pembayaran di muka (cash advance). Maka cluster 0 mencerminkan nasabah dengan kondisi keuangan yang baik, namun dengan pola penggunaan kartu kredit yang cukup agresif. Cluster ini dapat dikategorikan sebagai nasabah dengan risiko sedang
- Cluster 1: Cluster ini ditandai dengan nilai CREDIT_LIMIT, PAYMENTS, CASH_ADVANCE, dan CASH_ADVANCE_FREQUENCY yang rendah. Namun, nilai PRC_FULL_PAYMENT (persentase pembayaran penuh) sangat tinggi, serta nilai BALANCE dan MINIMUM_PAYMENT tergolong rendah. Hal ini mencerminkan bahwa nasabah dalam cluster ini cenderung menggunakan kartu kredit secara bijak, dengan pengeluaran yang terbatas dan kebiasaan membayar tagihan secara penuh. Oleh karena itu, cluster 1 dapat dikategorikan sebagai nasabah dengan risiko rendah
- Cluster 2: Nasabah pada cluster ini memiliki nilai BALANCE, CREDIT_LIMIT, PAYMENTS, MINIMUM_PAYMENTS, CASH_ADVANCE, dan CASH_ADVANCE_FREQUENCY yang sangat tinggi, sementara PRC_FULL_PAYMENT sangat rendah. Pola ini menunjukkan bahwa nasabah sering menggunakan kartu kredit dalam jumlah besar, termasuk penggunaan cash advance, namun jarang melakukan pembayaran penuh atas tagihannya. Maka, cluster 2 dapat dikategorikan sebagai nasabah dengan risiko tinggi
df$Cluster <- labels
aggregate(df[, -ncol(df)], by = list(Cluster = df$Cluster), FUN = mean)
##   Cluster  BALANCE CREDIT_LIMIT PAYMENTS MINIMUM_PAYMENTS PRC_FULL_PAYMENT
## 1       0  372.701     5475.000 6138.385         511.0245       0.15427367
## 2       1  817.436     4425.694 1470.299         626.0393       0.25875455
## 3       2 2441.512     4617.505 2086.489        1119.6007       0.05383985
##   CASH_ADVANCE CASH_ADVANCE_FREQUENCY   TENURE
## 1     1648.899              0.1382298 11.23333
## 2        0.000              0.0000000 11.64695
## 3     2044.117              0.2835735 11.41715