#Latar Belakang
Kurang Taksir, Hilang Laba
Peribahasa tersebut dapat diterjemahkan menjadi kurang hati-hati mungkin akan mendatangkan kerugian (kesusahan dan sebagainya)
adalah gambaran yang tepat untuk selalu mawas diri terhadap apapun yang terjadi di sekitar, yang sekarang akan kita khususkan pada lingkungan bisnis/ usaha.
Hal sederhana yang luput dari mata, lama kelamaan akan mendatangkan bencana (kerugian).
Sukses berkepanjangan bagi seorang pebisnis maupun pengusaha bukan hanya dari banyaknya jumlah barang ataupun jasa yang terjual pada setiap transaksi melainkan bagaimana caranya agar pelanggan dapat kembali melakukan transaksi dengan anda.
Berprasangka bahwa banyaknya jumlah transaksi dan jumlah pelanggan aktif per bulan sudahlah cukup untuk menggambarkan retention, padahal, kedua hal ini hanya akan menghitung pertumbuhan dan retention (pelanggan yang kembali) secara sederhana sehingga perlu dilakukan pemeriksaan mendalam yang dapat dilakukan dengan Cohort Analysis .
Cohort Analysis adalah bagian dari behavioral analytics (analisa perilaku) yang datanya didapat dari berbagai macam sumber yang mengandung informasi transaksi. Metode yang diterapkan adalah dengan membagi pelanggan ke beberapa kelompok (yang disini disebut juga dengan Cohorts) berdasarkan kemiripan karakteristik transaksi atau pengalaman dalam kurun waktu tertentu.
Cohort Analysis adalah metode untuk mengukur user engagement (keterikatan terhadap pengguna/ pelanggan lampau) sepanjang waktu, apakah engagementnya semakin membaik seiring waktu atau hanya jumlah pelanggan (baru)-nya saja yang meningkat.
Analisa ini berharga karena memisahkan antara growth metrics (matriks pertumbuhan jumlah pelanggan) dengan engagement metrics (matriks keterikatan terhadap pelanggan lama) karena biasanya pertumbuhan jumlah pelanggan dapat dengan mudah mengaburkan masalah hilangnya engagement dengan pelanggan lama.
Berikut adalah contoh penerapan Cohort Analysis pada data pelanggan yang melakukan transaksi harian dengan rentang waktu 10 hari dan tingkat retention setelahnya (H+1 dan seterusnya)
Dari tabel tersebut dapat kita simpulkan bahwa:
1358 pelanggan melakukan transaksi pada tanggal 26 januari, retention hari pertama sebanyak 31.1% dan retention hari ke-tujuh adalah 12.9% sehingga 1 dari 8 pelanggan merupakan pelanggan aktif yang masih melakukan transaksi
Dari keseluruhan jumlah pelanggan (13.487 orang), 27% pelanggan kembali pada H+1, 12.5% pada H+7 dan 12.1% pada H+10
Dua keuntungan utama dari pembacaan tabel cohort di atas adalah:
Dapat melihat lebih detail persentase retention pelanggan pada setiap cohort, hal ini dapat menentukan kualitas dari transaksi (semisal kualitas pelayanan dari tim penjualan pada cohort tertentu)
Dapat mengetahui hubungan jangka panjang dengan pelanggan pada setiap cohort, memastikan seberapa lama pelanggan akan kembali bertransaksi lagi atau seberapa berharganya cohort tersebut. Hal ini dapat dikorelasikan terhadap kualitas produk, operasional dan customer support pada cohort tersebut.
Library pendukung
#Data Wrangling
library(tidyverse)
library(readxl)
library(dplyr)
library(DT)
library(reshape) #fungsi melt
library(scales)
#Algoritma
library(arules)
library(arulesViz)
#Tampilan
library(RColorBrewer)
library(plotly)
#Dataset dan function Cohorts
library(cohorts)Berikut adalah sampel data transaksi yang digunakan dari library(cohorts), untuk kebutuhan analisa ini hanya dibutuhkan dua kolom yaitu CustomerID dan InvoiceDate.
head(online_cohorts)Informasi data:
CustomerID = Penomoran unik yang menggambarkan nomor pelanggan
InvoiceDate = Tanggal transaksi
Pada bagian ini akan dilakukan beberapa tahap pengolahan data yaitu:
Pemeriksaan secara mendetail
Pembersihan & Merapihkan
Analisa singkat
#Memeriksa rentang tahun
range(online_cohorts$InvoiceDate)## [1] "2010-12-01" "2011-12-09"
Terlihat rentang data antara tahun 2010 dan 2011 maka
kita hanya akan menggunakan data tahun 2011.
#Subset data berdasarkan kebutuhan
#Membagi cohort berdasarkan bulan transaksi
#Kondisi Angka Normal
shifted <- online_cohorts %>%
filter(InvoiceDate > "2010-12-31") %>% #Membatasi tahun hanya 2011
cohort_table_month(id_var = CustomerID,
date = InvoiceDate) %>%
shift_left() #Menggeser data ke kiri
#Menjadi Persentase
shifted_pct <- online_cohorts %>%
filter(InvoiceDate > "2010-12-31") %>% #Membatasi tahun hanya 2011
cohort_table_month(id_var = CustomerID,
date = InvoiceDate) %>%
cohort_table_pct() %>% #Diubah ke dalam persentase
shift_left() #Menggeser data ke kiri
# Menyesuaikan penamaan kolom data
# Kolom pertama dinamakan "cohort", dan seterusnya bernama bulan
colnames(shifted) <- c("cohort", sub("","month.", str_pad(1:(ncol(shifted)-1),2,pad = "0")))
colnames(shifted_pct) <- c("cohort", sub("","month.", str_pad(1:(ncol(shifted_pct)-1),2,pad = "0")))
#Mengubah posisi data dari menyamping ke menurun
plotdata_abs <- gather(shifted, "cohort_age", "people" ,2:ncol(shifted ))
plotdata_pct <- gather(shifted_pct, "cohort_age", "percent" ,2:ncol(shifted_pct))
#Menyusun kembali value pada kolom (Antara besaran angka dengan persentase)
labelnames <- c( plotdata_abs$people[1:(ncol(shifted)-1)],
plotdata_pct$percent[(ncol(shifted_pct)):(nrow(plotdata_pct))])
# Fungsi pretty labels
pretty_print <- function(n) {
case_when( n <= 1 ~ sprintf("%1.0f %%", n*100),
n > 1 ~ as.character(n),
TRUE ~ " ") # for NA values, skip the label
}
# Membuat kembali data plot
plotdata <- data.frame(
cohort = plotdata_pct$cohort,
cohort_age = plotdata_pct$cohort_age,
percentage = plotdata_pct$percent,
label = pretty_print(labelnames)
)
a <- shifted[,c(2:13)]
b <- shifted[,2]
retention <- apply(a, 2, function(a) a/b )
retention <- data.frame(cohort=(shifted$cohort), retention)
retention.v2 <- data.table::copy(retention) #untuk grafik ke-2
retention <- retention[,-2]
#1. Gabungkan kembali data month.01 dengan month.02
retention <- add_column(retention, b, .after = "cohort")
# retention <- retention %>%
# rename(month.01 = b)
#2. Jumlahkan customer
sum.cust <- data.frame(sum(retention$month.01))
#3. Kalkulasi Avg. month.02 dan seterusnya
#Clone
avg.retention <- retention
avg.retention.test <- round(apply(avg.retention[,-1:-2],2,mean, na.rm=TRUE),4)
avg.retention.test.2 <- data.frame(c(0, sum.cust, avg.retention.test))
avg.retention.test.2 <- avg.retention.test.2 %>%
dplyr::rename(month.01 = sum.retention.month.01.,
cohort = X0)#Gabungkan sum+month
test.combine <- rbind(retention, avg.retention.test.2)
#rename 0 di cohort supaya kosong
test.combine[13,1] = ""
#1st Plot
# Membuat 19 breaks dan 20 warna rgb dengan rentang dari biru sampai putih
breaks <- quantile(test.combine[,3:13], probs = seq(.05, .95, .05), na.rm = TRUE)
colors <- sapply(round(seq(155, 80, length.out = length(breaks) + 1), 0),
function(x){ rgb(x,x,155, maxColorValue = 155) } )
# Retention rate mixpanel
cohort1 <- DT::datatable(test.combine,
class = 'cell-border stripe',
rownames = FALSE,
options = list(
ordering=F,
dom = 't',
pageLength = 13),
colnames = c("cohort", "month.01", "month + 02", "month + 03", "month + 04", "month + 05", "month + 06", "month + 07", "month + 08", "month + 09", "month + 10", "month + 11", "month + 12")) %>%
formatStyle("month.01",backgroundColor = 'lightgrey',
fontWeight = 'bold') %>%
formatPercentage(c(3:13),2) %>% # We don't want column 0 in %
formatStyle("month.01", fontWeight = 'bold') %>%
formatStyle(names(test.combine[c(-1,-2)]),color = 'black',fontWeight = 'bold', backgroundColor = styleInterval(breaks,colors))
cohort1retention.v3 <- retention.v2[,-2]
# use first column for row names
# row.names(retention.v2) <- NULL
#ambil data dari cohort 1, data "avg.retention.test.2" adalah average per bulan berjalan
label.cohort.2 <- avg.retention.test.2[,-1:-2]
label.cohort.2 <- melt(label.cohort.2)
#median(label.cohort.2$value)
cohort_plot.v2 <- reshape::melt(retention.v3, id.vars = "cohort")
colnames(cohort_plot.v2) <- c("cohort", "month", "retention")
cohort_plot.v2 <- filter(cohort_plot.v2, retention != 0)
c <- ggplot(cohort_plot.v2, aes(x=month, y=retention, group=cohort, colour=cohort))
c <-c + geom_line(size=2, alpha=0.5) +
geom_point(size=3, alpha=1) +
geom_smooth(aes(group=1), method = "loess", size=3, colour="turquoise", se=FALSE)+
geom_label(aes(x = 5, y = 0.45),label = paste(median(label.cohort.2$value)*100,"%"), size = 4, nudge_x = 0.01, fill = "white", colour = "red")+
xlab("")+
labs(title="2011 Retention Percentage", x = "")
c + scale_color_distiller(palette="Set3") + theme(panel.background = element_blank())+
theme(axis.text.x = element_text(angle = 20, vjust = 0.5, hjust=1))Pada table di atas terlihat bahwa pada bulan+1 hanya 22.7% pelanggan yang melakukan repurchase (pembelanjaan kembali) dan kemudian semakin menurun seiring bulan berjalan.
dan Pada line chart di atas terlihat bahwa rerata (berdasarkan median) repurchase pelanggan sepanjang tahun adalah hanya sebesar 13.49%
Dari kedua informasi tersebut di atas dapat mengetahui tren transaksi serta kapan pelanggan mengurangi/ memberhentikan transaksi sehingga hal ini dapat membantu menentukan arah kebijakan perusahaan terkait dengan produk yang dipasarkan maupun metode pemasaran serta pelayanan purnajualnya.
Untuk mengetahui alasan mengapa pelanggan tidak melakukan transaksi lagi dapat menggunakan metode cohorts lain yaitu Behavioral Cohorts
Customer Retention Analysis
Contoh sederhana dari behavioral cohort adalah: Semua pelanggan yang membaca review akan berlanjut dengan melakukan transaksi.
Hal ini dapat membentuk pertanyaan menarik seperti:
Dari data yang terkumpul, dapat dilakukan pendekatan yang sistematif dan akuntabel tentang bagaimana caranya membuat pelanggan baru mau membeli produk dari anda dan melakukan transaksi ulang, selain itu juga anda dapat membuat strategi untuk meningkatkan retention setelah menemukan cara yang bermanfaat dan yang tidak terhadap bisnis anda.
Hal positif dari Cohort Analysis terletak bukan hanyak dapat mengetahui pelanggan mana yang tidak bertransaksi lagi dan kapan mereka pergi tapi juga dapat memahami mengapa pelanggan tidak lagi bertransaksi sehingga dapat anda perbaiki penanganannya.
Terima kasih
Referensi