Segmentasi Pasar

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

Normalisasi value

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

Membuat data master

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 dan K-Means

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.

Praktik fungsi kmeans

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"

Analisa hasil

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"

Evaluasi model

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.

Menggunakan model

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.

Menjadikan seluruh aset dalam satu objek dan file terpisah

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")

Membuat data baru

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.