Latar Belakang

Customer adalah orang yang membeli suatu produk, barang, atau jasa dari suatu bisnis tertentu. Dalam pengertian ini, customer tidak selalu hanya mengacu pada konsumen, tetapi juga dapat diartikan sebagai pelanggan yang membeli produk untuk dijual kembali atau memberikan kepada orang lain yang tidak akan menggunakannya sendiri.

Mall customer adalah istilah yang digunakan untuk menggambarkan pengunjung mall yang melakukan berbagai aktivitas seperti berbelanja, bermain, atau sekadar mampir. Sebagai hasilnya, semua pengunjung yang datang ke mall dapat dianggap sebagai mall customer.

Setiap mall customer memiliki perbedaan dalam hal usia, gender, pendapatan, dan kebiasaan berbelanja. Informasi unik ini dapat digunakan oleh pihak mall untuk merencanakan arah perkembangan mall ke depan dan memasarkan merek mall secara efisien.

Salah satu langkah yang dapat diambil oleh pihak mall untuk menarik kesamaan antara customer adalah dengan mengelompokkan mall customer. Dengan cara ini, pemilik mall dapat memahami kebutuhan-kebutuhan customer dan menentukan target customer dengan lebih tepat. Pengelompokan mall customer dapat didasarkan pada kriteria seperti rentang usia, tingkat pendapatan, atau kebiasaan berbelanja.

Deskripsi Data

Data yang digunakan merupakan data Mall Customer yang digunakan untuk mengelompokan pelanggan di mall sesuai dengan kebiasaan dan perilaku dalam membelanjakan uangnya. Data Mall Customer yang digunakan didapatkan dari kaggle dengan link yaitu https://www.kaggle.com/kandij/mall-customers . Data terdiri dari 200 observasi yang memuat beberapa variabel yang berhubugngan dengan pelanggan seperti id pelanggan, gender, usia, , pendapatan tahunan, dan skor pembelanjaan. Berikut adalah 5 variabel yang terdapat dalam data :

  • Customer id : id dari pelanggan
  • Genre : jenis kelamin pelanggan
  • Age : usia pelanggan
  • Annual income : pendapatan tahunan pelanggan yang dianyatakan dalam ribuan dollar
  • Spending score : skor yang diberikan mall terhadap perilaku dan pembelanjaan pelanggan

Pengembangan Model

Import Data

Sebelum melakukan import data, kita akan melakukan pemanggialan beberapa library yang akan digunakan yaitu

library(factoextra)
library(ggplot2)
library(stats)
library(cluster)
library(fpc)
library(caTools)
library(ggcorrplot)
library(tidyverse)

Selanjutnya baru memanggil data yang digunakan

Customer = read.csv("Mall_Customers.csv")
head(Customer)
##   CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100.
## 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

Untuk melihat struktur dari data yang digunakan kita akan menggunakan std(data)

str(Customer) 
## '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..k..    : int  15 15 16 16 17 17 18 18 19 19 ...
##  $ Spending.Score..1.100.: int  39 81 6 77 40 76 6 94 3 72 ...

Dapat dilihat bahwa data teridir dari 5 kolom yaitu Customer ID, Genre yang merupakan gender dari customer, age, annual income dalam ratusan ribu, dan spending score yang dimiliki customer.

Clean Dataset

Untuk proses membersihkan data, kita akan melihat apakah terdapat missing value pada data yang dimiliki Pertama dengan melihat pada genre

table(Customer$Genre, useNA = "ifany")
## 
## Female   Male 
##    112     88

Dilihat tidak ada missing value pada bagian genre (gender) Kemudian untuk mempercepat proses penyeleksian missing value dan data unik maka digunakan

Customer_clean <- Customer %>% drop_na() %>% unique()

Dengan menggunakan ini maka data yang terdapat missing value ataupun data yang duplikat akan dihapuskan Kemudian kita akan membuang kolom Customer ID karena tidak dapat digunakan untuk representasi data, dan akan melihat dari stuktur serta summary dari data yang sudah bersih

str(Customer_clean)
## '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..k..    : int  15 15 16 16 17 17 18 18 19 19 ...
##  $ Spending.Score..1.100.: int  39 81 6 77 40 76 6 94 3 72 ...
summary(Customer_clean)
##    CustomerID        Genre                Age        Annual.Income..k..
##  Min.   :  1.00   Length:200         Min.   :18.00   Min.   : 15.00    
##  1st Qu.: 50.75   Class :character   1st Qu.:28.75   1st Qu.: 41.50    
##  Median :100.50   Mode  :character   Median :36.00   Median : 61.50    
##  Mean   :100.50                      Mean   :38.85   Mean   : 60.56    
##  3rd Qu.:150.25                      3rd Qu.:49.00   3rd Qu.: 78.00    
##  Max.   :200.00                      Max.   :70.00   Max.   :137.00    
##  Spending.Score..1.100.
##  Min.   : 1.00         
##  1st Qu.:34.75         
##  Median :50.00         
##  Mean   :50.20         
##  3rd Qu.:73.00         
##  Max.   :99.00

Pada tahap ini karena data sudah memiliki semua nilai dan tidak ada data duplikat maka data sudah bersih. Untuk bagian genre akan tetap kita jadikan factor dan tidak perlu diubah menjadi variabel dummy, karena genre akan digunakan sebagai penentuannya saja dan tidak digunakan dalam pembentukan clustering.

Create Train and Test Set

Karena dataset yang dimiliki memiliki ukuran yang cukup kecil, maka untuk pembagian data training dan data testing menggunakan 10% dari data

set.seed(100)
size <- 0.9 * nrow(Customer_clean)

train <- sample(seq_len(nrow(Customer_clean)), size = size)
Cust_train <- Customer_clean[train, ]
Cust_test <- Customer_clean[-train, ]

Sehingga didapatkan untuk cust train

nrow(Cust_train)
## [1] 180
head(Cust_train)
##     CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100.
## 102        102 Female  49                 62                     48
## 112        112 Female  19                 63                     54
## 151        151   Male  43                 78                     17
## 4            4 Female  23                 16                     77
## 55          55 Female  50                 43                     45
## 70          70 Female  32                 48                     47

Didapatkan 180 data sebagai training dalam pembentukan model, dan dapat dilihat bahwa pembagian data dilakukan secara acak dengan memperhatikan urutan pada bagian kiri dari tampilan cust train.

Untuk cust test

nrow(Cust_test)
## [1] 20
head(Cust_test)
##    CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100.
## 6           6 Female  22                 17                     76
## 9           9   Male  64                 19                      3
## 29         29 Female  40                 29                     31
## 34         34   Male  18                 33                     92
## 52         52   Male  33                 42                     60
## 59         59 Female  27                 46                     51

Didapatkan 20 data sebagai testing, yaitu mencoba melihat kecocokan penggunaan model saat diterapakan pada data testing

Build the Model

Untuk membuat model clustering, pertama-tama kita akan melihat keeratan dan pola yang dapat terbentuk dari variabel yang akan digunakan. Dalam pembuatan model ini hanya akan menggunakan data cust train. Pertama-tama melihat hubungan antara age dan annual income

plot(Cust_train$Age,Cust_train$Annual.Income..k..)

Dari plot diatas kita dapat mengetahui bahwa usia yang berada pada kisaran 30 sampai 50 tahun memiliki pendapatan tertinggi yaitu lebih dari 100.000 . Untuk hubungan antara age dan spending score

plot(Cust_train$Age,Cust_train$Spending.Score..1.100.)

Data plot diatas dapat dilihat bahwa pada usia dibawah 40 tahun memiliki spending skor yang cukup besar, yang mengindikasikan bahwa customer dengan usia di bawah 40 tahun memiliki tingkat untuk berbelanja yang lebih tinggi dari pada umur diatas 40 tahun yang memiliki skor yang stabil yaitu di sekitar 60. Terakhir hubungan antara annual income dan spending score

plot(Cust_train$Annual.Income..k..,Cust_train$Spending.Score..1.100.)

Pada plot diatas terjadi keunikan pada hubungan antara annual income dan spending score, dimana terbentuk semacam kumpulan-kumpulan yang belum bisa ditarik kesimpulannya karena memilki nilai yang bervariatif.

Kemudian dengan melihat pada nilai korelasi masing-masing variabel

numeric_data <- select_if(Cust_train[,-1], is.numeric)

cm <- numeric_data %>% as.matrix() %>% cor()
cm
##                                Age Annual.Income..k.. Spending.Score..1.100.
## Age                     1.00000000        -0.01199405            -0.30712785
## Annual.Income..k..     -0.01199405         1.00000000             0.02785479
## Spending.Score..1.100. -0.30712785         0.02785479             1.00000000
ggcorrplot(cm)

Disini kita tidak memasukkan gender, karena gender tidak memiliki pengaruh yang kuat dalam pembentukan clustering. Dari korelasi diatas didapatkan bahwa koreasi tertinggi antara age dan spending score, tetapi karena kita sudah dapat melihat pola hubungan yang terjadi pada plot sebelumnya, maka untuk pembentukan cluster kita akan memutuskan menggunakan annual income dan spending score.

Sehingga membuat index yang digunakan dalam pembentukan cluster

field = c("Annual.Income..k..","Spending.Score..1.100.")

Field ini dibuat sebagai index yang digunakan dalam pembentukan cluster terhadap data.

Untuk data yang akan digunakan tidak perlu dilakukan scaling atau standarisasi karena data yang digunakan memiliki nilai yang sudah di standarisasi yaitu pada annual income sudah dijadikan dalam bentuk ribuan dollar sehinga rentang nilai antara annual income dan spending score dapat diabaikan.

Kemudian melihat berapa banyak cluster yang akan dibuat dengan menggunakan grafik elbow dengan metode wss.

fviz_nbclust(Cust_train[field], kmeans, method = "wss")

Dapat dilihat dari grafik elbow diatasm ukuran cluster yang terletak mendekati siku-sikut dari elbow adalah pada urutan ke 5, sehingga didapatkan untuk jumlah cluster optimal yang dapat dibuat adalah sebanyak 5 cluster.

Setelah mendapatkan jumlah cluster yang akan dibuat, maka selanjutnya membuat model yaitu dengan menggunakan kmeans, dan sebanyak 5 buah cluster

Segmentasi <- kmeans(x = Cust_train[field], 5)

Didapatkan untuk masing-masing ukuran cluster yaitu pada cluster 1 sebanyak 71 data, cluster 2 sebanyak 21 data, cluster 3 sebanyak 20 data, cluster 4 sebanyak 34 data, dan cluster 5 sebanyak 34 data. Kemudian untuk masing-masing centroidnya dapat dilihat pada cluster means yaitu

Segmentasi$centers
##   Annual.Income..k.. Spending.Score..1.100.
## 1           86.05882               17.91176
## 2           26.52381               21.28571
## 3           54.87324               49.74648
## 4           88.29412               82.47059
## 5           25.80000               78.90000

Nilai means ini yang akan dijadikan sebagai nilai centroid untuk masing-masing cluster yang digunakan dalam menentukan pembagian customer ke dalam cluster masing-masing.

Kemudian kita akan memasukkan data train terhadap setiap cluster yang didapatkan yaitu dengan cara

Cust_train$Cluster = Segmentasi$cluster
head(Cust_train)
##     CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 102        102 Female  49                 62                     48       3
## 112        112 Female  19                 63                     54       3
## 151        151   Male  43                 78                     17       1
## 4            4 Female  23                 16                     77       5
## 55          55 Female  50                 43                     45       3
## 70          70 Female  32                 48                     47       3

Sehingga pada data cust train sudah terbagi ke dalam setiap cluster yang terbentuk sesuai dengan nilai kemiripannya yaitu actual income dan spending score dengan model yang dibuat

Setelah menggabungkan hasil cluster dengan cust train, kita dapat melihat pembagian plot yang terbentuk sesuai dengan clusteringnya Atau jika

ggplot(Cust_train)  +
  geom_point(aes(x = Annual.Income..k.., y = Spending.Score..1.100. , col = as.factor(Cluster))) +
  scale_color_discrete(name="Cluster Number")

Atau Atau jika dikelompokan ke dalam cluster nya yaitu

fviz_cluster(Segmentasi, data =Cust_train[field])

Selain dari melihat pembagian data berdasarkan clusteringnya menggunakan plot,kita juga bisa langsung menampilkan datanya yaitu

head(Cust_train[which(Cust_train$Cluster==1),])
##     CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 151        151   Male  43                 78                     17       1
## 135        135   Male  20                 73                      5       1
## 183        183   Male  46                 98                     15       1
## 189        189 Female  41                103                     17       1
## 179        179   Male  59                 93                     14       1
## 167        167   Male  42                 86                     20       1
head(Cust_train[which(Cust_train$Cluster==2),])
##    CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 7           7 Female  35                 18                      6       2
## 43         43   Male  48                 39                     36       2
## 25         25 Female  54                 28                     14       2
## 45         45 Female  49                 39                     28       2
## 31         31   Male  60                 30                      4       2
## 41         41 Female  65                 38                     35       2
head(Cust_train[which(Cust_train$Cluster==3),])
##     CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 102        102 Female  49                 62                     48       3
## 112        112 Female  19                 63                     54       3
## 55          55 Female  50                 43                     45       3
## 70          70 Female  32                 48                     47       3
## 98          98 Female  27                 60                     50       3
## 51          51 Female  49                 42                     52       3
head(Cust_train[which(Cust_train$Cluster==4),])
##     CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 140        140 Female  35                 74                     72       4
## 146        146   Male  28                 77                     97       4
## 182        182 Female  32                 97                     86       4
## 180        180   Male  35                 93                     90       4
## 158        158 Female  30                 78                     78       4
## 152        152   Male  39                 78                     88       4
head(Cust_train[which(Cust_train$Cluster==5),])
##    CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 4           4 Female  23                 16                     77       5
## 2           2   Male  21                 15                     81       5
## 32         32 Female  21                 30                     73       5
## 16         16   Male  22                 20                     79       5
## 12         12 Female  35                 19                     99       5
## 42         42   Male  24                 38                     92       5
Dengan menggunakan plot dan data yang ditampilkan sesuai dengan clusternya, kita dapat melihat dengan lebih jelas tentang pembagian cluster antara actual income dan spending score yang terbentuk. Kita dapat membuat penamaan untuk masing-masing cluster berdasarkan pada sifatnya yaitu
  1. Cluster 1 berisikan customer yang memiliki annual income rata-rata dan memiliki spending score rata-rata juga yaitu tidak rendah dan tidak tinggi
  2. Cluster 2 berisikan customer yang memiliki annual income rendah dan memiliki spending score rendah juga
  3. Cluster 3 berisikan customer yang memiliki annual income rendah dan memiliki spending score tinggi
  4. Cluster 4 berisikan customer yang memiliki annual income tinggi dan memiliki spending score rendah
  5. Cluster 5 berisikan customer yang memiliki annual income tinggi dan memiliki spending score tinggi juga

Prediksi

Make Prediction

Prediksi yang dilakukan adalah dengan menentukan akan termasuk ke cluster mana dari data di cust test.

Untuk langkah-langkah pertama membuat penamaan untuk masing-masing cluster

Segmen.Customer <- data.frame(cluster = c(1,2,3,4,5),
                               Nama.Segmen = c("Normal income, normal spending",
                                               "Low income, Low spending",
                                               "Low income, High spending",
                                               "High income, Low spending",
                                               "High income, High spending"))
Segmen.Customer
##   cluster                    Nama.Segmen
## 1       1 Normal income, normal spending
## 2       2       Low income, Low spending
## 3       3      Low income, High spending
## 4       4      High income, Low spending
## 5       5     High income, High spending

Kemudian menggabungkan seluruh parameter ke dalam variabel baru, dimana parameter tersebut adalah model clustering yang dibuat (Segmentasi), kemudian penamaan cluster, dan index yang diguanakan dalam penentuan cluster.

Identitas.Cluster <- list(Segmentasi=Segmentasi, Segmen.Customer =Segmen.Customer, field = field)

Kemudian membuat looping untuk mencari tahu pembagian cluster di cust test

cluster_test = NULL

for (i in 1:20){
  Cust_test1 = Cust_test[i,]
  a = which.min(sapply( 1:5, function( x )
                        sum( ( Cust_test1[Identitas.Cluster$field] - Identitas.Cluster$Segmentasi$centers[x,])^2 ) ))
  cluster_test = c(cluster_test, a)
}
cluster_test
##  [1] 5 2 2 5 3 3 3 3 3 3 3 3 4 4 4 3 4 4 1 1

Lalu menggabungkan cluster yang didapatkan dengan cust test

Cust_test$Cluster = cluster_test
head(Cust_test)
##    CustomerID  Genre Age Annual.Income..k.. Spending.Score..1.100. Cluster
## 6           6 Female  22                 17                     76       5
## 9           9   Male  64                 19                      3       2
## 29         29 Female  40                 29                     31       2
## 34         34   Male  18                 33                     92       5
## 52         52   Male  33                 42                     60       3
## 59         59 Female  27                 46                     51       3

Sehingga didapatkan pembentukan cluster yang sesuai dengan kriteria antara annual income dan spending score yang terdapat pada cust test.

Kita juga bisa membuat perkiriaan dengan memasukkan annual income dan spending score sebagai data baru, seperti berikut

Annual.Income..k.. = 10
Spending.Score..1.100. = 76

databaru = cbind(Annual.Income..k.., Spending.Score..1.100.)
databaru = data.frame(databaru)
databaru
##   Annual.Income..k.. Spending.Score..1.100.
## 1                 10                     76
Identitas.Cluster$Segmen.Customer[which.min(sapply( 1:5, function( x )
                 sum( ( databaru[Identitas.Cluster$field] - Identitas.Cluster$Segmentasi$centers[x,])^2 ) )),]
##   cluster                Nama.Segmen
## 5       5 High income, High spending

Didapatkan bahwa jika annual income adalah 10.000 dan memiliki spending score 76 maka akan termasuk ke dalam cluster 3 dimana berisikan customer yang memiliki annual income rendah dan memiliki spending score tinggi.

Evaluasi Model

Measure Performance

Berikut adalah measure performance yang didapatkan dari model yang dibuat Pertama-tama melihat nilai centroid

Segmentasi$centers
##   Annual.Income..k.. Spending.Score..1.100.
## 1           86.05882               17.91176
## 2           26.52381               21.28571
## 3           54.87324               49.74648
## 4           88.29412               82.47059
## 5           25.80000               78.90000

Ini berarti untuk di cluster 1 memiliki nilai centroid yaitu untuk annual income 54.87 dan untuk spending score 49.75, sedangkan di cluster 2 memiliki nilai centroid yaitu 26.52 untuk annual income dan 21,29 untuk spending score, kemudian di cluster 3 memiliki nilai centroid yaitu 25.8 untuk annual income dan 78.9 untuk spending score, selanjutnya di cluster 4 memiliki nilai centroid 86.06 untuk annyal income dan 17.91 untuk spending score, dan terakhir di cluster 5 memiliki nilai centroid yaitu 88.29 untuk annual income dan 82.47 untuk spending score.

Kemudian melihat nilai Sum Square Total (SST) dari model yang didapatkan

Segmentasi$totss
## [1] 243231.7

Didapatkan nilai sum square total pada model yaitu sebesar 243231.7

Selanjutnya melihat nilai error dari setiap cluster dan menghitung total eror yang akan menjadi Sum Square Error (SSE) dari model.

Segmentasi$withinss
## [1] 11170.618  4611.524  8111.296 12201.529  3215.000
Segmentasi$tot.withinss
## [1] 39309.97

Disini ditampilkan nilai error dari masing-masing cluster yaitu untuk cluster 1 memiliki error 8111.296, untuk cluster 2 memiliki error 4611.524, untuk cluster 3 memiliki error 3215, untuk cluster 4 memiliki error 11170.618, dan terakhir untuk cluster 5 memiliki error 12201.529. sehingga didapatkan untuk nilai sum square error untuk model yaitu penjumlahan dari semua error pada tiap cluster yang sebesar 39309.97.

Dan melihat nilai Sum Square Regression (SSR)

Segmentasi$betweenss
## [1] 203921.8

Nilai sum square regression ini didapatkan dari perbedaan antara nilai sum square total dikurangi dengan sum square error sehingga baru didapatkan sum square regression yang sebesar 203921.8 untuk model.

Terakhir melihat R-Squared dari model untuk melihat persentase kecocokan variabel dalam membentuk model clustering

(Segmentasi$betweenss / Segmentasi$totss ) * 100
## [1] 83.83847

Nilai Rsquared didapatkan dengan membagi antara nilai sum square regression dengan nilai sum square total dan dikalikan dengan 100% dan didapatkan nilainya yaitu sebsar 83.83847%, yang berarti model yang dibuat cukup akurat karena sudah melebih 75%.

Tune the hyper-parameters

Untuk penyetelan pada parameters di clustering dilakukan dengan mengatur pada banyaknya jumlah cluster yang akan dibagi dan akan dibandingkan berdasarkan nilai SSE dan R-Squared dari model-model yang dapat terbentuk.

Pertama melakukan pencarian nilai SSE dan Rsquared dari masing-masing model yang dapat dibuat yaitu dengan membandingkan dengan menggunakan jumlah cluster 1 sampai dengan jumlah cluster 10.

sse <- NULL
rsq <- NULL
for (i in 1:10){
        set.seed(100)
        s = kmeans(Cust_train[field], i)
        a = s$tot.withinss
        b = s$betweenss
        c = s$totss
        sse = c(sse,a)
        d = b/c*100
        rsq = c(rsq,d)
}
sse
##  [1] 243231.73 162988.08  94307.27  65381.39  39309.97  34584.22  32674.43
##  [8]  26377.45  25027.87  19471.06
rsq
##  [1] 3.589642e-14 3.299062e+01 6.122740e+01 7.311971e+01 8.383847e+01
##  [6] 8.578137e+01 8.656654e+01 8.915542e+01 8.971028e+01 9.199485e+01

Untuk melihat lebih jelas dari nilai SSE dan R-Squared yang didapatkan kita akan membuat dalam tampilan grafik dengan sebelumnya set jumlah cluster dan banyaknya nilai SSE dan Rsquared yang didapatkan

jumlah_cluster_max <- 10
ssdata = data.frame(Segmentasi=c(1:jumlah_cluster_max))

Untuk plot SSE

ggplot(ssdata, aes(x=Segmentasi, y=sse)) +
  geom_line(color="red") + geom_point() +
  ylab("SSE") + xlab("Jumlah Cluster") +
  geom_text(aes(label=format(round(sse,2), nsmall = 2)), hjust = -0.2, vjust = -0.5)

Untuk Plot R-Squared

ggplot(ssdata, aes(x=Segmentasi, y=rsq)) +
  geom_line(color="red") + geom_point() +
  ylab("R-Squared (in percentage)") + xlab("Jumlah Cluster") +
  geom_text(aes(label=format(round(rsq,2), nsmall = 2)), hjust = -0.2, vjust = -0.5)

Dengan melihat pada hasil diatas, didapatkan bahwa jika kita mengganti jumlah cluster yang digunakan maka kita akan bisa mendapatkan nilai SSE dan R-Aquared berbeda-beda, yaitu jika menggunakan cluster < 5 maka kita melihat bahwa model akan lebih buruk ditandai dengan nilai SSE yang lebih besar pada model yang menggunakan cluster < 5 dan nilai R-Squared yang lebih kecil. Sedangkan jika kita menggunakan jumlah cluster > 5 maka kita akan bisa membuat model yang lebih baik yaitu dengan melihat pada SSE dan R-Squared yang dihasilkan. Tetapi dengan melihat pada grafik elbow yang kita gunakan, didapatkan bahwa yang terlatak pada sudut elbow nya adalah pada jumlah cluster 5 yang berarti jumlah cluster yang optimal untuk digunakan adalah dengan menggunakan jumlah cluster 5, karena jika terlalu akurat dalam pembentukan model ditakutkan akan terjadi overfit sehingga diputuskan bahwa model terbaik adalah dengan menggunakan jumlah cluster sebanyak 5 buah dan mendapatkan nilai SSE sebesar 39309.97 dan nilai R-Squared sebesar 83.84%, yang berarti jika sudah > 75% maka dikatakan model sudah bagus atau dapat dikatakan bahwa dengan menggunakan 2 variabel penentu yaitu annual income dan spending score dan jumlah cluster 5 buah sudah memiliki keakuratan 83.84% dalam pembentukan clustering.

Kesimpulan

Setelah melakukan analisa pada data, maka didapatkan kesimpulan yaitu dalam mengelompokan pelanggan mall terhadap perilaku pelanggan, didapatkan parameter yang digunakan untuk pengelompokan berdasarkan pada annual income pelanggan dan spending score yang diberikan oleh pihak mall. Hal ini dikarenakan memiliki suatu pola tersendiri ketika melakukan analisis data. Kemudian banyaknya pengelompokan yang dibentuk adalah sebanyak 5 kelompok yang terdiri dari

  1. Kelompok 1 berisikan pelanggan yang memiliki pendapatan tahunan berada di kisaran normal atau rata-rata yaitu 50.000 dollar pertahun yang mendapatkan spending skor juga normal yaitu tidak tinggi dan tidak rendah, yang berada pada nilai tengah di sekitar 50.
  2. Kelompok 2 berisikan pelanggan yang memiliki pendapatan tahunan berada di kisaran bawah yaitu kurang dari 50.000 dollar pertahun dan mendapatkan spending score rendah juga yaitu dibawah nilai 50.
  3. Kelompok 3 berisikan pelanggan yang memiliki pendapatan tahunan berada di kisaran bawah yaitu kurang dari 50.000 dollar pertahun dan mendapatkan spending score tinggi yaitu diatas nilai 50.
  4. Kelompok 4 berisikan pelanggan yang memiliki pendapatan tahunan berada di kisaran atas yaitu lebih dari 70.000 dollar pertahun dan mendapatkan spending score rendah yaitu dibawah nilai 50.
  5. Kelompok 5 berisikan pelanggan yang memiliki pendapatan tahunan berada di kisaran atas yaitu lebih dari 70.000 dollar pertahun dan mendapatkan spending score tinggi yaitu diatas 60.

Sehingga jika kita melihat data pembentukan model berdasarkan pembagian cluster dan gender didapatkan hasilnya yaitu

Cust_train %>%
  group_by(Cluster, Genre) %>%
  summarise_all("mean") %>%
  arrange(Cluster)
## # A tibble: 10 × 6
## # Groups:   Cluster [5]
##    Cluster Genre  CustomerID   Age Annual.Income..k.. Spending.Score..1.100.
##      <int> <chr>       <dbl> <dbl>              <dbl>                  <dbl>
##  1       1 Female      164.   41.9               87.9                   23.2
##  2       1 Male        159.   39.7               84.4                   13.2
##  3       2 Female       24.4  43.5               27.2                   21  
##  4       2 Male         21.8  46.4               25.4                   21.8
##  5       3 Female       85.2  42.3               54.7                   49.7
##  6       3 Male         85.3  47.2               55.1                   49.9
##  7       4 Female      167.   32.6               88.5                   81.8
##  8       4 Male        162.   32.9               88.1                   83.1
##  9       5 Female       24.2  25.8               26.4                   80.9
## 10       5 Male         22.2  25.9               24.9                   75.9

Untuk cluster 1 didapatkan hasilnya yaitu untuk pelanggan yang merupakan wanita memiliki kisaran usia di sekitar 42.3 tahun yang mempunyai pendapatan pertahunnya rata-rata yaitu berada si sekitar 54.700 dollar dan memiliki spending score sebesar 49.7. sedangkan untuk pelanggan pria memiliki kisaran usia disekitar 47.2 tahun yang mempunyai pendapatan pertahunnya rata-rata juga yaitu berada di sekitar 55.100 dollar dan memiliki spending score sebesar 49.9.

Untuk cluster 2 didapatkan hasilnya yaitu untuk pelanggan wanita dan pria yang memiliki usia di antara 43 – 46 tahun yang memiliki pendapatan pertahun yang cukup kecil yaitu 25.400 dollar untuk pria dan 27.200 dollar untuk wanita. Sehingga para pelanggan yang termasuk ke dalam kelompok ini memutuskan untuk tidak banyak menghabiskan pendapatannya yang membuat mendapatkan spending score yang kecil yaitu sebesar 21.

Untuk cluster 3 didapatkan hasilnya yaitu untuk pelanggan wanita dan pria yang masih muda yang berada di sekitar usia 25 tahun dan belum memiliki pendapatan pertahun yang besar. Pendapatan pertahun pelanggan pada kelompok ini berada di kisaran 25,000 – 26.000 dollar pertahun. Dikarenakan pada usia yang maih cukup muda, maka akan menjadikan perilaku dari pelanggan untuk hidup boros yang membuat walaupun memiliki pendapatan pertahun yang tidak besar, tetapi tetap melakukan pengeluaran yang besar, sampai mendapatkan spending score yang besar yaitu sebesar 80.9 untuk pihak wanita, dan 75.9 untuk pihak laki-laki.

Untuk cluster 4 didapatkan hasilnya yaitu untuk pelanggan wanita dan pria yang berada pada kisaran usia 39.7 tahun untuk pria dan 41.9 tahun untuk wanita yang memiliki pendapatan pertahun yang cukup besar yakni berada di kisaran 84.400 – 87.900 dollar pertahun. Walaupun memiliki pendapatan pertahun yang besar, tetapi mereka lebih memiliki untuk tidak banyak menghabiskannya untuk perbelanjaan sehingga mendapatkan spending score yang kecil yaitu berada pada 13.2 untuk pria dan 23.2 untuk wanita.

Untuk cluster 5 didapatkan hasilnya yaitu untuk pelanggan wanita dan pria yang berada pada kisaran usia 32 tahun dan memiliki pendapatan pertahun yang tinggi yaitu 88.000 dollar pertahun. Karena masih tergolong pada usia yang produktif dan muda maka memilih untuk melakukan pembelajaan yang cukup banyak sehingga mendapatkan spending score yang tinggi yaitu berada di 81.8 untuk wanita dan 83.1 untuk pria.

Berdasarkan pada model clustering yang dibuat, dapat dikatakan bahwa pengelompokan yang dilakukan sudah cukup akurat dimana memiliki nilai R-Squared yang cukup besar yaitu 83.83847%, yang berarti model sudah 83.83847% akurat dalam melakukan pengelompokan terhadap pelanggan mall, berdasarkan pada pendapatan pertahun dan nilai spending score yang diberikan.