email : ?_?
ntraktir : https://trakteer.id/contekansial
nyawer :
https://saweria.co/contekansial
github :
https://bit.ly/origin-AL-GitHub
youtube :
https://bit.ly/origin-AL-youtube
Customer Segmentation adalah proses penting yang diperlukan di bisnis untuk mengenal customer dengan lebih baik. Dengan demikian proses bisnis di pemasaran (marketing) 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 profil customer yang cukup banyak dan rutin. Ini bisa dibantu dengan algoritma komputer.
Pembelajaran ini dirancang dengan menggunakan dataset dari kasus skenario nyata di Indonesia. Dataset yang digunakan cukup kecil dengan tujuan kamu dapat lebih mudah memahami dataset ini dan mampu beradaptasi ketika dihadapkan dataset yang lebih kompleks.
Apa yang akan kamu pelajari :
RR agar
dapat digunakan oleh Algoritma K-MeansPersiapan 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.
Dalam 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. Hal 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:
read.csvdata.matrixDataset yang kita gunakan adalah data customer. Data tersebut memiliki tujuh kolom dengan penjelasan sebagai berikut:
CUST- diikuti angkaPria dan
WanitaWiraswasta, Pelajar,
Professional, Ibu Rumah Tangga, dan
MahasiswaCluster dan
SectorNah dengan contoh dataset inilah, kita akan mencoba mencari jumlah segmentasi yang paling optimal dimana antar tiap data pelanggan dalam segmen memiliki kemiripan tinggi.
Langkah pertama yang perlu kita lakukan adalah membaca
dataset tersebut dari file teks menjadi
data.frame di R dengan perintah
read.csv().
Begini :
#membuat variabel dataset
AL.Pelanggan <- read.csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt", sep="\t")
#menampilkan data
AL.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 kalau ada kolom yang berisi angka saja, yaitu Umur dan NilaiBelanjaSetahun. Sisanya diisi data kategori untuk 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.
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, maka perintahnya adalah sebagai berikut:
variabel_dataset[c("nama.kolom1", "nama.kolom2", dst)]
Misalkan kita coba akan menampilkan kolom Nama.Pelanggan dan Profesi.
Begini :
AL.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
Perhatikan jika nama-nama field yang telah kita gunakan sebelumnya adalah sebuah vector.
c("Nama.Pelanggan", "Profesi")
Ini bisa dimasukkan ke dalam variable, dengan tujuan dapat
digunakan berulang kali dalam script R.
Cobalah kamu buat variabel vektor kolom.digunakan
dan diisi dengan Jenis.Kelamin, Umur
dan Profesi. Kemudian tampilkan isi variabel
AL.Pelanggan dengan kolom.digunakan.
Begini :
#Membaca data csv dan dimasukkan ke variable AL.Pelanggan
AL.Pelanggan <- read.csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt",sep="\t")
#Membuat variabel kolom.digunakan dengan isi berupa vektor "Jenis.Kelamin", "Umur" dan "Profesi"
kolom.digunakan <- c("Jenis.Kelamin", "Umur", "Profesi")
#Menampilan data AL.Pelanggan dengan nama kolom sesuai isi vektor kolom.digunakan
AL.Pelanggan[kolom.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
AL.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(). Perintahnya cukup sederhana, seperti
terlihat pada contoh berikut:
data.matrix(variabel_dataset[c("nama.kolom1", "nama.kolom2")])
Buatlah variabel AL.Pelanggan.Matrix yang diisi
dengan konversi teks menjadi numerik dari variabel
AL.Pelanggan pada kolom Jenis.Kelamin,
Profesi dan Tipe.Residen.
Begini :
#Membaca data csv dan dimasukkan ke variable AL.Pelanggan
AL.Pelanggan <- read.csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt",sep="\t")
#membuat konversi data teks menjadi numerik
AL.Pelanggan.Matrix <- data.matrix(AL.Pelanggan[c("Jenis.Kelamin", "Profesi", "Tipe.Residen")])
#melihat gambaran konversi
AL <- AL.Pelanggan[c("Jenis.Kelamin", "Profesi", "Tipe.Residen")]
pelanggan <- data.frame(AL, AL.Pelanggan.Matrix)
pelanggan Jenis.Kelamin Profesi Tipe.Residen Jenis.Kelamin.1 Profesi.1
1 Pria Wiraswasta Sector 1 5
2 Wanita Pelajar Cluster 2 3
3 Pria Professional Cluster 1 4
4 Pria Professional Cluster 1 4
5 Wanita Wiraswasta Cluster 2 5
6 Wanita Professional Cluster 2 4
7 Pria Wiraswasta Sector 1 5
8 Pria Professional Cluster 1 4
9 Wanita Professional Sector 2 4
10 Pria Professional Cluster 1 4
11 Wanita Professional Sector 2 4
12 Wanita Professional Sector 2 4
13 Wanita Wiraswasta Cluster 2 5
14 Pria Wiraswasta Cluster 1 5
15 Wanita Wiraswasta Cluster 2 5
16 Pria Professional Cluster 1 4
17 Wanita Ibu Rumah Tangga Cluster 2 1
18 Wanita Ibu Rumah Tangga Cluster 2 1
19 Wanita Wiraswasta Cluster 2 5
20 Wanita Pelajar Sector 2 3
21 Wanita Wiraswasta Cluster 2 5
22 Wanita Professional Cluster 2 4
23 Pria Professional Cluster 1 4
24 Wanita Wiraswasta Cluster 2 5
25 Wanita Wiraswasta Sector 2 5
26 Wanita Professional Cluster 2 4
27 Wanita Wiraswasta Cluster 2 5
28 Wanita Ibu Rumah Tangga Cluster 2 1
29 Wanita Professional Cluster 2 4
30 Wanita Ibu Rumah Tangga Sector 2 1
31 Wanita Mahasiswa Cluster 2 2
32 Wanita Wiraswasta Sector 2 5
33 Wanita Mahasiswa Cluster 2 2
34 Wanita Wiraswasta Sector 2 5
35 Wanita Professional Sector 2 4
36 Wanita Wiraswasta Cluster 2 5
37 Wanita Professional Sector 2 4
38 Wanita Wiraswasta Sector 2 5
39 Wanita Professional Cluster 2 4
40 Wanita Pelajar Sector 2 3
41 Wanita Ibu Rumah Tangga Cluster 2 1
42 Wanita Wiraswasta Cluster 2 5
43 Wanita Professional Cluster 2 4
44 Wanita Wiraswasta Cluster 2 5
45 Wanita Professional Cluster 2 4
46 Wanita Wiraswasta Sector 2 5
47 Wanita Ibu Rumah Tangga Cluster 2 1
48 Wanita Wiraswasta Sector 2 5
49 Wanita Ibu Rumah Tangga Sector 2 1
50 Wanita Wiraswasta Sector 2 5
Tipe.Residen.1
1 2
2 1
3 1
4 1
5 1
6 1
7 2
8 1
9 2
10 1
11 2
12 2
13 1
14 1
15 1
16 1
17 1
18 1
19 1
20 2
21 1
22 1
23 1
24 1
25 2
26 1
27 1
28 1
29 1
30 2
31 1
32 2
33 1
34 2
35 2
36 1
37 2
38 2
39 1
40 2
41 1
42 1
43 1
44 1
45 1
46 2
47 1
48 2
49 2
50 2
Terlihat, teks Pria diubah menjadi angka 1,
Sector diubah menjadi angka 2,
Pelajar diubah menjadi angka 3, dan
seterusnya.
Setelah kamu bisa melakukan konversi ke angka, kita perlu mengetahui
bagaimana menggabungkan kembali data tersebut ke variabel asal kita. Ini
berguna terutam pada praktek lanjutan diakhir pembelajaran, yaitu ketika
kita akan mengenali data pelanggan baru masuk ke segmen mana. Untuk
menggabungkan data hasil konversi data.matrix() ke
AL.Pelanggan, kita gunakan funtion
data.frame().
Gabungkan variabel AL.Pelanggan dan
AL.Pelanggan.Matrix dengan fungsi data.frame()
dan masukkan kembali ke variable AL.Pelanggan.
Begini :
#Membaca data csv dan dimasukkan ke variable AL.Pelanggan
AL.Pelanggan <- read.csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt",sep="\t")
#membuat konversi data teks menjadi numerik
AL.Pelanggan.Matrix <- data.matrix(AL.Pelanggan[c("Jenis.Kelamin", "Profesi", "Tipe.Residen")])
#menggabungkan data
AL.Pelanggan <- data.frame(AL.Pelanggan, AL.Pelanggan.Matrix)
#menampilkan data hasil penggabungan
AL.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 variabel
AL.Pelanggan sudah ada nama kolom yang sama. Sebagai contoh
kolom Jenis.Kelamin yang terdapat pada
AL.Pelanggan.Matrix sudah ada juga di variabel
AL.Pelanggan. Jadi ketika digabungkan, R akan
menambahkan akhiran .1 untuk kolom
Jenis.Kelamin yang terdapat di
AL.Pelanggan.Matrix.
Kali ini kita perhatikan kolom NilaiBelanjaSetahun, isi datanya bernilai jutaan. Ketika kolom ini digunakan untuk clustering, perhitungan sum of squared errors 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.
Begini :
#melakukan normalisasi kolom NilaiBelanjaSetahun
AL.Pelanggan$NilaiBelanjaSetahun <- AL.Pelanggan$NilaiBelanjaSetahun / 1000000
#menampilkan data hasil normalisasi
AL.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, coba kita menampilkan data kolom Profesi dan Profesi.1.
Begini :
AL.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, Professional menjadi angka 4,
dst. 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 fungsi unique().
Begini :
unique(AL.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, 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.
Buatlah tiga variabel 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.
Begini :
#mengisi data master
Profesi <- unique(AL.Pelanggan[c("Profesi", "Profesi.1")])
Jenis.Kelamin <- unique(AL.Pelanggan[c("Jenis.Kelamin", "Jenis.Kelamin.1")])
Tipe.Residen <- unique(AL.Pelanggan[c("Tipe.Residen", "Tipe.Residen.1")])
#melihat hasil
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, kamu 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 preparation nya 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:
read.csv().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 pembelajaran kita.
K-means adalah algoritma yang membagi data menjadi sejumlah partisi dengan cara 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 fungsi bernama kmeans. Sepanjang bab ini, kita
akan menggunakan fugsi ini dan menganalisa output yang
dihasilkan.
Pembelajaran kali ini kita akan melakukan segmentasi langsung pada
data AL.Pelanggan yang telah kita lakukan persiapan datanya
pada bab sebelumnya dengan menggunakan fungsi k-means.
Fungsi k-means memerlukan minimal 2 parameter, yaitu:
Fungsi k-means ini biasanya disertai dengan pemanggilan
fungsi seet.seed(). Ini berguna agar kita menyeragamkan
daftar nilai acak yang sama dari k-means sehingga kita
mendapatkan output yang sama. Berikut adalah contoh penggunaan
fungsi kombinasi set.seed() dan kmeans():
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, parameter data dan jumlah segmen
saja tidak cukup. Perlu digunakan parameter ketiga yaitu
nstart, yang merupakan jumlah kombinasi acak yang
dihasilkan secara internal oleh R. Berdasarkan jumlah yang
diberikan, algoritma akan memilih mana yang terbaik
dari kombinasi-kombinasi tersebut.
Kata terbaik berarti jarak antara tiap titik ke mean dari cluster nya sendiri lebih kecil dibandingkan ke mean dari cluster lain.
Perlu untuk diingat bahwa mean atau nilai rata-rata di sini sering disebut juga dengan centroid pada berbagai literatur data science.
Berikut adalah modifikasi pemanggilan fungsi dengan parameter tambahan nstart sebesar 25.
kmeans(x=pelanggan[c("Umur","Profesi.1")], centers=3, nstart=25)
Sekarang kita akan membuat fungsi kmeans dengan ketentuan berikut: - x : berisi data pelanggan dengan field-field yang diambil dari vektor kolom.digunakan - centers : jumlah segmen / cluster yang kita inginkan. Isi dengan 5. - nstart : isi dengan angka 25
Begini :
#mempersiapkan data
AL.Pelanggan <- read.csv("https://storage.googleapis.com/dqlab-dataset/customer_segments.txt", sep="\t") #membuat variabel dataset
AL.Pelanggan.Matrix <- data.matrix(AL.Pelanggan[c("Jenis.Kelamin", "Profesi", "Tipe.Residen")]) #melakukan kategorisasi
Pelanggan <- data.frame(AL.Pelanggan, AL.Pelanggan.Matrix) #menggabungkan dataset
#membuat data master
Profesi <- unique(Pelanggan[c("Profesi", "Profesi.1")])
Jenis.Kelamin <- unique(Pelanggan[c("Jenis.Kelamin", "Jenis.Kelamin.1")])
Tipe.Profesi <- unique(Pelanggan[c("Tipe.Residen", "Tipe.Residen.1")])
#melakukan normalisasi
Pelanggan$NilaiBelanjaSetahun <- Pelanggan$NilaiBelanjaSetahun/1000000
#membuat parameter x(data yang digunakan)
kolom.digunakan = c("Jenis.Kelamin.1", "Umur", "Profesi.1", "Tipe.Residen.1","NilaiBelanjaSetahun")
#menggunakan K-Means
set.seed(100) #menyeragamkan nilai acak
#membuat fungsi kmeans untuk membentuk 5 cluster dengan 25 skenario pengacakan dan menyimpan dalam variabel Segmentasi
Segmentasi <- kmeans(x=Pelanggan[kolom.digunakan], centers=5, nstart=25)
#menamampilkan hasil k-means
SegmentasiK-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"
Hasil ini dapat dibagi dalam lima bagian, dengan penjelasan sebagai berikut:
K-means clustering with 5 clusters of sizes : ukuran /
jumlah titik data pada tiap clusterCluster means : nilai rata-rata (centroid)
dari tiap clusterClustering vector : pembagian cluster dari
tiap elemen data berdasarkan posisinyaWithin cluster sum of squares by cluster : jumlah jarak
kuadrat dari tiap titik ke centroid nyaAvailable components : komponen informasi lain yang
terkandung di dalam objek k-means iniClustering 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 1, yang artinya data pertama dari dataset kita akan dialokasikan pada nomor cluster 1. Dari output juga terlihat isi vector kedua bernlai 3, ini artinya data kedua dari dataset kita dialokasikan pada nomor cluster 3, 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
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 variabel
Pelanggan yang isinya dari Segmentasi$cluster.
Kemudian tampilkan struktur dari data Pelanggan dengan
perintah str().
Begini :
#menggabungkan hasil cluster
Segmentasi$cluster [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
#membuat kolom Cluster untuk menyimpan data cluster
Pelanggan$Cluster <- Segmentasi$cluster
#melihat tipe data
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 1 3 5 5 4 3 1 5 2 2 ...
Tahap berikutnya, Kita akan analisa hasil pada bagian pertama:
K-means clustering with 5 clusters of sizes 5, 12, 14, 9, 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 cluster nya adalah 1 dengan menggunakan fungsi
which().
Begini :
which(Pelanggan$Cluster == 1)[1] 1 7 13 14 18
Hasil di atas menunjukkan 5 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().
Begini :
length(which(Pelanggan$Cluster == 1))[1] 5
length(which(Pelanggan$Cluster == 4))[1] 9
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(). Kita akan coba melihat seluruh data pada
cluster ke-1.
Begini :
Pelanggan[which(Pelanggan$Cluster == 1),] 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 1
7 9.837260 1 5 2 1
13 9.333168 2 5 1 1
14 9.471615 1 5 1 1
18 5.340690 2 1 1 1
Ada 5 data dengan 3 orang berjenis kelamin pria dan 2 orang wanita. Umur pelanggan antara 55-65 tahun dan 4 orang diantaranya berprofesi sebagai wiraswasta. Kecuali yang berprofesi ibu rumah tangga, rata-rata nilai belanjanya sekitar 9 juta.
Silakan coba untuk melihat cluster sisanya.
Begini :
#melihat data cluster 2-5
Pelanggan[which(Pelanggan$Cluster == 2),] 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 2
10 2
16 2
17 2
19 2
23 2
25 2
27 2
36 2
42 2
43 2
49 2
Pelanggan[which(Pelanggan$Cluster == 3),] 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 3
6 3
15 3
20 3
31 3
33 3
34 3
37 3
39 3
40 3
41 3
44 3
45 3
46 3
Pelanggan[which(Pelanggan$Cluster == 4),] 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 4
21 4
24 4
28 4
30 4
32 4
35 4
38 4
48 4
Pelanggan[which(Pelanggan$Cluster == 5),] 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 5
4 5
8 5
11 5
12 5
22 5
26 5
29 5
47 5
50 5
Cluster means adalah hasil nilai rata-rata atau titik
sentral (centroid) dari seluruh titik tiap cluster.
Cobalah melihat hasil dari cluster means ini dengan langsung
mengakses variabel Segmentasi pada komponen
centers.
Beegini :
Segmentasi$centers 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
Apa artinya hasil tersebut?
Kolom pertama yang berisi angka 1 sampai dengan 5 adalah mewakili nomor cluster.
Kolom Jenis.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 3 dan 4 terlihat bahwa hanya ada angka 2, artinya cluster tersebut hanya berisi data dengan profil berjenis kelamin wanita. Nah, untuk cluster 1 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 ke-N.
Kolom Umur adalah representasi dari dataset awal tanpa mengalami konversi. Terlihat untuk cluster ke-3 umur rata-rata adalah 20 tahun, umur 42 tahun untuk cluster ke-4, dan seterusnya.
Kolom Profesi.1 menunjukkan nilai rata-rata data Profesi untuk tiap cluster yang telah dikonversi menjadi numerik, yaitu angka 1 s/d 5. Angka 1, 2, 3, 4, dan 5 di kolom ini masing-masingnya secara berurutan mewakili Ibu Rumah Tangga, Mahasiswa, Pelajar, Professional, dan Wiraswasta. Terlihat untuk seluruh cluster bahwa nilai profesi berada dalam rentang 3.5 s/d 4.2 (3.5 < profesi <= 4.2). Hal ini menunjukkan bahwa profesi cenderung ke ke Professional, dan secara tegas cluster keempat memiliki profesi berupa Professional.
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. 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. Cluster ke-1 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-1 saat ini hanya berisi 5 data. Cukup kecil proporsinya, dan ingin ditingkatkan.
Kita akan melakukan analisa berikutnya, yaitu nilai metrik sum of squares seperti terlihat berikut:
Within cluster sum of squares by cluster:
[1] 58.21123 174.85164 316.73367 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 centroid nya. 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 k-means 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. Kita akan membandingkan dengan 2 cluster k-means, masing-masing 2 dan 5.
Begini :
#Mmmbandingkan dengan 2 cluster kmeans, masing-masing 2 dan 5
set.seed(100)
kmeans(x=Pelanggan[kolom.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[kolom.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 adalah bagian kelima, yaitu sembilan komponen objek yang bisa kita gunakan untuk melihat detil dari objek k-means. Berikut adalah penjelasan singkat dari sembilan komponen tersebut.
Seluruh komponen tersebut bisa diakses dengan menggunakan aksesor
$. Contoh, dengan variabel k-means kita bernama
Segmentasi dan kita ingin mengakses komponen
withinss, cluster dan
tot.withinss.
Begini :
#mengakses available components
Segmentasi$withinss[1] 58.21123 174.85164 316.73367 171.67372 108.49735
Segmentasi$cluster [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
Segmentasi$tot.withinss[1] 829.9676
Pada bab ini kamu telah menyelesaikan penggunaan algoritma
K-Means dengan fungsi kmeans() dari
dataset yang telah dipersiapkan pada bab kedua. Fungsi
kmeans() sederhana digunakan tapi output nya
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 cluster nya sehingga menjadi bekal kita untuk menentukan jumlah cluster yang optimal.
Dari informasi yang dihasilkan oleh fungsi k-means, metrik 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 k-means. Metrik ini
akan dicari progresif nilai tot.withinss untuk tiap
kombinasi jumlah cluster, dan disimpan dalam bentuk vektor di
R. Untuk keperluan ini, kita akan gunakan
sapply(). Fungsi sapply() akan digunakan untuk
memanggil fungsi 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:
Mari kita coba perintah di Atas.
Begini :
#simulasi
set.seed(100)
SSE <- sapply(1:10,
function(param_k)
{
kmeans(Pelanggan[kolom.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 vektor Sum of Squares (SS)
atau Sum of Squared Errors (SSE) yang telah kita hasilkan
sebelumnya. Kita akan gunakan ggplot untuk visualisasi.
Dataset berupa penggabungan data frame dari
SSE dan range nilai 1:10.
Begini :
#set library yang digunakan
library("ggplot2")
#membuat grafik elbow effect
cluster.max <- 10
ssdata = data.frame(cluster=c(1: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:cluster.max))
Terlihat jika jumlah cluster optimal yang bisa kita gunakan
adalah 5, dan ini menjadi keputusan kita sebagai jumlah segmentasi
pelanggan.
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.
Tahap berikutnya adalah mempaketkan objek k-means ini dan semua informasi yang berkaitan sehingga dapat digunakan untuk operasional.
Kita telah berhasil mempersiapkan data, menggunakan algoritma k-means, dan akhirnya bisa memutuskan jumlah cluster terbaik. Tahapan berikutnya adalah memaketkan atau membungkus seluruh referensi hasil konversi dan objek k-means ini supaya bisa digunakan untuk mengolah data baru dan berguna di bisnis. Untuk ini tahapannya adalah sebagai berikut:
Segmen.Pelanggan.Segmen.Pelanggan,
Profesi, Jenis.Kelamin,
Tipe.Residen, dan Segmentasi ke dalam satu
objek bertipe list ke dalam variabel
Identitas.Cluster.Identitas.Cluster dalam bentuk
file sehingga dapat digunakan kemudian, ini bisa disebut model
bagi kita.Pada praktek kali ini kita akan menamakan segmen sesuai dengan karakteristiknya. Mari kita coba namakan cluster 1 s/d 5 sebagai berikut:
Buatlah satu variabel data frame bernama
Segmen.Pelanggan yang terdiri dari dua kolom:
Begini :
#membuat variabel dengan dua vektor bernama cluster dan Nama.Segmen
Segmen.Pelanggan <- data.frame(cluster = c(1, 2, 3, 4, 5),
Nama.Segmen = c("Diamond Senior Member",
"Gold Young Professional",
"Silver Youth Gals",
"Diamond Professional",
"Silver Mid Professional"))Sejauh ini kita telah mempelajari pembentukan aset-aset data sebagai berikut:
Akan sangat baik jika semuanya digabungkan di satu variabel dengan tipe list, dan ini akan jadi model kita yang dapat disimpan ke dalam file dan digunakan ketika diperlukan.
Begini :
#menggabungkan seluruh aset ke dalam variabel Identitas.Cluster
Identitas.Cluster <- list(Profesi=Profesi, Jenis.Kelamin=Jenis.Kelamin, Tipe.Residen=Tipe.Residen, Segmentasi=Segmentasi, Segmen.Pelanggan=Segmen.Pelanggan, kolom.digunakan=kolom.digunakan)
#menampilkan hasil
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 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"
$Segmen.Pelanggan
cluster Nama.Segmen
1 1 Diamond Senior Member
2 2 Gold Young Professional
3 3 Silver Youth Gals
4 4 Diamond Professional
5 5 Silver Mid Professional
$kolom.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
fungsi saveRDS(). File ini kemudian dapat dibuka
kembali sebagai objek kedepannya. Kita akan menyimpan objek
Identitas.Cluster ke dalam file bernama
cluster.rds.
Begini :
#menympan ke dalam file
saveRDS(Identitas.Cluster, "cluster.rds")Pada penutup bab ini, kamu 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 k-means, variabel referensi hasil konversi teks ke numerik, dan juga penamaan cluster. Bab berikutnya kita akan mengoperasionalkan objek ini.
Apa yang dimaksud dengan mengoperasionalkan seperti judul pada bab ini? Ini artinya objek hasil pengolahan algoritma K-Means dan variabel-variabel 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 pembelajaran kali ini, kita akan membuat data.frame dengan satu data dimana nama-nama kolomnya persis dengan dataset awal.
Begini :
#membuat data baru
data.baru <- data.frame(Customer_ID="CUST-100", Nama.Pelanggan="Darlin Valentine", Umur=20, Jenis.Kelamin="Wanita", Profesi="Pelajar", Tipe.Residen="Cluster", NilaiBelanjaSetahun=3.5)
#melihat hasil
data.baru Customer_ID Nama.Pelanggan Umur Jenis.Kelamin Profesi Tipe.Residen
1 CUST-100 Darlin Valentine 20 Wanita Pelajar Cluster
NilaiBelanjaSetahun
1 3.5
Kita akan 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 fungsi readRDS().
Begini :
#membuka file sebelumnya
Identitas.Cluster <- readRDS(file="cluster.rds")
#melihat hasil
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 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"
$Segmen.Pelanggan
cluster Nama.Segmen
1 1 Diamond Senior Member
2 2 Gold Young Professional
3 3 Silver Youth Gals
4 4 Diamond Professional
5 5 Silver Mid Professional
$kolom.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 kolom Jenis.Kelamin,
Profesi dan Tipe.Residen. Tujuannya
adalah kita akan bisa mencari segmen pelanggannya dengan data numerik
hasil penggabungan. Cara menggabungkannya adalah dengan menggunakan
fungsi merge(), dimana kedua data akan digabungkan dengan
mencari persamaan nama kolom dan isinya. Sebagai contoh, perintah
berikut akan menggabungkan variabel data.baru dengan
variabel Identitas.Cluster$Profesi.
merge(data.baru, Identitas.Cluster$Profesi) Profesi Customer_ID Nama.Pelanggan Umur Jenis.Kelamin Tipe.Residen
1 Pelajar CUST-100 Darlin Valentine 20 Wanita Cluster
NilaiBelanjaSetahun Profesi.1
1 3.5 3
Maka prosesnya akan terlihat sebagai berikut: - Variabel
data.baru dengan Identitas.Cluster$Profesi
memiliki nama kolom yang sama, yaitu Profesi. - Kolom
Profesi kemudian akan dijadikan kunci untuk
menggabungkan kedua variabel ini. - Ternyata isi
Profesi dari data.baru, 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.
Perhatikan kalau kolom kunci, yaitu Profesi digeser ke depan, dan sisanya adalah kolom-kolom dari kedua variabel.
Kita akan menggabungkan Profesi,
Jenis.Kelamin dan Tipe.Residen yang
ada di data.baru dengan Identitas.Cluster.
Begini :
#memasukkan perintah untuk penggabungan data
data.baru <- merge(data.baru, Identitas.Cluster$Profesi)
data.baru <- merge(data.baru, Identitas.Cluster$Jenis.Kelamin)
data.baru <- merge(data.baru, Identitas.Cluster$Tipe.Residen)
#melihat hasil
data.baru Tipe.Residen Jenis.Kelamin Profesi Customer_ID Nama.Pelanggan Umur
1 Cluster Wanita Pelajar CUST-100 Darlin Valentine 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:
Untuk saat ini agar tidak membuang waktu, kita coba terapkan secara
praktis perintah untuk menentukan cluster seperti pada contoh
di atas. Ketika berhasil menjalankan kode di atas, hasil akhir adalah
tampilan nomor cluster yang isinya 3. 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(...),]
Begini :
#membuat data baru
data.baru <- data.frame(Customer_ID="CUST-100", Nama.Pelanggan="Darlin Valentine", Umur=20, Jenis.Kelamin="Wanita", Profesi="Pelajar", Tipe.Residen="Cluster", NilaiBelanjaSetahun=3.5)
Identitas.Cluster <- readRDS(file="cluster.rds")
data.baru <- merge(data.baru, Identitas.Cluster$Profesi)
data.baru <- merge(data.baru, Identitas.Cluster$Jenis.Kelamin)
data.baru <- merge(data.baru, Identitas.Cluster$Tipe.Residen)
#menentukan data baru di cluster mana
Identitas.Cluster$Segmen.Pelanggan[which.min(sapply( 1:5, function( x ) sum( ( data.baru[Identitas.Cluster$kolom.digunakan] - Identitas.Cluster$Segmentasi$centers[x,])^2 ) )),] cluster Nama.Segmen
3 3 Silver Youth Gals
Pembelajaran terakhir menunjukkan bagaimana data pelanggan baru dianalisa oleh model kita dan mengeluarkan nomor cluster atau segmen. Dengan berakhirnya pembelajaran ini, berarti menunjukkan kita sudah menjalani siklus tahap demi tahap memodelkan dan menggunakan customer segmentation terhadap data kita.
Selamat, kamu 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.
Apa tujuan utama Customer Segmentation bagi bisnis ?
Pilihan
Apa alasan paling kuat kenapa kita akhirnya harus menggunakan algoritma komputer untuk membantu proses Customer Segmentation ?
Pilihan