Segemantasi atau pembagian pasar adalah metode untuk mengelompokkan customer/calon customer berdasarkan kemiripan attribut. Tujuannya adalah untuk mengetahui karakteristik tertentu dari kelompok-kelompok pasar sehingga kita bisa mendistribusi dan mendeliver produk lebih baik.
Pada pembelajaran kali ini, kita akan menggunakan dataset pada modul learning dq-lab, dan menaruhnya dalam objek ‘pelanggan’.
pelanggan <- read.csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt",
sep = "\t")
pelanggan
## Customer_ID Nama.Pelanggan Jenis.Kelamin Umur Profesi
## 1 CUST-001 Budi Anggara Pria 58 Wiraswasta
## 2 CUST-002 Shirley Ratuwati Wanita 14 Pelajar
## 3 CUST-003 Agus Cahyono Pria 48 Professional
## 4 CUST-004 Antonius Winarta Pria 53 Professional
## 5 CUST-005 Ibu Sri Wahyuni, IR Wanita 41 Wiraswasta
## 6 CUST-006 Rosalina Kurnia Wanita 24 Professional
## 7 CUST-007 Cahyono, Agus Pria 64 Wiraswasta
## 8 CUST-008 Danang Santosa Pria 52 Professional
## 9 CUST-009 Elisabeth Suryadinata Wanita 29 Professional
## 10 CUST-010 Mario Setiawan Pria 33 Professional
## 11 CUST-011 Maria Suryawan Wanita 50 Professional
## 12 CUST-012 Erliana Widjaja Wanita 49 Professional
## 13 CUST-013 Cahaya Putri Wanita 64 Wiraswasta
## 14 CUST-014 Mario Setiawan Pria 60 Wiraswasta
## 15 CUST-015 Shirley Ratuwati Wanita 20 Wiraswasta
## 16 CUST-016 Bambang Rudi Pria 35 Professional
## 17 CUST-017 Yuni Sari Wanita 32 Ibu Rumah Tangga
## 18 CUST-018 Nelly Halim Wanita 63 Ibu Rumah Tangga
## 19 CUST-019 Mega Pranoto Wanita 32 Wiraswasta
## 20 CUST-020 Irene Novianto Wanita 16 Pelajar
## 21 CUST-021 Lestari Fabianto Wanita 38 Wiraswasta
## 22 CUST-022 Novita Purba Wanita 52 Professional
## 23 CUST-023 Denny Amiruddin Pria 34 Professional
## 24 CUST-024 Putri Ginting Wanita 39 Wiraswasta
## 25 CUST-025 Julia Setiawan Wanita 29 Wiraswasta
## 26 CUST-026 Christine Winarto Wanita 55 Professional
## 27 CUST-027 Grace Mulyati Wanita 35 Wiraswasta
## 28 CUST-028 Adeline Huang Wanita 40 Ibu Rumah Tangga
## 29 CUST-029 Tia Hartanti Wanita 56 Professional
## 30 CUST-030 Rosita Saragih Wanita 46 Ibu Rumah Tangga
## 31 CUST-031 Eviana Handry Wanita 19 Mahasiswa
## 32 CUST-032 Chintya Winarni Wanita 47 Wiraswasta
## 33 CUST-033 Cecilia Kusnadi Wanita 19 Mahasiswa
## 34 CUST-034 Deasy Arisandi Wanita 21 Wiraswasta
## 35 CUST-035 Ida Ayu Wanita 39 Professional
## 36 CUST-036 Ni Made Suasti Wanita 30 Wiraswasta
## 37 CUST-037 Felicia Tandiono Wanita 25 Professional
## 38 CUST-038 Agatha Salim Wanita 46 Wiraswasta
## 39 CUST-039 Gina Hidayat Wanita 20 Professional
## 40 CUST-040 Irene Darmawan Wanita 14 Pelajar
## 41 CUST-041 Shinta Aritonang Wanita 24 Ibu Rumah Tangga
## 42 CUST-042 Yuliana Wati Wanita 26 Wiraswasta
## 43 CUST-043 Yenna Sumadi Wanita 31 Professional
## 44 CUST-044 Anna Wanita 18 Wiraswasta
## 45 CUST-045 Rismawati Juni Wanita 22 Professional
## 46 CUST-046 Elfira Surya Wanita 25 Wiraswasta
## 47 CUST-047 Mira Kurnia Wanita 55 Ibu Rumah Tangga
## 48 CUST-048 Maria Hutagalung Wanita 45 Wiraswasta
## 49 CUST-049 Josephine Wahab Wanita 33 Ibu Rumah Tangga
## 50 CUST-050 Lianna Nugraha Wanita 55 Wiraswasta
## Tipe.Residen NilaiBelanjaSetahun
## 1 Sector 9497927
## 2 Cluster 2722700
## 3 Cluster 5286429
## 4 Cluster 5204498
## 5 Cluster 10615206
## 6 Cluster 5215541
## 7 Sector 9837260
## 8 Cluster 5223569
## 9 Sector 5993218
## 10 Cluster 5257448
## 11 Sector 5987367
## 12 Sector 5941914
## 13 Cluster 9333168
## 14 Cluster 9471615
## 15 Cluster 10365668
## 16 Cluster 5262521
## 17 Cluster 5677762
## 18 Cluster 5340690
## 19 Cluster 10884508
## 20 Sector 2896845
## 21 Cluster 9222070
## 22 Cluster 5298157
## 23 Cluster 5239290
## 24 Cluster 10259572
## 25 Sector 10721998
## 26 Cluster 5269392
## 27 Cluster 9114159
## 28 Cluster 6631680
## 29 Cluster 5271845
## 30 Sector 5020976
## 31 Cluster 3042773
## 32 Sector 10663179
## 33 Cluster 3047926
## 34 Sector 9759822
## 35 Sector 5962575
## 36 Cluster 9678994
## 37 Sector 5972787
## 38 Sector 10477127
## 39 Cluster 5257775
## 40 Sector 2861855
## 41 Cluster 6820976
## 42 Cluster 9880607
## 43 Cluster 5268410
## 44 Cluster 9339737
## 45 Cluster 5211041
## 46 Sector 10099807
## 47 Cluster 6130724
## 48 Sector 10390732
## 49 Sector 4992585
## 50 Sector 10569316
Dalam pembuatan segmentasi pasar, kita akan menggunakan algoritma “K-Means”. Dalam algoritma ini, seluruh data harus berupa numeric.
Ada beberapa cara untuk melakukan ini, kita bisa mengoversinya langsung kolom per kolom(jenis.kelamin, profesi, dan tipe.residen) menggunakan as.factor. Cara lainnya adalah dengan menggunakan fungsi data.matrix()–> Kekurangannya, kita tidak bisa mengatur urutan value
pelanggan_matrix <- data.matrix(pelanggan[c("Jenis.Kelamin","Profesi","Tipe.Residen")])
pelanggan_matrix
## Jenis.Kelamin Profesi Tipe.Residen
## [1,] 1 5 2
## [2,] 2 3 1
## [3,] 1 4 1
## [4,] 1 4 1
## [5,] 2 5 1
## [6,] 2 4 1
## [7,] 1 5 2
## [8,] 1 4 1
## [9,] 2 4 2
## [10,] 1 4 1
## [11,] 2 4 2
## [12,] 2 4 2
## [13,] 2 5 1
## [14,] 1 5 1
## [15,] 2 5 1
## [16,] 1 4 1
## [17,] 2 1 1
## [18,] 2 1 1
## [19,] 2 5 1
## [20,] 2 3 2
## [21,] 2 5 1
## [22,] 2 4 1
## [23,] 1 4 1
## [24,] 2 5 1
## [25,] 2 5 2
## [26,] 2 4 1
## [27,] 2 5 1
## [28,] 2 1 1
## [29,] 2 4 1
## [30,] 2 1 2
## [31,] 2 2 1
## [32,] 2 5 2
## [33,] 2 2 1
## [34,] 2 5 2
## [35,] 2 4 2
## [36,] 2 5 1
## [37,] 2 4 2
## [38,] 2 5 2
## [39,] 2 4 1
## [40,] 2 3 2
## [41,] 2 1 1
## [42,] 2 5 1
## [43,] 2 4 1
## [44,] 2 5 1
## [45,] 2 4 1
## [46,] 2 5 2
## [47,] 2 1 1
## [48,] 2 5 2
## [49,] 2 1 2
## [50,] 2 5 2
Setelah berhasil mengoversi data yang kita butuhkan dalam bentuk matriks, kita perlu menggabungkannya kembali. Caranya adalah dengan menggunakan data.frame.
# MEngabbungkan kembali kedua data dalam dataframe pelanggan
pelanggan <- data.frame(pelanggan, pelanggan_matrix)
pelanggan
## Customer_ID Nama.Pelanggan Jenis.Kelamin Umur Profesi
## 1 CUST-001 Budi Anggara Pria 58 Wiraswasta
## 2 CUST-002 Shirley Ratuwati Wanita 14 Pelajar
## 3 CUST-003 Agus Cahyono Pria 48 Professional
## 4 CUST-004 Antonius Winarta Pria 53 Professional
## 5 CUST-005 Ibu Sri Wahyuni, IR Wanita 41 Wiraswasta
## 6 CUST-006 Rosalina Kurnia Wanita 24 Professional
## 7 CUST-007 Cahyono, Agus Pria 64 Wiraswasta
## 8 CUST-008 Danang Santosa Pria 52 Professional
## 9 CUST-009 Elisabeth Suryadinata Wanita 29 Professional
## 10 CUST-010 Mario Setiawan Pria 33 Professional
## 11 CUST-011 Maria Suryawan Wanita 50 Professional
## 12 CUST-012 Erliana Widjaja Wanita 49 Professional
## 13 CUST-013 Cahaya Putri Wanita 64 Wiraswasta
## 14 CUST-014 Mario Setiawan Pria 60 Wiraswasta
## 15 CUST-015 Shirley Ratuwati Wanita 20 Wiraswasta
## 16 CUST-016 Bambang Rudi Pria 35 Professional
## 17 CUST-017 Yuni Sari Wanita 32 Ibu Rumah Tangga
## 18 CUST-018 Nelly Halim Wanita 63 Ibu Rumah Tangga
## 19 CUST-019 Mega Pranoto Wanita 32 Wiraswasta
## 20 CUST-020 Irene Novianto Wanita 16 Pelajar
## 21 CUST-021 Lestari Fabianto Wanita 38 Wiraswasta
## 22 CUST-022 Novita Purba Wanita 52 Professional
## 23 CUST-023 Denny Amiruddin Pria 34 Professional
## 24 CUST-024 Putri Ginting Wanita 39 Wiraswasta
## 25 CUST-025 Julia Setiawan Wanita 29 Wiraswasta
## 26 CUST-026 Christine Winarto Wanita 55 Professional
## 27 CUST-027 Grace Mulyati Wanita 35 Wiraswasta
## 28 CUST-028 Adeline Huang Wanita 40 Ibu Rumah Tangga
## 29 CUST-029 Tia Hartanti Wanita 56 Professional
## 30 CUST-030 Rosita Saragih Wanita 46 Ibu Rumah Tangga
## 31 CUST-031 Eviana Handry Wanita 19 Mahasiswa
## 32 CUST-032 Chintya Winarni Wanita 47 Wiraswasta
## 33 CUST-033 Cecilia Kusnadi Wanita 19 Mahasiswa
## 34 CUST-034 Deasy Arisandi Wanita 21 Wiraswasta
## 35 CUST-035 Ida Ayu Wanita 39 Professional
## 36 CUST-036 Ni Made Suasti Wanita 30 Wiraswasta
## 37 CUST-037 Felicia Tandiono Wanita 25 Professional
## 38 CUST-038 Agatha Salim Wanita 46 Wiraswasta
## 39 CUST-039 Gina Hidayat Wanita 20 Professional
## 40 CUST-040 Irene Darmawan Wanita 14 Pelajar
## 41 CUST-041 Shinta Aritonang Wanita 24 Ibu Rumah Tangga
## 42 CUST-042 Yuliana Wati Wanita 26 Wiraswasta
## 43 CUST-043 Yenna Sumadi Wanita 31 Professional
## 44 CUST-044 Anna Wanita 18 Wiraswasta
## 45 CUST-045 Rismawati Juni Wanita 22 Professional
## 46 CUST-046 Elfira Surya Wanita 25 Wiraswasta
## 47 CUST-047 Mira Kurnia Wanita 55 Ibu Rumah Tangga
## 48 CUST-048 Maria Hutagalung Wanita 45 Wiraswasta
## 49 CUST-049 Josephine Wahab Wanita 33 Ibu Rumah Tangga
## 50 CUST-050 Lianna Nugraha Wanita 55 Wiraswasta
## Tipe.Residen NilaiBelanjaSetahun Jenis.Kelamin.1 Profesi.1 Tipe.Residen.1
## 1 Sector 9497927 1 5 2
## 2 Cluster 2722700 2 3 1
## 3 Cluster 5286429 1 4 1
## 4 Cluster 5204498 1 4 1
## 5 Cluster 10615206 2 5 1
## 6 Cluster 5215541 2 4 1
## 7 Sector 9837260 1 5 2
## 8 Cluster 5223569 1 4 1
## 9 Sector 5993218 2 4 2
## 10 Cluster 5257448 1 4 1
## 11 Sector 5987367 2 4 2
## 12 Sector 5941914 2 4 2
## 13 Cluster 9333168 2 5 1
## 14 Cluster 9471615 1 5 1
## 15 Cluster 10365668 2 5 1
## 16 Cluster 5262521 1 4 1
## 17 Cluster 5677762 2 1 1
## 18 Cluster 5340690 2 1 1
## 19 Cluster 10884508 2 5 1
## 20 Sector 2896845 2 3 2
## 21 Cluster 9222070 2 5 1
## 22 Cluster 5298157 2 4 1
## 23 Cluster 5239290 1 4 1
## 24 Cluster 10259572 2 5 1
## 25 Sector 10721998 2 5 2
## 26 Cluster 5269392 2 4 1
## 27 Cluster 9114159 2 5 1
## 28 Cluster 6631680 2 1 1
## 29 Cluster 5271845 2 4 1
## 30 Sector 5020976 2 1 2
## 31 Cluster 3042773 2 2 1
## 32 Sector 10663179 2 5 2
## 33 Cluster 3047926 2 2 1
## 34 Sector 9759822 2 5 2
## 35 Sector 5962575 2 4 2
## 36 Cluster 9678994 2 5 1
## 37 Sector 5972787 2 4 2
## 38 Sector 10477127 2 5 2
## 39 Cluster 5257775 2 4 1
## 40 Sector 2861855 2 3 2
## 41 Cluster 6820976 2 1 1
## 42 Cluster 9880607 2 5 1
## 43 Cluster 5268410 2 4 1
## 44 Cluster 9339737 2 5 1
## 45 Cluster 5211041 2 4 1
## 46 Sector 10099807 2 5 2
## 47 Cluster 6130724 2 1 1
## 48 Sector 10390732 2 5 2
## 49 Sector 4992585 2 1 2
## 50 Sector 10569316 2 5 2
Maksud normalisasi di sini adalah saat value dari salah satu variabel kita terlalu besar dan akan mengganggu atau mempengaruhi visual analisa kita. Contoh di atas adalah pada kolom ‘NilaiBelanjaSetahun’ kita yang ditampilkan dalam range jutaan, sementara value pada kolom ‘Profesi.1’, ‘Usia’, dsg yang range nya hanya satuan atau puluhan. Tentu kita bisa membayangkan ketimpangan nilai dan value yang terjadi di sini.
Oleh karena itu, akan lebih baik untuk melakukan normalisasi terhadap value kolom belanja, dengan cara membagi nilainya dengan 1.000.000
pelanggan$NilaiBelanjaSetahun <- pelanggan$NilaiBelanjaSetahun/1000000
pelanggan$NilaiBelanjaSetahun
## [1] 9.497927 2.722700 5.286429 5.204498 10.615206 5.215541 9.837260
## [8] 5.223569 5.993218 5.257448 5.987367 5.941914 9.333168 9.471615
## [15] 10.365668 5.262521 5.677762 5.340690 10.884508 2.896845 9.222070
## [22] 5.298157 5.239290 10.259572 10.721998 5.269392 9.114159 6.631680
## [29] 5.271845 5.020976 3.042773 10.663179 3.047926 9.759822 5.962575
## [36] 9.678994 5.972787 10.477127 5.257775 2.861855 6.820976 9.880607
## [43] 5.268410 9.339737 5.211041 10.099807 6.130724 10.390732 4.992585
## [50] 10.569316
Kita telah mengonversi kolom-kolom berisi string menjadi numerik. Untuk ini, kita perlu membuat daftar referensi untuk memudahkan pemetaaan ke depan.
Untuk melihat daftar referensi tersebut, kita bisa menuliskan :
jenis.kelamin <- unique(pelanggan[c("Jenis.Kelamin","Jenis.Kelamin.1")])
jenis.kelamin
## Jenis.Kelamin Jenis.Kelamin.1
## 1 Pria 1
## 2 Wanita 2
Pria adalah 1 dan wanita adalah 2
profesi <- unique(pelanggan[c("Profesi","Profesi.1")])
profesi
## Profesi Profesi.1
## 1 Wiraswasta 5
## 2 Pelajar 3
## 3 Professional 4
## 17 Ibu Rumah Tangga 1
## 31 Mahasiswa 2
tipe.residen <- unique(pelanggan[c("Tipe.Residen","Tipe.Residen.1")])
tipe.residen
## Tipe.Residen Tipe.Residen.1
## 1 Sector 2
## 2 Cluster 1
Terakhir, jangan lupa untuk membuat objek yang menampung variabel estimator yang akan digunakan berulang dalam model
field_yang_digunakan <- c("Jenis.Kelamin.1","Umur","Profesi.1","NilaiBelanjaSetahun")
field_yang_digunakan
## [1] "Jenis.Kelamin.1" "Umur" "Profesi.1"
## [4] "NilaiBelanjaSetahun"
Clustering adalah pembagian objek-objek ke dalam beberapa kelompok(cluster) berdasarkan tingkat kemiripan antar objek. Contoh : Berdasarkan usia, gender, daya beli, kandungan, dsg.
K Means sendiri adalah salah satu dari sekian banyak algoritma untuk melakukan clustering, dan ini juga yang menjadi fokus utama dalam materi ini.
K Means adalah algortima pembagian data menjadi beberapa partisi dengan cara mencari kedekatan dari tiap titik pada suatu cluster dengan sejumlah nilai rerata.
2 konsep utama dalam k-means : * Jumlah partisi yang diinginkan, diwakili oleh huruf k * Mencari jarak kedekatan tiap titik pada sejumlah nilai rata-rata cluster yang diwakili oleh means
Dalam R, paket algortima k-means sudah berada dalam package bernama ‘kmeans’.
Ide dasar dari K-means : Pertama kita menentukan secara abritrari jumlah partisi k yang kita inginkan dari sebuah data. Lalu, kita estimasi secara random titik obs yang menjadi centroid pertama, dan hitung jarak masing-masing titik observasi terhadap kedua mean atau centroid. Kita menentukan anggota cluster berdasarkan jarak terpendek dengan kedua centroid. Setelah kita menentukan anggota cluster, kita hitung rata-rata dari masing-masing cluster tersebut. Jika ternyata rata-rata yang kita peroleh berbeda dengan mean pertama yang kita hitung, kita mulai lagi proses perhitungan jarak titik observasi menggunakan titik centroid (mean) yang baru. Begitu seterusnya, hingga mean tidak lagi berubah.
fungsi kmeans membutuhkan minimal 2 parameter : * x : data yang digunakan (harus berupa numerik) * centers : jumlah kluster yang diinginkan * Note : Untuk menjaga stabilitas model, kita perlu menambahkan par nstart = 25 Jika kita menalar pada ide dasar kmeans, kita tahu bahwa pada awal algoritma, kita perlu 2 centroid awal. Nah, tanpa adanya set.seed() dan nstart ini, tiap kali kita melakukan estimasi, model akan berubah (sama seperti analogi intersep dan slope model). set.seed() akan menyimpan parameter random kita dan nstart akan mengenerasi 25 point obs awal, yang kemudian dipilih yang terbaik di antaranya (arti terbaik, data benar-benar dapat terbagi sesuai jaraknya dengan centroid)
Syntax kmeans
kmeans(x = data, centers = k, nstart = ... (berdasarkan literatur, 25 adalah angka terbaik))
Sekarang, kita praktik, di mana menggunakan data pelanggan di atas, kita ingin membagi customer menjadi 5 segmentasi berdasarkan 5 kategori.
# aktifkan algoritma kmeans
set.seed(100)
kmeans(pelanggan[field_yang_digunakan], centers = 5, nstart = 25)
## K-means clustering with 5 clusters of sizes 5, 12, 14, 9, 10
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.40 61.80000 4.200000 8.696132
## 2 1.75 31.58333 3.916667 7.330958
## 3 2.00 20.07143 3.571429 5.901089
## 4 2.00 42.33333 4.000000 8.804791
## 5 1.70 52.50000 3.800000 6.018321
##
## Clustering vector:
## [1] 1 3 5 5 4 3 1 5 2 2 5 5 1 1 3 2 2 1 2 3 4 5 2 4 2 5 2 4 5 4 3 4 3 3 4 2 3 4
## [39] 3 3 3 2 2 3 3 3 5 4 2 5
##
## Within cluster sum of squares by cluster:
## [1] 57.01123 172.60164 313.51938 169.45149 106.39735
## (between_SS / total_SS = 92.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Kita mulai dari yang teratas
K-means clustering with 5 clusters of sizes 5, 12, 14, 9, 10
Bagian awal ini disebut cluster size, di sini kita bisa tahu ukuran masing-masing kluster yang dihasilkan. Dalam kasus di atas, kita memiliki 5 cluster(sesuai yang kita set), dan masing-masing : * cluster 1 memiliki 5 anggota * cluster 2 memiliki 12 anggota * cluster 3 memiliki 14 anggota * cluster 4 memiliki 9 anggota * cluster 5 memiliki 10 anggota
Bagian kedua
Cluster means:
Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
1 1.40 61.80000 4.200000 8.696132
2 1.75 31.58333 3.916667 7.330958
3 2.00 20.07143 3.571429 5.901089
4 2.00 42.33333 4.000000 8.804791
5 1.70 52.50000 3.800000 6.018321
Ini menunjukkan nilai centroid masing-masing kluster. Contoh pada cluster 1 memiliki karakteristik berikut : Laki-laki, dengan rata-rata umur 61-62 tahun, Profesional, dan memiliki nilai belanja setahun rerata 8.6 juta.
Bagian ketiga, disebut juga clustering vector
Clustering vector:
[1] 1 3 5 5 4 3 1 5 2 2 5 5 1 1 3 2 2 1 2 3 4 5 2 4 2 5 2 4 5 4 3 4 3 3 4 2 3 4 3 3 3 2
[43] 2 3 3 3 5 4 2 5
Bagian ini menunjukkan sebarang cluster pada masing-masing poin data.
Bagian keempat, menunjukkan nilai statistik model :
Within cluster sum of squares by cluster:
[1] 57.01123 172.60164 313.51938 169.45149 106.39735
(between_SS / total_SS = 92.5 %)
Bagian akhir, menunjukkan informasi lain yang berada dalam model
[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault"
Praktisnya, sama seperti model lain, kita bisa mengevaluasi model dengan melihat pada bagian matrix statistiknya.
bagian keempat, kita bisa melihat sum of squares (SS) dari masing-masing cluster. SS menunjukkan jumlah dari selisih masing-masing point obs terhadap centroidnnya yang terlah dikuadratkan <SS = sum((obs[i],mean)^2)>. Dalam analisa statistik lain, SS bisa juga disebut SSE atau sum of square error; yang menunjukkan jarak antara poin obs dengan meannya. Lalu ada, Total_SS adalah statistik yang menunjukkan jarak antara seluruh obs (tanpa memerdulikan cluster) terhadap rerata (mean) seluruh populasi data. Between_SS adalah statistik yang menunjukkan hasil penjumlahan selisih dari mean antar kluster dengan mean total yang telah dikuadratkan. Dari sini, kemudian kita bisa menghitung rasio antara SS_between dengan SS_total, rule of thumb nya : semakin nilai rasio mendekati 1, semakin baik model kita.
Dalam kasus model kita, kita bisa menyimpulkan model kita sudah cukup baik dengan nilai rasion SSB/SST = 92.5%.
Tapi, tentu kita tidak bisa puas dengan hal seperti ini kan? Sumber pertanyaan kita berasal dari jumlah cluster yang ditentukan secara abritrari. Apakah harus 5? kenapa tidak 6? kenapa tidak 2?
Nah untuk menjawab pertanyaan ini, kita bisa melakukan perbandingan model dengan jumlah k yang berbeda.
# kmeans dengan k = 2
set.seed(100)
seg2 <- kmeans(pelanggan[field_yang_digunakan], centers = 2, nstart = 25)
# kmeans dengan k = 3
set.seed(100)
seg3 <- kmeans(pelanggan[field_yang_digunakan], centers = 3, nstart = 25)
#kmeans dengan k = 4
set.seed(100)
seg4 <-kmeans(pelanggan[field_yang_digunakan], centers = 4, nstart = 25)
#kmeans dengan k = 5
set.seed(100)
seg5 <- kmeans(pelanggan[field_yang_digunakan], centers = 5, nstart = 25)
# kmeans dengan k = 6
set.seed(100)
seg6 <-kmeans(pelanggan[field_yang_digunakan], centers = 6, nstart = 25)
# kmeans dengan k = 7
set.seed(100)
seg7 <- kmeans(pelanggan[field_yang_digunakan], centers = 7, nstart = 25)
# kmeans dengan k = 8
set.seed(100)
seg8 <- kmeans(pelanggan[field_yang_digunakan], centers = 8, nstart = 25)
# kmeans dengan k = 9
set.seed(100)
seg9 <- kmeans(pelanggan[field_yang_digunakan], centers = 9, nstart = 25)
# kmeans dengan k = 10
set.seed(100)
seg10 <- kmeans(pelanggan[field_yang_digunakan], centers = 10, nstart = 25)
Sekarang kita bisa bandingkan hasil masing-masing model
seg2
## K-means clustering with 2 clusters of sizes 23, 27
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.739130 51.17391 3.913043 7.551518
## 2 1.888889 25.85185 3.777778 6.659586
##
## Clustering vector:
## [1] 1 2 1 1 1 2 1 1 2 2 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 1 1 1 2 1 2 2 1 2 2 1
## [39] 2 2 2 2 2 2 2 2 1 1 2 1
##
## Within cluster sum of squares by cluster:
## [1] 1486.828 1518.451
## (between_SS / total_SS = 72.6 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg3
## K-means clustering with 3 clusters of sizes 15, 19, 16
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 2.000000 20.46667 3.666667 6.166391
## 2 1.684211 53.57895 3.947368 7.379783
## 3 1.812500 34.37500 3.875000 7.548875
##
## Clustering vector:
## [1] 2 1 2 2 3 1 2 2 3 3 2 2 2 2 1 3 3 2 3 1 3 2 3 3 3 2 3 3 2 2 1 2 1 1 3 3 1 2
## [39] 1 1 1 1 3 1 1 1 2 2 3 2
##
## Within cluster sum of squares by cluster:
## [1] 363.0097 820.2965 356.4961
## (between_SS / total_SS = 86.0 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg4
## K-means clustering with 4 clusters of sizes 9, 15, 16, 10
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.666667 58.88889 3.888889 7.857993
## 2 2.000000 20.46667 3.666667 6.166391
## 3 1.812500 34.37500 3.875000 7.548875
## 4 1.700000 48.80000 4.000000 6.949395
##
## Clustering vector:
## [1] 1 2 4 4 3 2 1 4 3 3 4 4 1 1 2 3 3 1 3 2 3 4 3 3 3 1 3 3 1 4 2 4 2 2 3 3 2 4
## [39] 2 2 2 2 3 2 2 2 1 4 3 1
##
## Within cluster sum of squares by cluster:
## [1] 191.2251 363.0097 356.4961 142.9544
## (between_SS / total_SS = 90.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg5
## K-means clustering with 5 clusters of sizes 5, 12, 14, 9, 10
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.40 61.80000 4.200000 8.696132
## 2 1.75 31.58333 3.916667 7.330958
## 3 2.00 20.07143 3.571429 5.901089
## 4 2.00 42.33333 4.000000 8.804791
## 5 1.70 52.50000 3.800000 6.018321
##
## Clustering vector:
## [1] 1 3 5 5 4 3 1 5 2 2 5 5 1 1 3 2 2 1 2 3 4 5 2 4 2 5 2 4 5 4 3 4 3 3 4 2 3 4
## [39] 3 3 3 2 2 3 3 3 5 4 2 5
##
## Within cluster sum of squares by cluster:
## [1] 57.01123 172.60164 313.51938 169.45149 106.39735
## (between_SS / total_SS = 92.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg6
## K-means clustering with 6 clusters of sizes 11, 10, 10, 5, 9, 5
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.727273 32.09091 3.818182 7.099172
## 2 1.700000 52.50000 3.800000 6.018321
## 3 2.000000 22.50000 4.200000 7.792376
## 4 1.400000 61.80000 4.200000 8.696132
## 5 2.000000 42.33333 4.000000 8.804791
## 6 2.000000 16.40000 2.600000 2.914420
##
## Clustering vector:
## [1] 4 6 2 2 5 3 4 2 1 1 2 2 4 4 3 1 1 4 1 6 5 2 1 5 1 2 1 5 2 5 6 5 6 3 5 1 3 5
## [39] 3 6 3 3 1 3 3 3 2 5 1 2
##
## Within cluster sum of squares by cluster:
## [1] 130.15390 106.39735 124.65404 57.01123 169.45149 26.47413
## (between_SS / total_SS = 94.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg7
## K-means clustering with 7 clusters of sizes 11, 7, 7, 10, 5, 5, 5
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.727273 32.09091 3.818182 7.099172
## 2 1.714286 54.00000 3.714286 6.138214
## 3 1.857143 47.28571 4.000000 7.681103
## 4 2.000000 22.50000 4.200000 7.792376
## 5 1.400000 61.80000 4.200000 8.696132
## 6 2.000000 16.40000 2.600000 2.914420
## 7 2.000000 39.40000 4.000000 8.538221
##
## Clustering vector:
## [1] 5 6 3 2 7 4 5 2 1 1 3 3 5 5 4 1 1 5 1 6 7 2 1 7 1 2 1 7 2 3 6 3 6 4 7 1 4 3
## [39] 4 6 4 4 1 4 4 4 2 3 1 2
##
## Within cluster sum of squares by cluster:
## [1] 130.15390 50.41141 75.04259 124.65404 57.01123 26.47413 35.21342
## (between_SS / total_SS = 95.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg8
## K-means clustering with 8 clusters of sizes 7, 7, 6, 5, 8, 7, 5, 5
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.857143 47.28571 4.000000 7.681103
## 2 1.714286 54.00000 3.714286 6.138214
## 3 2.000000 38.66667 4.166667 8.634210
## 4 2.000000 28.40000 5.000000 10.253183
## 5 2.000000 21.75000 4.000000 7.242918
## 6 1.571429 32.42857 3.142857 5.384462
## 7 1.400000 61.80000 4.200000 8.696132
## 8 2.000000 16.40000 2.600000 2.914420
##
## Clustering vector:
## [1] 7 8 1 2 3 5 7 2 6 6 1 1 7 7 5 6 6 7 4 8 3 2 6 3 4 2 3 3 2 1 8 1 8 5 3 4 5 1
## [39] 5 8 5 4 6 5 5 4 2 1 6 2
##
## Within cluster sum of squares by cluster:
## [1] 75.04259 50.41141 52.45650 34.31039 87.95387 38.96144 57.01123 26.47413
## (between_SS / total_SS = 96.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg9
## K-means clustering with 9 clusters of sizes 7, 5, 3, 6, 7, 5, 7, 5, 5
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.571429 32.42857 3.142857 5.384462
## 2 2.000000 28.40000 5.000000 10.253183
## 3 2.000000 19.66667 5.000000 9.821742
## 4 2.000000 38.66667 4.166667 8.634210
## 5 1.857143 47.28571 4.000000 7.681103
## 6 2.000000 23.00000 3.400000 5.695624
## 7 1.714286 54.00000 3.714286 6.138214
## 8 1.400000 61.80000 4.200000 8.696132
## 9 2.000000 16.40000 2.600000 2.914420
##
## Clustering vector:
## [1] 8 9 5 7 4 6 8 7 1 1 5 5 8 8 3 1 1 8 2 9 4 7 1 4 2 7 4 4 7 5 9 5 9 3 4 2 6 5
## [39] 6 9 6 2 1 3 6 2 7 5 1 7
##
## Within cluster sum of squares by cluster:
## [1] 38.961436 34.310389 5.198685 52.456504 75.042590 25.200249 50.411408
## [8] 57.011228 26.474127
## (between_SS / total_SS = 96.7 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
seg10
## K-means clustering with 10 clusters of sizes 5, 3, 5, 5, 7, 3, 7, 6, 4, 5
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 2.000000 23.00000 3.400000 5.695624
## 2 2.000000 46.00000 5.000000 10.510346
## 3 2.000000 16.40000 2.600000 2.914420
## 4 1.400000 61.80000 4.200000 8.696132
## 5 1.571429 32.42857 3.142857 5.384462
## 6 2.000000 19.66667 5.000000 9.821742
## 7 1.714286 54.00000 3.714286 6.138214
## 8 2.000000 38.66667 4.166667 8.634210
## 9 1.750000 48.25000 3.250000 5.559172
## 10 2.000000 28.40000 5.000000 10.253183
##
## Clustering vector:
## [1] 4 3 9 7 8 1 4 7 5 5 9 9 4 4 6 5 5 4 10 3 8 7 5 8 10
## [26] 7 8 8 7 9 3 2 3 6 8 10 1 2 1 3 1 10 5 6 1 10 7 2 5 7
##
## Within cluster sum of squares by cluster:
## [1] 25.200249 2.038769 26.474127 57.011228 38.961436 5.198685 50.411408
## [8] 52.456504 16.943886 34.310389
## (between_SS / total_SS = 97.2 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Dari hasil di atas, k masih dapat terus bertambah dan menghasilkan rasio SSB/SST yang meningkat. Apakah ini artinya, kita perlu terus menambah segmentasi (k)? Untuk menjawab pertanyaan ini, R menyediakan package untuk melakukan evaluasi secara metodis. Berdasarkan literatur statistik, kita memiliki 3 metode untuk menguji jumlah kluster optimal; yaitu : Elbow, Silhouhette, dan gap statistic. Penjelasan masing-masing metode ini akan kita tunda lebih dahulu, dan langsung melakukan praktik.
Sebelumnya, kita harus meload 2 package utama dalam R : * factoextra : untuk menentukan jumlah optimal cluster berdasarkan metode klustering, dan sekaligus visualisasi * NbClust : Untuk menghitung 30 metode sekaligus, untuk menemukan jumlah optimal kluster
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.2
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.4 v dplyr 1.0.7
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.0.2 v forcats 0.5.1
## Warning: package 'tidyr' was built under R version 4.1.2
## Warning: package 'dplyr' was built under R version 4.1.2
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.1.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(NbClust)
Setelah seluruh package siap, kita bisa menuliskan syntax berikut :
fviz_nbclust(pelanggan[field_yang_digunakan],kmeans,method = "wss")
fviz_nbclust(pelanggan[field_yang_digunakan],kmeans,method = "silhouette")
fviz_nbclust(pelanggan[field_yang_digunakan],kmeans,method = "gap_stat")
Berdasarkan 3 metode uji di atas, kita bisa mengetahui bahwa jumlah kluster optimal berada pada jumlah 1,2,4, atau 5
Dengan mempertimbangkan rasio SSB/SST, maka kita akan memilih jumlah kluster 5 untuk menjalankan model kita.
Kita sudah tahu cara penggunaan model kmeans, kita sudah memiliki jumlah optimal kluster, kita memiliki tabel referensi untuk masing-masing kategori. Untuk menerapkan seluruh aset ini dalam model nyata, kita perlu menjadikannya dalam satu objek dan menyimpannya sebagai file tersendiri untuk bisa kita gunakan.
Pertama kita perlu menciptakan objek baru berisi nama-nama segmen. Selain alasan untuk memperjelas segmen, ini akan berguna untuk aplikasi model nanti
# Kita gunakan k = 5, karena kita sudah tahu bahwa ini adalah jumlah kluster optimal
# Kita lihat centroidnnya
seg5$centers
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.40 61.80000 4.200000 8.696132
## 2 1.75 31.58333 3.916667 7.330958
## 3 2.00 20.07143 3.571429 5.901089
## 4 2.00 42.33333 4.000000 8.804791
## 5 1.70 52.50000 3.800000 6.018321
profesi
## Profesi Profesi.1
## 1 Wiraswasta 5
## 2 Pelajar 3
## 3 Professional 4
## 17 Ibu Rumah Tangga 1
## 31 Mahasiswa 2
jenis.kelamin
## Jenis.Kelamin Jenis.Kelamin.1
## 1 Pria 1
## 2 Wanita 2
Dari hasil di atas, kita bisa memberikan nama-nama segment berikut: * 1 -> Diamond Senior Member; alasannya karena rata-rata usianya di atas 60 tahun, dan pembelanjaannya termasuk yang paling tinggi * 2 -> Gold Young Professional; alasannya karena rata-rata usianya 31 tahun, umumnya berprofesi sebagai profesional, dan belanjanya cukup tinggi * 3 -> Silver Young Gals; alasannya karena segmen ini benar-benar dipenuhi wanita, rata-rata usia 20 tahun, dengan profesi campuran antar pelajar-profesional, dengan nilai pembelajaan yang cukup besar. * 4 -> Diamond Professional Woman; alasannya karena segmen juga dipenuh wanita professional, dengan nilai belanja paling tinggi diantara semuanya * 5 -> Silver Mid Professional; alasannya karena umurnya rata-rata usianya 52 tahun dan pembelanjaannya sekitar 6 juta.
Setelah mempunyai nama untuk masing-masing segmen, saatnya kita membuat objek untuk nama-nama ini.
segmen.pelanggan <- data.frame(cluster = c(1:5), nama.segmen = c("Diamond Senior Member","Gold Young Professional","Silver Young Gals","Diamond Professional Woman","Silver Mid Professional"))
segmen.pelanggan
## cluster nama.segmen
## 1 1 Diamond Senior Member
## 2 2 Gold Young Professional
## 3 3 Silver Young Gals
## 4 4 Diamond Professional Woman
## 5 5 Silver Mid Professional
Oke, sekarang kita bisa satukan seluruh aset yang meliputi : daftar profesi dengan numeriknya (profesi), jenis kelamin dan numeriknya(jenis.kelamin), residen dan numeriknya(tipe.residen), model kmeans dengan k=5(seg5),daftar nama segmen(segmen.pelanggan), juga variabel yang digunakan sebagai estimator model(field_yang_digunakan)
Buat seluruh objek ini menjadi satu dalam bentuk list dan beri nama objek
identitas.cluster <- list(profesi=profesi,jenis.kelamin=jenis.kelamin,residen=tipe.residen,segment = seg5, tipe.segmen=segmen.pelanggan, var_estimator = field_yang_digunakan)
identitas.cluster
## $profesi
## Profesi Profesi.1
## 1 Wiraswasta 5
## 2 Pelajar 3
## 3 Professional 4
## 17 Ibu Rumah Tangga 1
## 31 Mahasiswa 2
##
## $jenis.kelamin
## Jenis.Kelamin Jenis.Kelamin.1
## 1 Pria 1
## 2 Wanita 2
##
## $residen
## Tipe.Residen Tipe.Residen.1
## 1 Sector 2
## 2 Cluster 1
##
## $segment
## K-means clustering with 5 clusters of sizes 5, 12, 14, 9, 10
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.40 61.80000 4.200000 8.696132
## 2 1.75 31.58333 3.916667 7.330958
## 3 2.00 20.07143 3.571429 5.901089
## 4 2.00 42.33333 4.000000 8.804791
## 5 1.70 52.50000 3.800000 6.018321
##
## Clustering vector:
## [1] 1 3 5 5 4 3 1 5 2 2 5 5 1 1 3 2 2 1 2 3 4 5 2 4 2 5 2 4 5 4 3 4 3 3 4 2 3 4
## [39] 3 3 3 2 2 3 3 3 5 4 2 5
##
## Within cluster sum of squares by cluster:
## [1] 57.01123 172.60164 313.51938 169.45149 106.39735
## (between_SS / total_SS = 92.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
##
## $tipe.segmen
## cluster nama.segmen
## 1 1 Diamond Senior Member
## 2 2 Gold Young Professional
## 3 3 Silver Young Gals
## 4 4 Diamond Professional Woman
## 5 5 Silver Mid Professional
##
## $var_estimator
## [1] "Jenis.Kelamin.1" "Umur" "Profesi.1"
## [4] "NilaiBelanjaSetahun"
# Jadikan file terpisah untuk bisa dipanggil kapan saja
saveRDS(identitas.cluster,"clusterid.rds")
Anggaplah kemudian, seorang pelanggan masuk dan melakukan order. Kita input datanya dan jadikan data frame
new_order <- data.frame(Customer_ID="CUST-100",Nama.Pelanggan = "Pinky Nova",Jenis.Kelamin = "Wanita", Umur=26,Profesi="Pelajar",Tipe.Residen="Cluster",NilaiBelanjaSetahun=3.5)
new_order
## Customer_ID Nama.Pelanggan Jenis.Kelamin Umur Profesi Tipe.Residen
## 1 CUST-100 Pinky Nova Wanita 26 Pelajar Cluster
## NilaiBelanjaSetahun
## 1 3.5
Setelah order baru masuk, kita buka kembali file ‘clusterid.rds’ kita.
identitas.cluster <- readRDS("clusterid.rds")
identitas.cluster
## $profesi
## Profesi Profesi.1
## 1 Wiraswasta 5
## 2 Pelajar 3
## 3 Professional 4
## 17 Ibu Rumah Tangga 1
## 31 Mahasiswa 2
##
## $jenis.kelamin
## Jenis.Kelamin Jenis.Kelamin.1
## 1 Pria 1
## 2 Wanita 2
##
## $residen
## Tipe.Residen Tipe.Residen.1
## 1 Sector 2
## 2 Cluster 1
##
## $segment
## K-means clustering with 5 clusters of sizes 5, 12, 14, 9, 10
##
## Cluster means:
## Jenis.Kelamin.1 Umur Profesi.1 NilaiBelanjaSetahun
## 1 1.40 61.80000 4.200000 8.696132
## 2 1.75 31.58333 3.916667 7.330958
## 3 2.00 20.07143 3.571429 5.901089
## 4 2.00 42.33333 4.000000 8.804791
## 5 1.70 52.50000 3.800000 6.018321
##
## Clustering vector:
## [1] 1 3 5 5 4 3 1 5 2 2 5 5 1 1 3 2 2 1 2 3 4 5 2 4 2 5 2 4 5 4 3 4 3 3 4 2 3 4
## [39] 3 3 3 2 2 3 3 3 5 4 2 5
##
## Within cluster sum of squares by cluster:
## [1] 57.01123 172.60164 313.51938 169.45149 106.39735
## (between_SS / total_SS = 92.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
##
## $tipe.segmen
## cluster nama.segmen
## 1 1 Diamond Senior Member
## 2 2 Gold Young Professional
## 3 3 Silver Young Gals
## 4 4 Diamond Professional Woman
## 5 5 Silver Mid Professional
##
## $var_estimator
## [1] "Jenis.Kelamin.1" "Umur" "Profesi.1"
## [4] "NilaiBelanjaSetahun"
Setelah itu, kita gabungkan data dalam new_order dengan objek referensi, kita perlu menggabungkan keduanya untuk mendapat konversi data profesi, jenis kelamin, dan residen.
Untuk penggabungan dengan fungsi konversi ini, kita bisa menggunakan fungsi ‘merge’. Fungsi merge memiliki logika fungsi yang sama dengan perintah SQL ‘Left Join’. Jika kita berhasil menggunakan left join antara new_order, dengan salah satu objek dari ‘clusterid’ kita bisa mendapatkan konversi dari variabel yang kita inginkan.
new_order<-merge(new_order,identitas.cluster$profesi)
new_order
## Profesi Customer_ID Nama.Pelanggan Jenis.Kelamin Umur Tipe.Residen
## 1 Pelajar CUST-100 Pinky Nova Wanita 26 Cluster
## NilaiBelanjaSetahun Profesi.1
## 1 3.5 3
Lihat bagaimana hasilnya. hasil merge membuat satu kolom baru bernama Profesi.1 dengan klasifikasi 3, yang sesuai dengan tabel referensi ‘profesi’.
Sekarang, kita gabungkan juga dengan jenis.kelamin dan tipe.residen untuk mendapatkan konversinya.
new_order<-merge(new_order,identitas.cluster$jenis.kelamin)
new_order<-merge(new_order,identitas.cluster$residen)
new_order
## Tipe.Residen Jenis.Kelamin Profesi Customer_ID Nama.Pelanggan Umur
## 1 Cluster Wanita Pelajar CUST-100 Pinky Nova 26
## NilaiBelanjaSetahun Profesi.1 Jenis.Kelamin.1 Tipe.Residen.1
## 1 3.5 3 2 1
Sekarang, tahap terakhir adalah menggunakan model kita untuk memperoleh segmentasi new_order. Ide dari tahap ini adalah : “pada kluster mana new_order akan menghasilkan SS terendah?” Yap. Jadi, kita perlu menghitung sum of square per kluster, dan memutuskan klasifikasi segemen ini berdasar mana kluster dengan SS terkecil.
identitas.cluster$tipe.segmen[which.min(sapply(1:5, function(x)sum((new_order[identitas.cluster$var_estimator]-identitas.cluster$segment$centers[x,])^2))),]
## cluster nama.segmen
## 3 3 Silver Young Gals
Yup. inilah secara kasar cara penerapan model k-means. Kita bisa memperbaiki model di atas dengan membuat fungsi khusus, tapi itu akan menjadi PR ke depan.
Selain itu, masih banyak algortima selain k-mean untuk menentukan algoritma, yang akan dipelajari di projek ke depan.