100% menganggap dokumen ini bermanfaat (1 suara)
76 tayangan89 halaman

Panduan Segmentasi Pelanggan dengan R

Dokumen ini memberikan pengantar tentang persiapan data sebelum menggunakan algoritma k-means untuk clustering. Langkah-langkahnya meliputi membaca data, membuat vektor nama kolom, mengkonversi data kategori ke numerik, dan menggabungkan hasil konversi ke dalam data asli.

Diunggah oleh

arfita febriani
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
100% menganggap dokumen ini bermanfaat (1 suara)
76 tayangan89 halaman

Panduan Segmentasi Pelanggan dengan R

Dokumen ini memberikan pengantar tentang persiapan data sebelum menggunakan algoritma k-means untuk clustering. Langkah-langkahnya meliputi membaca data, membuat vektor nama kolom, mengkonversi data kategori ke numerik, dan menggabungkan hasil konversi ke dalam data asli.

Diunggah oleh

arfita febriani
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd

Selamat Datang

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

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

Apa yang akan Anda pelajari sepanjang course ini?

Apa dan kenapa Customer Segmentation dalam penggunaan di bisnis?


Aplikasi Customer Segmentation secara teknis dengan Algoritma K-Means di R
Bagaimana mempersiapkan data profil pelanggan di R agar dapat digunakan oleh algoritma K-Means
Mempaketkan algoritma sebagai model dan mengoperasionalkannya sehingga dapat digunakan
sehari-hari oleh bisnis
Bagaimana Anda menarik manfaat dari DQLab ini?

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

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

Dataset Customer Segments


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

Dataset ini bisa dilihat di [Link]

Data tersebut memiliki tujuh kolom dengan penjelasan sebagai berikut:

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

Membaca data dengan fungsi [Link]


Langkah pertama yang perlu kita lakukan adalah membaca dataset tersebut dari file
teks menjadi [Link] di R dengan perintah [Link].

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.

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


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

pelanggan

Hasil eksekusi perintah ini akan tampak sebagai berikut.

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

c("[Link]", "Umur", "Profesi", "[Link]")


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

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].

Perintahnya cukup sederhana, seperti terlihat pada contoh berikut.

[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

Gantilah tulisan […]pada editor dengan code yang sesuai.

Buatlah variable pelanggan_matrix yang diisi dengan konversi teks menjadi numerik
dari variable pelanggan pada kolom "[Link]", "Profesi", dan "[Link]".

Menggabungkan Hasil Konversi


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

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

Untuk menggabungkan data hasil konversi [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

Gantilah tulisan […]pada editor dengan code yang sesuai.

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.

[Link].1 Profesi.1 [Link].1

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.

Menormalisasikan Nilai Belanja


Kali ini kita perhatikan kolom "NilaiBelanjaSetahun" isi datanya bernilai jutaan. Ketika kolom ini
digunakan untuk clustering, perhitungan sum of squared errors (pada bab kmeans) akan menjadi
sangat besar.
Kita akan menormalisasikan nilainya agar perhitungan lebih sederhana dan mudah dicerna, namun
tidak mengurangi akurasi. Ini terutama akan sangat bermanfaat jika jumlah data sangat banyak,
misalkan memiliki 200 ribu data.

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

Mari kita langsung lakukan dengan mengerjakan praktek berikut.

Tugas Praktek

Gantilah tulisan […]pada editor dengan code yang sesuai.

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

Membuat Data Master


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

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

pelanggan[c("Profesi","Profesi.1")]
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.

Contoh perintahnya adalah sebagai berikut:

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

Gantilah tulisan […]pada editor dengan code yang sesuai.

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.

Apa itu Clustering dan algoritma K-Means?


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

Beberapa contoh clustering:

Pengelompokan manusia berdasarkan umur: bayi, balita, anak, remaja, dewasa, tua.
Pengelompokan customer berdasarkan daya belinya: regular dan premium.
Pengelompokan makanan berdasarkan kandungan gizinya: biji-bijian, sayuran, buah-buahan, minyak,
protein, dan lain-lain.
Banyak algoritma telah dikembangkan untuk melakukan clustering secara otomatis, salah satu yang
sangat populer adalah K-Means yang akan menjadi fokus utama course kita.

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

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

Jumlah partisi yang diinginkan, diwakili oleh huruf k


Mencari "jarak" kedekatan tiap titik ke sejumlah nilai rata-rata cluster yang diamati, diwakili oleh
means
Algoritma k-means sudah ada di paket dasar R dalam bentuk function bernama kmeans. Sepanjang
bab ini, kita akan menggunakan function ini dan menganalisa output yang dihasilkan.

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

Function kmeans memerlukan minimal 2 parameter, yaitu:

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

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.

Berikut adalah contoh penggunaan fungsi kombinasi [Link] dan kmean.

[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.

kmeans(x=pelanggan[c("Umur","Profesi.1")], centers=3, nstart=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:

Ukuran / jumlah titik data pada tiap cluster


Nilai rata-rata (centroid) dari tiap cluster
Pembagian cluster dari tiap elemen data berdasarkan posisinya
Jumlah jarak kuadrat dari tiap titik ke centroidnya
Komponen informasi lain yang terkandung di dalam objek kmeans ini

#Bagian Data Preparation


pelanggan <-
[Link]("[Link]
[Link]", sep="\t")
pelanggan_matrix <- [Link](pelanggan[c("[Link]",
"Profesi", "[Link]")])
pelanggan <- [Link](pelanggan, pelanggan_matrix)
Profesi <- unique(pelanggan[c("Profesi","Profesi.1")])
[Link] <-
unique(pelanggan[c("[Link]","[Link].1")])
[Link] <- unique(pelanggan[c("[Link]","[Link].1")])
pelanggan$NilaiBelanjaSetahun <-
pelanggan$NilaiBelanjaSetahun/1000000
field_yang_digunakan = c("[Link].1", "Umur", "Profesi.1",
"[Link].1","NilaiBelanjaSetahun")
#Bagian K-Means
[Link](100)
#fungsi kmeans untuk membentuk 5 cluster dengan 25 skenario random
dan simpan ke dalam variable segmentasi
segmentasi <- kmeans(x=pelanggan[field_yang_digunakan], centers=5,
nstart=25)
#tampilkan hasil k-means
segmentasi

Analisa Hasil Clustering Vector


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

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

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

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

segmentasi$cluster
Ini akan mendapatkan hasil yang sama dengan gambar di atas.

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

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

pelanggan$cluster <- segmentasi$cluster


Kemudian tampilkan struktur dari data pelanggan dengan perintah str.

Analisa Hasil Cluster Size


Tahap berikutnya, Kita akan analisa hasil pada bagian pertama

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


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

Cluster ke-1 memiliki 14 data


Cluster ke-2 memiliki 5 data
Cluster ke-3 memiliki 9 data
Cluster ke-4 memiliki 12 data
Cluster ke-5 memiliki 10 data
Dengan jumlah total 50 data, yang juga merupakan jumlah data total pelanggan.
Mari kita verifikasi hal tersebut dengan memulai dari cluster 1. Ambil data pelanggan
yang isi dari kolom clusternya adalah 1 dengan menggunakan fungsi which, seperti
perintah berikut pada live code editor di bawah komentar #Filter cluster ke-1.

which(pelanggan$cluster == 1)
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.

Sekarang cobalah hitung jumlah deretan dengan menambahkan perintah length


pada fungsi which seperti berikut:

length(which(pelanggan$cluster == 1))
Jika dijalankan maka akan didapatkan angka 14.

Tugas

Tampilkan ukuran cluster ke-2 dari pelanggan

Melihat Data pada Cluster ke-N


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

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

Berikut adalah perintah yang dapat diketikkan pada code editor (di bawah comment #Melihat data
cluster ke-1) untuk melihat seluruh data pada cluster ke-1
pelanggan[which(pelanggan$cluster == 1),] 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.

Dan ubahlah perintah untuk melihat cluster ke-2.

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.

Menarik bukan pembagian dari algoritmanya?

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.

Apa artinya hasil tersebut?

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

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

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

Kolom Umur adalah representasi dari dataset awal tanpa mengalami konversi.
Terlihat untuk cluster ke-1 umur rata-rata adalah 20 tahun, umur 61 tahun untuk
cluster ke-2, dan seterusnya.
Kolom 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 [Link].1 menunjukkan representasi data [Link] 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-2 dan ke-4 memiliki nilai belanja lebih tinggi dibandingkan ketiga
cluster lainnya.

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

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

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

Tugas Praktek

Cobalah melihat hasil dari cluster means ini dengan langsung mengakses variable
segmentasi pada komponen centers.
Analisa Hasil Sum of Squares
Yang akan kita analisa berikutnya adalah bagian keempat, yaitu nilai metrik sum of squares seperti
terlihat berikut ini.

Within cluster sum of squares by cluster:

[1] 316.73367 58.21123 174.85164 171.67372 108.49735


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

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

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

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

Gantilah […] pada code editor dengan empat perintah berikut.

[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.

Berikut adalah penjelasan singkat dari sembilan komponen tersebut.


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

segmentasi$withinssr
Jika dieksekusi maka Anda akan mendapatkan hasil berikut.

[1] 316.73367 58.21123 174.85164 171.67372 108.49735

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:

Ukuran / jumlah titik data pada tiap cluster


Nilai rata-rata (centroid) dari tiap cluster
Vector item dari cluster
Jumlah jarak kuadrat dari tiap titik ke centroidnya (Sum of Squares atau SS)
Komponen-komponen informasi lain
Dengan menganalisa hasil output ini, kita mampu menggabungkan nomor cluster ke data asal. Selain
itu kita juga mengetahui bagaimana kedekatan tiap titik data dari clusternya sehingga menjadi bekal
kita untuk menentukan jumlah cluster yang optimal.

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.

Simulasi Jumlah Cluster dan SS


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

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.

Code lengkapnya sebagai berikut:


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

Berikut adalah penjelasan lengkap elemen-elemen perintah di atas:

Mari kita coba perintah di atas dengan tugas praktek berikut.

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.

[1] 10990.9740 3016.5612 1550.8725 1064.4187 829.9676 625.1462


[7] 508.1568 431.6977 374.1095 317.9424
Grafik Elbow Effect
Kali ini kita akan visualisasikan vector Sum of Squares (SS) atau Sum of Squared Errors (SSE) yang telah
kita hasilkan pada praktek sebelumnya.

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

jumlah_cluster_max <- 10
ssdata = [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

Gantilah […] pada code editor code lengkap sapply di atas.

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.

Untuk ini tahapannya adalah sebagai berikut:

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.

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

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

Tugas Praktek
Buatlah satu variable data frame bernama [Link] yang terdiri dari dua
kolom:

cluster: vector dengan isi 1,2,3,4 dan 5.


[Link]: vector dengan isi "Silver Youth Gals", "Diamond Senior Member",
"Gold Young Professional", "Diamond Professional", dan "Silver Mid Professional".
Lengkapi […] pada code editor dengan isi yang benar.

Jangan buat variable tersendiri untuk kedua kolom tersebut

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:

[Link] <- list(Profesi=Profesi, [Link]=[Link], [Link]=[Link],


Segmentasi=segmentasi, [Link]=[Link],
field_yang_digunakan=field_yang_digunakan)
Tugas Praktek

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

Isi bagian […] dengan perintah saveRDS seperti contoh di atas.


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

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

Bab berikutnya kita akan mengoperasionalkan objek ini.

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

Memuat Objek Clustering dari File


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

Untuk membuka file tersebut, kita gunakan function readRDS.

Perintahnya sangat sederhana, berikut adalah contoh untuk membuka file [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.

Variable databaru dengan [Link]$Profesi memiliki nama kolom yang sama,


yaitu Profesi.
Kolom Profesi kemudian akan dijadikan "kunci" untuk menggabungkan kedua
variable ini.
Ternyata isi Profesi dari databaru, yaitu "Pelajar" juga terdapat di [Link].
Ini akan membuat penggabungan menjadi berhasil.
Penggabungan ini juga akan mengambil kolom Profesi.1 dan isi data yang terkait
dengan Pelajar, yaitu nilai 3.
Berikut adalah hasil akhirnya.

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

Tugas Praktek

Berikut adalah perintah dari pengembangan contoh di atas. Setelah terjadi


penggabungan data, hasilnya disimpan kembali ke variable databaru.

databaru <- merge(databaru, [Link]$Profesi)


Cobalah ketik perintah ini ke code editor dan lanjutkan perintahnya untuk
menggabungkan juga variable [Link]$[Link] dan
[Link]$[Link]. Kemudian tampilkan data akhirnya.

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!

Yaitu dengan tahapan berikut:

mencari jarak kuadrat minimum atau terdekat


dari kolom numerik data baru tersebut
ke centroid kolom terkait
dari seluruh cluster yang ada
Kalau kita terjemahkan jadi rumus sebagai berikut:
[Link](sapply( 1:5, function( x ) sum( ( data[kolom] - objekkmeans$centers[x,])^2 ) ))
dimana:

min: merupakan function untuk mencari nilai minimum


1:5 : adalah range nomor cluster dari 1 sampai dengan 5 (atau lebih sesuai dengan ukuran cluster)
sapply: digunakan untuk melakukan iterasi berdasarkan range (dalam kasus ini 1 s/d 5)
function(x): digunakan untuk proses dengan x diisi 1 s/d 5 per proses
(data[kolom] – objekkmeans$centers[x,]) ^2: adalah jarak kuadrat data. Ingat centers adalah
komponen dari objek kmeans.
sum: digunakan untuk menjumlahkan jarak kuadrat
Mungkin Anda masih akan perlu memahami ini karena konstruksinya yang mungkin sedikit aneh tapi
sebenarnya prinsipnya sederhana. Cobalah lakukan corat coret dan berkunjung kembali ke halaman
ini dengan account DQLab untuk memahami rumusan ini.

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

Tugas Praktek

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

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

Kemudian jadikan perintah [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.

Apa Itu Model Regresi Linear?


Analisis yang diminta oleh Kroma adalah analisis untuk mengetahui hubungan antara kunjungan DQ-
Shop dengan kebiasaan mengkonsumsi permen. Hasil dari analisis ini akan dibawakan oleh Kroma
dalam penyuluhan kesehatan gigi pada bulan 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:

Dimana y merupakan nilai prediksi, a merupakan sebuah variabel intercept.


Intercept merupakan titik dimana garis regresi akan memotong sumbu y ketika x
bernilai sama dengan 0. Dengan kata lain, intercept adalah nilai perubahan variabel y
ketika x bernilai 0. Variabel b merupakan konstanta untuk menunjukkan besar
perubahan variabel y untuk setiap kenaikan 1 dan e merupakan nilai error. Nilai dari
a, b ini dapat teman-teman hitung dengan menggunakan metode kuadrat terkecil
atau yang sering disebut dengan least-square method.

Metode Least Square Method


Metode least square method adalah metode yang digunakan untuk menentukan
nilai dari koefisien dalam model regresi. Pada dasarnya metode least square adalah
mencari model regresi terbaik yang memiliki nilai error yang terkecil.

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:

Grafik diatas menunjukkan hubungan variabel x dan variabel y dimana terlihat


bahwa kedua variabel tersebut berkorelasi negatif. Ini bermakna bahwa semakin
tinggi nilai x, maka nilai y akan semakin kecil.

Contoh Kasus Regresi Linier: Koefisien Regresi dan Linear Fit


Berdasarkan scatterplot yang telah ditampilkan sebelumnya, aku akan mencoba
mencari model regresi dari dataset yang kumiliki.

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 :

Dengan menggunakan variabel diatas, aku mendapatkan persamaan sebagai berikut:


Cara diatas adalah metode yang cukup sering digunakan dalam model regresi.
Perhitungan diatas cukup banyak melibatkan perhitungan matematis. Dari bahan
materi ini, aku dapat menggunakan bahasa pemrograman R untuk menghitung
model regresi dengan cepat.
Pengaruh Konsumsi Permen Terhadap Kunjungan Rumah Sakit
Aku kembali mengecek email dari Kroma, untuk melihat ada 2 dataset yang bisa kugunakan untuk
mendapatkan hasil analisa.

Dataset pertama yaitu kunjungan_dokter_gigi_kota_x_dqlab.tsv yang berisi data tingkat kunjungan


masyarakat ke dokter gigi perbulan. Dan dataset kedua yaitu tingkat_penjualan_kota_x_dqlab.tsv
yang berisikan data penjualan makanan per bulan.

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 menampilkan tabel, aku mengetikkan

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

x dan y merupakan dataset yang ingin digabungkan.


Parameter by.x dan by.y merupakan kolom yang akan digunakan untuk menggabungkan data. Untuk
data dengan lebih dari satu unique key, dapat menggunakan perintah by.x = c("key 1", "key 2", ...,
"dst"). Namun jika terdapat 1 unique key, cukup menggunakan perintah by.x = "key 1".
Parameter sort=FALSE atau sort=TRUE digunakan untuk mengurutkan data ketika melakukan join.
Aku menjalankan perintah berikut untuk menggabungkan kedua dataset kunjungan_dokter dan
penjualan_permen

Setelah menekan RUN aku pun memperoleh output seperti berikut


Data Eksplorasi: Kunjungan ke Dokter Gigi vs Perilaku Konsumsi
Setelah aku berhasil menggabungkan kedua dataset, aku sudah siap untuk
melanjutkan analisis yang diminta oleh Kroma.

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.

Menghitung summary dari data

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.

Melakukan Eksplorasi Data Dengan Visualisasi


Selain menggunakan eksplorasi data, visualisasi data juga merupakan hal yang penting sebelum
melakukan analisis regresi. Dalam metode kali ini, aku akan menggunakan scatter plot untuk melihat
hubungan antara kunjungan dokter gigi dengan penjualan permen, sereal, dan pisang. Jadi aku perlu
membuat grafiknya secara berurutan coding-nya.
Dari potongan kode ini ada 3 grafik yang akan dihasilkan, yaitu:
#Melakukan explorasi data kunjungan dokter dengan penjualan permen
plot(data_gabungan$[Link],
data_gabungan$[Link],
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Permen",
main = "Kunjungan dokter dengan penjualan permen",
col = "blue")

#Melakukan explorasi data kunjungan dokter dengan penjualan sereal


plot(data_gabungan$[Link],
data_gabungan$[Link],
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Sereal",
main = "Kunjungan dokter dengan penjualan sereal",
col = "blue")

#Melakukan explorasi data kunjungan dokter dengan penjualan buah


pisang
plot(data_gabungan$[Link],
data_gabungan$[Link],
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan Buah Pisang",
main = "Kunjungan dokter dengan penjualan buah pisang",
col = "blue")

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

Insight yang Aku Dapatkan


Berdasarkan grafik yang kuhasilkan ini, aku berhasil menemukan sebuah fakta menarik. Aku melihat
bahwa dengan delayed effect selama 4 bulan, hubungan antara tingkat kunjungan dokter dengan
penjualan permen terlihat cukup kuat dan berkorelasi positif.

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.

Selanjutnya akupun menjalankannya dengan menekan RUN, dan kemudian


outputnya dapat diperoleh melalui Console yang ditunjukkan berikut ini
Analisis Regresi
Untuk melakukan analisis regresi, aku menggunakan perintah berikut:

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.

Memprediksi Kunjungan Dokter Dengan Penjualan Permen


Dengan menggunakan model regresi pada bagian sebelumnya, kini aku dapat melakukan prediksi
kunjungan dokter dengan variabel input berupa penjualan permen. Semisal aku memiliki data
penjualan permen pada bulan Januari, Februari, Maret, April, dan Mei 1998 sebagai berikut:
Aku menggunakan perintah ini untuk memprediksi kunjungan dokter:

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.

Aku membuat catatan kecil yang bisa kuberikan kepada Kroma.

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

## Delayed period data.


## Berdasarkan scatter plot dari efek delayed period, dapat dilihat bahwa delayed period selama 4
bulan merupakan
## variabel dengan hubungan yang cukup kuat dengan kunjungan dokter.
library (dplyr)
data_delayed_effect = [Link](
bulan = datagabungan$bulan,
tahun = datagabungan$tahun,
kunjungan_dokter = datagabungan$kunjungan_dokter,
penjualan_sereal = datagabungan$penjualan_sereal,
penjualan_sereal_1 = lag(datagabungan$penjualan_sereal),
penjualan_sereal_2 = lag(datagabungan$penjualan_sereal,2),
penjualan_sereal_3 = lag(datagabungan$penjualan_sereal,3),
penjualan_sereal_4 = lag(datagabungan$penjualan_sereal,4),
penjualan_sereal_5 = lag(datagabungan$penjualan_sereal,5),
penjualan_sereal_6 = lag(datagabungan$penjualan_sereal,6)
)
head(data_delayed_effect)
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_sereal_1,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan sereal",
main = "Kunjungan dokter dengan penjualan sereal (delay 1 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_sereal_2,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan sereal",
main = "Kunjungan dokter dengan penjualan sereal (delay 2 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_sereal_3,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan sereal",
main = "Kunjungan dokter dengan penjualan sereal (delay 3 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_sereal_4,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan sereal",
main = "Kunjungan dokter dengan penjualan sereal (delay 4 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_sereal_5,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan sereal",
main = "Kunjungan dokter dengan penjualan sereal (delay 5 bulan)",
col = "blue")
plot(data_delayed_effect$kunjungan_dokter, data_delayed_effect$penjualan_sereal_6,
pch = 19,
xlab = "Kunjungan dokter",
ylab = "Penjualan sereal",
main = "Kunjungan dokter dengan penjualan sereal (delay 6 bulan)",
col = "blue")
Langkah Kelima
Setelah melakukan data eksplorasi, lakukanlah analisis regresi!
Lakukan interpretasi dari model regresi dan temukan informasi yang berguna terkait hubungan antara
penjualan sereal terhadap kunjungan rumah sakit!
Karena sudah kudapatkan hasil periode delayed efect yang cukup kuat dan positif 4 bulan, maka untuk
data ini pun periode yang kugunakan adalah 4 bulan.

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.

Mengenal Tipe Data Character / String pada R


Setelah aku meneliti email dari Kroma, ada pertanyaan yang sedikit membuatku bingung. Tanpa ragu,
segera kutanyakan pada Andra yang ditugaskan menyelesaikan pekerjaan ini bersamaku.
"Apakah kita sering berhadapan dengan data teks? Apa ya yang membedakan data teks dengan data
numerik yang sudah sering kita olah selama ini?"
Andra tampak terdiam sejenak sebelum menjawab, “Hmm, sebelumnya kita sudah mempelajari tipe-
tipe dari data kan, yang salah satunya merupakan data character atau string. Data character atau
string pada R ditandai dengan adanya tanda kutip ('...') atau kutip dua ("...") di antara datanya."
"Nih, biar kamu ga bingung, coba baca bagian yang ini," kata Andra sambil menunjukkan layar
laptopnya padaku yang sudah terbuka salah satu halaman artikel dari internet.
Contoh data character atau string adalah sebagai berikut.
 '123'
 'Data Science'
 'Ayo belajar Data Science di DQLab'
Data dalam bentuk teks (character / string) merupakan salah satu contoh data yang tidak berstruktur
atau unstructured data, di mana biasanya menghabiskan waktu lebih lama untuk melakukan proses
wrangling sebelum akhirnya bisa dianalisis lebih lanjut. Melakukan pemrosesan pada data tidak
berstruktur bisa lebih lama karena terdapat format yang berbeda-beda, mengekstrak data yang
terdapat pada teks, dan mendeteksi pola atau pattern yang terdapat pada teks karena pola pada data
teks mungkin tidak dapat langsung terlihat seperti pada data numerik.
(untuk lebih lengkapnya mengenai jenis-jenis data, dapat membaca artikel [Link]/kenali-tiga-jenis-
data-pada-big-data)
Mengenal dataset yang Digunakan
“Tadi kan sudah terima data dari email yang dikirimkan Kroma. Nah, kali ini kita akan mengolah data
yang disimpan pada file dengan ekstensi .txt. Sebelumnya kita sudah pernah bekerja dengan data csv
dan tsv, bukan? Jika sebelumnya kita menggunakan function [Link]() untuk melakukan import file
CSV dan TSV, untuk melakukan import file txt ke dalam workspace, kita dapat menggunakan
function [Link]() yang cara kerjanya mirip dengan [Link](). Aku sudah melakukan import data
ke dalam workspace dan coba kamu perhatikan data ini”, ujar Andra.
Andra pun memberikanku potongan codes untuk melakukan import data menggunakan
function [Link]()
Berdasarkan potongan gambar di atas, beberapa informasi yang diperoleh adalah sebagai berikut :
1. Terdapat 5 data yaitu nama, tempat lahir, tanggal lahir, dan provinsi
2. 5 data point tersebut disimpan ke dalam satu kolom yang bernama “data_list”
3. Setiap data dipisahkan dengan “|||”

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.

Penerapan Function Lainnya untuk Mengolah Data String


"Kalau kamu mau lebih paham tentang penggunaan function dari materi yang sudah kamu baca,
kamu coba jalankan potongan kode pada catatan begini satu per satu ya, Nyi. Perhatikan output dari
masing-masing barisnya!" Andra menyuruhku untuk mencobanya sendiri.
Aku akan menjalankan satu per satu kode nya seperti yang diminta oleh Andra pada live code editor.
Berkenalan dengan Regex dan Grep
"Sekarang kita akan lanjut berkenalan dengan regular expression. Regular expression (regex)
merupakan sebuah cara yang digunakan untuk mendeskripsikan sebuah pattern atau pola yang ada
pada string yang kemudian berguna untuk mencari teks atau character tertentu. Sebagai praktisi data,
kita akan banyak menggunakan regex untuk pekerjaan sehari-hari, seperti misalnya mencari file yang
ada pada suatu folder melalui regex pada command line, mencari artikel yang mengandung pola teks
tertentu, mengganti string dengan pola tertentu, dan banyak kasus lain.", kata Andra.
"Cara yang paling umum digunakan untuk menggunakan regex adalah menentukan character atau
teks apa yang ingin kita cari terlebih dahulu”, Andra kembali memberikan penjelasan kepadaku
tentang materi yang perlu aku pelajari selanjutnya.

Beberapa regex yang umum digunakan adalah sebagai berikut.


Latihan Regex dan Function Grep
“Sekarang kembali ke data yang kita gunakan, coba kita cari apakah ada data nama yang mengandung
angka di dalamnya. Untuk melakukan hal tersebut, kita dapat menggunakan function grep() yang
berfungsi untuk mencari substring yang sesuai dengan pattern yang kita masukkan. Kamu dapat
menggunakan potongan codes berikut”, Andra menjelaskan sambil terus mengetik.

“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.

#Melakukan import file


data <- [Link](
file = "[Link]
header = FALSE,
sep = "\n",
[Link]=c("NA","N/A",""),
[Link] = 'data_list',
skip = 1)

#Menampilkan 5 data teratas


head(data,5)

#Memisahkan data menggunakan strsplit


data <- strsplit(data$data_list,split = "|||", fixed = TRUE)

#Merubah data menjadid dataframe


df <- [Link](matrix(unlist(data), nrow=length(data), byrow=TRUE))

#Memberikan nama pada setiap kolom


colnames(df) <- c('Nama','Tempat_Lahir', 'Tanggal_Lahir','Provinsi')

#Tampilkan 5 baris pertama dari df


head(df,5)

#Tambahkan kolom baru yang berisi tempat lahir dan provinsi


df$kota_provinsi <- paste(df$Tempat_Lahir,",", df$Provinsi)

#Tampilkan 5 data teratas dari df


head(df,5)

#Menghapus karakter yang bukan termasuk alphabet pada kolom Nama


df$Nama <- gsub('[^A-Za-z]','',df$Nama)

#Tampilkan isi dari df


df

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.

Import dan Eksplorasi Awal Data


Segera setelah aku mendapatkan file berisi data dari Kroma, aku langsung mengecek file tersebut dan
mendapati bahwa data yang akan digunakan berformat TSV (Tab Separated Value). Untuk project kali
ini, aku memutuskan untuk menggunakan bahasa pemrograman R.
Sebelum melakukan analisa lebih lanjut, hal pertama yang harus aku lakukan tentu saja melakukan
load data ke dalam workspace dan memperoleh gambaran besar dari data yang akan diolah.
Instruksi:
1. Load dataset ke dalam workspace dengan menggunakan function [Link]() dan simpan ke
dalam variable bernama data
2. Tampilkan 5 data teratas dengan menggunakan function head()
3. Tampilkan 5 data terbawah dengan menggunakan function tail()
4. Tampilkan informasi mengenai struktur data dengan menggunakan function str()
Mengubah Tipe Data Tanggal
Info: Predefined Code telah diperbaiki pada tanggal 22 Nopember 2022. Silakan dicek kembali kode
yang telah dituliskan.
Aku melihat bahwa tipe data dari variabel Tanggal adalah character dan langsung menyadari bahwa
untuk keperluan analisis selanjutnya akan lebih mudah apabila variable Tanggal tersebut memiliki tipe
data date. Oleh karena itu, tugas selanjutnya yang akan Aksara lakukan adalah mengubah tipe data
dari variabel Tanggal menjadi date dan menambahkan satu variabel bernama Bulan_Tahun untuk
menyimpan data bulan dan tahun.

Mengubah Tipe Data Numerik


Info: Predefined Code telah diperbaiki pada tanggal 22 Nopember 2022. Silakan dicek kembali kode
yang telah dituliskan.
Setelah aku selesai mengubah tipe data dari variabel Tanggal, mendadak Senja rekan kerjaku yang
sedang duduk di sebelahku menunjuk ke arah layar komputer.
“Wah Aksara, coba lihat deh, ada variabel yang bernama Harga, tapi tipe data dari variabel tersebut
adalah character. Coba kamu cek kembali, apakah benar bahwa variabel tersebut memang
menyimpan data character”, ujar Senja.
Aku yang sempat terkejut gara-gara Senja, melihat kembali dan menyadari bahwa variabel Harga yang
menyimpan data angka memiliki tipe data character. Tidak menunggu lebih lama lagi, Aku langsung
bergegas untuk mengubah tipe data Harga menjadi numerik.
"Thank you, Nja, karena mata kamu yang sangat jeli melihat kesalahan ini," kataku pada Senja.
"Tapi, lain kali jangan ngagetin ya," tambahku.
Senja pun tertawa," Maaf ya, Aksara, hehehe."

Analisis Penjualan per Bulan


Setelah memahami betul isi dari data yang dimiliki, seperti variabel-variabel yang terdapat di dalam
data serta tipe dari masing-masing variabel, selanjutnya aku ingin memperoleh informasi lebih jauh
yang tidak dapat dilihat secara langsung di dalam data. Aku kembali melirik email yang Kroma
kirimkan dan melihat bahwa dalam program mitra reward ini, Kroma memerlukan beberapa data
untuk dianalisis lebih lanjut.

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)

#Visualisasikan data dengan chart yang sesuai


#Buat tabel transaksi menggunakan fungsi aggregate
data_transaksi = aggregate(
x=data$Jumlah,
by = list(Bulan = data$Bulan_Tahun, Jenis_Transaksi = data$[Link]),
FUN = sum)

#Keluarkan data transaksi penjualan dan stok masuk


data_penjualan <- data_transaksi[(data_transaksi$Jenis_Transaksi) == "Penjualan",]
data_stok_masuk <- data_transaksi[(data_transaksi$Jenis_Transaksi) == "Stok Masuk",]

#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.

Analisis Hubungan Antara Harga Barang dan Jumlah Transaksi


Setiap selesai melakukan suatu tahapan, aku kembali membuka file yang dikirimkan oleh Kroma untuk
memastikan bahwa aku sudah mengerjakan analisis yang dibutuhkan oleh Kroma. Saat ini aku ingin
melihat apakah terdapat hubungan antara harga barang dengan jumlah transaksi, data selanjutnya
yang akan dibandingkan nilainya adalah harga barang dengan jumlah transaksi. Kroma ingin
mengetahui apakah terdapat perbedaan antara jumlah transaksi dengan harga barang.

Dan langkah yang akan aku tempuh adalah dengan melakukan :


1. Dengan menggunakan function aggregate(), tampilkan data jumlah transaksi dengan harga
barang yang dibeli.
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

#Analisis hubungan antara Harga Barang dengan Jumlah Transaksi


#Memilih data dengan jenis transaksi Penjualan
data <- data[(data$[Link]) == "Penjualan",]

#Mengubah data harga menjadi Integer


data$Harga <- [Link](data$Harga)

#Mengubah nilai NA menjadi 0


data$Harga[[Link](data$Harga)] <- 0

#Menghitung jumlah transaksi berdasarkan rentang harga


data_transaksi <- aggregate(
x=data$[Link],
by = list(Harga = data$Harga),
FUN = length)

#Mengurutkan data dari harga termahal


data_transaksi = data_transaksi[order(-data_transaksi$Harga), ]

#Visualisasi data hubungan harga barang dengan jumlah transaksi


#Sebelum menggunakan perintah hist() kamu perlu memecah data transaksi diatas menjadi bentuk
data vektor sebagai berikut
data_transaksi_freq = [Link](rep(data_transaksi$Harga, data_transaksi$x))

#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

Anda mungkin juga menyukai