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
- Cluster 1 berisikan customer yang memiliki annual income rata-rata dan memiliki spending score rata-rata juga yaitu tidak rendah dan tidak tinggi
- Cluster 2 berisikan customer yang memiliki annual income rendah dan memiliki spending score rendah juga
- Cluster 3 berisikan customer yang memiliki annual income rendah dan memiliki spending score tinggi
- Cluster 4 berisikan customer yang memiliki annual income tinggi dan memiliki spending score rendah
- 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
- 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.
- 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.
- 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.
- 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.
- 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.