Panduan Segmentasi Pelanggan dengan R
Panduan Segmentasi Pelanggan dengan R
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.
Pelajari contoh dataset dalam course, karena walaupun kecil tapi mencerminkan
Kerjakan soal dan praktek sesuai dengan irama yang Anda rasa nyaman
Submit soal sesuai dengan permintaan soal
Tekan hint jika Anda merasa kesulitan
Ikut serta dan menyelesaikan project karena memiliki tingkat kompleksitas yang lebih tinggi dan
mencerminkan kasus riil
Kesimpulan
Customer segmentation adalah proses penting yang diperlukan di bisnis untuk mengenal customer
dengan lebih baik
Dengan demikian proses bisnis di marketing (pemasaran) dan CRM (customer relationship
management) bisa dilakukan lebih tajam. Contoh: pesan marketing bisa lebih personal untuk setiap
segment dengan biaya lebih optimal.
Dengan proses yang lebih tajam, performa bisnis berpotensi tinggi menjadi lebih baik juga.
Untuk menemukan segmentasi yang baik, perlu proses analisa data dari profile customer yang cukup
banyak dan rutin. Ini bisa dibantu dengan algoritma komputer.
Pengantar
Persiapan data adalah langkah pertama yang kita lakukan sebelum menggunakan algoritma apapun
untuk melakukan analisa data.
Ini dikarenakan tiap implementasi algoritma menuntut struktur dan tipe data yang berbeda.
Dan untuk kasus algoritma K-Means yang akan kita gunakan untuk otomatisasi clustering, maka
struktur datanya adalah [Link] 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:
Mengenal Contoh File Dataset Pelanggan
Membaca File dengan [Link]
Vector untuk Menyimpan Nama Field
Konversi Data dengan [Link]
Menggabungkan Hasil Konversi
Menormalisasikan Nilai Belanja
Membuat Data Master
Customer ID: Kode pelanggan dengan format campuran teks CUST- diikuti angka
Nama Pelanggan: Nama dari pelanggan dengan format teks tentunya
Jenis Kelamin: Jenis kelamin dari pelanggan, hanya terdapat dua isi data kategori
yaitu Pria dan Wanita
Umur: Umur dari pelanggan dalam format angka
Profesi: Profesi dari pelanggan, juga bertipe teks kategori yang terdiri dari
Wiraswasta, Pelajar, Professional, Ibu Rumah Tangga, dan Mahasiswa.
Tipe Residen: Tipe tempat tinggal dari pelanggan kita, untuk dataset ini hanya ada
dua kategori: Cluster dan Sector.
NilaiBelanjaSetahun: Merupakan jumlah uang yang dibelanjakan dalam setahun.
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.
Mari kita praktekkan penggunaan [Link] ini dengan mengetikkan perintah berikut
pada code editor.
pelanggan <-
[Link]("[Link]
sep="\t")
Keterangan code:
pelanggan: nama variable yang digunakan untuk menampung data dari contoh
dataset
csv: function yang digunakan untuk membaca contoh dataset yang berupa file
[Link] lokasi
dataset yang terdapat di web DQLab. Jika lokasi file dan aplikasi R terdapat di
komputer lokal Anda, maka gantilah dengan lokasi file di lokal. Misalkan c:\data\
customer_segments.txt
Jika terjadi error berikut, maka periksa kembali penulisan code – huruf besar, huruf
kecil dan juga penulisan lokasi file – dengan teliti.
pelanggan
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 [Link]. Sebagai contoh, "Nama Pelanggan" diubah
menjadi "[Link]".
Jika kita hanya ingin menampilkan beberapa kolom tertentu, misalkan untuk kolom
"[Link]" dan "Profesi" maka perintahnya adalah sebagai berikut.
pelanggan[c("[Link]","Profesi")]
Praktek:
Lengkapi code pada code editor untuk menampilkan data frame dari kolom dari
"[Link]", "Umur", "Profesi" dan "[Link]".
Vector untuk Menyimpan Nama Field
Perhatikan jika nama-nama field yang telah kita gunakan pada praktek sebelumnya, sebenarnya
adalah sebuah vector
Tugas Praktek
Gantilah tulisan [jawaban1] pada code editor dengan variable vector bernama field_yang_digunakan
dan diisi dengan 3 teks: "[Link]", "Umur" dan "Profesi" .
Kemudian tampilkan isi variable pelanggan dengan field_yang_digunakan dengan code yang akan
menggantikan [jawaban2] pada code editor.
Konversi Data dengan [Link]
Seperti telah dijelaskan sebelumnya, isi data dari tiga kolom pelanggan yaitu "[Link]",
"Profesi" dan "[Link]" 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 [Link].
[Link](pelanggan[c("[Link]", "Profesi")])
Perintah ini akan mengkonversi data pelanggan pada kolom "[Link]" dan "Profesi" yang
diwakili oleh pelanggan[c("[Link]", "Profesi")] menjadi numerik.
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 "[Link]", "Profesi", dan "[Link]".
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 [Link] ke pelanggan, kita gunakan funtion
[Link].
Sebagai contoh, untuk menggabungkan variable pelanggan dan pelanggan_matrix maka perintahnya
adalah sebagai berikut.
[Link](pelanggan, pelanggan_matrix)
Tugas Praktek
Gabungkan variable pelanggan dan pelanggan_matrix dengan function [Link] dan masukkan
kembali ke variable pelanggan.
Catatan: Jika berhasil, maka isi penggabungan ini akan menambahkan kolom bernama
"[Link].1", "Profesi.1", dan "[Link].1" yang sebelumnya tidak ada pada kedua variable
seperti berikut.
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
…
…
Akhiran .1 ini ditambahkan karena di variable pelanggan sudah ada nama kolom yang sama.
Sebagai contoh kolom "[Link]" yang terdapat pada pelanggan_matrix sudah ada juga di
variable pelanggan. Jadi ketika digabungkan, R akan menambahkan akhiran .1 untuk kolom
"[Link]" yang terdapat di pelanggan_matrix.
Normalisasi bisa dilakukan dengan banyak cara. Untuk kasus kita, cukup dengan pembagian sehingga
nilai jutaan menjadi puluhan.
Tugas Praktek
Isilah kolom NilaiBelanjaSetahun dengan nilai dari kolom itu sendiri dibagi dengan 1000000.
Sebagai contoh, jika kita menampilkan data kolom "Profesi" dan "Profesi.1" dengan perintah berikut.
pelanggan[c("Profesi","Profesi.1")]
maka sebagian hasilnya akan tampil sebagai berikut.
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
...
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.
unique(pelanggan[c("Profesi","Profesi.1")])
Hasilnya akan tampak sebagai berikut.
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, [Link] dan [Link] yang isinya berisi daftar
unik dari pasangan kolom "Profesi" dan "Profesi.1", "[Link]" dan "[Link].1",
"[Link]" dan "[Link].1".
Kesimpulan
Selamat, Anda sudah menjalankan praktek-praktek yang menjadi dasar dari semua hal sebelum
penggunaan analisa data, yaitu tahap persiapan data atau data preparation.
Untuk algoritma clustering k-means yang akan kita gunakan di R, maka tahap data preparationnya
adalah menyiapkan data yang di dalamnya harus berisi numerik.
Namun pada banyak kasus riil, data tidak sepenuhnya berisi numerik seperti telah kita lihat sendiri
dan praktekkan dengan contoh dataset yang digunakan pada bab ini dengan langkah-langkah berikut:
Mengenal Contoh File Dataset Pelanggan, dimana kita mengerti dulu bagaimana bentuk dan isi dari
contoh yang digunakan.
Membaca File dengan [Link], dimana kita membaca suatu file teks dengan pemisah berupa tab
menggunakan fungsi [Link].
Vector untuk Menyimpan Nama Field, dimana nama-nama field bisa disimpan dalam bentuk vector
sehingga bisa digunakan berulang ketika kita buturh referensi nama-nama field yang sama.
Konversi Data dengan [Link], dimana kita bisa melakukan konversi data dari kategori teks
menjadi numerik.
Menggabungkan Hasil Konversi, dimana hasil konversi ini perlu kita gabungkan kembali ke variable
asal agar kita tidak kehilangan referensinya.
Menormalisasikan Nilai Belanja, dimana kita merubah skala data nilai belanja dari jutaan menjadi
puluhan dengan tujuan penyederhanaan perhitungan namun tidak mengurangi akurasi.
Membuat Data Master, dimana kita meringkas data kategori dan numerik ke dalam variable-variable
yang kita sebut sebagai data master.
Pengelompokan manusia berdasarkan umur: bayi, balita, anak, remaja, dewasa, tua.
Pengelompokan customer berdasarkan daya belinya: regular dan premium.
Pengelompokan makanan berdasarkan kandungan gizinya: biji-bijian, sayuran, buah-buahan, minyak,
protein, dan lain-lain.
Banyak algoritma telah dikembangkan untuk melakukan clustering secara otomatis, salah satu yang
sangat populer adalah K-Means yang akan menjadi fokus utama course kita.
K-means adalah algoritma yang membagi data menjadi sejumlah partisi dengan cara sederhana:
mencari kedekatan dari tiap titik pada suatu cluster dengan sejumlah nilai rata-rata atau mean.
Ada dua konsep kunci yang juga menjadi nama asal k-means:
Fungsi kmeans
Praktek kali ini kita akan melakukan segmentasi langsung pada data pelanggan – yang telah kita
lakukan persiapan datanya pada bab sebelumnya – dengan menggunakan function kmeans.
x: data yang digunakan, dimana semua isi datanya harus berupa numerik.
centers: jumlah cluster yang diinginkan.
Dan fungsi kmeans ini biasanya disertai dengan pemanggilan function [Link]. Ini berguna agar kita
"menyeragamkan" daftar nilai acak yang sama dari kmeans sehingga kita mendapatkan output yang
sama.
[Link](1)
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, 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 clusternya 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.
Tugas Praktek
Code editor telah dilengkapi dengan potongan code untuk data preparation, dan kita perlu
melengkapi […] dengan fungsi kmeans.
Sesuai contoh pada Lesson, lengkapi fungsi kmeans tersebut dengan:
x: berisi data pelanggan dengan field-field yang diambil dari vector field_yang_digunakan (sudah
didefinisikan di potongan code)
centers: jumlah segmen / cluster yang kita inginkan. Isi dengan 5.
nstart: isi dengan angka 25
Ketika dieksekusi dengan lancar, Anda harusnya mendapatkan hasil seperti gambar di bawah ini.
Hasil ini dapat dibagi dalam lima bagian, dengan penjelasan sesuai nomor urut pada
gambar sebagai berikut:
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
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
which(pelanggan$cluster == 1)
Anda seharusnya dapatkan hasil sebagai berikut:
[1] 2 6 15 20 31 33 34 37 39 40 41 44 45 46
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.
length(which(pelanggan$cluster == 1))
Jika dijalankan maka akan didapatkan angka 14.
Tugas
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),] Jika berhasil dieksekusinya, hasilnya akan terlihat sebagai
berikut.
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.
pelanggan[which(pelanggan$cluster == 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.
Tugas Praktek
Gantilah bagian […] dengan tiga perintah untuk melihat cluster nomor 3 sampai
dengan 5.
pelanggan[which(pelanggan$cluster == 3 | pelanggan$cluster == 4 |
pelanggan$cluster == 5),]
Analisa Hasil Cluster Means
Cluster means adalah hasil nilai rata-rata atau titik sentral (centroid) dari seluruh titik tiap cluster.
Kolom pertama yang berisi angka 1 sampai dengan 5 adalah mewakili nomor cluster.
Kolom Kelamin.1 menunjukkan nilai rata-rata dari data jenis kelamin yang telah
dikonversi menjadi numerik, dengan angka 1 mewakili Pria dan angka 2 mewakili
wanita.
Pada cluster 1 terlihat bahwa hanya ada angka 2, artinya cluster 1 hanya berisi data
dengan profil berjenis kelamin wanita. Nah, untuk cluster ke-2 berupa angka 1.40
artinya data bersifat campuran namun cenderung ke Pria (1).
Kedua interpretasi angka ini sesuai dengan hasil praktek "Melihat Data pada Cluster-
N".
Kolom Umur adalah representasi dari dataset awal tanpa mengalami konversi.
Terlihat untuk cluster ke-1 umur rata-rata adalah 20 tahun, umur 61 tahun untuk
cluster ke-2, dan seterusnya.
Kolom Profesi.1 menunjukkan nilai rata-rata data Profesi untuk tiap cluster yang
telah dikonversi menjadi numerik, yaitu angka 1 s/d 5.
Untuk seluruh cluster, terlihat data cukup tersebar antara Sector dan Cluster
terutama untuk cluster ke-4 dimana nilai kolom ini di angka 1.555.
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:
Tugas Praktek
Cobalah melihat hasil dari cluster means ini dengan langsung mengakses variable
segmentasi pada komponen centers.
Analisa Hasil Sum of Squares
Yang akan kita analisa berikutnya adalah bagian keempat, yaitu nilai metrik sum of squares seperti
terlihat berikut ini.
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:
Nilai 316.73367 adalah SS untuk cluster ke-1, 58.21123 adalah SS untuk cluste ke-2, dan seterusnya.
Semakin kecil nilainya berpotensi semakin baik.
total_SS: adalah SS untuk seluruh titik terhadap nilai rata-rata global, bukan untuk per cluster. Nilai ini
selalu tetap dan tidak terpengaruh dengan jumlah cluster.
between_SS: adalah total_SS dikurangi dengan jumlah nilai SS seluruh cluster.
(between_SS / total_SS) adalah rasio antara between_SS dibagi dengan total_SS. Semakin besar
persentasenya, ummnya semakin baik.
Ini adalah metrik yang bisa kita gunakan untuk menjawab seberapa baik jumlah cluster yang kita
bentuk? Apakah dibagi 2, 5, 10 atau 30?
Teknik penggunaan metrik ini cukup panjang, namun untuk kepentingan praktis kali ini kita hanya
melihat perbedaan nilai ini dengan contoh.
Tugas Praktek
[Link](1)
kmeans(x=pelanggan[field_yang_digunakan], centers=2, nstart=25)
[Link](1)
kmeans(x=pelanggan[field_yang_digunakan], centers=5, nstart=25)
Jika berjalan dengan baik, bandingkan hasil antara kedua cluster tersebut. Anda harusnya dapat
membandingkan hasil. Gambar akan membantu.
Terlihat untuk 2 cluster (k=2), SS per cluster lebih besar dibandingkan jika data dibagi
menjadi 5 cluster (k=5). Perhatikan juga persentase rasio antara between_SS dan
total_SS, dimana k=5 juga lebih besar.
Available Components
Analisa terakhir kita dari code adalah bagian kelimat, yaitu sembilan komponen objek yang bisa kita
gunakan untuk lihat detil dari objek k-means.
segmentasi$withinssr
Jika dieksekusi maka Anda akan mendapatkan hasil berikut.
Tugas Praktek
Ganti […] dengan 2 perintah untuk mengambil komponen cluster dan [Link] dari variable
segmentasi.
Kesimpulan
Pada bab ini Anda telah menyelesaikan penggunaan algoritma K-Means dengan function kmeans dari
dataset yang telah dipersiapkan pada bab kedua.
Function kmeans sederhana digunakan tapi outputnya memiliki informasi yang kaya yaitu:
Pengantar
Dari informasi yang dihasilkan oleh function kmeans, metrick Sum of Squares (SS)
atau sering disebut Sum of Squared Errors (SSE) sangat penting untuk dijadikan dasar
kita menentukan jumlah cluster yang paling optimal.
Secara teoritis, berikut adalah beberapa hal yang bisa kita amati dengan SS:
Semakin sedikit jumlah cluster yang dihasilkan maka semakin besar nilai SS.
Begitu juga sebaliknya, semakin banyak jumlah cluster yang dihasilkan maka semakin
kecil nilai SS nya.
Karena sifatnya kuadratik, jika terdapat perbedaan yang cukup signifikan antara tiap
kombinasi cluster maka perbedaan nilai SS akan semakin besar.
Dan seiring bertambahnya jumlah cluster, perbedaan tiap SS ini akan semakin kecil.
Jika dimasukkan ke dalam grafik garis, maka plotting dari total SS untuk tiap cluster
berbentuk sebagai berikut.
Titik paling kiri adalah jumlah SS untuk 1 jumlah cluster, titik kedua adalah untuk 2
jumlah cluster, dan [Link] 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 ini akan dicari progressive nilai [Link] 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.
Tugas Praktek
Gantilah […] pada 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.
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 = [Link](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
Dan jika berhasil dieksekusi, maka akan muncul grafik berbentuk siku seperti berikut.
Terlihat jika jumlah cluster optimal yang bisa kita gunakan adalah 5, dan ini menjadi
keputusan kita sebagai jumlah segmentasi pelanggan.
Kesimpulan
Dengan memanfaatkan nilai Sum of Squares (SS) atau Sum of Squared Errors (SSE) kita bisa
mengambil keputusan jumlah segmentasi optimal yang kita gunakan.
Ini dilakukan dengan membuat simulasi iterasi jumlah cluster dari 1 sampai dengan jumlah maksimum
yang kita inginkan. Pada contoh di bab ini, kita gunakan angka iterasi 1 sampai dengan 10.
Setelah mendapatkan nilai SS dari tiap jumlah cluster, kita bisa plotting ke grafik garis dan
menggunakan elbow method untuk menentukan jumlah cluster optimal.
Tahap berikutnya adalah mempaketkan objek kmeans ini dan semua informasi yang berkaitan
sehingga dapat digunakan untuk operasional.
Pengantar
Setelah berhasil mempersiapkan data, menggunakan algoritma kmeans, dan akhirnya bisa
memutuskan jumlah cluster terbaik.
Maka tahapan berikutnya adalah "memaketkan" atau "membungkus" seluruh referensi hasil konversi
dan objek kmeans ini supaya bisa digunakan untuk mengolah data baru dan berguna di bisnis.
Menamakan cluster dengan karakteristik yang lebih mudah dimengerti. Penamaan ini kita simpan
dalam variable [Link].
Menggabungkan variable Segmen. Pelanggan, Profesi, [Link], [Link], dan Segmentasi ke
dalam satu objek bertipe list ke dalam variable [Link].
Menyimpan objek [Link] dalam bentuk file sehingga dapat digunakan kemudian, ini bisa
disebut model bagi kita
Menamakan Segmen
Pada praktek kali ini kita akan menamakan segmen sesuai dengan karakteristiknya. Untuk membantu,
gambar berikut menunjukkan nilai mean tiap kolom yang digunakan tiap cluster dan juga nilai kolom
sebelum konversi.
Cluster 1 : Silver Youth Gals: alasannya adalah karena umurnya rata-rata adalah 20,
wanita semua, profesinya bercampur antar pelajar dan professional serta
pembelanjaan sekitar 6 juta.
Cluster 2 : Diamond Senior Member: alasannya adalah karena umurnya rata-rata
adalah 61 tahun dan pembelanjaan di atas 8 juta.
Cluster 3 : Gold Young Professional: alasannya adalah karena umurnya rata-rata
adalah 31 tahun, professional dan pembelanjaan cukup besar.
Cluster 4 : Diamond Profesional: alasannya adalah karena umurnya rata-rata adalah
42 tahun, pembelanjaan paling tinggi dan semuanya professional.
Cluster 5 : Silver Mid Professional: alasannya adalah karena umurnya rata-rata
adalah 52 tahun dan pembelanjaan sekitar 6 juta.
Kita akan masukkan ini sebagai named vector pada praktek berikut.
Tugas Praktek
Buatlah satu variable data frame bernama [Link] yang terdiri dari dua
kolom:
Menggabungkan Referensi
Sejauh ini kita telah mempelajari pembentukan aset-aset data sebagai berikut:
Dataset pelanggan yang telah "diperkaya" dengan tambahan kolom hasil konversi teks menjadi
numerik, dan menormalisasikan field NilaiBelanjaSetahun.
Objek kmeans dengan k=5, dipilih berdasarkan metodologi menggunakan metrik Sum of Squares (SS).
Membuat variable referensi atau pemetaan numerik dan teks asli (kategori) dari kolom Jenis Kelamin,
Profesi dan Tipe Residen.
Variable [Link] dengan nama Pelanggan yang berisi penamaan cluster sesuai analisa karakteristik
dari centroid kolom-kolom pelanggan yang digunakan.
Vector dari field yang digunakan.
Akan sangat baik jika semuanya digabungkan di satu variable dengan tipe list, dan ini akan jadi model
kita yang dapat disimpan ke dalam file dan digunakan ketika diperlukan.
Pada tugas berikut, kita akan namakan list ini dengan [Link]. Perintahnya adalah sebagai
berikut:
Buatlah variable [Link] dengan mengganti bagian […] ini dengan perintah seperti pada
contoh di atas, kemudian isinya.
Menyimpan Objek dalam Bentuk File
Objek yang sudah digabungkan pada praktek sebelumnya sudah memiliki semua aset yang diperlukan
untuk mengalokasikan data baru ke segmen yang sesuai.
Untuk menyimpan objek ini ke dalam file kita gunakan function saveRDS. File ini kemudian dapat
dibuka kembali sebagai objek ke depannya.
Sebagai contoh, perintah untuk menyimpan objek [Link] ke file [Link] adalah sebagai
berikut.
saveRDS([Link],"[Link]")
Kita akan menjalankan perintah ini pada tugas berikut.
Tugas Praktek
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.
Pengantar
Apa yang dimaksud dengan mengoperasionalkan seperti judul pada bab ini?
Ini artinya objek hasil pengolahan algoritma K-Means dan variable-variable terkait yang kita hasilkan
sebelumnya harus dapat digunakan ke kasus riil sehingga satu siklus lengkap terjadi.
Kasus riil untuk clustering kita adalah cukup sederhana: bagaimana data baru dapat otomatis
membantu tim marketing dan CRM untuk mengidentifikasi segmen mana pelanggan tersebut berada
dengan cepat.
Dengan kecepatan identifikasi, maka organisasi atau bisnis dapat dengan cepat bergerak dengan
pesan marketing yang efektif dan memenangkan persaingan.
Data Baru
Pada teks sebelumnya, disebutkan data pelanggan baru harus cepat dipetakan ke segmen.
Dengan asumsi tiap data pelanggan baru diinput ke dalam sistem, maka pengolahan adalah per
record. Pada praktek kali ini, kita akan membuat [Link] dengan satu data dimana nama-nama
kolomnya persis dengan dataset awal.
Tugas Praktek
Ketik perintah kedua perintah berikut pada code editor, masing-masing mengisi [Link] dan
menampilkannya.
databaru <- [Link](Customer_ID="CUST-100", [Link]="Rudi
Wilamar",Umur=20,[Link]="Wanita",Profesi="Pelajar",[Link]="Cluster",NilaiBelanjaSeta
hun=3.5)
databaru
Perintahnya sangat sederhana, berikut adalah contoh untuk membuka file [Link] yang telah kita
simpan sebelumnya.
readRDS(file="[Link]")
Lakukan tugas berikut untuk membaca dan menampilkan objek dari [Link].
Tugas Praktek
Baca objek dari file [Link] dengan menggunakan function readRDS, dan simpan sebagai variable
dengan nama [Link]. Setelah itu, tampilkan isi dari [Link].
Jika eksekusi berhasil, maka hasil yang muncul adalah sebagai berikut.
Merge dengan Data Referensi
Dengan adanya data baru dan objek yang berisi data referensi telah dibaca kembali, kita bisa
menggabungkan data baru ini untuk mendapatkan konversi numerik dari field [Link], Profesi
dan [Link].
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
[Link]$Profesi.
merge(databaru, [Link]$Profesi)
Maka prosesnya akan terlihat sebagai berikut.
Perhatikan kalau kolom kunci, yaitu Profesi digeser ke depan. Dan sisanya adalah
kolom-kolom dari kedua variable.
Tugas Praktek
Jika eksekusi berjalan dengan lancar, hasil akhir akan terlihat sebagai berikut.
Menentukan Cluster
Kini saatnya penentuan untuk melakukan praktek terpenting bagi bisnis: data baru ini masuk ke
segmen mana?
Gampang!
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 [Link](…) sebagai index pada referensi nama cluster
([Link]) sehingga tampilan tidak mengeluarkan nomor cluster, tetapi nama cluster.
Petunjuk:
Index yang menggunakan [Link](…) sebagai index harus mengikuti format berikut. Perhatikan
koma di penutup kurung siku.
[Link]$[Link][[Link](…),]
Kesimpulan
Praktek terakhir menunjukkan bagaimana data pelanggan baru dianalisa oleh model kita dan
mengeluarkan nomor cluster atau segmen.
Dengan berakhirnya praktek ini, berarti menunjukkan kita sudah menjalani siklus tahap demi tahap
memodelkan dan menggunakan customer segmentation terhadap data kita.
MODULE 9
Pengantar Kasus
Namaku Sunyi, aku saat ini merupakan seorang data scientist yang baru bekerja di DQ-Dent, salah
satu klinik kesehatan gigi. Saat ini DQ-Dent sedang mempersiapkan program penyuluhan kesehatan
gigi dan topik yang akan disampaikan oleh DQ-Dent adalah menjaga kesehatan gigi.
Kroma melihat bahwa kunjungan anak-anak ke DQ-Dent belakangan ini cukup meningkat, dan
beranggapan bahwa hal ini berkaitan dengan pola konsumsi di sekitar daerah mereka. Asumsi Kroma
ini semua dapat terjadi karena konsumsi terhadap permen cukup tinggi. Namun, Kroma belum dapat
mengambil keputusan dari asumsinya, dan akan melakukan uji hipotesis terlebih dahulu.
“Hai Sunyi, kamu tahu kan kalau kita akan mengadakan penyuluhan kesehatan gigi. Aku melihat
bahwa kunjungan pasien anak-anak ke DQ-Dent belakangan ini meningkat. Sepertinya aku butuh
bantuanmu untuk melakukan analisis terhadap data kunjungan ke klinik ini” ucap Kroma kepadaku.
“Halo Kroma, ya tentu saja! Aku sudah mengetahui program penyuluhan ini. Terkait analisis yang
kamu minta, apakah kamu dapat menjelaskan kebutuhan analisis datanya?" balasku.
“Aku ingin mengetahui apakah terdapat hubungan antara kunjungan ke DQ-Dent dengan perilaku
konsumsi masyarakat. Aku sudah mendapatkan datanya dan akan mengirimkan dataset dan informasi
yang lebih jelas lagi tentang analisis ini lewat email. Tapi untuk sementara, kamu bisa fokus untuk
mencari hubungan antara kunjungan ke rumah sakit dengan penjualan permen,” Kroma memberikan
instruksi kepadaku.
“Baik, siap! Aku tunggu datanya ya,” jawabku sambil mulai mempersiapkan laptopku untuk
mengerjakan tugas dari Kroma.
Ketika ada tanda email baru masuk ke inbox ku, aku segera membuka email dari Kroma. Setelah
mempelajari datanya, aku dapat memanfaatkan model regresi dalam analisis dan akan
menerapkannya pada tugas ini.
Permasalahan ini dapat diselesaikan dengan model regresi. Aku kembali mencari informasi tentang
regresi yang pernah kupelajari sebelumnya.
Regresi merupakan suatu model dalam statistik yang berfungsi untuk mencari hubungan antara
variabel bebas atau yang sering disebut dengan variabel independen atau prediktor dengan variabel
dependen atau sering disebut dengan respon. Secara umum, bentuk persamaan dari model regresi
dapat dirumuskan sebagai berikut:
Dimana nilai y merupakan nilai dari respons yang bergantung pada sebuah fungsi
dari variabel x (f(x)). Secara umum f(x) ini dapat terdiri dari:
Fungsi linear
Fungsi kuadratik
Fungsi log
Fungsi eksponensial, dan sebagainya.
Untuk menyelesaikan analisa ini, aku akan fokus belajar menggunakan fungsi linear
dengan satu buah variabel bebas yang sering disebut dengan regresi linear. Regresi
linear dapat digunakan ketika terdapat hubungan yang linear antara variabel
independen dan variabel dependen.
Berikut ini adalah bentuk persamaan umum sebuah model regresi dengan
menggunakan fungsi linear:
Aku kembali membaca beberapa materi yang dapat mendukung analisisku terhadap
permintaan Kroma. Aku membuat catatan kecil seperti berikut ini, agar
mempermudahku jika akan menggunakannya nanti.
Contoh Kasus Regresi Linier: Representasi Data
Aku merasa lebih mudah jika menggunakan studi kasus. Oleh karena itu, aku
mencoba membuat perumpamaan menggunakan beberapa data seperti berikut ini.
Aku memiliki variabel dependen x dan variabel independen y. Ada 20 data point yang
akan dicoba untuk mencari model regresi linear dari data ini.
Pertama-tama aku akan memvisualisasikan data ini kedalam scatterplot untuk dapat
mengetahui persebaran datanya. Berikut adalah persebaran data menggunakan
scatterplot:
Kita akan mencoba mencari model regresi dari dataset yang kita miliki dengan
mengacu pada persamaan regresi linier yang telah dijelaskan. Variabel x memiliki
nilaid rata-rata sebesar 38.25 dan variabel y memiliki rata-rata sebesar 55.55.
Berikut ini adalah perhitungan yang kita butuhkan untuk menghitung nilai koefisien
regresi.
Dengan menggunakan persamaan diatas, aku dapat menentukan nilai a dan b
sebagai berikut:
Dengan demikian, aku dapat menentukan kedua koefisien regresi linier ini yaitu :
Sebagai langkah awal, aku melakukan import data tsv menggunakan R. Aku membuka aplikasi R untuk
melihat data yang diberikan Kroma, dan menggunakan perintah [Link]() dengan separator sep = "\
t" karena data yang diberikan Kroma memiliki format tsv atau tab separated value.
untuk melihat data yang sudah dimasukkan kedalam R. Apabila aku , maka akan
tampil informasi sesuai dengan tabel di bawah ini:
Merge Data
Untuk dapat melakukan analisis yang diminta oleh Kroma, pertama-tama aku harus menggabungkan
kedua dataset yang kudapat sebelumnya menjadi satu. Aku melihat bahwa kedua dataset diatas
memiliki kolom atau disebut dengan unique key yang sama yaitu Bulan dan Tahun. Aku dapat
menggabungkan kedua dataset ini berdasarkan variabel tersebut. Aku menggunakan perintah merge
untuk menggabungkan kedua data ini.
Perintah merge ini berfungsi untuk menggabungkan data, bentuk umum dari fungsi merge yaitu
merge(x, y, by.x, by.y, sort=TRUE).
Aku baru menyadari bahwa ternyata melakukan eksplorasi terhadap data sebelum
melakukan analisis regresi adalah hal yang cukup berguna.
Lewat analisis data eksplorasi, aku dapat mengetahui karakteristik dari data yang
digunakan, apakah terdapat trend dari variabel, bagaimana nilai rata-rata dari setiap
variabel, dan bagaimana variabel bebas berkorelasi dengan variabel tidak bebas.
Mengetahui statistik dasar dari dataset yang dimiliki cukup perlu untuk
mendapatkan gambaran bagaimana persebaran data. Berikut ini adalah perintah
yang aku gunakan untuk mendapatkan summary dari data yang dimiliki.
Aku mengikuti coding seperti yang dicontohkan, kemudian aku menjalankan kode
dengan menekan RUN dan memperoleh hasil melalui console.
Dengan melihat data diatas, akhirnya aku bisa mengambil kesimpulan bahwa nilai
terkecil kunjungan dokter itu bernilai 32 dan nilai maksimum kunjungan dokter
bernilai 132 dalam sebulan. Aku pun menyadari bahwa konsumsi masyarakat
terhadap permen dan buah pisang cukup tinggi, sementara konsumsi untuk sereal
cukup rendah dibanding kedua variabel lainnya.
Hasil Analisaku
Aku mengamati ketiga scatterplot dan merasakan bahwa tidak ada hubungan yang cukup kuat antara
kunjungan dokter gigi dengan penjualan permen, sereal maupun pisang. Aku merasa butuh bantuan
seseorang untuk memecahkan masalah ini, dan orang itu adalah Aksara, rekanku yang merupakan
seorang seorang senior data analyst di DQ-Dent untuk diskusi.
“Hi Aksara, aku baru saja melakukan analisis awal terkait kebutuhan analisis untuk penyuluhan
kesehatan gigi. Aku melihat bahwa sebenarnya tidak terdapat hubungan yang signifikan antara
kunjungan ke rumah sakit dengan penjualan permen, sereal, ataupun buah pisang. Tidak terdapat
hubungan yang signifikan antara variabel-variabel ini,” kataku sambil menunjukkan grafik yang
kuhasilkan pada Aksara.
Aksara memperhatikan grafik yang kutunjukkan dan terdiam sejenak. Lalu dia hanya tertawa dan
berkata, “Sunyi, coba pikirkan, kalau aku makan permen sekarang, apakah aku akan langsung sakit
gigi?”
“Ehh, bener juga! Baiklah aku paham” aku jadi ikut tertawa bersama Aksara menyadari kebodohanku
ini.
“Coba kamu hitung dulu berapa efek keterlambatan memakan permen ini terhadap kunjungan ke
rumah sakit,” Aksara memberikan sedikit petunjuk padaku.
“Baik, siap Aksara. Terima kasih ya!” aku berterima kasih atas petunjuknya, aku segera kembali pada
pekerjaanku lagi.
Delay effect
Aku kembali ke depan laptopku lagi dan hal pertama yang kupikirkan adalah mencari berapa lama
waktu yang dibutuhkan oleh orang yang memakan permen untuk mengunjungi rumah sakit karena
mengalami sakit gigi. Peristiwa ini sering disebut dengan efek keterlambatan atau delay effect.
Aku menggunakan visualisasi data untuk menentukan delay periodnya. Aku berandai-andai, misal aku
ingin melihat hubungan antara pembelian permen di bulan ini dengan kunjungan ke dokter di bulan
depan, maka aku akan memasangkan data pembelian permen di bulan Januari 1996 dengan
kunjungan dokter di bulan Februari 1996 dan seterusnya.
Untuk mendapatkan data dengan delayed effect tersebut, aku memanfaatkan perintah lag dengan
menggunakan library dplyr. Aku menggunakan perintah library (dplyr) untuk mengimport library dplyr
atau menggunakan perintah [Link]("dplyr") terlebih dahulu untuk menginstall package
dplyr.
Kemudian, aku menggunakan perintah lag untuk mendapatkan nilai delayed effect. Bentuk umum dari
perintah lag adalah lag(x, n) dimana x merupakan data yang ingin dicari nilai lag nya dan n merupakan
periode atau jumlah data. Karena data yang kumiliki merupakan data bulanan, maka nilai n akan
merujuk kepada periode 1, 2, 3, bulan dst.
Untuk saat ini, aku memutuskan untuk menggunakan delay effect paling lama sebesar 6 bulan.
Apabila aku , maka akan tampil informasi sesuai dengan tabel di bawah ini:
library (dplyr)
data_delayed_effect = [Link](
month = data_gabungan$Bulan,
year = data_gabungan$Tahun,
kunjungan_dokter = data_gabungan$[Link],
penjualan_permen = data_gabungan$[Link],
penjualan_permen_1 = lag(data_gabungan$[Link]),
penjualan_permen_2 = lag(data_gabungan$[Link],2),
penjualan_permen_3 = lag(data_gabungan$[Link],3),
penjualan_permen_4 = lag(data_gabungan$[Link],4),
penjualan_permen_5 = lag(data_gabungan$[Link],5),
penjualan_permen_6 = lag(data_gabungan$[Link],6)
)
data_delayed_effect
Scatterplot
Dengan menggunakan perintah yang sama seperti sebelumnya, aku mencoba mengeluarkan kembali
scatter plot antara kunjungan ke dokter dengan penjualan permen dengan periode delayed effect
maksimum 6. Pastinya akan ada 7 grafik yang akan didapatkan. Aku menuliskan satu per satu coding
nya pada console seperti pada contoh, hingga delay 6 bulan.
Setelah kode ___ di Code Editor dilengkapi dan dijalankan dengan RUN diperoleh
visualisasi scatter plot sebagai berikut
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_1,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen (delay 1 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_2,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen (delay 2 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_3,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen (delay 3 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_4,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen (delay 4 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_5,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen (delay 5 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_permen_6,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen (delay 6 bulan)",
col = "blue")
Baiklah, aku akan mencoba melakukan analisis model regresi menggunakan data kunjungan dokter
dengan penjualan permen dengan delayed effect selama 4 bulan!
Model Regresi
Setelah mendapatkan informasi tentang delayed effect selama 4 bulan antara kunjungan ke dokter
dengan penjualan permen, aku bersiap-siap melakukan analisis dengan model regresi. Sebelum
melakukan analisis, aku terlebih dahulu harus menghapus data yang memiliki nilai NA yaitu pada
bulan Januari, Februari, Maret, dan April tahun 1996. Dengan menggunakan perintah [Link](x), aku
dapat menghilangkan data yang memiliki nilai NA, di mana x merupakan dataset yang digunakan.
Berikut ini adalah perintah yang kugunakan untuk mendapatkan data yang diolah dalam model
regresi.
Perintah yang telah diketikkan memiliki penjelasan seperti yang ditunjukkan berikut
ini
Kalau aku dengan benar menggunakan perintah diatas dan menjalankannya dengan ,
berikut adalah hasil dari model regresi kunjungan ke dokter dengan pembelian
permen.
Tambahan sedikit dari catatan penjelasan koefisien regresi dari model regresi yang
kuperoleh dapat dilihat pada nilai Coefficients.
Apabila aku jalankan dengan , maka akan tampil informasi sesuai dengan tabel di
bawah ini:
Dengan menggunakan metode predict diatas, ini adalah hasil prediksi kunjungan
dokter pada bulan Jan-Mei 1998.
Interpretasi Model Regresi Linear
Berdasarkan model regresi diatas, aku mengetahui bahwa hubungan antara penjualan permen
dengan kunjungan ke dokter bersifat positif. Yang berarti bahwa ketika penjualan permen semakin
meningkat, maka kunjungan ke dokter akan meningkat juga. Namun efek peningkatan kunjungan
dokter ini akan terjadi dalam 4 bulan kedepan.
Langkah Pertama
Setelah sukses melaksanakan program penyuluhan kesehatan gigi di bulan ini, Kroma akan melakukan
penyuluhan kesehatan di kota berbeda, namun kali ini aku diminta untuk mancari tahu pengaruh dari
penjualan sereal terhadap kunjungan rumah sakit.
Aku siap untuk melakukan analisis regresi untuk mengetahui pengaruh penjualan sereal terhadap
kunjungan rumah sakit!
Akan ada beberapa tahapan yang perlu aku lakukan untuk bisa mendapatkan analisis regresi, tapi
pertama-tama aku harus melakukan proses importing
data kunjungan_dokter_gigi_kota_x_dqlab.tsv dan tingkat_penjualan_kota_x_dqlab.tsv.
Langkah Kedua
Setelah mengimport data diatas, kali ini aku akan menggabungkan kedua data tersebut menjadi satu
dataset.
Langkah Kedua
Setelah mengimport data diatas, kali ini aku akan menggabungkan kedua data tersebut menjadi satu
dataset.
Langkah Kedua
Setelah mengimport data diatas, kali ini aku akan menggabungkan kedua data tersebut menjadi satu
dataset.
Langkah Ketiga
Info: Predefined Code & Lesson telah diperbaiki pada tanggal 22 November 2022. Silakan dicek
kembali kode yang telah dituliskan berdasarkan instruksi.
Untuk memperingkas data yang digunakan, aku dapat mengeliminasi variabel lain yang tidak
dibutuhkan, sehingga dataset yang aku miliki hanya berupa bulan, tahun, kunjungan dokter, dan
penjualan sereal yang aku tempatkan ke dalam variabel datagabungan.
Berikut adalah contoh output yang didaptkan jika kode dengan benar ditulis dan dijalankan.
Langkah Keempat
Info: Predefined Code & Lesson telah diperbaiki pada tanggal 22 Nopember 2022. Silakan dicek
kembali kode yang telah dituliskan berdasarkan instruksi.
Sebelum melakukan analisis regresi, aku melakukan proses data eksplorasi data terlebih dahulu untuk
mengetahui hubungan antara variabel kunjungan dokter dengan penjualan sereal.
Di sini aku perlu menampilkan scatterplot untuk bisa melihat hubungan antar variabel. Sebelumnya
ketika penjualan permen, delayed effect-nya di angka 4 bulan, oleh karena itu, untuk penjualan sereal
aku pun mencoba menggunakan periode maksimal 6 bulan.
## Visualisasi datagabungan menggunakan scatter plot
plot(datagabungan$kunjungan_dokter, datagabungan$penjualan_sereal,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan dokter dengan penjualan sereal",
col = "blue")
Persamaan regresi yang digunakan untuk data ini adalah y = 52.962412 + 0.002975 x, dimana
terdapat korelasi positif antara penjualan serial dengan kunjungan rumah sakit. Yang berarti bahwa
setiap ada peningkatan penjualan sereal maka akan mengakibatkan kenaikan kunjungan rumah sakit
dalam 4 bulan mendatang.
Penutup
Aku telah berhasil mendapatkan beberapa informasi yang akan berguna untuk disampaikan di dalam
penyuluhan kesehatan gigi sebagai berikut:
1. Hubungan antara penjualan permen dengan kunjungan ke dokter bersifat positif. Yang
berarti bahwa ketika penjualan permen semakin meningkat, maka kunjungan ke dokter
akan meningkat juga. Namun efek peningkatan kunjungan dokter ini akan terjadi dalam 4
bulan kedepan.
2. Setiap ada kenaikan penjualan permen sebesar 100,000 maka akan meningkatkan
kunjungan dokter sebesar 35.934 unit dalam 4 bulan kedepan.
Aku segera menyampaikan hasil dari analisis regresi ini kepada Kroma. Kroma terlihat senang dengan
laporan yang kuberikan. Kroma langsung antusias dan segera menyiapkan materi yang dibutuhkan
untuk penyuluhan kesehatan gigi.
Hasil Belajarku
Wah senangnya! Aku telah berhasil menyelesaikan rangkaian pelajaran Mengenal Model Regresi
Linear dengan R. Dari materi yang telah aku pelajari dan praktekkan, aku telah:
Mengerti apa dan kenapa Regresi dan Regresi Linear
Mengenal konsep Least Squares Fit dan pemanfaatannya dalam Regresi Linear
Mampu mengerti dataset penjualan permen, sereal, dan pisang serta tingkat kerusakan gigi
Mampu menggabungkan dua dataframe yang berasal dari dua file yang berbeda agar dapat
melakukan proses regresi linear dan mencari hubungan antar dataset
Mampu melakukan proses Regresi Linear pada R dengan fungsi lm dan membuat data model
tingkat kerusakan gigi dan hubungannya dengan penjualan permen, dan bukannya penjualan
item lain
BAB 10
Pengantar
Pagi ini suasana di tempat kerjaku, DQ Corp, terasa senang seperti hari-hari biasanya. Semua rekanku
sibuk mengerjakan pekerjaannya masing-masing sambil sesekali berdiskusi jika ada hal yang sulit
dikerjakan sendiri. Sampai tiba-tiba, aku terkejut mendengar suara Kroma yang memanggil aku dan
Andra dengan suaranya yang keras.
"Andra, Sunyi, ke ruanganku sebentar!" perintah Kroma.
Aku menatap Andra, Andra pun hanya mengangkat bahunya dengan wajah yang sama bingungnya
denganku, sebelum akhirnya kami beranjak dari meja dan melangkah ke ruangan Kroma.
Ketika aku dan Andra sudah menempati kursi di hadapan meja Kroma, Kroma langsung membuka
mulutnya, “Aku memiliki data teks, tapi masih berantakan format dan isinya. Kalian berdua sebagai
Data Scientist seharusnya sudah cukup familiar dengan pengolahan data teks, bukan? Apakah kalian
bisa membantuku dengan data ini?”
"Ya, tentu saja bisa, Kroma," jawab Andra. "Tolong kirimkan saja datanya melalui email ya, nanti akan
aku selesaikan bersama dengan Sunyi," tambahnya.
Kroma menggerakkan jari-jarinya di atas keyboard, sebelum kemudian kembali berkata, "Sudah di
emailkan ya, file nya. Tolong segera diselesaikan datanya! Kalian sudah boleh kembali ke meja kalian
lagi!"
Aku di ruangan itu hanya bisa melongo melihat situasinya. Andra yang sudah lebih lama bekerja
bersama dengan Kroma sepertinya sudah paham dengan sifatnya itu, langsung mencolek tanganku
dan mengajak untuk ke luar dari ruangan Kroma.
"Sip, akan segera kami selesaikan sekarang," jawab Andra sebelum menutup pintu ruangan Kroma.
"Udah ga usah bingung, Nyi, Kroma memang seperti itu kok orangnya. Yuk, lebih baik kita selesaikan
aja pekerjaan yang baru diberikannya itu," ajak Andra. Aku mengangguk sambil mulai fokus pada
laptopku sendiri.
Mengimport dataset
Setelah membaca dan memahami cara import dan membaca dataset serta memecahnya ke dalam 1
kolom, aku jadi merasa sedikit cemas.
“Wah, Ndra, kalau semua datanya disimpan ke dalam satu kolom, nantinya apakah tidak sulit untuk
diolah? Apa yang bisa kita lakukan untuk memisahkan data-data tersebut ke dalam kolomnya masing-
masing?” tanyaku dengan perasaan bingung.
“Tidak perlu khawatir. Yuk, sebelum menuju ke bagian itu, kamu coba untuk melakukan import file
nya terlebih dahulu!”, ajak Andra.
Bantulah Sunyi untuk membaca file yang diminta Andra dengan jalan melengkapi kode melalui Code
Editor. Setelah selesai, jalankan dengan menekan , dan hasil berikut akan diperoleh di Console,
Function strsplit()
“Untuk menjawab pertanyaanmu sebelumnya mengenai memisahkan data ke kolomnya masing-
masing yang sesuai, kita dapat menggunakan function strsplit() yang ada pada R. Untuk syntax
penggunaan strsplit() adalah demikian”, Andra menjelaskan sambil mengetikkan sesuatu pada
keyboardnya.
Aku memajukan badanku mendekati laptop Andra dan mengamati layar dengan serius.
strsplit(x, split, fixed)
dengan
Parameter Penjelasan
X Data character yang akan dipisahkan
Split Pemisah dari data character
fixed Bernilai TRUE / FALSE. Apabila nilai dari fixed adalah TRUE, maka pemisahan karakter akan
dilakukan sesuai dengan value dari split.
“Nah, kira-kira begitu cara menggunakan function strsplit(). Yuk kita langsung praktekkan saja supaya
kamu lebih paham cara menggunakannya!”
Andra menyuruhku untuk mengetikkan sendiri code-nya untuk berlatih.
Bantulah Sunyi dengan melengkapi kode ___ pada Code Editor. Jika tidak ada kesalahan setelah
menekan , maka kamu akan memperoleh hasil seperti berikut di Console.
Function paste()
“Tidak sulit sama sekali kan untuk memisahkan data-data tersebut ke kolomnya masing-masing," kata
Andra setelah melihatku mampu menyelesaikan perintahnya dalam waktu singkat.
"Sekarang, aku ingin menunjukkan function lain yang mungkin berguna dalam pengolahan data teks.
Function yang ingin aku kenalkan adalah function paste(). Function tersebut digunakan untuk
menggabungkan beberapa data teks menjadi satu. Seperti contohnya pada data yang kita miliki, kita
dapat menggabungkan data pada kolom tempat_lahir dan provinsi menjadi satu (Malang dan Jawa
Timur menjadi Malang, Jawa Timur). Penggunaan function paste() ini sangat mudah, lho! Syntaxnya
juga sangat sederhana”, Andra memberikan penjelasan dengan antusias.
paste(data_1, pemisah, data_2, pemisah, data_3, ..., data_n)
“Wah, ayo kita langsung coba saja kalau begitu!”, ujarku yang langsung jadi sangat bersemangat.
Ayo, bantulah Sunyi kembali dengan melengkapi kode ___ pada Code Editor. Jika tidak ada kesalahan
setelah menekan , maka kamu akan memperoleh hasil seperti berikut di Console.
Function Lainnya untuk Pengolahan Data String
“Selain strsplit() dan paste(), ada beberapa function lain yang mungkin bisa membantu dalam
pengolahan data teks, lho! Seperti function-function berikut ini”, Andra kembali melanjutkan
penjelasannya. Namun kali ini Andra menyuruhku memperhatikan 1 halaman informasi tentang
penjelasan function agar aku bisa membaca dan memahaminya.
“Kujelaskan lagi ya, function grep() tersebut akan mengembalikan index dimana terdapat data yang
sesuai dengan pattern yang sudah kita masukkan sebelumnya. Berdasarkan hasil dari potongan codes
yang sudah dijalankan ini, kita memperoleh keluaran berupa angka 22 dan 39 yang berarti data pada
nama index ke-22 dan ke-39 mengandung angka di dalamnya”, jelas Andra sambil menunjukkan
keluaran dari codes sebelumnya.
Selama Andra menjelaskan, aku memperhatikan dengan teliti dan kemudian meminta untuk mencoba
mempraktekkan penggunaan function grep() tersebut.
“Nah, Nyi, sekarang kamu sekalian coba untuk menghapus karakter selain huruf yang ada pada data
Nama juga ya dengan menggunakan function gsub(), sekalian untuk melatih pemahamanmu akan
function itu juga”, pinta Andra.
Instruksi:
1. Carilah data pada kolom Nama yang mengandung angka
2. Hapus semua karakter selain alphabet yang terdapat pada kolom Nama dengan
menggunakan function gsub()
Memformat Dataset yang Bersumber dari Data Teks
“Sunyi, kira-kira begitulah beberapa function dasar yang banyak digunakan untuk pengolahan data
teks. Bagaimana kalau kamu coba melakukan pengolahan data ini dari awal berdasarkan dengan apa
yang sudah diajarkan sebelumnya? Sekalian untuk kamu berlatih dan supaya kamu cepat familiar
dengan function-function dan langkah-langkahnya”, ujar Andra.
"Siap banget dong, Ndra!" aku sangat bersemangat karena ini mungkin menjadi project pertama yang
aku kerjakan sendiri semenjak bergabung di DQ Corp.
"Perhatikan beberapa instruksi berikut ini ya, Nyi, dalam mengerjakan project-nya," kata Andra
menunjukkan 3 poin catatan penting instruksinya.
1. Lakukan import data dan pemisahan setiap data sesuai dengan separatornya.
2. Tambahkan kolom baru yang berisi gabungan dari Tempat Lahir dan Provinsi.
3. Carilah data yang mengandung angka pada kolom Nama dan hapuslah angka yang terdapat
pada data tersebut.
Bantulah Sunyi mengerjakan mini project yang diberikan Andra dengan cara melengkapi
kode ___ serta mengikuti instruksi yang diberikan melalui baris komentar pada Code Editor.
Hasil Belajarku
Wah senangnya! Aku telah berhasil menyelesaikan rangkaian pelajaran Bekerja dengan Data Teks
pada R. Dari materi yang telah aku pelajari dan praktekkan, aku telah:
Mengenal tipe data Character / String pada R
Mampu mengenal karakteristik dataset datalahir_teks_dqlab.txt dan rencana pengolahannya
Mampu menggunakan fungsi dasar pengolahan data character sebagai berikut:
o
strsplit untuk memisahkan data awal yang semuanya ada dalam satu
kolom dan dipisahkan dengan |||
paste untuk menggabungkan data dati 2 (kota/kabupaten) dan propinsi
sebagai satu kesatuan lokasi (Sebagai contoh: Malang dan Jawa
Timur menjadi Malang, Jawa Timur)
len, substr, dan sub untuk melakukan konversi format yang masih dalam
bentuk format nama bulan menjadi format tanggal dengan angka semua
(Sebagai contoh: 1 Januari 2001 diubah menjadi 01-01-2001)
MODULE 11
Pengantar
DQ-pedia merupakan salah satu perusahaan e-commerce yang ada pada DQ Universe. Saat ini, DQ-
pedia sedang gencar untuk memperbanyak mitra berupa warung-warung kecil di berbagai daerah
terpencil untuk memperluas jangkauan bisnis. DQ-pedia akan membantu mitra DQ-pedia melalui
strategi untuk meningkatkan pendapatan mitra dan melakukan analisis untuk menjamin ketersediaan
stok barang disetiap mitra.
Dalam rangka membantu Mitra ini, DQ-pedia perlu melakukan evaluasi dan analisis terhadap data
penjualan dari masing-masing mitra. Dikarenakan data penjualan mitra ini cukup besar, Kroma selaku
pimpinan dari DQ-Pedia, meminta bantuanku untuk melakukan analisis data.
Namaku Aksara dan saat ini pekerjaanku adalah seorang data analyst. Melihat Kroma yang sedang
mengalami kesulitan, aku akan siap membantunya.
Hari ini ketika aku baru saja duduk ke meja kerjaku, Kroma langsung menghampiri aku dan
menjelaskan terkait program analisa yang akan dilakukannya.
“Halo Aksara, kamu sudah tahu kan kalau kita akan evaluasi untuk mitra DQ-pedia dibulan ini?” ucap
Kroma padaku.
“Hi Kroma, yaaap. Aku sudah tahu tentang program ini” balasku, dengan agak sedikit terkejut melihat
kedatangan Kroma.
“Baiklah, sepertinya kita akan membutuhkan bantuan untuk analisis data penjualan mitra ya. Untuk
saat ini, kita akan melakukan evaluasi untuk Mitra Toserba Xera terlebih dahulu. Aku sudah
mengirimkan data penjualan mereka lewat email. Mohon bantuannya ya, Aksara!” ucap Kroma sambil
menepuk pundakku.
“Baik Kroma, siap!” aku menjawabnya dengan penuh semangat. Sepertinya ini akan menjadi suatu
analisa yang sangat menarik.
Data pertama yang harus aku sediakan adalah data mengenai penjualan dalam bulan April hingga
Juli karena Kroma ingin mengetahui seperti apakah tingkat penjulan tiap bulannya. Untuk itu aku
perlu melakukan langkah-langkah berikut
1. melalui penggunaan function aggregate() dapat ditampilkan penjualan dalam 3 bulan ini
(April hingga Juli).
2. Visualisasikan data tersebut dengan menggunakan chart yang sesuai.
Setelah kode dilengkapi dan dijalankan dengan , selanjutnya kamu akan memperoleh visualisasi
melalui bar chart berikut ini
Hasil Analisis Penjualan Mitra Toserba Xera Bulan April - Juni 2022
Akhirnya, selesai juga aku mengerjakan analisis data eksplorasi seperti yang diminta oleh Kroma. Aku
mengumpulkan beberapa informasi yang diperoleh terkait performa Mitra Toserba Xera. Berikut
adalah report performance yang aku hasilkan dan yang aku laporkan pada Kroma:
Penjualan Mitra Toserba Xera pada bulan April - Juni 2020 semakin menurun. Hal ini terlihat dari bar
plot jumlah penjualan barang perbulan. Penjualan tertinggi yang dimiliki oleh Mitra Toserba Xera
berada pada bulan April 2020 sejumlah 1753 barang terjual. Namun pada bulan Juni 2020, Mitra
Toserba Xera hanya menjual 170 produk.
Customer dengan Pembelian Terbesar
Kemudian, aku dapat menentukan siapa saja customer yang telah melakukan transaksi pembelian
terbesar di Toserba Xera ini. Aku dapat mengerjakan urutan berikut yaitu
1. menerapkan function aggregate() untuk mendapatkan pembelian per customer.
2. mengurutkan hasil agregasi untuk pembelian per customer dari yang tertinggi hingga yang
terendah.
Setelah kode dilengkapi dan dijalankan dengan , selanjutnya kamu akan memperoleh 10
pembeli dengan transaksi tertinggi.
Analisis Perbandingan Barang Masuk dan Keluar
Data berikutnya yang harus aku sediakan adalah data mengenai perbandingan barang masuk dan
keluar karena Kroma ingin mengetahui apakah stock yang masuk dengan barang yang terjual
seimbang.
Langkah yang perlu dilakukan adalah:
1. Dengan menggunakan function aggregate(), tampilkan perbandingan stok masuk dan
penjualan per bulan
2. Visualisasikan data tersebut dengan menggunakan chart yang sesuai.
Setelah kode dilengkapi dan dijalankan dengan , selanjutnya kamu akan memperoleh visualisasi
melalui bar chart berikut ini
Nantinya ketika aku sudah melakukan analisis perbandingan barang keluar dan masuk, informasi yang
bisa diperoleh adalah Stok barang masuk setiap bulan berjumlah diantara 4300-4500, sementara
jumlah penjualan berkisar di 1400-1700 untuk bulan April dan Mei 2020. Namun penjualan di bulan
Juni cukup rendah dengan jumlah sekitar 170 penjualan.
#Perbandingan barang masuk dan keluar perbulan
aggregate(
x=data$Jumlah,
by = list(Bulan = data$Bulan_Tahun, Jenis_Transaksi = data$[Link]),
FUN = sum)
#Gabungkan kedua data diatas menggunakan fungsi merge dengan left join
data_gabungan = merge(data_stok_masuk,data_penjualan,by='Bulan', all.x=TRUE)
data_gabungan = [Link](Bulan = data_gabungan$Bulan,
Stok_Masuk = data_gabungan$x.x,
Penjualan = data_gabungan$x.y)
#Periksa apakah terdapat NA data. Jika terdapat NA data, kamu dapat menggantinya dengan 0
data_gabungan$Penjualan[[Link](data_gabungan$Penjualan)] <- 0
#Ubah format data gabungan dengan melakukan perintah transpose. Lalu ubah nama kolom
menggunakan bulan
data_gabung = t([Link](data_gabungan[-1]))
colnames(data_gabung) = data_gabungan$Bulan
#Keluarkan bar plot dengan multiple kategori untuk membandingkan stok masuk dengan penjualan.
Lalu keluarkan legend dari barplot tersebut.
barplot(data_gabung,
main='Perbandingan Penjualan dengan Stok Masuk',
ylab='Jumlah Barang',
xlab='Bulan',
beside = TRUE,
col=c("red","blue"))
legend('topright',fill=c("red","blue"),legend=c('Stok Masuk','Penjualan'))
Hasil Analisis Stok Barang Masuk Dengan Penjualan di Mitra Toserba Xera
Tadi, aku juga melakukan analisis untuk membandingkan stok barang masuk dengan penjualan di
Mitra Toserba Xera. Berdasarkan analisis yang kulakukan, dapat diambil kesimpulan bahwa stok
persediaan barang di Mitra Toserba Xera masih cukup banyak mengingat secara rata-rata terdapat
sekitar 4000 barang yang masuk kedalam Mitra Toserba Xera sementara toko ini hanya menjual
sekitar 1400-1700 barang di bulan April dan Mei.
#Setelah mendapatkan data diatas, kita dapat mengeluarkan histogram dari tabel diatas dengan
menggunakan perintah hist()
hist(data_transaksi_freq,
main="Hubungan antara harga barang dengan transaksi",
xlab="Rentang harga barang",
col="green"
)
Hasil Analisis Hubungan Antara Rentang Harga Barang dan Jumlah Transaksi
Aku juga menggunakan bar plot untuk melihat bagaimana hubungan antara rentang harga barang
dengan jumlah transaksi. Dari hasil yang kudapatkan, aku dapat mengetahui bahwa barang yang
berada pada rentang harga Rp 10.000-Rp15.000 lebih banyak terjual dibanding rentang harga lainnya.
Setelah itu, barang dengan harga kurang dari Rp 5000 menempati posisi kedua. Aku dapat mengambil
kesimpulan bahwa barang yang berada di rentang harga ini merupakan barang yang paling laku.
Hasil Belajarku
Wah senangnya! Aku telah berhasil menyelesaikan rangkaian pelajaran Project: Eksplorasi Data Ritel
menggunakan R. Dari materi yang telah aku pelajari dan praktekkan, aku telah:
Mampu melakukan pembacaan dataset retail bertipe tsv ke dalam dataframe
Mampu melakukan fungsi agregasi count, sum dan average pada dataframe terhadap
periode, nama customer dan nama produk
Mampu membuat bar chart jumlah transaksi berdasarkan nama produk
Mampu membuat histogram terhadap transaksi berdasarkan rentang harga jual