Apa itu Customer Segmentation?
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?
Bagaimana Anda menarik manfaat dari DQLab ini?
Apa tujuan utama Customer Segmentation bagi bisnis?
Apa alasan paling kuat kenapa kita akhirnya harus menggunakan algoritma komputer untuk membantu proses customer segmentation?
Persiapan Data itu penting! Kita akan mempelajari mempersiapkan data agar siap digunakan untuk menganalisis lebih lanjut.
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:
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:
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.
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:
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
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
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
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.
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
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
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:
Clustering adalah proses pembagian objek-objek ke dalam beberapa kelompok (cluster) berdasarkan tingkat kemiripan antara satu objek dengan yang lain.
Beberapa contoh clustering:
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:
Algoritma k-means sudah ada di paket dasar R dalam bentuk function bernama 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:
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:
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:
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 ...
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:
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
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
Cluster means adalah hasil nilai rata-rata atau titik sentral (centroid) dari seluruh titik tiap cluster.
Apa artinya hasil tersebut?
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”.
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.
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
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:
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.
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
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:
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.
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.
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:
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.
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
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))
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.
Setelah berhasil mempersiapkan data, menggunakan algoritma kmeans, dan akhirnya bisa memutuskan jumlah cluster terbaik.
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:
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:
Tugas Praktek
Buatlah satu variable data frame bernama Segmen.Pelanggan yang terdiri dari dua kolom:
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
Sejauh ini kita telah mempelajari pembentukan aset-aset data sebagai berikut:
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"
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")
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.
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.
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
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"
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.
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
Kini saatnya penentuan untuk melakukan praktek terpenting bagi bisnis: data baru ini masuk ke segmen mana?
Gampang!
Yaitu dengan tahapan berikut:
Kalau kita terjemahkan jadi rumus sebagai berikut:
which.min(sapply( 1:5, function( x ) sum( ( data[kolom] - objekkmeans$centers[x,])^2 ) ))
dimana:
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
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.
Akhir dari pelajaran Machine Learning For Marketing: Customer Segmentation.
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.
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.