Pendahuluan
Unsupervised Machine Learning adalah metode yang didasarkan kepada kumpulan contoh dati populasi berlabel untuk mengidentifikasi karakteristik sebaran subjek dalam oembentukan model perilaku dari data (Amei et al. 2011). Metode ini juga seringkali disebut dengan cluster karena data yang digunakan tidak harus merupakan data yang berlabel (Thupai et al. 2018).
Packagaes Isntallation
Berikut library yang digunakan dalam unsupervied machine learning kali ini.
library(ggplot2)
library(factoextra)
library(knitr)
library(dplyr)
library(ggcorrplot)
library(corrplot)
Data
Data yang digunakan adalah dataset Mall_Customer.csv tentang
customer mall dengan format csv. Data ini memiliki
beberapa peubah yaitu:
Customer IDAgeGenreAnnual IncomeSpending Score
Import Data
data_2<- read.csv("D:/KULIAH/TAHUN Ke-3/Semester 5/Pengantar Sains Data/13/Data Mall_Customer.csv", sep=";")
head(data_2)
## CustomerID Genre Age Annual.Income Spending.Score
## 1 1 Male 19 15 39
## 2 2 Male 21 15 81
## 3 3 Female 20 16 6
## 4 4 Female 23 16 77
## 5 5 Female 31 17 40
## 6 6 Female 22 17 76
str(data_2)
## 'data.frame': 200 obs. of 5 variables:
## $ CustomerID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Genre : chr "Male" "Male" "Female" "Female" ...
## $ Age : int 19 21 20 23 31 22 35 23 64 30 ...
## $ Annual.Income : int 15 15 16 16 17 17 18 18 19 19 ...
## $ Spending.Score: int 39 81 6 77 40 76 6 94 3 72 ...
data_3 <- data_2[,-c(2)]
Dilakukan eliminasi beberapa peubah yang tidak digunakan yaitu peubah
Gender dan Customer ID karena tidak
digunakan.
Standardisasi Data
Antar peubah ang digunakan memiliki satuan yang berbeda sehingga dilakukan standardisasi. Proses ini dilakukan dengan transformasi peubah menjadi peubah yang memiliki rata-rata nol dan simpangan baku satu.
# Standardisasi Skala, krn skala satuan berbeda (krn disini menggunakan konsep Jarak)
data <- data_2[,-c(1:2)]
data.stdz = scale(data)
data.stdz %>% head(200) %>% kable(caption = "Hasil Standarisasi Data Mall Customer")
| Age | Annual.Income | Spending.Score |
|---|---|---|
| -1.4210029 | -1.7346462 | -0.4337131 |
| -1.2778288 | -1.7346462 | 1.1927111 |
| -1.3494159 | -1.6965724 | -1.7116178 |
| -1.1346547 | -1.6965724 | 1.0378135 |
| -0.5619583 | -1.6584985 | -0.3949887 |
| -1.2062418 | -1.6584985 | 0.9990891 |
| -0.2756101 | -1.6204246 | -1.7116178 |
| -1.1346547 | -1.6204246 | 1.6961281 |
| 1.8004143 | -1.5823507 | -1.8277910 |
| -0.6335454 | -1.5823507 | 0.8441916 |
| 2.0151754 | -1.5823507 | -1.4018227 |
| -0.2756101 | -1.5823507 | 1.8897500 |
| 1.3708920 | -1.5442768 | -1.3630984 |
| -1.0630677 | -1.5442768 | 1.0378135 |
| -0.1324360 | -1.5442768 | -1.4405471 |
| -1.2062418 | -1.5442768 | 1.1152623 |
| -0.2756101 | -1.5062029 | -0.5886107 |
| -1.3494159 | -1.5062029 | 0.6118453 |
| 0.9413697 | -1.4300552 | -0.8209570 |
| -0.2756101 | -1.4300552 | 1.8510256 |
| -0.2756101 | -1.3919813 | -0.5886107 |
| -0.9914806 | -1.3919813 | 0.8829160 |
| 0.5118474 | -1.3539074 | -1.7503422 |
| -0.5619583 | -1.3539074 | 0.8829160 |
| 1.0845438 | -1.2396857 | -1.4018227 |
| -0.7051324 | -1.2396857 | 1.2314354 |
| 0.4402603 | -1.2396857 | -0.7047838 |
| -0.2756101 | -1.2396857 | 0.4182234 |
| 0.0823251 | -1.2016118 | -0.7435082 |
| -1.1346547 | -1.2016118 | 1.4250574 |
| 1.5140661 | -1.1635380 | -1.7890666 |
| -1.2778288 | -1.1635380 | 0.8829160 |
| 1.0129567 | -1.0493163 | -1.7890666 |
| -1.4925900 | -1.0493163 | 1.6186793 |
| 0.7266085 | -1.0493163 | -1.4018227 |
| -1.2778288 | -1.0493163 | 1.1927111 |
| 0.2254992 | -1.0112424 | -1.2856496 |
| -0.6335454 | -1.0112424 | 0.8829160 |
| -0.2040231 | -0.8970208 | -0.9371301 |
| -1.3494159 | -0.8970208 | 0.9603648 |
| 1.8720013 | -0.8589469 | -0.5886107 |
| -1.0630677 | -0.8589469 | 1.6186793 |
| 0.6550215 | -0.8208730 | -0.5498863 |
| -0.5619583 | -0.8208730 | 0.4182234 |
| 0.7266085 | -0.8208730 | -0.8596814 |
| -1.0630677 | -0.8208730 | 0.5731209 |
| 0.7981956 | -0.7827991 | 0.1858770 |
| -0.8483065 | -0.7827991 | -0.1239180 |
| -0.7051324 | -0.7827991 | -0.3175400 |
| -0.5619583 | -0.7827991 | -0.3175400 |
| 0.7266085 | -0.7066513 | 0.0697039 |
| -0.4187842 | -0.7066513 | 0.3794990 |
| -0.5619583 | -0.6685774 | 0.1471527 |
| 1.4424790 | -0.6685774 | 0.3794990 |
| 0.7981956 | -0.6685774 | -0.2013668 |
| 0.5834344 | -0.6685774 | -0.3562643 |
| 0.8697826 | -0.6305036 | -0.0077449 |
| 2.1583495 | -0.6305036 | -0.1626424 |
| -0.8483065 | -0.5543558 | 0.0309795 |
| 1.0129567 | -0.5543558 | -0.1626424 |
| 2.2299365 | -0.5543558 | 0.2246014 |
| -1.4210029 | -0.5543558 | 0.1858770 |
| 2.0151754 | -0.5162819 | 0.0697039 |
| 1.0845438 | -0.5162819 | 0.3407746 |
| 1.7288272 | -0.4782080 | 0.0309795 |
| -1.4925900 | -0.4782080 | 0.3407746 |
| 0.2970862 | -0.4782080 | -0.0077449 |
| 2.0867625 | -0.4782080 | -0.0851936 |
| -1.4210029 | -0.4782080 | 0.3407746 |
| -0.4903713 | -0.4782080 | -0.1239180 |
| 2.2299365 | -0.4401341 | 0.1858770 |
| 0.5834344 | -0.4401341 | -0.3175400 |
| 1.5140661 | -0.4020602 | -0.0464693 |
| 1.5140661 | -0.4020602 | 0.2246014 |
| 1.4424790 | -0.2497647 | -0.1239180 |
| -0.9198936 | -0.2497647 | 0.1471527 |
| 0.4402603 | -0.2497647 | 0.1084283 |
| 0.0823251 | -0.2497647 | -0.0851936 |
| -1.1346547 | -0.2497647 | 0.0697039 |
| 0.7266085 | -0.2497647 | -0.3175400 |
| 1.2993049 | -0.2497647 | 0.0309795 |
| -0.0608490 | -0.2497647 | 0.1858770 |
| 2.0151754 | -0.2497647 | -0.3562643 |
| 0.5118474 | -0.2497647 | -0.2400912 |
| -1.2778288 | -0.2497647 | 0.2633258 |
| 0.6550215 | -0.2497647 | -0.1626424 |
| 1.1561308 | -0.1355430 | 0.3020502 |
| -1.2062418 | -0.1355430 | 0.1858770 |
| -0.3471972 | -0.0974691 | 0.3794990 |
| 0.7981956 | -0.0974691 | -0.1626424 |
| 2.0867625 | -0.0593953 | 0.1858770 |
| -1.4925900 | -0.0593953 | -0.3562643 |
| 0.6550215 | -0.0213214 | -0.0464693 |
| 0.0823251 | -0.0213214 | -0.3949887 |
| -0.4903713 | -0.0213214 | -0.3175400 |
| -1.0630677 | -0.0213214 | 0.0697039 |
| 0.5834344 | -0.0213214 | -0.1239180 |
| -0.8483065 | -0.0213214 | -0.0077449 |
| 0.6550215 | 0.0167525 | -0.3175400 |
| -1.3494159 | 0.0167525 | -0.0464693 |
| -1.1346547 | 0.0548264 | -0.3562643 |
| 0.7266085 | 0.0548264 | -0.0851936 |
| 2.0151754 | 0.0548264 | 0.3407746 |
| -0.9198936 | 0.0548264 | 0.1858770 |
| 0.7266085 | 0.0548264 | 0.2246014 |
| -1.2778288 | 0.0548264 | -0.3175400 |
| 1.9435884 | 0.0929003 | -0.0077449 |
| 1.0845438 | 0.0929003 | -0.1626424 |
| 2.0867625 | 0.0929003 | -0.2788156 |
| 1.9435884 | 0.0929003 | -0.0851936 |
| 1.8720013 | 0.0929003 | 0.0697039 |
| -1.4210029 | 0.0929003 | 0.1471527 |
| -0.0608490 | 0.1309742 | -0.3175400 |
| -1.4210029 | 0.1309742 | -0.1626424 |
| -1.4925900 | 0.1690481 | -0.0851936 |
| -1.4210029 | 0.1690481 | -0.0077449 |
| 1.7288272 | 0.1690481 | -0.2788156 |
| 0.7266085 | 0.1690481 | 0.3407746 |
| 0.8697826 | 0.2451958 | -0.2788156 |
| 0.7981956 | 0.2451958 | 0.2633258 |
| -0.8483065 | 0.2451958 | 0.2246014 |
| -0.0608490 | 0.2451958 | -0.3949887 |
| 0.0823251 | 0.3213436 | 0.3020502 |
| 0.0107381 | 0.3213436 | 1.5799549 |
| -1.1346547 | 0.3594175 | -0.8209570 |
| -0.5619583 | 0.3594175 | 1.0378135 |
| 0.2970862 | 0.3974914 | -0.5886107 |
| 0.0823251 | 0.3974914 | 1.7348525 |
| 1.4424790 | 0.3974914 | -1.5179959 |
| -0.0608490 | 0.3974914 | 0.9603648 |
| 0.5834344 | 0.3974914 | -1.5954447 |
| 0.0107381 | 0.3974914 | 0.9603648 |
| -0.9914806 | 0.4355653 | -0.6273350 |
| -0.5619583 | 0.4355653 | 0.8054672 |
| -1.3494159 | 0.4736391 | -1.7503422 |
| -0.7051324 | 0.4736391 | 1.4637818 |
| 0.3686733 | 0.4736391 | -1.6728934 |
| -0.4903713 | 0.4736391 | 0.8829160 |
| -1.4210029 | 0.5117130 | -1.5567203 |
| -0.2756101 | 0.5117130 | 0.8441916 |
| 1.2993049 | 0.5497869 | -1.7503422 |
| -0.4903713 | 0.5497869 | 1.6574037 |
| -0.7767195 | 0.5878608 | -0.3949887 |
| -0.4903713 | 0.5878608 | 1.4250574 |
| -0.9914806 | 0.6259347 | -1.4792715 |
| -0.7767195 | 0.6259347 | 1.8123012 |
| 0.6550215 | 0.6259347 | -0.5498863 |
| -0.4903713 | 0.6259347 | 0.9216404 |
| -0.3471972 | 0.6640086 | -1.0920277 |
| -0.3471972 | 0.6640086 | 1.5412305 |
| 0.2970862 | 0.6640086 | -1.2856496 |
| 0.0107381 | 0.6640086 | 1.4637818 |
| 0.3686733 | 0.6640086 | -1.1694764 |
| -0.0608490 | 0.6640086 | 0.9990891 |
| 0.5834344 | 0.6640086 | -1.3243740 |
| -0.8483065 | 0.6640086 | 1.5025061 |
| -0.1324360 | 0.6640086 | -1.9052398 |
| -0.6335454 | 0.6640086 | 1.0765379 |
| -0.3471972 | 0.6640086 | -1.9052398 |
| -0.6335454 | 0.6640086 | 0.8829160 |
| 1.2277179 | 0.7020825 | -0.5886107 |
| -0.7051324 | 0.7020825 | 1.2701598 |
| -1.4210029 | 0.7782302 | -1.7503422 |
| -0.5619583 | 0.7782302 | 1.6574037 |
| 0.7981956 | 0.9305258 | -0.9371301 |
| -0.2040231 | 0.9305258 | 0.9603648 |
| 0.2254992 | 0.9685997 | -1.1694764 |
| -0.4187842 | 0.9685997 | 1.7348525 |
| -0.2040231 | 1.0066735 | -0.8984057 |
| -0.4903713 | 1.0066735 | 0.4956721 |
| 0.0823251 | 1.0066735 | -1.4405471 |
| -0.7767195 | 1.0066735 | 0.9603648 |
| -0.2040231 | 1.0066735 | -1.5567203 |
| -0.2040231 | 1.0066735 | 1.6186793 |
| 0.9413697 | 1.0447474 | -1.4405471 |
| -0.6335454 | 1.0447474 | 1.3863330 |
| 1.3708920 | 1.0447474 | -1.3630984 |
| -0.8483065 | 1.0447474 | 0.7280184 |
| 1.4424790 | 1.2351169 | -1.4018227 |
| -0.2756101 | 1.2351169 | 1.5412305 |
| -0.1324360 | 1.3874124 | -0.7047838 |
| -0.4903713 | 1.3874124 | 1.3863330 |
| 0.5118474 | 1.4254863 | -1.3630984 |
| -0.7051324 | 1.4254863 | 1.4637818 |
| 0.1539122 | 1.4635602 | -0.4337131 |
| -0.6335454 | 1.4635602 | 1.8123012 |
| 1.0845438 | 1.5397080 | -1.0145789 |
| -0.7767195 | 1.5397080 | 0.6892941 |
| 0.1539122 | 1.6158557 | -1.2856496 |
| -0.2040231 | 1.6158557 | 1.3476086 |
| -0.3471972 | 1.6158557 | -1.0533033 |
| -0.4903713 | 1.6158557 | 0.7280184 |
| -0.4187842 | 1.9965946 | -1.6341691 |
| -0.0608490 | 1.9965946 | 1.5799549 |
| 0.5834344 | 2.2631118 | -1.3243740 |
| -0.2756101 | 2.2631118 | 1.1152623 |
| 0.4402603 | 2.4915551 | -0.8596814 |
| -0.4903713 | 2.4915551 | 0.9216404 |
| -0.4903713 | 2.9103678 | -1.2469252 |
| -0.6335454 | 2.9103678 | 1.2701598 |
apply(data.stdz, 2, mean) #cek mean = 0
## Age Annual.Income Spending.Score
## -1.016906e-16 -8.144310e-17 -1.096708e-16
apply(data.stdz, 2, sd) # cek
## Age Annual.Income Spending.Score
## 1 1 1
Eksplorasi Data
Korelasi
korelasi<-cor(data)
korelasi
## Age Annual.Income Spending.Score
## Age 1.00000000 -0.012398043 -0.327226846
## Annual.Income -0.01239804 1.000000000 0.009902848
## Spending.Score -0.32722685 0.009902848 1.000000000
corrplot(corr=cor(korelasi), method = "number", type = "upper")
ggcorrplot(korelasi,type="lower",lab = TRUE)
Berdasarkan hasil plot korelasi tersebut, didapatkan bahwa hubungan
antara peubah Spending Score dengan Age
merupakan yang terbesar dibanding hubungan peubah yang lain.
Analisis Gerombol Berhierarkhi
Analisis gerombol berhierarkhi merupakan metode clustering digunakan untuk menggerombolkan objek secara terstruktur berdasarkan keindentikan dan cluster yang belum diketahui jumlahnya dan diinginkan (Sundari et al. 2021).
Terdapat beberapa metode penggerombolan dalam analisisi ini, yaitu:
Single Linkage
Jarak antara dua gerombol diukur dengan menentukan jarak terdekat antara sebuah objek dalam masing-masing gerombol.
Centroid Linkage
Jarak antara dua gerombol diukur sebagai jarak Euclidian antara masing-masing gerombol.
Average Linkage
Jarak antara due gerombol diukur menggunakan jarak rata-rata antara sebuah objek dalam masing-masing gerombol
Complete Linkage
Jarak antara dua gerombol diukur dengan menentukan jarak terjauh antara sebuah objek dalam masing-masing gerombol.
Pemilihan Banyak Kluster (Metode Silhouette)
Single Linkage Jarak Euclidean Metode Silhouette
fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "single", hc_metric="euclidean")
Didapatkan bahwa jumlah gerombol yang optimal adalah 2. Angak tersebut didapatkan berdasarkan nilai koefisien terbesar yang menunjukkan bahwa gerombol yang terbentuk telah sesuai dan optimal.
Centroid Linkage Jarak Euclidean Metode Silhouette
fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "centroid", hc_metric="euclidean")
Didapatkan bahwa jumlah gerombol yang optimal adalah 2. Angak tersebut didapatkan berdasarkan nilai koefisien terbesar yang menunjukkan bahwa gerombol yang terbentuk telah sesuai dan optimal.
Average Linkage Jarak Euclidean Metode Silhouette
fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "average", hc_metric="euclidean")
Didapatkan bahwa jumlah gerombol yang optimal adalah 5. Angak tersebut didapatkan berdasarkan nilai koefisien terbesar yang menunjukkan bahwa gerombol yang terbentuk telah sesuai dan optimal.
Complete Linkage Jarak Euclidean Metode Silhouette
fviz_nbclust(data.stdz, FUNcluster = hcut, method = "silhouette", hc_method = "complete", hc_metric="euclidean")
Didapatkan bahwa jumlah gerombol yang optimal adalah 5. Angak tersebut didapatkan berdasarkan nilai koefisien terbesar yang menunjukkan bahwa gerombol yang terbentuk telah sesuai dan optimal.
Proses Clustering dan Karakteristik tiap cluster
Single Linkage Jarak Euclidean
fviz_dend(hclust(dist(data.stdz, method = "euclidean"), method = "single"))
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <]8;;https://github.com/kassambara/factoextra/issueshttps://github.com/kassambara/factoextra/issues]8;;>.
Terlihat bahwa metode single linkage tidak terdistribusi secara normal/rata. Metode ini menghasilkan 2 gerombol yang sangat tidak seimbang sebagai berikut.
#Interpretasi, utk melihat anggota dari setiap gerombol
hc.data.sing <- eclust(data, stand = TRUE, FUNcluster = "hclust", k=2, hc_method = "single", hc_metric = "euclidean", graph = F)
hc.data.sing$cluster #cluster dari setiap pengamatan
## [1] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
ceksing <- data.frame("Observasi"= c(seq(1:200)), "Kluster" = hc.data.sing$cluster)
ceksing$Observasi <- as.character(ceksing$Observasi)
ceksing$Kluster <- as.character(ceksing$Kluster)
sing <- ceksing %>% group_by(Kluster)%>% group_rows()
sing
## <list_of<integer>[2]>
## [[1]]
## [1] 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
## [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
## [37] 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
## [55] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
## [73] 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
## [91] 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
## [109] 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
## [127] 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
## [145] 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
## [163] 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
## [181] 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
## [199] 200
##
## [[2]]
## [1] 3
ceksing%>% count(Kluster)
## Kluster n
## 1 1 199
## 2 2 1
Sesuai dengan dendogram diatas, dimana dengan metode ini data dibagi menjadi 2 gerombol.
fviz_cluster(hc.data.sing)
aggregate(data, by=list(cluster=hc.data.sing$cluster), FUN = mean)
## cluster Age Annual.Income Spending.Score
## 1 1 38.94472 60.78392 50.42211
## 2 2 20.00000 16.00000 6.00000
Gerombol 1 merupakan gerombol dengan umur yang lebih tua serta penghasilan dan spending score lebih tinggi daripada cluster 2.
Centroid Linkage Jarak Euclidean
fviz_dend(hclust(dist(data.stdz, method = "euclidean"), method = "centroid"))
Terlihat bahwa metode centroid linkage tidak terdistribusi secara normal/rata. Metode ini menghasilkan 2 gerombol yang sangat tidak seimbang sebagai berikut.
#Interpretasi, utk melihat anggota dari setiap gerombol
hc.data.centro <- eclust(data, stand = TRUE, FUNcluster = "hclust", k=2, hc_method = "centroid", hc_metric = "euclidean", graph = F)
hc.data.centro$cluster #cluster dari setiap pengamatan
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 1 1 1 1 1 1 1 1 1 2 1 2 1 2
cekcentro <- data.frame("Observasi"= c(seq(1:200)), "Kluster" = hc.data.centro$cluster)
cekcentro$Observasi <- as.character(cekcentro$Observasi)
cekcentro$Kluster <- as.character(cekcentro$Kluster)
centro <- cekcentro %>% group_by(Kluster)%>% group_rows()
centro
## <list_of<integer>[2]>
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
## [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
## [127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
## [145] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
## [163] 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## [181] 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 197 199
##
## [[2]]
## [1] 196 198 200
cekcentro%>% count(Kluster)
## Kluster n
## 1 1 197
## 2 2 3
Sesuai dengan dendogram diatas, dimana dengan metode ini data dibagi menjadi 2 gerombol.
fviz_cluster(hc.data.centro)
aggregate(data, by=list(cluster=hc.data.centro$cluster), FUN = mean)
## cluster Age Annual.Income Spending.Score
## 1 1 38.94924 59.53807 49.76650
## 2 2 32.33333 127.66667 78.66667
Gerombol 2 merupakan gerombol dengan umur yang lebih muda serta penghasilan dan spending score lebih tinggi daripada cluster 2.
Average Linkage Jarak Euclidean
fviz_dend(hclust(dist(data.stdz, method = "euclidean"), method = "average"))
Terlihat bahwa metode average linkage terdistribusi secara normal/rata. Metode ini menghasilkan 5 gerombol yang sangat tidak seimbang sebagai berikut.
#Interpretasi, utk melihat anggota dari setiap gerombol
hc.data.ave <- eclust(data, stand = TRUE, FUNcluster = "hclust", k=5, hc_method = "average", hc_metric = "euclidean", graph = F)
hc.data.ave$cluster #cluster dari setiap pengamatan
## [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
## [38] 2 1 2 3 2 3 2 3 2 3 2 2 2 3 2 2 3 3 3 3 3 2 3 3 2 3 3 3 2 3 3 2 2 3 3 3 3
## [75] 3 2 3 3 2 3 3 3 3 3 2 3 3 2 3 3 3 2 3 3 3 2 3 2 3 2 2 3 3 2 3 2 3 3 3 3 3
## [112] 2 3 2 2 2 3 3 3 3 2 3 3 4 2 4 5 4 5 4 5 4 2 4 5 4 5 4 5 4 5 4 2 4 5 4 5 4
## [149] 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5
## [186] 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4
cekave <- data.frame("Observasi"= c(seq(1:200)), "Kluster" = hc.data.ave$cluster)
cekave$Observasi <- as.character(cekave$Observasi)
cekave$Kluster <- as.character(cekave$Kluster)
ave <- cekave %>% group_by(Kluster)%>% group_rows()
ave
## <list_of<integer>[5]>
## [[1]]
## [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
##
## [[2]]
## [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
## [20] 40 42 44 46 48 49 50 52 53 59 62 66 69 70 76 79 85 88 92
## [39] 96 98 100 101 104 106 112 114 115 116 121 125 133 143
##
## [[3]]
## [1] 41 43 45 47 51 54 55 56 57 58 60 61 63 64 65 67 68 71 72
## [20] 73 74 75 77 78 80 81 82 83 84 86 87 89 90 91 93 94 95 97
## [39] 99 102 103 105 107 108 109 110 111 113 117 118 119 120 122 123
##
## [[4]]
## [1] 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160
## [20] 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198
## [39] 200
##
## [[5]]
## [1] 127 129 131 135 137 139 141 145 147 149 151 153 155 157 159 161 163 165 167
## [20] 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199
cekave%>% count(Kluster)
## Kluster n
## 1 1 20
## 2 2 52
## 3 3 54
## 4 4 39
## 5 5 35
Sesuai dengan dendogram diatas, dimana dengan metode ini data dibagi menjadi 5 gerombol.
fviz_cluster(hc.data.ave)
aggregate(data, by=list(cluster=hc.data.ave$cluster), FUN = mean)
## cluster Age Annual.Income Spending.Score
## 1 1 43.90000 24.45000 19.10000
## 2 2 24.65385 42.94231 62.07692
## 3 3 53.25926 54.20370 48.55556
## 4 4 32.69231 86.53846 82.12821
## 5 5 41.68571 88.22857 17.28571
Gerombol 4 merupakan gerombol dengan spending score terbanyak namun dengan penghasilan tahunan yang termasuk tertinggi. Jika ditinjau lagi, gerombol ke-2 dapat menjadi potensi market paling bagus karena dengan penghasilan yang tergolong rendah diabndingkan cluster lainnya,
Complete Linkage Jarak Euclidean
fviz_dend(hclust(dist(data.stdz, method = "euclidean"), method = "complete"))
Terlihat bahwa metode complete linkage terdistribusi secara normal/rata. Metode ini menghasilkan 5 gerombol yang sangat tidak seimbang sebagai berikut.
#Interpretasi, utk melihat anggota dari setiap gerombol
hc.data.com <- eclust(data, stand = TRUE, FUNcluster = "hclust", k=5, hc_method = "complete", hc_metric = "euclidean", graph = F)
hc.data.com$cluster #cluster dari setiap pengamatan
## [1] 1 2 1 2 1 2 1 2 3 2 3 2 3 2 1 2 1 2 3 2 1 2 3 2 3 2 3 1 3 2 3 2 3 2 3 2 3
## [38] 2 3 2 3 2 3 1 3 2 3 1 1 1 3 1 1 3 3 3 3 3 1 3 3 1 3 3 3 1 1 3 1 1 3 3 3 3
## [75] 3 1 1 1 1 3 3 1 3 3 1 3 3 1 1 3 3 1 3 1 1 1 3 1 3 1 1 3 3 1 3 1 3 3 3 3 3
## [112] 1 1 1 1 1 3 3 3 3 1 1 1 4 1 4 5 4 5 4 5 4 1 4 5 4 5 4 5 4 5 4 1 4 5 4 5 4
## [149] 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5
## [186] 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4
cekcom <- data.frame("Observasi"= c(seq(1:200)), "Kluster" = hc.data.com$cluster)
cekcom$Observasi <- as.character(cekcom$Observasi)
cekcom$Kluster <- as.character(cekcom$Kluster)
com <- cekcom %>% group_by(Kluster)%>% group_rows()
com
## <list_of<integer>[5]>
## [[1]]
## [1] 1 3 5 7 15 17 21 28 44 48 49 50 52 53 59 62 66 67 69
## [20] 70 76 77 78 79 82 85 88 89 92 94 95 96 98 100 101 104 106 112
## [39] 113 114 115 116 121 122 123 125 133 143
##
## [[2]]
## [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 30 32 34 36 38 40 42 46
##
## [[3]]
## [1] 9 11 13 19 23 25 27 29 31 33 35 37 39 41 43 45 47 51 54
## [20] 55 56 57 58 60 61 63 64 65 68 71 72 73 74 75 80 81 83 84
## [39] 86 87 90 91 93 97 99 102 103 105 107 108 109 110 111 117 118 119 120
##
## [[4]]
## [1] 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160
## [20] 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198
## [39] 200
##
## [[5]]
## [1] 127 129 131 135 137 139 141 145 147 149 151 153 155 157 159 161 163 165 167
## [20] 169 171 173 175 177 179 181 183 185 187 189 191 193 195 197 199
cekcom%>% count(Kluster)
## Kluster n
## 1 1 48
## 2 2 21
## 3 3 57
## 4 4 39
## 5 5 35
Sesuai dengan dendogram diatas, dimana dengan metode ini data dibagi menjadi 2 gerombol.
fviz_cluster(hc.data.com)
aggregate(data, by=list(cluster=hc.data.com$cluster), FUN = mean)
## cluster Age Annual.Income Spending.Score
## 1 1 28.35417 50.29167 45.93750
## 2 2 24.80952 25.61905 80.23810
## 3 3 55.33333 47.31579 41.08772
## 4 4 32.69231 86.53846 82.12821
## 5 5 41.68571 88.22857 17.28571
Gerombol 2 merupakan gerombol dengan spending score terbanyak namun dengan penghasilan tahunan yang paling sedikit.
Hasil clustering yang baik jika ditinjau dari dendogram adalah clustering yang menghasilkan gerombol dengan sebaran normal atau rata jumlahnya. Complete dan average memenuhi hal tersebut sehingga metode berhierarkhi yang lain diabaikan karena dianggap tidak representatif.
Analsisis Gerombol Tak Berhierarki (K-Means)
Kebalikan dari analisis gerombol berhierarkhi, analisis ini
Penentuan Cluster
#Penentuan k dengan within sum square
fviz_nbclust(data.stdz, FUNcluster = kmeans, method = "wss")
fviz_nbclust(data.stdz, FUNcluster = kmeans, method = "silhouette")
Penentuan gerombol atau kluster dilakukan berdasarkan plot “Optimal Number of Cluster”. Untuk metode Within-Cluster-Sum of Squared Errors (WSS), didapatkan bahwa titik 6 dan 8 merupakan titik yang sesuai. Sedangkan pada metode silhouette didapatkan bahwa titik 8 merupakan yang paling optimal denngan perolehan nilai average sihlouette width terbesar. Oleh karena itu akan ditentukan bahwa kluster yang digunakan adalah 8.
Clustering
K-Means Cliustering K=4
```r
kmeans.data8 <- eclust(data, stand = TRUE, FUNcluster = "kmeans", k=8, graph = F)
kmeans.data8$cluster
```
```
## [1] 3 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8
## [38] 3 8 3 7 3 8 6 8 3 7 6 6 6 7 6 6 7 7 7 7 7 6 7 7 6 7 7 7 6 7 7 6 6 7 7 7 7
## [75] 7 6 7 6 6 7 7 6 7 7 6 7 7 6 6 7 7 6 7 6 6 6 7 6 7 6 6 7 7 6 7 6 7 7 7 7 7
## [112] 6 6 6 6 6 7 7 7 7 6 6 6 5 1 5 2 5 2 5 2 5 1 5 1 5 2 5 1 5 2 5 6 5 1 5 2 5
## [149] 1 5 2 5 2 5 2 5 1 5 1 5 2 5 1 5 2 5 2 5 1 5 2 5 1 5 2 5 2 5 2 5 4 5 2 5 4
## [186] 5 2 5 4 5 4 5 4 5 4 5 4 5 4 5
```
```r
cekk8 <- data.frame("Observasi"= c(seq(1:200)), "Kluster" = kmeans.data8$cluster)
cekk8$Observasi <- as.character(cekk8$Observasi)
cekk8$Kluster <- as.character(cekk8$Kluster)
k8<- cekk8 %>% group_by(Kluster)%>% group_rows()
k8
```
```
## <list_of<integer>[8]>
## [[1]]
## [1] 125 133 135 139 145 149 157 159 163 169 173
##
## [[2]]
## [1] 127 129 131 137 141 147 151 153 155 161 165 167 171 175 177 179 183 187
##
## [[3]]
## [1] 1 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 46
##
## [[4]]
## [1] 181 185 189 191 193 195 197 199
##
## [[5]]
## [1] 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160
## [20] 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198
## [39] 200
##
## [[6]]
## [1] 44 48 49 50 52 53 59 62 66 69 70 76 78 79 82 85 88 89 92
## [20] 94 95 96 98 100 101 104 106 112 113 114 115 116 121 122 123 143
##
## [[7]]
## [1] 41 47 51 54 55 56 57 58 60 61 63 64 65 67 68 71 72 73 74
## [20] 75 77 80 81 83 84 86 87 90 91 93 97 99 102 103 105 107 108 109
## [39] 110 111 117 118 119 120
##
## [[8]]
## [1] 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 43 45
```
```r
cekk8 %>% count(Kluster)
```
```
## Kluster n
## 1 1 11
## 2 2 18
## 3 3 23
## 4 4 8
## 5 5 39
## 6 6 36
## 7 7 44
## 8 8 21
```
```r
fviz_cluster(kmeans.data8)
```
<img src="PSD-individu_files/figure-html/unnamed-chunk-28-1.png" width="768" />
```r
aggregate(data_3, by=list(cluster=kmeans.data8$cluster), FUN = mean)
```
```
## cluster CustomerID Age Annual.Income Spending.Score
## 1 1 149.72727 28.00000 77.72727 14.18182
## 2 2 157.55556 49.38889 82.05556 18.38889
## 3 3 22.13043 25.00000 25.26087 77.60870
## 4 4 191.25000 38.75000 112.25000 22.62500
## 5 5 162.00000 32.69231 86.53846 82.12821
## 6 6 87.88889 27.16667 55.86111 50.11111
## 7 7 82.02273 56.34091 53.70455 49.38636
## 8 8 23.19048 45.52381 26.28571 19.38095
```
```r
kmeans.data8$centers
```
```
## Age Annual.Income Spending.Score
## 1 -0.776719472 0.6536248 -1.394781947
## 2 0.754447946 0.8184193 -1.231865720
## 3 -0.991480616 -1.3439751 1.061384888
## 4 -0.007158705 1.9680392 -1.067824922
## 5 -0.440811016 0.9891010 1.236400114
## 6 -0.836375346 -0.1789050 -0.003442168
## 7 1.252122551 -0.2610138 -0.031507568
## 8 0.477758324 -1.3049552 -1.193448671
```
</div>
Berdasarkan plot dan tabel yang ada di atas, didapatkan bahwa metode K-Means dengan 8 gerombol menunjukkan beberapa gerombol dengan karakteristik yang berbeda.
Gerombol 1,2,4, dan 5 merupakan gerombol dengan pendapatan tahunan yang tinggi namun dengan tingkat spending score yang rendah.
Gerombol 3 merupakan gerombol dengan pendapatan tahunan yang rendah namun dengan tingkat spending score yang tinggi.
Gerombol 6,7, dan 8 merupakan gerombol dengan pendapatan tahunan yang sama dengan tingkat spending scorenya.
Untuk kasus market targetting, gerombol 3 merupakan target yang sangat cocok karena cenderung mudah tergiur untuk berbelanja atau konsumtif sehingga setiap penawaran atau barang trend yang dihadirkan, kemungkinan besar akan dibeli.
Kesimpulan
Didapatkan beberapa kesimpula sebagai berikut.
Antara metode clustering berhierakhi dan tidak memiliki hasil yang berbeda. Dimana clustering berhierakhi cenderung memiliki gerombol yang lebih sedikit daripada K-Means.
Gerombol sebagai market terbaik jatuh kepada gerombol dengan karakteristik besar pendapatan tahunannya jauh lebih kecil daripada spending scorenya. Gerombol yang termasuk kriteria tersebut adalah gerombol 7 dari K-Means, gerombol 2 dari average linkage, dan gerombol 2 dari complete linkage.
Daftar Pustaka
Amei, W., Huailin, D., Qingfeng, W., & Ling, L. (2011). A survey of application-level protocol identification based on machine learning. 2011 International Conference on Information Management, Innovation Management and Industrial Engineering, 3, 201–204.
Thupae, R., Isong, B., Gasela, N., & AbuMahfouz, A. M. (2018). Machine Learning Techniques for Traffic Identification and Classifiacation in SDWSN: A Survey. IECON 2018 - 44th Annual Conference of the IEEE Industrial Electronics Society, 4645–4650. https://doi.org/10.1109/IECON.2018.859 1178
Sundari M, Sihombing PR, Hamik KF. 2021. Perbandingan Metode Analisis Gerombol K-Rataan dan Bicluster (Studi Kasus : Kerentanan Kelurahan di Depok Tahun 2020). 3(10) : 1-11.