Data Science in Marketing: Segmentasi Pelanggan Menggunakan R
Segmentasi pelanggan adalah strategi mengelompokkan pelanggan ke dalam kelompok/segmen yang berbeda berdasarkan kriteria tertentu. Persaingan usaha yang ketat mengharuskan perusahaan untuk selalu mampu memahami sebuah pasar yang terus berkembang. Salah satu faktor dominan yang mempengaruhi perkembangan pasar adalah pelanggan. Mengenali perilaku pelanggan dalam aktivitas transaksi menjadi modal yang besar untuk meningkatkan profit perusahaan. Apalagi pengumpulan data transaksi pelanggan sudah menjadi hal yang umum, memungkinkan praktisi data mengolah data tersebut dan menghasilkan segmentasi pelanggan.
Metode RFM menjadi salah satu metode segmentasi pelanggan yang umum digunakan. Ada banyak sekali artikel atau kursus yang menjelaskan keandalan metode ini, tentunya termasuk DQLab. RFM sendiri adalah singkatan dari recency, frequency dan monetary. Dimana:
Recency adalah rentang waktu transaksi terakhir dengan periode waktu analisis data;
Frequency adalah jumlah transaksi yang dilakukan pelanggan;
Monetary adalah jumlah uang yang dikeluarkan pelanggan pada seluruh jumlah transaksi.
Dalam menganalisis data transaksi pelanggan guna menghasilkan segmentasi pelanggan yang valid dan ilmiah, kita butuh sebuah algoritma. Dalam ilmu data terdapat algoritma cluster yang bisa kita gunakan pada studi kasus ini. Namanya adalah algoritma k-means. Algoritma ini banyak diajarkan di kelas-kelas statistik dasar dan data science. Keuntungan algoritma ini adalah mudah dipelajari dan sederhana karena pada dasarnya algoritma ini hanya menghitung jarak tiap data ke titik pusat cluster.. Pada artikel ini, akan dijabarkan bagaimana implementasi algoritma k-means menggunakan bahasa pemrograman R.
Packages
Ada 4 packages yang akan digunakan pada artikel ini, yaitu:
tidyverse, kumpulan packages untuk memanipulasi dan fungsi-fungsi lainnya;
lubridate, untuk memanipulasi bentuk tanggal dan waktu;
factoextra, untuk clustering dan visualisasinya.
Untuk menggunakan packages pertama kali, kita harus menginstallnya terlebih dahulu
```
install.packages(c("tidyverse",
"lubridate",
"factoextra"))
```
Perlu diingat, cukup sekali saja dalam menginstall packages. Jika sebelumnya sudah menginstall packages di atas, bisa langsung memanggil packages tersebut.
```
library(tidyverse)
library(lubridate)
library(factoextra)
```
Data
Data yang digunakan pada artikel ini, bisa didapatkan di unduh gratis melalui situs kaggle. Dimana data ini merupakan data transaksi retail di Inggris.
Setelah mengunduh data, selanjutnya kita perlu mengimpor data tersebut ke environment R.
```
df_data <- read.csv("data/data.csv")
head(df_data)
```
Data terdiri dari beberapa variabel yakni:
"InvoiceNo", nomor pesanan;
"StockCode", kode stok barang;
"Description", nama barang;
"Quantity", jumlah barang yang dibeli;
"InvoiceDate", tanggal transaksi;
"UnitPrice", harga per barang;
"CustomerID", id pelanggan;
"Country", negara asal pelanggan.
Baca juga : Kursus Belajar Data dengan Bahasa R Untuk Pemula
Data Cleaning
Data Cleaning adalah proses menyiapkan data untuk dilakukan analisis dengan cara menghapus atau memodifikasi data salah, tidak relevan, duplikat, dan tidak terformat. Pada data ini terdapat anomali data, dimana terdapat UnitPrice dan Quantity yang minus. Dimana secara logika, tidak mungkin ada harga barang atau jumlah barang yang dibeli minus.
```
## membuang anomali data
df_data <- df_data %>%
mutate(Quantity = replace(Quantity, Quantity<=0, NA),
UnitPrice = replace(UnitPrice, UnitPrice<=0, NA))
## menghapus data yang kosong atau
df_data <- df_data %>%
drop_na()
```
Data Wrangling
Data wrangling adalah proses transformasi data mentah ke dalam format yang lebih rapi dan siap diolah. Kita perlu mentransformasi data untuk mendapatkan variabel recency, frequency, dan monetary. Adapun skenarionya dengan mengelompokkan data berdasarkan CustomerID lalu untuk variabel:
Recency, mengurangkan tanggal akhir periode analisis dengan tanggal terakhir kali pelanggan melakukan transaksi. Karena tanggal pada data adalah tahun 2010-2011, maka tanggal akhir periode analisis adalah 2012-01-01.
Frequency, menghitung jumlah InvoiceNo unik pelanggan.
Monetary, mengalikan harga barang dengan jumlah barang yang dibeli lalu ditotalkan.
```
# membuat data RFM
df_data <- df_data %>%
mutate(InvoiceNo=as.factor(InvoiceNo),
StockCode=as.factor(StockCode),
InvoiceDate=as.Date(InvoiceDate, '%m/%d/%Y %H:%M'),
CustomerID=as.factor(CustomerID),
Country=as.factor(Country))
df_data <- df_data %>%
mutate(total_dolar = Quantity*UnitPrice)
## RFM
df_RFM <- df_data %>%
group_by(CustomerID) %>%
summarise(recency=as.numeric(as.Date("2012-01-01")-max(InvoiceDate)),
frequency=n_distinct(InvoiceNo),
monitery= sum(total_dolar)/n_distinct(InvoiceNo))
summary(df_RFM)
```
Standarisasi Data
Algoritma K-means, seperti namanya menggunakan nilai rata-rata dalam perhitungannya. Sehingga agar hasil perhitungan lebih akurat kita harus melakukan standarisasi data.
```
#standarisasi data
df_RFM$frequency_standard <- scale(df_RFM$frequency)
df_RFM$monitery_standard <- scale(df_RFM$monitery)
df_RFM$recency_standard <- scale(df_RFM$recency)
```
Segmentasi Pelanggan dengan algoritma K-means
Sebelum menjalankan algoritma K-means, terlebih dahulu kita akan menentukan jumlah cluster yang ingin dibuat menggunakan metode silhouette.
```
set.seed(1)
fviz_nbclust(df_RFM[c("recency_standard", "frequency_standard", "monitery_standard")],
kmeans, method = "silhouette")
```
Dari grafik diatas, didapatkan jumlah cluster optimal adalah 4. Selanjutnya kita membuat model algoritma k-means.
```
segmentasi <- kmeans(x=df_RFM[c("recency_standard", "frequency_standard",
"monitery_standard")], centers=4, nstart=25)
segmentasi$centers
summary(segmentasi$centers)
```
Selanjutnya kita akan memberi label kluster pada masing-masing data dan melihat nilai rata-rata masing cluster untuk menentukan segmennya.
```
df_RFM$cluster <- segmentasi$cluster
df_RFM %>%
group_by(cluster) %>%
summarise(mean_recency = mean(recency),
mean_freq = mean(frequency),
mean_monitery = mean(monitery))
```
Berdasarkan data di atas, kita bisa menentukan segmen sebagai berikut:
Kluster 1 adalah segmen Special Value
Kluster 2 adalah segmen Medium Value
Kluster 3 adalah segmen High Value
Kluster 4 adalah segmen Low Value
Terakhir kita akan memberi label pada masing-masing data.
```
df_RFM <- df_RFM%>%
mutate(segmentation = case_when(cluster == 1 ~ "Special Value",
cluster == 2 ~ "Medium Value",
cluster == 3 ~ "High Value",
cluster == 4 ~ "Low Value",
TRUE ~ "Other"))
```
Nah, kita telah berhasil mendapatkan segmentasi pelanggan seperti gambar di atas. Dimana customer 12346 termasuk pelanggan Special Value sedangkan customer 12352 adalah pelanggan Medium Value.
Baca juga : Belajar Data Science: Bahasa Pemrograman R Cocok untuk Pemula
Menyimpan model
Perlu diketahui algoritma k-means dimulai dengan penentuan center secara acak, sehingga urutan klaster yang diperoleh kadang berubah. Maka disarankan untuk menyimpan model.
```
Segmen.Pelanggan <- data.frame(cluster=c(1,2,3,4),
Value.Segment=c("Special Value", "Medium Value",
"High Value", "Low Value"))
#Menggabungkan seluruh aset ke dalam variable Identitas.Cluster
Identitas.Cluster <- list(Segmentasi=segmentasi,
Segmen.Pelanggan=Segmen.Pelanggan,
column=c("recency_standard", "frequency_standard", "monitery_standard"))
saveRDS(Identitas.Cluster,"cluster_rfm.rds")
```
Ingin belajar lebih detail?
Mungkin ada yang bertanya jika kita memiliki data baru, apakah bisa melakukan segmentasi dengan model yang tadi kita buat, atau harus memasukkan data baru ke data lama lalu membangun model kembali.
Penasaran dengan jawabannya? Yuk dapatkan jawabannya dengan mengikuti kelas Data Science in Marketing: Customer Segmentation DQLab.
Terdapat materi yang sangat lengkap namun tetap mudah dipahami bagi pemula sekalipun. Tidak hanya kelas tersebut, masih terdapat kelas dan program lain yang bisa sahabat DQ dapatkan guna ilmu tentang analisis data. Tunggu apalagi? Sign up sekarang di DQLab.id!
Penulis: Ashari Ramadhan