Customer Segmentation

Apa itu Customer Segmentation?

Selamat Datang

Selamat Datang di course Machine Learning for Marketing: Customer Segmentation, dimana Anda akan diberikan materi step by step dan langsung praktek dengan berbagai fitur DQLab – yang memang dirancang untuk membantu Anda agar mudah menyerap materi dan memanfaatkannya dalam pekerjaan sehari-hari.

Course ini dirancang dengan menggunakan dataset dari kasus skenario nyata di Indonesia. Untuk course, dataset yang digunakan cukup kecil dengan tujuan Anda dapat lebih mudah memahami dataset ini dan mampu beradaptasi ketika dihadapkan dataset yang lebih kompleks – seperti Anda akan temukan di bagian project DQLab.

Apa yang akan Anda pelajari sepanjang course ini?

  • Apa dan kenapa Customer Segmentation dalam penggunaan di bisnis?
  • Aplikasi Customer Segmentation secara teknis dengan Algoritma K-Means di R
  • Bagaimana mempersiapkan data profil pelanggan di R agar dapat digunakan oleh algoritma K-Means
  • Mempaketkan algoritma sebagai model dan mengoperasionalkannya sehingga dapat digunakan sehari-hari oleh bisnis

Bagaimana Anda menarik manfaat dari DQLab ini?

  • Pelajari contoh dataset dalam course, karena walaupun kecil tapi mencerminkan
  • Kerjakan soal dan praktek sesuai dengan irama yang Anda rasa nyaman
  • Submit soal sesuai dengan permintaan soal
  • Tekan hint jika Anda merasa kesulitan
  • Ikut serta dan menyelesaikan project karena memiliki tingkat kompleksitas yang lebih tinggi dan mencerminkan kasus riil

Marketing and Customer Segmentation

Kenapa Customer Segmentation Penting

Apa tujuan utama Customer Segmentation bagi bisnis?

  • Dapat membuat pesan pemasaran yang lebih mengena ke tiap pelanggan
  • Bisa lebih mengenal customer / pelanggan
  • Biaya pemasaran bisa menjadi lebih rendah

Kenapa Perlu Bantuan Algoritma untuk Customer Segmentation?

Apa alasan paling kuat kenapa kita akhirnya harus menggunakan algoritma komputer untuk membantu proses customer segmentation?

  • Agar kita dapat membagi-bagi segmen customer dengan gampang
  • Dapat membantu kita menentukan jumlah clustering yang optimal
  • Dapat memberikan hasil jauh lebih cepat
  • Karena bisa memberikan best practice

Kesimpulan

  • Customer segmentation adalah proses penting yang diperlukan di bisnis untuk mengenal customer dengan lebih baik
  • Dengan demikian proses bisnis di marketing (pemasaran) dan CRM (customer relationship management) bisa dilakukan lebih tajam. Contoh: pesan marketing bisa lebih personal untuk setiap segment dengan biaya lebih optimal.
  • Dengan proses yang lebih tajam, performa bisnis berpotensi tinggi menjadi lebih baik juga.
  • Untuk menemukan segmentasi yang baik, perlu proses analisa data dari profile customer yang cukup banyak dan rutin. Ini bisa dibantu dengan algoritma komputer.

Persiapan Data

Persiapan Data itu penting! Kita akan mempelajari mempersiapkan data agar siap digunakan untuk menganalisis lebih lanjut.

Pengantar

Persiapan data adalah langkah pertama yang kita lakukan sebelum menggunakan algoritma apapun untuk melakukan analisa data.

Ini dikarenakan tiap implementasi algoritma menuntut struktur dan tipe data yang berbeda.

Dan untuk kasus algoritma K-Means yang akan kita gunakan untuk otomatisasi clustering, maka struktur datanya adalah data.frame atau matrix yang di dalamnya berisi angka semua. Tidak ada yang boleh bertipe karakter.

Namun pada kasus riil, hal ini tentulah tidak mungkin. Contoh, isi data profesi seperti “Professional”, “Ibu Rumah Tangga” adalah teks. Dan ini perlu dikonversi dulu ke numerik, namun jika diperlukan tetap bisa kembali mengambil data teks.

Nah, untuk lebih jelasnya. Kita akan lakukan langkah-langkah praktek yang akan kita lakukan berikut ini adalah untuk mempersiapkan data sebelum dapat digunakan algoritma clustering:

  1. Mengenal Contoh File Dataset Pelanggan
  2. Membaca File dengan read.csv
  3. Vector untuk Menyimpan Nama Field
  4. Konversi Data dengan data.matrix
  5. Menggabungkan Hasil Konversi
  6. Menormalisasikan Nilai Belanja
  7. Membuat Data Master

Dataset Customer Segments

Dataset yang kita gunakan adalah data customer dengan field “Customer ID”, “Nama Pelanggan”,”Jenis Kelamin”,”Umur”, “Profesi”, “Tipe Residen” dan “Nilai Belanja Setahun” dengan tampilan sebagai berikut.

Dataset ini bisa dilihat di https://academy.dqlab.id/dataset/customer_segments.txt

Data tersebut memiliki tujuh kolom dengan penjelasan sebagai berikut:

  • Customer ID: Kode pelanggan dengan format campuran teks CUST- diikuti angka
  • Nama Pelanggan: Nama dari pelanggan dengan format teks tentunya
  • Jenis Kelamin: Jenis kelamin dari pelanggan, hanya terdapat dua isi data kategori yaitu Pria dan Wanita
  • Umur: Umur dari pelanggan dalam format angka
  • Profesi: Profesi dari pelanggan, juga bertipe teks kategori yang terdiri dari Wiraswasta, Pelajar, Professional, Ibu Rumah Tangga, dan Mahasiswa.
  • Tipe Residen: Tipe tempat tinggal dari pelanggan kita, untuk dataset ini hanya ada dua kategori: Cluster dan Sector.
  • NilaiBelanjaSetahun: Merupakan

Terlihat kalau ada kolom yang berisi angka saja, yaitu Umur dan NilaiBelanjaSetahun. Sisanya diisi data kategori untuku kolom “Jenis Kelamin”, “Profesi” dan “Tipe Residen”. Sedangkan “Customer ID” dan “Nama Pelanggan” kita anggap memiliki nilai yang unik untuk tiap baris data dan mewakili tiap individu.

Karena kolom “Customer ID” dan “Nama Pelanggan” karena unik maka tidak akan dijadikan variable penentu segmentasi yang kita lakukan, namun sisa kolom lainnya akan digunakan.

Nah dengan contoh dataset inilah, kita akan mencoba mencari jumlah segmentasi yang paling optimal – dimana antar tiap data pelanggan dalam segmen memiliki kemiripan tinggi – sepanjang course ini.

Membaca data dengan fungsi read.csv

Langkah pertama yang perlu kita lakukan adalah membaca dataset tersebut dari file teks menjadi data.frame di R dengan perintah read.csv.

Mari kita praktekkan penggunaan read.csv ini dengan mengetikkan perintah berikut pada code editor.

pelanggan <- read.csv("https://academy.dqlab.id/dataset/customer_segments.txt", sep="\t")

Keterangan code:

  • pelanggan: nama variable yang digunakan untuk menampung data dari contoh dataset
  • csv: function yang digunakan untuk membaca contoh dataset yang berupa file
  • https://academy.dqlab.id/dataset/customer_segments.txt: lokasi dataset yang terdapat di web DQLab. Jika lokasi file dan aplikasi R terdapat di komputer lokal Anda, maka gantilah dengan lokasi file di lokal. Misalkan c:_segments.txt

Jika terjadi error berikut, maka periksa kembali penulisan code – huruf besar, huruf kecil dan juga penulisan lokasi file – dengan teliti.

Error in file(file, "rt") : cannot open the connection

Jika tidak terjadi error maka langkah selanjutnya adalah menampilkan isi data dengan mengetikkan nama variable pelanggan pada code editor sebagai berikut.

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

Terlihat isi data dengan enam kolom dan terdapat nomor baris pada tiap data yang ditampilkan.

Perhatikan jika nama kolom asal terdapat karakter spasi, akan diubah menjadi tanda titik setelah dibaca dengan read.csv. Sebagai contoh, “Nama Pelanggan” diubah menjadi “Nama.Pelanggan”.

Jika kita hanya ingin menampilkan beberapa kolom tertentu, misalkan untuk kolom “Jenis.Kelamin” dan “Profesi” maka perintahnya adalah sebagai berikut.

pelanggan[c("Nama.Pelanggan","Profesi")]
          Nama.Pelanggan          Profesi
1           Budi Anggara       Wiraswasta
2       Shirley Ratuwati          Pelajar
3           Agus Cahyono     Professional
4       Antonius Winarta     Professional
5    Ibu Sri Wahyuni, IR       Wiraswasta
6        Rosalina Kurnia     Professional
7          Cahyono, Agus       Wiraswasta
8         Danang Santosa     Professional
9  Elisabeth Suryadinata     Professional
10        Mario Setiawan     Professional
11        Maria Suryawan     Professional
12       Erliana Widjaja     Professional
13          Cahaya Putri       Wiraswasta
14        Mario Setiawan       Wiraswasta
15      Shirley Ratuwati       Wiraswasta
16          Bambang Rudi     Professional
17             Yuni Sari Ibu Rumah Tangga
18           Nelly Halim Ibu Rumah Tangga
19          Mega Pranoto       Wiraswasta
20        Irene Novianto          Pelajar
21      Lestari Fabianto       Wiraswasta
22          Novita Purba     Professional
23       Denny Amiruddin     Professional
24         Putri Ginting       Wiraswasta
25        Julia Setiawan       Wiraswasta
26     Christine Winarto     Professional
27         Grace Mulyati       Wiraswasta
28         Adeline Huang Ibu Rumah Tangga
29          Tia Hartanti     Professional
30        Rosita Saragih Ibu Rumah Tangga
31         Eviana Handry        Mahasiswa
32       Chintya Winarni       Wiraswasta
33       Cecilia Kusnadi        Mahasiswa
34        Deasy Arisandi       Wiraswasta
35               Ida Ayu     Professional
36        Ni Made Suasti       Wiraswasta
37      Felicia Tandiono     Professional
38          Agatha Salim       Wiraswasta
39          Gina Hidayat     Professional
40        Irene Darmawan          Pelajar
41      Shinta Aritonang Ibu Rumah Tangga
42          Yuliana Wati       Wiraswasta
43          Yenna Sumadi     Professional
44                  Anna       Wiraswasta
45        Rismawati Juni     Professional
46          Elfira Surya       Wiraswasta
47           Mira Kurnia Ibu Rumah Tangga
48      Maria Hutagalung       Wiraswasta
49       Josephine Wahab Ibu Rumah Tangga
50        Lianna Nugraha       Wiraswasta

Praktek:

Lengkapi code pada code editor untuk menampilkan data frame dari kolom dari “Jenis.Kelamin”, “Umur”, “Profesi” dan “Tipe.Residen”.

pelanggan[c("Jenis.Kelamin", "Umur", "Profesi", "Tipe.Residen")]
   Jenis.Kelamin Umur          Profesi Tipe.Residen
1           Pria   58       Wiraswasta       Sector
2         Wanita   14          Pelajar      Cluster
3           Pria   48     Professional      Cluster
4           Pria   53     Professional      Cluster
5         Wanita   41       Wiraswasta      Cluster
6         Wanita   24     Professional      Cluster
7           Pria   64       Wiraswasta       Sector
8           Pria   52     Professional      Cluster
9         Wanita   29     Professional       Sector
10          Pria   33     Professional      Cluster
11        Wanita   50     Professional       Sector
12        Wanita   49     Professional       Sector
13        Wanita   64       Wiraswasta      Cluster
14          Pria   60       Wiraswasta      Cluster
15        Wanita   20       Wiraswasta      Cluster
16          Pria   35     Professional      Cluster
17        Wanita   32 Ibu Rumah Tangga      Cluster
18        Wanita   63 Ibu Rumah Tangga      Cluster
19        Wanita   32       Wiraswasta      Cluster
20        Wanita   16          Pelajar       Sector
21        Wanita   38       Wiraswasta      Cluster
22        Wanita   52     Professional      Cluster
23          Pria   34     Professional      Cluster
24        Wanita   39       Wiraswasta      Cluster
25        Wanita   29       Wiraswasta       Sector
26        Wanita   55     Professional      Cluster
27        Wanita   35       Wiraswasta      Cluster
28        Wanita   40 Ibu Rumah Tangga      Cluster
29        Wanita   56     Professional      Cluster
30        Wanita   46 Ibu Rumah Tangga       Sector
31        Wanita   19        Mahasiswa      Cluster
32        Wanita   47       Wiraswasta       Sector
33        Wanita   19        Mahasiswa      Cluster
34        Wanita   21       Wiraswasta       Sector
35        Wanita   39     Professional       Sector
36        Wanita   30       Wiraswasta      Cluster
37        Wanita   25     Professional       Sector
38        Wanita   46       Wiraswasta       Sector
39        Wanita   20     Professional      Cluster
40        Wanita   14          Pelajar       Sector
41        Wanita   24 Ibu Rumah Tangga      Cluster
42        Wanita   26       Wiraswasta      Cluster
43        Wanita   31     Professional      Cluster
44        Wanita   18       Wiraswasta      Cluster
45        Wanita   22     Professional      Cluster
46        Wanita   25       Wiraswasta       Sector
47        Wanita   55 Ibu Rumah Tangga      Cluster
48        Wanita   45       Wiraswasta       Sector
49        Wanita   33 Ibu Rumah Tangga       Sector
50        Wanita   55       Wiraswasta       Sector

Vector untuk Menyimpan Nama Field

Perhatikan jika nama-nama field yang telah kita gunakan pada praktek sebelumnya, sebenarnya adalah sebuah vector

c("Jenis.Kelamin", "Umur", "Profesi", "Tipe.Residen")
[1] "Jenis.Kelamin" "Umur"          "Profesi"       "Tipe.Residen" 

Dan ini bisa dimasukkan ke dalam variable, dengan tujuan dapat digunakan berulang kali dalam script R.

Tugas Praktek

Buatlah variable vector bernama field_yang_digunakan dan diisi dengan 3 teks: “Jenis.Kelamin”, “Umur” dan “Profesi”.

field_yang_digunakan <- c("Jenis.Kelamin", "Umur", "Profesi")

Kemudian tampilkan isi variable pelanggan dengan field_yang_digunakan.

pelanggan[field_yang_digunakan]
   Jenis.Kelamin Umur          Profesi
1           Pria   58       Wiraswasta
2         Wanita   14          Pelajar
3           Pria   48     Professional
4           Pria   53     Professional
5         Wanita   41       Wiraswasta
6         Wanita   24     Professional
7           Pria   64       Wiraswasta
8           Pria   52     Professional
9         Wanita   29     Professional
10          Pria   33     Professional
11        Wanita   50     Professional
12        Wanita   49     Professional
13        Wanita   64       Wiraswasta
14          Pria   60       Wiraswasta
15        Wanita   20       Wiraswasta
16          Pria   35     Professional
17        Wanita   32 Ibu Rumah Tangga
18        Wanita   63 Ibu Rumah Tangga
19        Wanita   32       Wiraswasta
20        Wanita   16          Pelajar
21        Wanita   38       Wiraswasta
22        Wanita   52     Professional
23          Pria   34     Professional
24        Wanita   39       Wiraswasta
25        Wanita   29       Wiraswasta
26        Wanita   55     Professional
27        Wanita   35       Wiraswasta
28        Wanita   40 Ibu Rumah Tangga
29        Wanita   56     Professional
30        Wanita   46 Ibu Rumah Tangga
31        Wanita   19        Mahasiswa
32        Wanita   47       Wiraswasta
33        Wanita   19        Mahasiswa
34        Wanita   21       Wiraswasta
35        Wanita   39     Professional
36        Wanita   30       Wiraswasta
37        Wanita   25     Professional
38        Wanita   46       Wiraswasta
39        Wanita   20     Professional
40        Wanita   14          Pelajar
41        Wanita   24 Ibu Rumah Tangga
42        Wanita   26       Wiraswasta
43        Wanita   31     Professional
44        Wanita   18       Wiraswasta
45        Wanita   22     Professional
46        Wanita   25       Wiraswasta
47        Wanita   55 Ibu Rumah Tangga
48        Wanita   45       Wiraswasta
49        Wanita   33 Ibu Rumah Tangga
50        Wanita   55       Wiraswasta

Konversi Data dengan data.matrix

Seperti telah dijelaskan sebelumnya, isi data dari tiga kolom pelanggan yaitu “Jenis.Kelamin”, “Profesi” dan “Tipe.Residen” merupakan data kategori yang berupa teks.

Untuk fungsi k-means, ketiga kolom ini tidak bisa digunakan kecuali isi dikonversi menjadi numerik. Salah satu caranya adalah dengan menggunakan fungsi data.matrix.

Perintah ini akan mengkonversi data pelanggan pada kolom “Jenis.Kelamin” dan “Profesi” yang diwakili oleh pelanggan[c(“Jenis.Kelamin”, “Profesi”)] menjadi numerik.

data.matrix(pelanggan[c("Jenis.Kelamin", "Profesi")])
      Jenis.Kelamin Profesi
 [1,]             1       5
 [2,]             2       3
 [3,]             1       4
 [4,]             1       4
 [5,]             2       5
 [6,]             2       4
 [7,]             1       5
 [8,]             1       4
 [9,]             2       4
[10,]             1       4
[11,]             2       4
[12,]             2       4
[13,]             2       5
[14,]             1       5
[15,]             2       5
[16,]             1       4
[17,]             2       1
[18,]             2       1
[19,]             2       5
[20,]             2       3
[21,]             2       5
[22,]             2       4
[23,]             1       4
[24,]             2       5
[25,]             2       5
[26,]             2       4
[27,]             2       5
[28,]             2       1
[29,]             2       4
[30,]             2       1
[31,]             2       2
[32,]             2       5
[33,]             2       2
[34,]             2       5
[35,]             2       4
[36,]             2       5
[37,]             2       4
[38,]             2       5
[39,]             2       4
[40,]             2       3
[41,]             2       1
[42,]             2       5
[43,]             2       4
[44,]             2       5
[45,]             2       4
[46,]             2       5
[47,]             2       1
[48,]             2       5
[49,]             2       1
[50,]             2       5

Terlihat, teks “Pria” diubah menjadi angka 1, “Wanita” diubah menjadi angka 2, “Wiraswasta” diubah menjadi angka 5, dan seterusnya.

Tugas Praktek

Buatlah variable pelanggan_matrix yang diisi dengan konversi teks menjadi numerik dari variable pelanggan pada kolom “Jenis.Kelamin”, “Profesi”, dan “Tipe.Residen”.

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

Menggabungkan Hasil Konversi

Setelah Anda bisa melakukan konversi ke angka, kita perlu mengetahui bagaimana menggabungkan kembali data tersebut ke variable asal kita.

Ini berguna terutam apada praktek lanjutan di akhir course, yaitu ketika kita akan mengenali data pelanggan baru masuk ke segment mana.

Untuk menggabungkan data hasil konversi data.matrix ke pelanggan, kita gunakan funtion data.frame.

Sebagai contoh, untuk menggabungkan variable pelanggan dan pelanggan_matrix maka perintahnya adalah sebagai berikut.

data.frame(pelanggan, pelanggan_matrix)

Tugas Praktek

Gabungkan variable pelanggan dan pelanggan_matrix dengan function data.frame dan masukkan kembali ke variable pelanggan.

Catatan: Jika berhasil, maka isi penggabungan ini akan menambahkan kolom bernama “Jenis.Kelamin.1”, “Profesi.1”, dan “Tipe.Residen.1” yang sebelumnya tidak ada pada kedua variable seperti berikut.

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

Akhiran .1 ini ditambahkan karena di variable pelanggan sudah ada nama kolom yang sama.

Sebagai contoh kolom “Jenis.Kelamin” yang terdapat pada pelanggan_matrix sudah ada juga di variable pelanggan. Jadi ketika digabungkan, R akan menambahkan akhiran .1 untuk kolom “Jenis.Kelamin” yang terdapat di pelanggan_matrix.

Menormalisasikan Nilai Belanja

Kali ini kita perhatikan kolom “NilaiBelanjaSetahun” isi datanya bernilai jutaan. Ketika kolom ini digunakan untuk clustering, perhitungan sum of squared errors (pada bab kmeans) akan menjadi sangat besar.

Kita akan menormalisasikan nilainya agar perhitungan lebih sederhana dan mudah dicerna, namun tidak mengurangi akurasi. Ini terutama akan sangat bermanfaat jika jumlah data sangat banyak, misalkan memiliki 200 ribu data.

Normalisasi bisa dilakukan dengan banyak cara. Untuk kasus kita, cukup dengan pembagian sehingga nilai jutaan menjadi puluhan.

Mari kita langsung lakukan dengan mengerjakan praktek berikut.

Tugas Praktek

Isilah kolom NilaiBelanjaSetahun dengan nilai dari kolom itu sendiri dibagi dengan 1000000.

pelanggan$NilaiBelanjaSetahun <- pelanggan$NilaiBelanjaSetahun / 1000000
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            9.497927               1         5              2
2       Cluster            2.722700               2         3              1
3       Cluster            5.286429               1         4              1
4       Cluster            5.204498               1         4              1
5       Cluster           10.615206               2         5              1
6       Cluster            5.215541               2         4              1
7        Sector            9.837260               1         5              2
8       Cluster            5.223569               1         4              1
9        Sector            5.993218               2         4              2
10      Cluster            5.257448               1         4              1
11       Sector            5.987367               2         4              2
12       Sector            5.941914               2         4              2
13      Cluster            9.333168               2         5              1
14      Cluster            9.471615               1         5              1
15      Cluster           10.365668               2         5              1
16      Cluster            5.262521               1         4              1
17      Cluster            5.677762               2         1              1
18      Cluster            5.340690               2         1              1
19      Cluster           10.884508               2         5              1
20       Sector            2.896845               2         3              2
21      Cluster            9.222070               2         5              1
22      Cluster            5.298157               2         4              1
23      Cluster            5.239290               1         4              1
24      Cluster           10.259572               2         5              1
25       Sector           10.721998               2         5              2
26      Cluster            5.269392               2         4              1
27      Cluster            9.114159               2         5              1
28      Cluster            6.631680               2         1              1
29      Cluster            5.271845               2         4              1
30       Sector            5.020976               2         1              2
31      Cluster            3.042773               2         2              1
32       Sector           10.663179               2         5              2
33      Cluster            3.047926               2         2              1
34       Sector            9.759822               2         5              2
35       Sector            5.962575               2         4              2
36      Cluster            9.678994               2         5              1
37       Sector            5.972787               2         4              2
38       Sector           10.477127               2         5              2
39      Cluster            5.257775               2         4              1
40       Sector            2.861855               2         3              2
41      Cluster            6.820976               2         1              1
42      Cluster            9.880607               2         5              1
43      Cluster            5.268410               2         4              1
44      Cluster            9.339737               2         5              1
45      Cluster            5.211041               2         4              1
46       Sector           10.099807               2         5              2
47      Cluster            6.130724               2         1              1
48       Sector           10.390732               2         5              2
49       Sector            4.992585               2         1              2
50       Sector           10.569316               2         5              2

Membuat Data Master

Setelah penggabungan data, kita jadi mengetahui sebenarnya teks kategori dikonversi menjadi angka numerik berapa.

Sebagai contoh, jika kita menampilkan data kolom “Profesi” dan “Profesi.1” dengan perintah berikut.

pelanggan[c("Profesi","Profesi.1")]
            Profesi Profesi.1
1        Wiraswasta         5
2           Pelajar         3
3      Professional         4
4      Professional         4
5        Wiraswasta         5
6      Professional         4
7        Wiraswasta         5
8      Professional         4
9      Professional         4
10     Professional         4
11     Professional         4
12     Professional         4
13       Wiraswasta         5
14       Wiraswasta         5
15       Wiraswasta         5
16     Professional         4
17 Ibu Rumah Tangga         1
18 Ibu Rumah Tangga         1
19       Wiraswasta         5
20          Pelajar         3
21       Wiraswasta         5
22     Professional         4
23     Professional         4
24       Wiraswasta         5
25       Wiraswasta         5
26     Professional         4
27       Wiraswasta         5
28 Ibu Rumah Tangga         1
29     Professional         4
30 Ibu Rumah Tangga         1
31        Mahasiswa         2
32       Wiraswasta         5
33        Mahasiswa         2
34       Wiraswasta         5
35     Professional         4
36       Wiraswasta         5
37     Professional         4
38       Wiraswasta         5
39     Professional         4
40          Pelajar         3
41 Ibu Rumah Tangga         1
42       Wiraswasta         5
43     Professional         4
44       Wiraswasta         5
45     Professional         4
46       Wiraswasta         5
47 Ibu Rumah Tangga         1
48       Wiraswasta         5
49 Ibu Rumah Tangga         1
50       Wiraswasta         5

Kelihatan kalau Wiraswasta dikonversi menjadi angka 5, Pelajar menjadi angka 3, Professional menjadi angka 4, Ibu Rumah Tangga menjadi angka 1, dan satu lagi adalah Mahasiswa yang dikonversi menjadi angka 2 (tidak terlihat disini).

Daftar data kategori dan hasil konversinya sangat penting untuk dijadikan referensi sehingga nanti ketika ada data baru, kita bisa “petakan” menjadi data numerik yang siap digunakan untuk algoritma clustering.

Nah, masalahnya data di atas terlalu panjang, padahal sebenarnya kita cuma perlu 5 baris data bukan? Di R, kita bisa meringkasnya dengan function unique.

Contoh perintahnya adalah sebagai berikut:

unique(pelanggan[c("Profesi","Profesi.1")])
            Profesi Profesi.1
1        Wiraswasta         5
2           Pelajar         3
3      Professional         4
17 Ibu Rumah Tangga         1
31        Mahasiswa         2

Terlihat ya datanya sudah diringkas dengan teks kategori beserta pasangan numeriknya. Kemudian perhatikan juga angka-angka 1,2,3,17 dan 31 yang terdapat di bagian paling kiri. Ini menunjukkan posisi baris ditemukannya teks tersebut.

Data ringkas dan unik ini untuk selanjutnya kita sebut sebagai data referensi atau data master.

Tugas Praktek

Buatlah tiga variable dengan nama Profesi, Jenis.Kelamin dan Tipe.Residen yang isinya berisi daftar unik dari pasangan kolom “Profesi” dan “Profesi.1”, “Jenis.Kelamin” dan “Jenis.Kelamin.1”, “Tipe.Residen” dan “Tipe.Residen.1”.

Profesi <- unique(pelanggan[c("Profesi","Profesi.1")])
Jenis.Kelamin <- unique(pelanggan[c("Jenis.Kelamin","Jenis.Kelamin.1")])
Tipe.Residen <- unique(pelanggan[c("Tipe.Residen","Tipe.Residen.1")])

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
Tipe.Residen
  Tipe.Residen Tipe.Residen.1
1       Sector              2
2      Cluster              1

Kesimpulan

Selamat, Anda sudah menjalankan praktek-praktek yang menjadi dasar dari semua hal sebelum penggunaan analisa data, yaitu tahap persiapan data atau data preparation.

Untuk algoritma clustering k-means yang akan kita gunakan di R, maka tahap data preparationnya adalah menyiapkan data yang di dalamnya harus berisi numerik.

Namun pada banyak kasus riil, data tidak sepenuhnya berisi numerik seperti telah kita lihat sendiri dan praktekkan dengan contoh dataset yang digunakan pada bab ini dengan langkah-langkah berikut:

  1. Mengenal Contoh File Dataset Pelanggan, dimana kita mengerti dulu bagaimana bentuk dan isi dari contoh yang digunakan.
  2. Membaca File dengan read.csv, dimana kita membaca suatu file teks dengan pemisah berupa tab menggunakan fungsi read.csv.
  3. Vector untuk Menyimpan Nama Field, dimana nama-nama field bisa disimpan dalam bentuk vector sehingga bisa digunakan berulang ketika kita buturh referensi nama-nama field yang sama.
  4. Konversi Data dengan data.matrix, dimana kita bisa melakukan konversi data dari kategori teks menjadi numerik.
  5. Menggabungkan Hasil Konversi, dimana hasil konversi ini perlu kita gabungkan kembali ke variable asal agar kita tidak kehilangan referensinya.
  6. Menormalisasikan Nilai Belanja, dimana kita merubah skala data nilai belanja dari jutaan menjadi puluhan dengan tujuan penyederhanaan perhitungan namun tidak mengurangi akurasi.
  7. Membuat Data Master, dimana kita meringkas data kategori dan numerik ke dalam variable-variable yang kita sebut sebagai data master.

Clustering dan Algoritma K-Means

Apa itu Clustering dan algoritma K-Means?

Clustering adalah proses pembagian objek-objek ke dalam beberapa kelompok (cluster) berdasarkan tingkat kemiripan antara satu objek dengan yang lain.

Beberapa contoh clustering:

  • Pengelompokan manusia berdasarkan umur: bayi, balita, anak, remaja, dewasa, tua.
  • Pengelompokan customer berdasarkan daya belinya: regular dan premium.
  • Pengelompokan makanan berdasarkan kandungan gizinya: biji-bijian, sayuran, buah-buahan, minyak, protein, dan lain-lain.

Banyak algoritma telah dikembangkan untuk melakukan clustering secara otomatis, salah satu yang sangat populer adalah K-Means yang akan menjadi fokus utama course kita.

K-means adalah algoritma yang membagi data menjadi sejumlah partisi dengan cara sederhana: mencari kedekatan dari tiap titik pada suatu cluster dengan sejumlah nilai rata-rata atau mean.

Ada dua konsep kunci yang juga menjadi nama asal k-means:

  • Jumlah partisi yang diinginkan, diwakili oleh huruf k
  • Mencari “jarak” kedekatan tiap titik ke sejumlah nilai rata-rata cluster yang diamati, diwakili oleh means

Algoritma k-means sudah ada di paket dasar R dalam bentuk function bernama kmeans.

Clustering with k-means

Fungsi kmeans

Praktek kali ini kita akan melakukan segmentasi langsung pada data pelanggan – yang telah kita lakukan persiapan datanya pada bab sebelumnya – dengan menggunakan function kmeans.

Function kmeans memerlukan minimal 2 parameter, yaitu:

  • x: data yang digunakan, dimana semua isi datanya harus berupa numerik.
  • centers: jumlah cluster yang diinginkan.

Terbaik disini artinya jarak antara tiap titik ke mean dari clusternya sendiri lebih kecil dibandingkan ke mean dari cluster lain.

Catatan: Mean atau nilai rata-rata disini sering disebut juga dengan centroid pada berbagai literatur data science.

Dan fungsi kmeans ini biasanya disertai dengan pemanggilan function seet.seed. Ini berguna agar kita “menyeragamkan” daftar nilai acak yang sama dari kmeans sehingga kita mendapatkan output yang sama.

Berikut adalah contoh penggunaan fungsi kombinasi set.seed dan kmean.

set.seed(100)

kmeans(x=pelanggan[c(“Umur”,“Profesi.1”)], centers=3)

Ini artinya kita membagi data pelanggan berdasarkan “Umur” dan “Profesi” menjadi 3 segmen.

Kadang kala berdasarkan pengalaman DQLab, parameter data dan jumlah segmen saja tidak cukup. Perlu digunakan parameter ketiga yaitu nstart, merupakan jumlah kombinasi acak yang dihasilkan secara internal oleh R. Dan dalam jumlah yang kita berikan, algoritma akan memilih mana yang terbaik dari kombinasi-kombinasi tersebut.

Berikut adalah modifikasi pemanggailan fungsi dengan parameter tambahan nstart sebesar 25.

kmeans(x=pelanggan[c("Umur","Profesi.1")], centers=3, nstart=25)
K-means clustering with 3 clusters of sizes 19, 16, 15

Cluster means:
      Umur Profesi.1
1 53.57895  3.947368
2 34.37500  3.875000
3 20.46667  3.666667

Clustering vector:
 [1] 1 3 1 1 2 3 1 1 2 2 1 1 1 1 3 2 2 1 2 3 2 1 2 2 2 1 2 2 1 1 3 1 3 3 2 2 3 1
[39] 3 3 3 3 2 3 3 3 1 1 2 1

Within cluster sum of squares by cluster:
[1] 715.5789 269.5000 237.0667
 (between_SS / total_SS =  88.5 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

Tugas Praktek

Sesuai contoh pada Lesson, lengkapi fungsi kmeans tersebut dengan:

  • x: berisi data pelanggan dengan field-field yang diambil dari vector field_yang_digunakan (sudah didefinisikan di potongan code)
  • centers: jumlah segmen / cluster yang kita inginkan. Isi dengan 5.
  • nstart: isi dengan angka 25

Ketika dieksekusi dengan lancar, Anda harusnya mendapatkan hasil seperti gambar di bawah ini.

field_yang_digunakan = c("Jenis.Kelamin.1", "Umur", "Profesi.1", "Tipe.Residen.1","NilaiBelanjaSetahun")

segmentasi <- kmeans(x=pelanggan[field_yang_digunakan], centers=5, nstart=25)
segmentasi
K-means clustering with 5 clusters of sizes 9, 14, 10, 12, 5

Cluster means:
  Jenis.Kelamin.1     Umur Profesi.1 Tipe.Residen.1 NilaiBelanjaSetahun
1            2.00 42.33333  4.000000       1.555556            8.804791
2            2.00 20.07143  3.571429       1.357143            5.901089
3            1.70 52.50000  3.800000       1.300000            6.018321
4            1.75 31.58333  3.916667       1.250000            7.330958
5            1.40 61.80000  4.200000       1.400000            8.696132

Clustering vector:
 [1] 5 2 3 3 1 2 5 3 4 4 3 3 5 5 2 4 4 5 4 2 1 3 4 1 4 3 4 1 3 1 2 1 2 2 1 4 2 1
[39] 2 2 2 4 4 2 2 2 3 1 4 3

Within cluster sum of squares by cluster:
[1] 171.67372 316.73367 108.49735 174.85164  58.21123
 (between_SS / total_SS =  92.4 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

Hasil ini dapat dibagi dalam lima bagian, dengan penjelasan sesuai nomor urut pada gambar sebagai berikut:

  1. Ukuran / jumlah titik data pada tiap cluster
  2. Nilai rata-rata (centroid) dari tiap cluster
  3. Pembagian cluster dari tiap elemen data berdasarkan posisinya
  4. Jumlah jarak kuadrat dari tiap titik ke centroidnya
  5. Komponen informasi lain yang terkandung di dalam objek kmeans ini

Analisa Hasil Clustering Vector

Untuk menganalisa hasil, DQLab akan mengawali dari hasil bagian ketiga, yaitu clustering vector.

Clustering vector ini adalah rangkaian vector yang berisi angka cluster. Dari hasil kita, vector berisi angka 1 sampai dengan 5, maksimum sesuai dengan jumlah cluster yang kita inginkan.

Vector ini dimulai dari angka 2, yang artinya data pertama dari dataset kita akan dialokasikan pada nomor cluster 2. Dari gambar juga terlihat isi vector kedua bernlai 1, ini artinya data kedua dari dataset kita dialokasikan pada nomor cluster 1, dan seterusnya. Posisi data terakhir (ke-50) memiliki nomor cluster 5.

Hasil ini dapat diakses dengan komponen cluster dari objek hasil seperti berikut:

segmentasi$cluster
 [1] 5 2 3 3 1 2 5 3 4 4 3 3 5 5 2 4 4 5 4 2 1 3 4 1 4 3 4 1 3 1 2 1 2 2 1 4 2 1
[39] 2 2 2 4 4 2 2 2 3 1 4 3

Ini akan mendapatkan hasil yang sama dengan gambar di atas.

Tugas Praktek

Nah, sekarang tugas kita adalah menambahkan hasil segmentasi ini ke data asal. Caranya cukup gampang, yaitu dengan cara membuat kolom baru (kita namakan cluster) di variable pelanggan yang isinya dari segmentasi$cluster.

Ketik perintah berikut pada bagian code editor setelah bagian komentar #Penggabungan hasil cluster

pelanggan$cluster <- segmentasi$cluster

Kemudian tampilkan struktur dari data pelanggan dengan perintah str.

str(pelanggan)
'data.frame':   50 obs. of  11 variables:
 $ Customer_ID        : chr  "CUST-001" "CUST-002" "CUST-003" "CUST-004" ...
 $ Nama.Pelanggan     : chr  "Budi Anggara" "Shirley Ratuwati" "Agus Cahyono" "Antonius Winarta" ...
 $ Jenis.Kelamin      : chr  "Pria" "Wanita" "Pria" "Pria" ...
 $ Umur               : int  58 14 48 53 41 24 64 52 29 33 ...
 $ Profesi            : chr  "Wiraswasta" "Pelajar" "Professional" "Professional" ...
 $ Tipe.Residen       : chr  "Sector" "Cluster" "Cluster" "Cluster" ...
 $ NilaiBelanjaSetahun: num  9.5 2.72 5.29 5.2 10.62 ...
 $ Jenis.Kelamin.1    : int  1 2 1 1 2 2 1 1 2 1 ...
 $ Profesi.1          : int  5 3 4 4 5 4 5 4 4 4 ...
 $ Tipe.Residen.1     : int  2 1 1 1 1 1 2 1 2 1 ...
 $ cluster            : int  5 2 3 3 1 2 5 3 4 4 ...

Analisa Hasil Cluster Size

Tahap berikutnya, Kita akan analisa hasil pada bagian pertama

K-means clustering with 5 clusters of sizes 14, 5, 9, 12, 10

Ini artinya dengan k-means kita telah membagi dataset pelanggan dengan 5 cluster, dimana:

  • Cluster ke-1 memiliki 14 data
  • Cluster ke-2 memiliki 5 data
  • Cluster ke-3 memiliki 9 data
  • Cluster ke-4 memiliki 12 data
  • Cluster ke-5 memiliki 10 data

Dengan jumlah total 50 data, yang juga merupakan jumlah data total pelanggan.

Mari kita verifikasi hal tersebut dengan memulai dari cluster 1. Ambil data pelanggan yang isi dari kolom clusternya adalah 1 dengan menggunakan fungsi which, seperti perintah berikut pada live code editor di bawah komentar #Filter cluster ke-1.

which(pelanggan$cluster == 1)
[1]  5 21 24 28 30 32 35 38 48

Hasil di atas menunjukkan 14 angka posisi data untuk cluster 1. Banyaknya angka pada deretan ini sesuai ukuran untuk cluster ke-1 dari informasi di atas.

Sekarang cobalah hitung jumlah deretan dengan menambahkan perintah length pada fungsi which seperti berikut:

length(which(pelanggan$cluster == 1))
[1] 9

Tugas

Tampilkan ukuran cluster ke-2 dari pelanggan

length(which(pelanggan$cluster == 2))
[1] 14

Melihat Data pada Cluster ke-N

Sejauh ini, kita belum melihat data hasil cluster. Pastinya, penasaran untuk melihat hasil tersebut, bukan?

Ini dapat dihasilkan dengan cukup mudah setelah kita ikuti praktek sebelumnya, dimana hasil cluster telah diintegrasikan dan juga mengerti cara filter baris-baris data (data rows) dengan which.

Berikut adalah perintah yang dapat diketikkan pada code editor (di bawah comment #Melihat data cluster ke-1) untuk melihat seluruh data pada cluster ke-1

pelanggan[which(pelanggan$cluster == 1),]
   Customer_ID      Nama.Pelanggan Jenis.Kelamin Umur          Profesi
5     CUST-005 Ibu Sri Wahyuni, IR        Wanita   41       Wiraswasta
21    CUST-021    Lestari Fabianto        Wanita   38       Wiraswasta
24    CUST-024       Putri Ginting        Wanita   39       Wiraswasta
28    CUST-028       Adeline Huang        Wanita   40 Ibu Rumah Tangga
30    CUST-030      Rosita Saragih        Wanita   46 Ibu Rumah Tangga
32    CUST-032     Chintya Winarni        Wanita   47       Wiraswasta
35    CUST-035             Ida Ayu        Wanita   39     Professional
38    CUST-038        Agatha Salim        Wanita   46       Wiraswasta
48    CUST-048    Maria Hutagalung        Wanita   45       Wiraswasta
   Tipe.Residen NilaiBelanjaSetahun Jenis.Kelamin.1 Profesi.1 Tipe.Residen.1
5       Cluster           10.615206               2         5              1
21      Cluster            9.222070               2         5              1
24      Cluster           10.259572               2         5              1
28      Cluster            6.631680               2         1              1
30       Sector            5.020976               2         1              2
32       Sector           10.663179               2         5              2
35       Sector            5.962575               2         4              2
38       Sector           10.477127               2         5              2
48       Sector           10.390732               2         5              2
   cluster
5        1
21       1
24       1
28       1
30       1
32       1
35       1
38       1
48       1

dimana ada 14 data denangan seluruh data berjenis kelamin wanita dan umur antara 14 s/d 25 tahun. Penghasilan, profesi, nilai belanja dan tipe residen cukup bervariasi.

Dan ubahlah perintah untuk melihat cluster ke-2.

pelanggan[which(pelanggan$cluster == 2),] 
   Customer_ID   Nama.Pelanggan Jenis.Kelamin Umur          Profesi
2     CUST-002 Shirley Ratuwati        Wanita   14          Pelajar
6     CUST-006  Rosalina Kurnia        Wanita   24     Professional
15    CUST-015 Shirley Ratuwati        Wanita   20       Wiraswasta
20    CUST-020   Irene Novianto        Wanita   16          Pelajar
31    CUST-031    Eviana Handry        Wanita   19        Mahasiswa
33    CUST-033  Cecilia Kusnadi        Wanita   19        Mahasiswa
34    CUST-034   Deasy Arisandi        Wanita   21       Wiraswasta
37    CUST-037 Felicia Tandiono        Wanita   25     Professional
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
44    CUST-044             Anna        Wanita   18       Wiraswasta
45    CUST-045   Rismawati Juni        Wanita   22     Professional
46    CUST-046     Elfira Surya        Wanita   25       Wiraswasta
   Tipe.Residen NilaiBelanjaSetahun Jenis.Kelamin.1 Profesi.1 Tipe.Residen.1
2       Cluster            2.722700               2         3              1
6       Cluster            5.215541               2         4              1
15      Cluster           10.365668               2         5              1
20       Sector            2.896845               2         3              2
31      Cluster            3.042773               2         2              1
33      Cluster            3.047926               2         2              1
34       Sector            9.759822               2         5              2
37       Sector            5.972787               2         4              2
39      Cluster            5.257775               2         4              1
40       Sector            2.861855               2         3              2
41      Cluster            6.820976               2         1              1
44      Cluster            9.339737               2         5              1
45      Cluster            5.211041               2         4              1
46       Sector           10.099807               2         5              2
   cluster
2        2
6        2
15       2
20       2
31       2
33       2
34       2
37       2
39       2
40       2
41       2
44       2
45       2
46       2

Akan tampil data sebagai berikut, dimana terlihat umur mayoritas sudah masuk usia 50 tahun ke atas dan kebanyakan adalah wiraswasta kecuali satu yang ibu rumah tangga. Dan rata-rata nilai belanja adalah sekitar 9 juta, kecuali yang berprofesi ibu rumah tangga.

Menarik bukan pembagian dari algoritmanya?

Tugas Praktek

Gantilah dengan tiga perintah untuk melihat cluster nomor 3 sampai dengan 5.

pelanggan[which(pelanggan$cluster == 3),] 
   Customer_ID    Nama.Pelanggan Jenis.Kelamin Umur          Profesi
3     CUST-003      Agus Cahyono          Pria   48     Professional
4     CUST-004  Antonius Winarta          Pria   53     Professional
8     CUST-008    Danang Santosa          Pria   52     Professional
11    CUST-011    Maria Suryawan        Wanita   50     Professional
12    CUST-012   Erliana Widjaja        Wanita   49     Professional
22    CUST-022      Novita Purba        Wanita   52     Professional
26    CUST-026 Christine Winarto        Wanita   55     Professional
29    CUST-029      Tia Hartanti        Wanita   56     Professional
47    CUST-047       Mira Kurnia        Wanita   55 Ibu Rumah Tangga
50    CUST-050    Lianna Nugraha        Wanita   55       Wiraswasta
   Tipe.Residen NilaiBelanjaSetahun Jenis.Kelamin.1 Profesi.1 Tipe.Residen.1
3       Cluster            5.286429               1         4              1
4       Cluster            5.204498               1         4              1
8       Cluster            5.223569               1         4              1
11       Sector            5.987367               2         4              2
12       Sector            5.941914               2         4              2
22      Cluster            5.298157               2         4              1
26      Cluster            5.269392               2         4              1
29      Cluster            5.271845               2         4              1
47      Cluster            6.130724               2         1              1
50       Sector           10.569316               2         5              2
   cluster
3        3
4        3
8        3
11       3
12       3
22       3
26       3
29       3
47       3
50       3
pelanggan[which(pelanggan$cluster == 4),] 
   Customer_ID        Nama.Pelanggan Jenis.Kelamin Umur          Profesi
9     CUST-009 Elisabeth Suryadinata        Wanita   29     Professional
10    CUST-010        Mario Setiawan          Pria   33     Professional
16    CUST-016          Bambang Rudi          Pria   35     Professional
17    CUST-017             Yuni Sari        Wanita   32 Ibu Rumah Tangga
19    CUST-019          Mega Pranoto        Wanita   32       Wiraswasta
23    CUST-023       Denny Amiruddin          Pria   34     Professional
25    CUST-025        Julia Setiawan        Wanita   29       Wiraswasta
27    CUST-027         Grace Mulyati        Wanita   35       Wiraswasta
36    CUST-036        Ni Made Suasti        Wanita   30       Wiraswasta
42    CUST-042          Yuliana Wati        Wanita   26       Wiraswasta
43    CUST-043          Yenna Sumadi        Wanita   31     Professional
49    CUST-049       Josephine Wahab        Wanita   33 Ibu Rumah Tangga
   Tipe.Residen NilaiBelanjaSetahun Jenis.Kelamin.1 Profesi.1 Tipe.Residen.1
9        Sector            5.993218               2         4              2
10      Cluster            5.257448               1         4              1
16      Cluster            5.262521               1         4              1
17      Cluster            5.677762               2         1              1
19      Cluster           10.884508               2         5              1
23      Cluster            5.239290               1         4              1
25       Sector           10.721998               2         5              2
27      Cluster            9.114159               2         5              1
36      Cluster            9.678994               2         5              1
42      Cluster            9.880607               2         5              1
43      Cluster            5.268410               2         4              1
49       Sector            4.992585               2         1              2
   cluster
9        4
10       4
16       4
17       4
19       4
23       4
25       4
27       4
36       4
42       4
43       4
49       4
pelanggan[which(pelanggan$cluster == 5),]
   Customer_ID Nama.Pelanggan Jenis.Kelamin Umur          Profesi Tipe.Residen
1     CUST-001   Budi Anggara          Pria   58       Wiraswasta       Sector
7     CUST-007  Cahyono, Agus          Pria   64       Wiraswasta       Sector
13    CUST-013   Cahaya Putri        Wanita   64       Wiraswasta      Cluster
14    CUST-014 Mario Setiawan          Pria   60       Wiraswasta      Cluster
18    CUST-018    Nelly Halim        Wanita   63 Ibu Rumah Tangga      Cluster
   NilaiBelanjaSetahun Jenis.Kelamin.1 Profesi.1 Tipe.Residen.1 cluster
1             9.497927               1         5              2       5
7             9.837260               1         5              2       5
13            9.333168               2         5              1       5
14            9.471615               1         5              1       5
18            5.340690               2         1              1       5

Analisa Hasil Cluster Means

Cluster means adalah hasil nilai rata-rata atau titik sentral (centroid) dari seluruh titik tiap cluster.

Apa artinya hasil tersebut?

  • Kolom pertama yang berisi angka 1 sampai dengan 5 adalah mewakili nomor cluster.
  • Kolom Kelamin.1 menunjukkan nilai rata-rata dari data jenis kelamin yang telah dikonversi menjadi numerik, dengan angka 1 mewakili Pria dan angka 2 mewakili wanita.

Pada cluster 1 terlihat bahwa hanya ada angka 2, artinya cluster 1 hanya berisi data dengan profil berjenis kelamin wanita. Nah, untuk cluster ke-2 berupa angka 1.40 artinya data bersifat campuran namun cenderung ke Pria (1).

Kedua interpretasi angka ini sesuai dengan hasil praktek “Melihat Data pada Cluster-N”.

  • Kolom Umur adalah representasi dari dataset awal tanpa mengalami konversi. Terlihat untuk cluster ke-1 umur rata-rata adalah 20 tahun, umur 61 tahun untuk cluster ke-2, dan seterusnya.
  • Kolom 1 menunjukkan nilai rata-rata data Profesi untuk tiap cluster yang telah dikonversi menjadi numerik.

Angka 1, 2, 3, 4 dan 5 masing-masing mewakili Wiraswasta, Pelajar, Professional, Ibu Rumah Tangga dan Mahasiswa.

Terlihat untuk seluruh cluster, profesi cenderung ke Professional terutama untuk cluster ke-4.

  • Kolom Tipe.Residen.1 menunjukkan representasi data Tipe.Residen yang telah dikonversi menjadi numerik dengan angka 1 mewakili Cluster dan 2 mewakili Sector. Ini juga didapatkan dari hasil konversi data menjadi numerik pada praktek sebelumnya.
  • Terlihat untuk seluruh cluster, terlihat data cukup tersebar antara Sector dan Cluster terutama untuk cluster ke-4 dimana nilai kolom ini di angka 1.555.
  • Terakhir, kolom NilaiBelanjaSetahun cukup signifikan pembagiannya untuk tiap cluster. Dimana cluster ke-2 dan ke-4 memiliki nilai belanja lebih tinggi dibandingkan ketiga cluster lainnya.

Ini mungkin target customer yang bisa lebih disasar melalui marketing campaign, karena cluster ke-2 saat ini hanya berisi 5 data. Cukup kecil proporsinya, dan ingin ditingkatkan.

Ini terlihat dari hasil output kmeans bagian pertama yang menunjukkan distribusi jumlah data dari tiap cluster:

K-means clustering with 5 clusters of sizes 14, 5, 9, 12, 10

Tugas Praktek

Cobalah melihat hasil dari cluster means ini dengan langsung mengakses variable segmentasi pada komponen centers.

segmentasi$centers
  Jenis.Kelamin.1     Umur Profesi.1 Tipe.Residen.1 NilaiBelanjaSetahun
1            2.00 42.33333  4.000000       1.555556            8.804791
2            2.00 20.07143  3.571429       1.357143            5.901089
3            1.70 52.50000  3.800000       1.300000            6.018321
4            1.75 31.58333  3.916667       1.250000            7.330958
5            1.40 61.80000  4.200000       1.400000            8.696132

Analisa Hasil Sum of Squares

Yang akan kita analisa berikutnya adalah bagian keempat, yaitu nilai metrik sum of squares seperti terlihat berikut ini.

Within cluster sum of squares by cluster:

[1] 316.73367  58.21123 174.85164 171.67372 108.49735 

(between_SS / total_SS = 92.4 %)

Konsep sum of squares (SS) adalah jumlah “jarak kuadrat” perbedaan tiap titik data dengan mean atau centroidnya. SS ini bisa dengan mean atau centroid untuk tiap cluster atau secara keseluruhan data. Sum of squares dalam literatur data science lain sering disebut dengan Sum of Squared Errors (SSE).

Semakin besar nilai SS menyatakan semakin lebarnya perbedaan antar tiap titik data di dalam cluster tersebut.

Berdasarkan konsep tersebut, berikut adalah penjelasan untuk hasil output kmeans di atas:

  1. Nilai 316.73367 adalah SS untuk cluster ke-1, 58.21123 adalah SS untuk cluste ke-2, dan seterusnya. Semakin kecil nilainya berpotensi semakin baik.
  2. total_SS: adalah SS untuk seluruh titik terhadap nilai rata-rata global, bukan untuk per cluster. Nilai ini selalu tetap dan tidak terpengaruh dengan jumlah cluster.
  3. between_SS: adalah total_SS dikurangi dengan jumlah nilai SS seluruh cluster.
  4. (between_SS / total_SS) adalah rasio antara between_SS dibagi dengan total_SS. Semakin besar persentasenya, ummnya semakin baik.

Ini adalah metrik yang bisa kita gunakan untuk menjawab seberapa baik jumlah cluster yang kita bentuk? Apakah dibagi 2, 5, 10 atau 30?

Teknik penggunaan metrik ini cukup panjang, namun untuk kepentingan praktis kali ini kita hanya melihat perbedaan nilai ini dengan contoh.

Tugas Praktek

set.seed(100)
kmeans(x=pelanggan[field_yang_digunakan], centers=2, nstart=25)
K-means clustering with 2 clusters of sizes 23, 27

Cluster means:
  Jenis.Kelamin.1     Umur Profesi.1 Tipe.Residen.1 NilaiBelanjaSetahun
1        1.739130 51.17391  3.913043       1.434783            7.551518
2        1.888889 25.85185  3.777778       1.296296            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] 1492.481 1524.081
 (between_SS / total_SS =  72.6 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      
set.seed(100)
kmeans(x=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 Tipe.Residen.1 NilaiBelanjaSetahun
1            1.40 61.80000  4.200000       1.400000            8.696132
2            1.75 31.58333  3.916667       1.250000            7.330958
3            2.00 20.07143  3.571429       1.357143            5.901089
4            2.00 42.33333  4.000000       1.555556            8.804791
5            1.70 52.50000  3.800000       1.300000            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]  58.21123 174.85164 316.73367 171.67372 108.49735
 (between_SS / total_SS =  92.4 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

Terlihat untuk 2 cluster (k=2), SS per cluster lebih besar dibandingkan jika data dibagi menjadi 5 cluster (k=5). Perhatikan juga persentase rasio antara between_SS dan total_SS, dimana k=5 juga lebih besar.

Available Components

Analisa terakhir kita dari code adalah bagian kelimat, yaitu sembilan komponen objek yang bisa kita gunakan untuk lihat detil dari objek k-means.

Berikut adalah penjelasan singkat dari sembilan komponen tersebut.

Komponen Deskripsi Contoh
cluster Vector dari cluster untuk tiap titik data [1] 2 1 5 5 4 1 2 5 3 3 5 5 2 2 1 3 3 2 3
centers Merupakan informasi titik centroid dari tiap cluster, seperti pada bagian “Analisa Hasil Cluster Means” Lihat contoh pada “Analisa Hasil Cluster Means”
totss Total Sum of Squares (SS) untuk seluruh titik data [1] 10990.97
withinss Total Sum of Squares per cluster [1] 316.73367 58.21123 174.85164 171.67372 108.49735
tot.withinss Total penjumlahan dari tiap SS dari withinss [1] 829.9676
betweenss Perbedaan nilai antara totss dan tot.withinss [1] 10161.01
size Jumlah titik data pada tiap cluster [1] 14 5 12 9 10
iter Jumlah iterasi luar yang digunakan oleh kmeans 2
ifault Nilai integer yang menunjukkan indikator masalah pada algoritma 0 jika tidak ada masalah

Seluruh komponen tersebut bisa diakses dengan menggunakan aksesor $. Contoh, dengan variable kmeans kita bernama segmentasi dan kita ingin mengakses komponen withinss, maka kita bisa gunakan perintah berikut yang sudah terdapat pada code editor.

segmentasi$withinss
[1] 171.67372 316.73367 108.49735 174.85164  58.21123

Tugas Praktek

Ganti dengan 2 perintah untuk mengambil komponen cluster dan tot.withinss dari variable segmentasi.

segmentasi$cluster
 [1] 5 2 3 3 1 2 5 3 4 4 3 3 5 5 2 4 4 5 4 2 1 3 4 1 4 3 4 1 3 1 2 1 2 2 1 4 2 1
[39] 2 2 2 4 4 2 2 2 3 1 4 3
segmentasi$tot.withinss
[1] 829.9676

Kesimpulan

Pada bab ini Anda telah menyelesaikan penggunaan algoritma K-Means dengan function kmeans dari dataset yang telah dipersiapkan pada bab kedua.

Function kmeans sederhana digunakan tapi outputnya memiliki informasi yang kaya yaitu:

  1. Ukuran / jumlah titik data pada tiap cluster
  2. Nilai rata-rata (centroid) dari tiap cluster
  3. Vector item dari cluster 4 Jumlah jarak kuadrat dari tiap titik ke centroidnya (Sum of Squares atau SS)
  4. Komponen-komponen informasi lain

Dengan menganalisa hasil output ini, kita mampu menggabungkan nomor cluster ke data asal. Selain itu kita juga mengetahui bagaimana kedekatan tiap titik data dari clusternya sehingga menjadi bekal kita untuk menentukan jumlah cluster yang optimal.

Menentukan Jumlah Cluster Terbaik

Dari informasi yang dihasilkan oleh function kmeans, metrick Sum of Squares (SS) atau sering disebut Sum of Squared Errors (SSE) sangat penting untuk dijadikan dasar kita menentukan jumlah cluster yang paling optimal.

Pengantar

Dari informasi yang dihasilkan oleh function kmeans, metrick Sum of Squares (SS) atau sering disebut Sum of Squared Errors (SSE) sangat penting untuk dijadikan dasar kita menentukan jumlah cluster yang paling optimal.

Secara teoritis, berikut adalah beberapa hal yang bisa kita amati dengan SS:

  • Semakin sedikit jumlah cluster yang dihasilkan maka semakin besar nilai SS.
  • Begitu juga sebaliknya, semakin banyak jumlah cluster yang dihasilkan maka semakin kecil nilai SS nya.
  • Karena sifatnya kuadratik, jika terdapat perbedaan yang cukup signifikan antara tiap kombinasi cluster maka perbedaan nilai SS akan semakin besar.
  • Dan seiring bertambahnya jumlah cluster, perbedaan tiap SS ini akan semakin kecil.

Jika dimasukkan ke dalam grafik garis, maka plotting dari total SS untuk tiap cluster berbentuk sebagai berikut.

Titik paling kiri adalah jumlah SS untuk 1 jumlah cluster, titik kedua adalah untuk 2 jumlah cluster, dan seterusnya.Perhatikan semakin ke kanan perbedaan jarak antar tiap titik semakin mengecil.

Grafik garis ini memiliki bentuk seperti siku tangan, dan untuk optimal jumlah cluster biasanya kita mengambil titik sikunya. Pada contoh di atas kita bisa mengambil 4 atau 5.

Proses pengambilan keputusan berdasarkan plotting siku ini biasa kita sebut Elbow Effect atau Elbow Method.

Skema Cluster dan Elbow Effect

Simulasi Jumlah Cluster dan SS

Metrik elbow method yang digunakan sebagai basis justifikasi adalah Sum of Squares (SS), atau lebih tepatnya komponen tot.withinss dari objek kmeans.

Metrik ini akan dicari progressive nilai tot.withinss untuk tiap kombinasi jumlah cluster, dan disimpan dalam bentuk vector di R.

Untuk keperluan ini, kita akan gunakan sapply. Function sapply akan digunakan untuk memanggil function kmeans untuk suatu range jumlah cluster. Range ini akan kita gunakan 1 sampai dengan 10.

Code lengkapnya sebagai berikut:

sse <- sapply(1:10, function(param_k) {kmeans(pelanggan[field_yang_digunakan], param_k, nstart=25)$tot.withinss})

Berikut adalah penjelasan lengkap elemen-elemen perintah di atas

Komponen Deskripsi
sse Nama variable yang akan digunakan untuk menyimpan nilai tot.withinss dari tiap objek kmeans
sapply Merupakan function yang digunakan untuk menghasilkan vector dari iterasi (looping) dari eksekusi fungsi tertentu (pada kasus ini: kmeans) dengan nilai range yang diberikan
1:10 Range jumlah cluster dari 1 sampai dengan 10
param_k Parameter yang akan berisi nilai 1 sampai dengan 10, sesuai range di atas
kmeans(pelanggan[field_yang_digunakan], param_k, nstart=25) Fungsi kmeans yang dipanggil sebanyak nilai range 1 sampai dengan 10 (param_k) dari dataset pelanggan
$tot.withinss Total penjumlahan dari tiap SS dari withinss

Tugas Praktek

Gantilah code editor dengan code lengkap sapply di atas, dan tambahkan juga perintah untuk melihat isi variable sse.

Dan jika berhasil dieksekusi, maka hasilnya akan tampak sebagai vector berikut.

sse <- sapply(1:10, function(param_k) {kmeans(pelanggan[field_yang_digunakan], param_k, nstart=25)$tot.withinss})
sse
 [1] 10990.9740  3016.5612  1550.8725  1064.4187   829.9676   625.1462
 [7]   508.1568   431.6977   374.1095   317.9424

Grafik Elbow Effect

Kali ini kita akan visualisasikan vector Sum of Squares (SS) atau Sum of Squared Errors (SSE) yang telah kita hasilkan pada praktek sebelumnya.

Kita akan gunakan ggplot untuk visualisasi, datasetnya berupa penggabungan data frame dari sse dan range nilai 1:10, dengan perintah berikut.

jumlah_cluster_max <- 10
ssdata = data.frame(cluster=c(1:jumlah_cluster_max),sse)
ggplot(ssdata, aes(x=cluster,y=sse)) +
                geom_line(color="red") + geom_point() +
                ylab("Within Cluster Sum of Squares") + xlab("Jumlah Cluster") +
                geom_text(aes(label=format(round(sse, 2), nsmall = 2)),hjust=-0.2, vjust=-0.5) +
  scale_x_discrete(limits=c(1:jumlah_cluster_max))

Berikut adalah gambaran grafik yang akan dihasilkan – dengan pasangan indikator nomor yang menunjukkan perintah dan komponen grafik yang dihasilkan. Sebagai contoh, penomoran nomor 1 yaitu geom_line(color=“red”) menghasilkan grafik garis berwarna merah.

Tugas Praktek

Gantilah pada code editor code lengkap sapply di atas, dan tambahkan juga perintah untuk melihat isi variable sse.

Dan jika berhasil dieksekusi, maka akan muncul grafik berbentuk siku seperti berikut.

library(ggplot2)

jumlah_cluster_max <- 10
ssdata = data.frame(cluster=c(1:jumlah_cluster_max),sse)
ggplot(ssdata, aes(x=cluster,y=sse)) +
                geom_line(color="red") + geom_point() +
                ylab("Within Cluster Sum of Squares") + xlab("Jumlah Cluster") +
                geom_text(aes(label=format(round(sse, 2), nsmall = 2)),hjust=-0.2, vjust=-0.5) +
  scale_x_discrete(limits=c(1:jumlah_cluster_max))

Kesimpulan

Dengan memanfaatkan nilai Sum of Squares (SS) atau Sum of Squared Errors (SSE) kita bisa mengambil keputusan jumlah segmentasi optimal yang kita gunakan.

Ini dilakukan dengan membuat simulasi iterasi jumlah cluster dari 1 sampai dengan jumlah maksimum yang kita inginkan. Pada contoh di bab ini, kita gunakan angka iterasi 1 sampai dengan 10.

Setelah mendapatkan nilai SS dari tiap jumlah cluster, kita bisa plotting ke grafik garis dan menggunakan elbow method untuk menentukan jumlah cluster optimal.

“Pemaketan” Model K-Means

Setelah berhasil mempersiapkan data, menggunakan algoritma kmeans, dan akhirnya bisa memutuskan jumlah cluster terbaik.

Pengantar

Setelah berhasil mempersiapkan data, menggunakan algoritma kmeans, dan akhirnya bisa memutuskan jumlah cluster terbaik.

Maka tahapan berikutnya adalah “memaketkan” atau “membungkus” seluruh referensi hasil konversi dan objek kmeans ini supaya bisa digunakan untuk mengolah data baru dan berguna di bisnis.

Untuk ini tahapannya adalah sebagai berikut:

  • Menamakan cluster dengan karakteristik yang lebih mudah dimengerti. Penamaan ini kita simpan dalam variable Segmen.Pelanggan.
  • Menggabungkan variable Segmen. Pelanggan, Profesi, Jenis.Kelamin, Tipe.Residen, dan Segmentasi ke dalam satu objek bertipe list ke dalam variable Identitas.Cluster.
  • Menyimpan objek Identitas.Cluster dalam bentuk file sehingga dapat digunakan kemudian, ini bisa disebut model bagi kita

Menamakan Segmen

Pada praktek kali ini kita akan menamakan segmen sesuai dengan karakteristiknya. Untuk membantu, gambar berikut menunjukkan nilai mean tiap kolom yang digunakan tiap cluster dan juga nilai kolom sebelum konversi.

Mari kita coba namakan cluster 1 s/d 5 sebagai berikut:

  • Cluster 1 : Silver Youth Gals: alasannya adalah karena umurnya rata-rata adalah 20, wanita semua, profesinya bercampur antar pelajar dan professional serta pembelanjaan sekitar 6 juta.
  • Cluster 2 : Diamond Senior Member: alasannya adalah karena umurnya rata-rata adalah 61 tahun dan pembelanjaan di atas 8 juta.
  • Cluster 3 : Gold Young Professional: alasannya adalah karena umurnya rata-rata adalah 31 tahun, professional dan pembelanjaan cukup besar.
  • Cluster 4 : Diamond Profesional: alasannya adalah karena umurnya rata-rata adalah 42 tahun, pembelanjaan paling tinggi dan semuanya professional.
  • Cluster 5 : Silver Mid Professional: alasannya adalah karena umurnya rata-rata adalah 52 tahun dan pembelanjaan sekitar 6 juta.

Tugas Praktek

Buatlah satu variable data frame bernama Segmen.Pelanggan yang terdiri dari dua kolom:

  • cluster: vector dengan isi 1,2,3,4 dan 5.
  • Nama.Segmen: vector dengan isi “Silver Youth Gals”, “Diamond Senior Member”, “Gold Young Professional”, “Diamond Professional”, dan “Silver Mid Professional”.
Segmen.Pelanggan <- data.frame(cluster = c(1,2,3,4,5),
                               Nama.Segmen = c("Silver Youth Gals", 
                                               "Diamond Senior Member", 
                                               "Gold Young Professional", 
                                               "Diamond Professional", 
                                               "Silver Mid Professional"))
Segmen.Pelanggan
  cluster             Nama.Segmen
1       1       Silver Youth Gals
2       2   Diamond Senior Member
3       3 Gold Young Professional
4       4    Diamond Professional
5       5 Silver Mid Professional

Menggabungkan Referensi

Sejauh ini kita telah mempelajari pembentukan aset-aset data sebagai berikut:

  • Dataset pelanggan yang telah “diperkaya” dengan tambahan kolom hasil konversi teks menjadi numerik, dan menormalisasikan field NilaiBelanjaSetahun.
  • Objek kmeans dengan k=5, dipilih berdasarkan metodologi menggunakan metrik Sum of Squares (SS).
  • Membuat variable referensi atau pemetaan numerik dan teks asli (kategori) dari kolom Jenis Kelamin, Profesi dan Tipe Residen.
  • Variable data.frame dengan nama pelanggan yang berisi penamaan cluster sesuai analisa karakteristik dari centroid kolom-kolom pelanggan yang digunakan.
  • Vector dari field yang digunakan.

Akan sangat baik jika semuanya digabungkan di satu variable dengan tipe list, dan ini akan jadi model kita yang dapat disimpan ke dalam file dan digunakan ketika diperlukan.

Pada tugas berikut, kita akan namakan list ini dengan Identitas.Cluster. Perintahnya adalah sebagai berikut:

Identitas.Cluster <- list(Profesi=Profesi, 
                          Jenis.Kelamin=Jenis.Kelamin, 
                          Tipe.Residen=Tipe.Residen, 
                          Segmentasi=segmentasi, 
                          Segmen.Pelanggan=Segmen.Pelanggan, 
                          field_yang_digunakan=field_yang_digunakan)
Identitas.Cluster

Tugas Praktek

Buatlah variable Identitas.Cluster dengan mengganti dengan perintah seperti pada contoh di atas, kemudian isinya.

Identitas.Cluster <- list(Profesi=Profesi, 
                          Jenis.Kelamin=Jenis.Kelamin, 
                          Tipe.Residen=Tipe.Residen, 
                          Segmentasi=segmentasi, 
                          Segmen.Pelanggan=Segmen.Pelanggan, 
                          field_yang_digunakan=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

$Tipe.Residen
  Tipe.Residen Tipe.Residen.1
1       Sector              2
2      Cluster              1

$Segmentasi
K-means clustering with 5 clusters of sizes 9, 14, 10, 12, 5

Cluster means:
  Jenis.Kelamin.1     Umur Profesi.1 Tipe.Residen.1 NilaiBelanjaSetahun
1            2.00 42.33333  4.000000       1.555556            8.804791
2            2.00 20.07143  3.571429       1.357143            5.901089
3            1.70 52.50000  3.800000       1.300000            6.018321
4            1.75 31.58333  3.916667       1.250000            7.330958
5            1.40 61.80000  4.200000       1.400000            8.696132

Clustering vector:
 [1] 5 2 3 3 1 2 5 3 4 4 3 3 5 5 2 4 4 5 4 2 1 3 4 1 4 3 4 1 3 1 2 1 2 2 1 4 2 1
[39] 2 2 2 4 4 2 2 2 3 1 4 3

Within cluster sum of squares by cluster:
[1] 171.67372 316.73367 108.49735 174.85164  58.21123
 (between_SS / total_SS =  92.4 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

$Segmen.Pelanggan
  cluster             Nama.Segmen
1       1       Silver Youth Gals
2       2   Diamond Senior Member
3       3 Gold Young Professional
4       4    Diamond Professional
5       5 Silver Mid Professional

$field_yang_digunakan
[1] "Jenis.Kelamin.1"     "Umur"                "Profesi.1"          
[4] "Tipe.Residen.1"      "NilaiBelanjaSetahun"

Menyimpan Objek dalam Bentuk File

Objek yang sudah digabungkan pada praktek sebelumnya sudah memiliki semua aset yang diperlukan untuk mengalokasikan data baru ke segmen yang sesuai.

Untuk menyimpan objek ini ke dalam file kita gunakan function saveRDS. File ini kemudian dapat dibuka kembali sebagai objek ke depannya.

Sebagai contoh, perintah untuk menyimpan objek Identitas.Cluster ke file cluster.rds adalah sebagai berikut.

saveRDS(Identitas.Cluster,"cluster.rds")

Kita akan menjalankan perintah ini pada tugas berikut.

Tugas Praktek

Isi bagian dengan perintah saveRDS seperti contoh di atas.

saveRDS(Identitas.Cluster,"cluster.rds")

Kesimpulan

Pada penutup bab ini, Anda sudah menggabungkan seluruh aset yang diperlukan untuk membentuk suatu model.

Model ini adalah objek yang bisa digunakan untuk mengolah data baru dan terdiri dari objek kmeans, variable referensi hasil konversi teks ke numerik, dan juga penamaan cluster.

Mengoperasionalkan Model K-Means

Pengantar

Apa yang dimaksud dengan mengoperasionalkan seperti judul pada bab ini?

Ini artinya objek hasil pengolahan algoritma K-Means dan variable-variable terkait yang kita hasilkan sebelumnya harus dapat digunakan ke kasus riil sehingga satu siklus lengkap terjadi.

Kasus riil untuk clustering kita adalah cukup sederhana: bagaimana data baru dapat otomatis membantu tim marketing dan CRM untuk mengidentifikasi segmen mana pelanggan tersebut berada dengan cepat.

Dengan kecepatan identifikasi, maka organisasi atau bisnis dapat dengan cepat bergerak dengan pesan marketing yang efektif dan memenangkan persaingan.

Data Baru

Pada teks sebelumnya, disebutkan data pelanggan baru harus cepat dipetakan ke segmen.

Dengan asumsi tiap data pelanggan baru diinput ke dalam sistem, maka pengolahan adalah per record. Pada praktek kali ini, kita akan membuat data.frame dengan satu data dimana nama-nama kolomnya persis dengan dataset awal.

Tugas Praktek

Ketik perintah kedua perintah berikut pada code editor, masing-masing mengisi data.frame dan menampilkannya.

databaru <- data.frame(Customer_ID="CUST-100", 
                       Nama.Pelanggan="Rudi Wilamar",
                       Umur=20,
                       Jenis.Kelamin="Wanita",
                       Profesi="Pelajar",
                       Tipe.Residen="Cluster",
                       NilaiBelanjaSetahun=3.5)
databaru
  Customer_ID Nama.Pelanggan Umur Jenis.Kelamin Profesi Tipe.Residen
1    CUST-100   Rudi Wilamar   20        Wanita Pelajar      Cluster
  NilaiBelanjaSetahun
1                 3.5

Memuat Objek Clustering dari File

Praktek kali ini adalah membuka file yang telah kita simpan sebelumnya dengan perintah dan dikenali di R sebagai objek yang akan kita gunakan untuk mengolah data baru.

Untuk membuka file tersebut, kita gunakan function readRDS.

Perintahnya sangat sederhana, berikut adalah contoh untuk membuka file cluster.rds yang telah kita simpan sebelumnya.

readRDS(file="cluster.rds")

Lakukan tugas berikut untuk membaca dan menampilkan objek dari cluster.rds.

Tugas Praktek

Baca objek dari file cluster.rds dengan menggunakan function readRDS, dan simpan sebagai variable dengan nama Identitas.Cluster. Setelah itu, tampilkan isi dari Identitas.Cluster.

Jika eksekusi berhasil, maka hasil yang muncul adalah sebagai berikut.

Identitas.Cluster <- readRDS(file="cluster.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

$Tipe.Residen
  Tipe.Residen Tipe.Residen.1
1       Sector              2
2      Cluster              1

$Segmentasi
K-means clustering with 5 clusters of sizes 9, 14, 10, 12, 5

Cluster means:
  Jenis.Kelamin.1     Umur Profesi.1 Tipe.Residen.1 NilaiBelanjaSetahun
1            2.00 42.33333  4.000000       1.555556            8.804791
2            2.00 20.07143  3.571429       1.357143            5.901089
3            1.70 52.50000  3.800000       1.300000            6.018321
4            1.75 31.58333  3.916667       1.250000            7.330958
5            1.40 61.80000  4.200000       1.400000            8.696132

Clustering vector:
 [1] 5 2 3 3 1 2 5 3 4 4 3 3 5 5 2 4 4 5 4 2 1 3 4 1 4 3 4 1 3 1 2 1 2 2 1 4 2 1
[39] 2 2 2 4 4 2 2 2 3 1 4 3

Within cluster sum of squares by cluster:
[1] 171.67372 316.73367 108.49735 174.85164  58.21123
 (between_SS / total_SS =  92.4 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

$Segmen.Pelanggan
  cluster             Nama.Segmen
1       1       Silver Youth Gals
2       2   Diamond Senior Member
3       3 Gold Young Professional
4       4    Diamond Professional
5       5 Silver Mid Professional

$field_yang_digunakan
[1] "Jenis.Kelamin.1"     "Umur"                "Profesi.1"          
[4] "Tipe.Residen.1"      "NilaiBelanjaSetahun"

Merge dengan Data Referensi

Dengan adanya data baru dan objek yang berisi data referensi telah dibaca kembali, kita bisa menggabungkan data baru ini untuk mendapatkan konversi numerik dari field Jenis.Kelamin, Profesi dan Tipe.Residen.

Tujuannya adalah kita akan bisa mencari segmen pelanggannya dengan data numerik hasil penggabungan.

Cara menggabungkannya adalah dengan menggunakan function merge, dimana kedua data akan digabungkan dengan mencari persamaan nama kolom dan isinya.

Sebagai contoh, perintah berikut akan menggabungkan variable databaru dengan variable Identitas.Cluster$Profesi.

merge(databaru, Identitas.Cluster$Profesi)

Maka prosesnya akan terlihat sebagai berikut.

  • Variable databaru dengan Identitas.Cluster$Profesi memiliki nama kolom yang sama, yaitu Profesi.
  • Kolom Profesi kemudian akan dijadikan “kunci” untuk menggabungkan kedua variable ini.
  • Ternyata isi Profesi dari databaru, yaitu “Pelajar” juga terdapat di Identitas.Cluster. Ini akan membuat penggabungan menjadi berhasil.
  • Penggabungan ini juga akan mengambil kolom Profesi.1 dan isi data yang terkait dengan Pelajar, yaitu nilai 3.

Berikut adalah hasil akhirnya.

merge(databaru, Identitas.Cluster$Profesi)
  Profesi Customer_ID Nama.Pelanggan Umur Jenis.Kelamin Tipe.Residen
1 Pelajar    CUST-100   Rudi Wilamar   20        Wanita      Cluster
  NilaiBelanjaSetahun Profesi.1
1                 3.5         3

Perhatikan kalau kolom kunci, yaitu Profesi digeser ke depan. Dan sisanya adalah kolom-kolom dari kedua variable.

Tugas Praktek

Berikut adalah perintah dari pengembangan contoh di atas. Setelah terjadi penggabungan data, hasilnya disimpan kembali ke variable databaru.

databaru <- merge(databaru, Identitas.Cluster$Profesi)

Cobalah ketik perintah ini ke code editor dan lanjutkan perintahnya untuk menggabungkan juga variable Identitas.Cluster$Jenis.Kelamin dan Identitas.Cluster$Tipe.Residen. Kemudian tampilkan data akhirnya.

Jika eksekusi berjalan dengan lancar, hasil akhir akan terlihat sebagai berikut.

databaru <- merge(databaru, Identitas.Cluster$Profesi)
databaru <- merge(databaru, Identitas.Cluster$Jenis.Kelamin)
databaru <- merge(databaru, Identitas.Cluster$Tipe.Residen)
databaru
  Tipe.Residen Jenis.Kelamin Profesi Customer_ID Nama.Pelanggan Umur
1      Cluster        Wanita Pelajar    CUST-100   Rudi Wilamar   20
  NilaiBelanjaSetahun Profesi.1 Jenis.Kelamin.1 Tipe.Residen.1
1                 3.5         3               2              1

Menentukan Cluster

Kini saatnya penentuan untuk melakukan praktek terpenting bagi bisnis: data baru ini masuk ke segmen mana?

Gampang!

Yaitu dengan tahapan berikut:

  • mencari jarak kuadrat minimum atau terdekat
  • dari kolom numerik data baru tersebut
  • ke centroid kolom terkait
  • dari seluruh cluster yang ada

Kalau kita terjemahkan jadi rumus sebagai berikut:

which.min(sapply( 1:5, function( x ) sum( ( data[kolom] - objekkmeans$centers[x,])^2 ) ))

dimana:

  • min: merupakan function untuk mencari nilai minimum
  • 1:5 : adalah range nomor cluster dari 1 sampai dengan 5 (atau lebih sesuai dengan ukuran cluster)
  • sapply: digunakan untuk melakukan iterasi berdasarkan range (dalam kasus ini 1 s/d 5)
  • function(x): digunakan untuk proses dengan x diisi 1 s/d 5 per proses
  • (data[kolom] – objekkmeans$centers[x,]) ^2: adalah jarak kuadrat data. Ingat centers adalah komponen dari objek kmeans.
  • sum: digunakan untuk menjumlahkan jarak kuadrat

Mungkin Anda masih akan perlu memahami ini karena konstruksinya yang mungkin sedikit aneh tapi sebenarnya prinsipnya sederhana. Cobalah lakukan corat coret dan berkunjung kembali ke halaman ini dengan account DQLab untuk memahami rumusan ini.

Untuk saat ini…agar tidak membuang waktu, kita coba terapkan secara praktis pada tugas berikut.

Tugas Praktek

Perintah untuk menentukan cluster seperti pada contoh di atas untuk kasus kita telah terisi pada code editor berikut.

Jalankan code tersebut, dan hasil akhir adalah tampilan nomor cluster yang isinya 1. Rubahlah umur pelanggan pada databaru dengan 32, jalankan kembali dan lihat hasilnya.

Kemudian jadikan perintah which.min(…) sebagai index pada referensi nama cluster (Segmen.Pelanggan) sehingga tampilan tidak mengeluarkan nomor cluster, tetapi nama cluster.

Petunjuk:

Index yang menggunakan which.min(…) sebagai index harus mengikuti format berikut. Perhatikan koma di penutup kurung siku.

Identitas.Cluster$Segmen.Pelanggan[which.min(…),]

Identitas.Cluster$Segmen.Pelanggan[which.min(sapply(1:5, 
                                                    function(x) 
                                                      sum(( databaru[Identitas.Cluster$field_yang_digunakan] -
                                                              Identitas.Cluster$Segmentasi$centers[x,])^2))),]
  cluster           Nama.Segmen
2       2 Diamond Senior Member

Kesimpulan

Praktek terakhir menunjukkan bagaimana data pelanggan baru dianalisa oleh model kita dan mengeluarkan nomor cluster atau segmen.

Dengan berakhirnya praktek ini, berarti menunjukkan kita sudah menjalani siklus tahap demi tahap memodelkan dan menggunakan customer segmentation terhadap data kita.

Penutup

Akhir dari pelajaran Machine Learning For Marketing: Customer Segmentation.

Kesimpulan

Selamat, Anda sudah menyelesaikan rangkaian langkah untuk mengerti penggunaan algoritma k-means di R dengan tujuan segmentasi pelangggan.

Dimulai dari persiapan data, menggunakan algoritma dan menganalisa hasilnya, mencari jumlah segmentasi paling optimal, memaketkan model yang dihasilkan agar dapat digunakan dalam operasional untuk membantu tim marketing melakukan otomatisasi dan menyampaikan pesan ke target yang tepat.

What Next?

Sejauh ini topik teknis untuk customer segmentation yang kita pelajari adalah mengenai algoritma K-Means yang diimplementasikan di R.

Perlu diingat bahwa K-Means bukan satu-satunya algoritma clustering, masih banyak algoritma lain seperti Hierarchical Clustering, Parallelized Hierarchical Clustering, dan lain-lain.

Dan setiap algoritma juga memiliki kekurangan dan kelebihan masing-masing. Namun pengetahuan dasar dengan berangkat dari satu algoritma yang populer dan menuntaskannya pastinya akan menjadi bekal berharga.

Untuk selanjutnya, kita akan memperdalam topik penggunaan algoritma clustering ini dalam bentuk latihan dengan project online. Dan tentunya pada saat project ini, dataset yang diberikan juga akan jauh lebih kompleks dan besar.

You Have Passed the Module