Pada kesempatan kali ini saya akan membuat LBB terkait Unsupervised Learning. Disini saya akan melakukan clustering(pengelompokan) menggunakan K-Means Clustering terhadap data whosale untuk dilakukan segmentasi customer dari sebuah perusahaan wholesale berdasarkan karakteristik tiap customer dalam membeli produk. Pada kasus ini saya akan mengunakan data yang telah disediakan oleh team algoritma
library(tidyverse)
library(dplyr)
library(FactoMineR)
library(factoextra)Data set yang akan digunakan yaitu data yang telah disediakan oleh Team Algoritma.
wholesale <- read.csv("wholesale.csv")str(wholesale)## 'data.frame': 440 obs. of 8 variables:
## $ Channel : int 2 2 2 1 2 2 2 2 1 2 ...
## $ Region : int 3 3 3 3 3 3 3 3 3 3 ...
## $ Fresh : int 12669 7057 6353 13265 22615 9413 12126 7579 5963 6006 ...
## $ Milk : int 9656 9810 8808 1196 5410 8259 3199 4956 3648 11093 ...
## $ Grocery : int 7561 9568 7684 4221 7198 5126 6975 9426 6192 18881 ...
## $ Frozen : int 214 1762 2405 6404 3915 666 480 1669 425 1159 ...
## $ Detergents_Paper: int 2674 3293 3516 507 1777 1795 3140 3321 1716 7425 ...
## $ Delicassen : int 1338 1776 7844 1788 5185 1451 545 2566 750 2098 ...
Data wholesale merupakan data di bidang retail yang terdiri dari 440 usaha dan 8 variabel.
*Channel = jenis usaha yang terdiri dari horeca (hotel/restoran/cafe) dan retail
*Region = tempat dimana usaha berada. Terdiri dari 3 region, yaitu region 1, 2, dan
*6 variabel sisanya adalah kuantitas pemebelian dari setiap produk
Kita tidak akan menguunakan kolom yang tidak diperlukan
wholesale <- wholesale %>%
select(-c(Region, Channel)) Kemudian kita akan melakukan pengecekan terhadap missing value agar tidak menggangu dalam melakukan pemodelan.
anyNA(wholesale)## [1] FALSE
summary(wholesale)## Fresh Milk Grocery Frozen
## Min. : 3 Min. : 55 Min. : 3 Min. : 25.0
## 1st Qu.: 3128 1st Qu.: 1533 1st Qu.: 2153 1st Qu.: 742.2
## Median : 8504 Median : 3627 Median : 4756 Median : 1526.0
## Mean : 12000 Mean : 5796 Mean : 7951 Mean : 3071.9
## 3rd Qu.: 16934 3rd Qu.: 7190 3rd Qu.:10656 3rd Qu.: 3554.2
## Max. :112151 Max. :73498 Max. :92780 Max. :60869.0
## Detergents_Paper Delicassen
## Min. : 3.0 Min. : 3.0
## 1st Qu.: 256.8 1st Qu.: 408.2
## Median : 816.5 Median : 965.5
## Mean : 2881.5 Mean : 1524.9
## 3rd Qu.: 3922.0 3rd Qu.: 1820.2
## Max. :40827.0 Max. :47943.0
Skala antar variabel sangat berbeda dan range nya terlalu jauh, maka kita perlu melakukan scaling. Sebelumnya kita dapat melihat outlier terlebih dahulu dengan biplot dari hasil PCA
wholesale_pca <- PCA(X = wholesale,
scale.unit = T)Insight Variabel-variabel yang sangat berkontribusi tinggi untuk PC 1 (Dim 1) adalah Milk, Grocery, dan Detergents_Paper. Sedangakan kelompok produk Fresh, Frozen, dan Delicassen memiliki kontribusi tinggi terhadap PC2 (Dim 2). Dari 2 kelompok tersebut tidak saling berkorelasi
Membuat plot outlier terluar
plot.PCA(x = wholesale_pca,
choix = "ind",
select = "contrib10") Simpan index outlier pada plot ke dalam objek
outlier <- wholesale[-c(184,326,182,24,48,87,61,66,334,86),]
wholesale_normal <- outlier #menyimpan objekCek variansi tiap PC
wholesale_pca$eig## eigenvalue percentage of variance cumulative percentage of variance
## comp 1 2.64497357 44.082893 44.08289
## comp 2 1.70258397 28.376400 72.45929
## comp 3 0.74006477 12.334413 84.79371
## comp 4 0.56373023 9.395504 94.18921
## comp 5 0.28567634 4.761272 98.95048
## comp 6 0.06297111 1.049519 100.00000
Cek data yang akan digunakan untuk clustering sudah bebas dari outlier yang dapat mengganggu
summary(wholesale_normal)## Fresh Milk Grocery Frozen
## Min. : 3 Min. : 55 Min. : 3 Min. : 25
## 1st Qu.: 3098 1st Qu.: 1497 1st Qu.: 2132 1st Qu.: 744
## Median : 8224 Median : 3596 Median : 4630 Median : 1526
## Mean :11561 Mean : 5164 Mean : 7263 Mean : 2843
## 3rd Qu.:16641 3rd Qu.: 7011 3rd Qu.:10066 3rd Qu.: 3491
## Max. :76237 Max. :38369 Max. :59598 Max. :35009
## Detergents_Paper Delicassen
## Min. : 3 Min. : 3.0
## 1st Qu.: 256 1st Qu.: 405.2
## Median : 788 Median : 946.5
## Mean : 2571 Mean : 1346.8
## 3rd Qu.: 3806 3rd Qu.: 1779.0
## Max. :26701 Max. :14472.0
Selanjutnya kita melakukan scaling menggunakan fungsi scale() agar semua data mempunyai skala yang sama
wholesale_s <- scale(wholesale_normal)Menentukan k-optimum
RNGkind(sample.kind = "Rounding")## Warning in RNGkind(sample.kind = "Rounding"): non-uniform 'Rounding' sampler
## used
kmeansTunning <- function(data, maxK) {
withinall <- NULL
total_k <- NULL
for (i in 2:maxK) {
set.seed(303)
temp <- kmeans(data,i)$tot.withinss
withinall <- append(withinall, temp)
total_k <- append(total_k,i)
}
plot(x = total_k, y = withinall, type = "o", xlab = "Number of Cluster", ylab = "Total within")
}
# kmeansTunning(your_data, maxK = 9)
kmeansTunning(wholesale_s, maxK = 9)Berdasarkan elbow method pemilihan k optimum diambil dari penurunan total within sum of squares yang tidak lagi signifikan. Saya akan memilih nilai k saat grafik mulai melandai. Disini saya akan memilih nilai k = 4
Buat clustering
RNGkind(sample.kind = "Rounding")
set.seed(303)
ws_kmeans <- kmeans(wholesale_s, centers = 4)Mengembalikan hasil cluster ke data awal
wholesale_normal$cluster <- ws_kmeans$clusterMelakukan Profiling
wholesale_normal %>%
group_by(cluster) %>% # kelompokan berdasarkan cluster
summarise_all(mean)Insight :
Cluter 1 : Pada cluster ini pelanggan tidak memiliki prefensi tertentu
Cluter 2 : Kebanyakan pelanggan membeli produk Fresh
Cluter 3 : Di cluster ini juga banyak pelanggan yang membeli produk fresh namun tidak sebanyak di cluster 2
Cluter 4 : Cluster ini pelanggan banyak membeli produk Grodcery dan detergents_paper
fviz_cluster(ws_kmeans, data = wholesale_s)Berdasarkan hasil visualisasi diatas , Kebanyakan data berada pada titik (0,0) yang artinya data bersifat rata - rata (tidak ada variable yang terlalu dominan mempengaruhi).
Setelah dilakukan analisa perilaku dan segmentasi dalam data dapat dibagi menjadi 4 cluster/kelompok
Tiap kelompok memiliki karateristik yang berbeda
Kebanyakan Data berada berpusat pada sekitar titik 0 yang yang artinya data bersifat rata - rata (tidak ada variable yang dominan mempengaruhi).
Pada Cluster 1 berbeda dengan cluster lainnya karena pada cluster ini terlihat customer tidak memiliki perilaku khusus terhadap pembelian suatu tipe produk tertentu.