Data transaksi belanja merupakan salah satu sumber data yang sangat kaya dengan informasi pada bisnis retail. Setidaknya dalam data tersebut, terdapat informasi berupa waktu berbelanja, barang yang dibelanjakan, dan berapa nominal yang dibayarkan oleh pelanggan.
Jika kita bisa mengeksplorasi dan mengeksploitasi data tersebut, kita bisa mendapatkan insight(s) yang menarik dan berguna bagi kelangsungan bisnis retail.
Kali ini kita akan mengeksplorasi data sales harian dari ApakahMart cabang Bekasi.
Salah satu pertanyaan yang biasa terjadi pada bisnis retail adalah bagaimana cara kita menentukan produk mana saja yang bisa dijual secara bundling?
Data yang digunakan adalah data transaksi sales harian selama Januari 2020
hingga April 2020
.
Sebelum masuk ke dalam algoritma apriori, saya akan cari beberapa informasi yang ada dalam data transaksi ini. Tujuannya adalah untuk mengecek apakah data transaksi ini bisa digunakan untuk membangun analisa produk bundling atau tidak.
Langkah pertama yang saya lakukan adalah menghapus sku PLAS TIK
dari data transaksi karena sku tersebut bukanlah barang yang ‘dijual’.
Kemudian saya coba hitung berapa jenis sku
yang dibeli oleh pelanggan. Hal yang dihitung adalah berapa jenisnya, bukan qty
-nya yah.
Misalkan ada seorang pelanggan datang membeli:
5
bungkus Indomie Ayam Bawang1
bungkus Indomie Kari Ayam1
kg telurMaka dalam transaksi tersebut ada 3
jenis sku
.
Sekarang kita akan hitung terlebih dahulu, ada berapa banyak jenis sku yang dibeli oleh pelanggan selama Januari 2020
- April 2020
.
Ternyata setelah kita lihat, 45.8%
dari semua transaksi dilakukan dengan hanya membeli 1
jenis sku
saja. Sedangkan 22.2%
dari semua transaksi dilakukan dengan membeli 2
jenis sku
saja.
Mayoritas dari semua transaksi (68%) hanya membeli 1-2 jenis sku
saja.
Mengapa informasi ini diperlukan?
Dalam membuat produk bundling, diperlukan data kombinasi sku yang dibeli oleh pelanggan dalam jumlah yang cukup.
Oleh karena jumlah data yang ada relatif terbatas, maka kita akan cek kemudian ada berapa banyak paket bundling yang bisa di-generate dari analisa ini.
Untuk lebih jelasnya, silakan dibaca penjelasan mengenai dasar teori analisa ini.
Ada berbagai macam cara untuk bisa melihat kesamaan dari beberapa produk yang dibeli oleh pelanggan. Umbrella terms dari teknik-teknik tersebut disebut dengan analisa association.
Output dari analisa ini disebut dengan rules yaitu:
predict the occurrence of an item based on the occurrences of other items in the transaction.
Penjelasan yang lebih mudah lagi adalah:
if this, then that…
Perlu diingat bahwa rules dibangun berdasarkan data transaksi yang ada.
Misalkan:
Definisi resmi dari rules adalah:
if a user buys an item in the item set on the left hand side, then the user will likely buy the item on the right hand side too
Secara matematis dinotasikan sebagai: X⟹Y, dimana X,Y⊆I
Misalkan saya memiliki data transaksi sebagai berikut:
transaction_id <int> | items <chr> |
---|---|
1 | Milk, Bread |
2 | Butter |
3 | Beer, Diapers |
4 | Milk, Bread, Butter |
5 | Bread |
Maka, himpunan item produk yang adalah sebagai berikut: I={Milk,Bread,Butter,Beer,Diaper}.
Sedangkan himpunan transaksi adalah sebagai berikut: T={1,2,3,4,5}.
Salah satu contoh rules dari data di atas adalah:
If a consumer buys butter and bread, then they are also likely to buy milk. Dinotasikan: {Butter,Bread}⟹{Milk}
Catatan Penting:
Implication means co-occurrence, not causality!
Dalam analisa asosiasi, ada tiga parameter utama yang akan kita hitung, yakni:
Definisi:
Support is an indication of how frequently the itemset appears in the dataset.
Notasi: supp(X)=|{t∈T,X⊆T}||T|
Contoh:
Jika X={Beer,Diapers}, maka memiliki nilai support sebesar 20%
(produk beer dan diapers bersamaan ditemukan pada 1
dari 5
transaksi)
Definisi:
Confidence is an indication of how often the rule has been found to be true.
Confidence dari suatu rule X⟹Y dari data transaksi dihitung dari proporsi transaksi yang mengandung X dan juga mengandung Y.
Notasi: conf(X⟹Y)=supp(X∪Y)supp(X)
Confidence bisa dilihat sebagai conditional probability P(EY|EX), yakni peluang mendapatkan rhs pada saat transaksi mengandung lhs.
Contoh:
Rule {Bread,Butter}⟹{milk} memiliki nilai confidence = 100%
.
Cara hitungnya:
conf({Bread,Butter}⟹{milk})=supp(X∪Y)supp(X)
conf({Bread,Butter}⟹{milk})=supp({Bread,Butter,Milk})supp({Milk})
conf({Bread,Butter}⟹{milk})=1/51/5=100%
Kesimpulan dari contoh: setiap ada transaksi yang mengandung itemset {Bread,Butter} pasti selalu mengandung itemset {milk}.
Definisi:
Rasio yang menunjukan apakah itemset X dan itemset Y independen atau tidak.
Jika:
Notasi: lift(X⟹Y)=supp(X∪Y)supp(X)∗supp(Y)
Contoh:
Rule {Milk,Bread}⟹{Butter} memiliki nilai lift = 125%
Cara hitungnya:
lift({Milk,Bread}⟹{Butter})=supp(X∪Y)supp(X)∗supp(Y)
lift({Milk,Bread}⟹{Butter})=supp({Milk,Bread,Butter})supp({Milk,Bread})∗supp({Butter})
lift({Milk,Bread}⟹{Butter})=1/52/5∗2/5=125%
Kesimpulan dari contoh: itemset lhs dan rhs saling bergantung.
Setelah membaca penjelasan di atas, maka untuk menentukan produk apa saja yang akan di-bundling, kita akan melihat setidaknya dua parameter utama, yakni: confidence dan lift dengan syarat sebagai berikut:
Untuk menghitung semua kombinasi rules beserta parameternya, saya akan gunakan algoritma apriori.
Algoritma apriori menghasilkan 36
buah rules sebagai berikut:
## set of 36 rules
##
## rule length distribution (lhs + rhs):sizes
## 2 3 4
## 19 15 2
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 2.000 2.000 2.528 3.000 4.000
##
## summary of quality measures:
## support confidence coverage lift
## Min. :0.0005440 Min. :0.4000 Min. :0.001088 Min. : 15.23
## 1st Qu.:0.0006994 1st Qu.:0.4500 1st Qu.:0.001477 1st Qu.: 20.34
## Median :0.0010103 Median :0.4711 Median :0.001865 Median : 27.27
## Mean :0.0015629 Mean :0.4973 Mean :0.003266 Mean : 64.37
## 3rd Qu.:0.0018068 3rd Qu.:0.5281 3rd Qu.:0.003478 3rd Qu.: 91.22
## Max. :0.0080044 Max. :0.7200 Max. :0.019428 Max. :211.82
## count
## Min. : 7.00
## 1st Qu.: 9.00
## Median : 13.00
## Mean : 20.11
## 3rd Qu.: 23.25
## Max. :103.00
##
## mining info:
## data ntransactions support confidence
## tr 12868 0.0005 0.4
Mari kita lihat detail semua rules yang ada sebagai berikut:
rules <chr> | support <dbl> | confidence <dbl> | coverage <dbl> | lift <dbl> | |
---|---|---|---|---|---|
{INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G} | 0.0080043519 | 0.4120000 | 0.019428039 | 15.23453 | |
{INDOMIE AYAM BAWANG 69 GR} => {INDOMIE GORENG 85G} | 0.0056729873 | 0.5140845 | 0.011035126 | 19.00931 | |
{INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE GORENG 85G} | 0.0052067143 | 0.4685315 | 0.011112838 | 17.32489 | |
{INDOMIE AYAM SPECIAL 56 GR} => {INDOMIE GORENG 85G} | 0.0024090768 | 0.4626866 | 0.005206714 | 17.10877 | |
{INDOMIE KARI AYAM BAWANG GORENG 70 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G} | 0.0022536525 | 0.5087719 | 0.004429593 | 18.81287 | |
{INDOMIE GORENG 85G,INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE SOTO MIE 70 GR} | 0.0022536525 | 0.4328358 | 0.005206714 | 22.27893 | |
{TRANSAKSI PLN 2} => {TRANSAKSI PLN} | 0.0020205160 | 0.6190476 | 0.003263910 | 75.86576 | |
{BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} => {BIHUNKU SOTO SPESIAL 55GR} | 0.0018650917 | 0.4897959 | 0.003807896 | 110.57358 | |
{BIHUNKU SOTO SPESIAL 55GR} => {BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} | 0.0018650917 | 0.4210526 | 0.004429593 | 110.57358 | |
{INDOMIE AYAM BAWANG 69 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G} | 0.0017873795 | 0.4893617 | 0.003652471 | 18.09513 |
Angka support akan berbanding lurus dengan count, oleh karena itu bisa dipilih salah satu saja untuk menentukan rules mana yang banyak terjadi.
Dari rules yang ada, kita bisa lakukan beberapa analisa terkait nilai lift.
Ternyata kita dapatkan bahwa beberapa rules memiliki nilai lift≤100%, yakni:
rules <chr> | count <int> | confidence <dbl> |
---|---|---|
{INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G} | 103 | 0.4120000 |
{INDOMIE AYAM BAWANG 69 GR} => {INDOMIE GORENG 85G} | 73 | 0.5140845 |
{INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE GORENG 85G} | 67 | 0.4685315 |
{INDOMIE AYAM SPECIAL 56 GR} => {INDOMIE GORENG 85G} | 31 | 0.4626866 |
{INDOMIE KARI AYAM BAWANG GORENG 70 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G} | 29 | 0.5087719 |
{INDOMIE GORENG 85G,INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE SOTO MIE 70 GR} | 29 | 0.4328358 |
{TRANSAKSI PLN 2} => {TRANSAKSI PLN} | 26 | 0.6190476 |
{INDOMIE AYAM BAWANG 69 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G} | 23 | 0.4893617 |
{LEMONILO MIE KUAH KARI AYAM} => {LEMONILO MIE INSTANT GORENG BUBUK BAYAM} | 20 | 0.4545455 |
{LEMONILO MIE KUAH KARI AYAM} => {LEMONILO MIE KUAH AYAM BAWANG} | 20 | 0.4545455 |
Berdasarkan informasi ini, mungkin kita bisa menyusun strategi jika sku
’s yang ada pada rules tersebut sedang habis atau limited stock. Terutama pada rules dengan count yang banyak.
Sekarang kita akan mengambil rules dengan nilai lift≥100%, yakni:
rules <chr> | count <int> | confidence <dbl> | lift <dbl> |
---|---|---|---|
{BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} => {BIHUNKU SOTO SPESIAL 55GR} | 24 | 0.4897959 | 110.5736 |
{BIHUNKU SOTO SPESIAL 55GR} => {BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} | 24 | 0.4210526 | 110.5736 |
{LA FONTE SAUS PASTA BOLOGNESEPOCH315GR} => {LA FONTE LP SPAGHETI 450 GR} | 12 | 0.4615385 | 164.9744 |
{BIHUNKU BIHUN GORENG SPECIAL 60 GR} => {BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} | 11 | 0.5000000 | 131.3061 |
{MADU STICK ANGGUR 15G} => {MADU STICK JERUK 15G} | 11 | 0.4074074 | 145.6255 |
{MADU STICK ORIGINAL 15 GRAM} => {MADU STICK JERUK 15G} | 10 | 0.4166667 | 148.9352 |
{MOLTO PEWANGI PINK REFILL 450 ML} => {DAIA DETERGENT FLORAL EKTRA BUNGA 305GR} | 8 | 0.4444444 | 211.8189 |
{TAOKAENOI BIG SHEET HOT SPICY 4 GR} => {TAO KAE NOI CRISPY BIG SHEETCLASSIC4GR} | 8 | 0.4210526 | 174.7776 |
{ROJO LELE BERAS 4 KG 5 LITER} => {FOOD STASION GULA KRISTAL PUTIH 1 KG} | 7 | 0.4666667 | 171.5733 |
Didapatkan ada 9
buah rules yang bisa dijadikan calon bundling produk. Namun, ada beberapa catatan terkait temuan ini:
Berikut visualisasi dari rules tersebut:
Saya pribadi menilai rules yang dihasilkan belum cukup konklusif untuk dijadikan produk bundling yang robust (ajeg).
Salah satu indikasi penyebabnya adalah minimnya jumlah kombinasi produk yang dimiliki pada data transaksi.
Oleh karena itu, jika data yang dikumpulkan semakin banyak, bisa jadi ke depannya bisa dihasilkan analisa yang lebih baik lagi.