Processing math: 100%
  • 1 Pendahuluan
  • 2 Sebelum Mulai Menghitung Produk Bundling
  • 3 Dasar Teori
  • 4 Menentukan Produk Bundling
    • 4.1 Proses Perhitungan
  • 5 Hasil Perhitungan
  • 6 Kesimpulan dan Saran

1 Pendahuluan

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.

Leaflet | © OpenStreetMap contributors © CARTO

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.


2 Sebelum Mulai Menghitung Produk Bundling

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 Bawang
  • 1 bungkus Indomie Kari Ayam
  • 1 kg telur

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


3 Dasar Teori

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:

  • Item produk saya tuliskan sebagai: I={i1,i2,i3,...,in}
  • Transaksi saya tuliskan sebagai: T={t1,t2,t3,...,tn}
  • Setiap transaksi di T memiliki unique transaction id dan berisi item produk di I.

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: XY, dimana X,YI

  • Setiap rules berisi dua himpunan item produk, yakni X dan Y.
  • Sebagai contoh, rules akan ditulis sebagai berikut: {i1,i2}{ik}.
  • Bagian kiri, yakni himpunan produk (X) ditulis lhs.
  • Bagian kanan, yakni himpunan produk (Y) ditulis rhs.

Misalkan saya memiliki data transaksi sebagai berikut:

ABCDEFGHIJ0123456789
transaction_id
<int>
items
<chr>
1Milk, Bread
2Butter
3Beer, Diapers
4Milk, Bread, Butter
5Bread

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)=|{tT,XT}||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 XY dari data transaksi dihitung dari proporsi transaksi yang mengandung X dan juga mengandung Y.

Notasi: conf(XY)=supp(XY)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(XY)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:

  1. lift<100%, artinya lhs dan rhs saling meniadakan (barang substitusi).
  2. lift=100%, artinya lhs dan rhs independen (saling bebas).
  3. lift>100%, artinya lhs dan rhs saling bergantung.

Notasi: lift(XY)=supp(XY)supp(X)supp(Y)

Contoh:

Rule {Milk,Bread}{Butter} memiliki nilai lift = 125%

Cara hitungnya:

lift({Milk,Bread}{Butter})=supp(XY)supp(X)supp(Y)

lift({Milk,Bread}{Butter})=supp({Milk,Bread,Butter})supp({Milk,Bread})supp({Butter})

lift({Milk,Bread}{Butter})=1/52/52/5=125%

Kesimpulan dari contoh: itemset lhs dan rhs saling bergantung.


4 Menentukan Produk Bundling

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:

  1. Support harus relatif besar, artinya kemunculan rules ini cukup banyak terjadi. Pada hasil output, nanti kita bisa melihat parameter bernama count.
  2. Confidence tinggi, misalkan >80%.
  3. Lift harus >100%

4.1 Proses Perhitungan

Untuk menghitung semua kombinasi rules beserta parameternya, saya akan gunakan algoritma apriori.


5 Hasil Perhitungan

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:

ABCDEFGHIJ0123456789
rules
<chr>
support
<dbl>
confidence
<dbl>
coverage
<dbl>
lift
<dbl>
{INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G}0.00800435190.41200000.01942803915.23453
{INDOMIE AYAM BAWANG 69 GR} => {INDOMIE GORENG 85G}0.00567298730.51408450.01103512619.00931
{INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE GORENG 85G}0.00520671430.46853150.01111283817.32489
{INDOMIE AYAM SPECIAL 56 GR} => {INDOMIE GORENG 85G}0.00240907680.46268660.00520671417.10877
{INDOMIE KARI AYAM BAWANG GORENG 70 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G}0.00225365250.50877190.00442959318.81287
{INDOMIE GORENG 85G,INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE SOTO MIE 70 GR}0.00225365250.43283580.00520671422.27893
{TRANSAKSI PLN 2} => {TRANSAKSI PLN}0.00202051600.61904760.00326391075.86576
{BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} => {BIHUNKU SOTO SPESIAL 55GR}0.00186509170.48979590.003807896110.57358
{BIHUNKU SOTO SPESIAL 55GR} => {BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR}0.00186509170.42105260.004429593110.57358
{INDOMIE AYAM BAWANG 69 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G}0.00178737950.48936170.00365247118.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 lift100%, yakni:

ABCDEFGHIJ0123456789
rules
<chr>
count
<int>
confidence
<dbl>
{INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G}1030.4120000
{INDOMIE AYAM BAWANG 69 GR} => {INDOMIE GORENG 85G}730.5140845
{INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE GORENG 85G}670.4685315
{INDOMIE AYAM SPECIAL 56 GR} => {INDOMIE GORENG 85G}310.4626866
{INDOMIE KARI AYAM BAWANG GORENG 70 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G}290.5087719
{INDOMIE GORENG 85G,INDOMIE KARI AYAM BAWANG GORENG 70 GR} => {INDOMIE SOTO MIE 70 GR}290.4328358
{TRANSAKSI PLN 2} => {TRANSAKSI PLN}260.6190476
{INDOMIE AYAM BAWANG 69 GR,INDOMIE SOTO MIE 70 GR} => {INDOMIE GORENG 85G}230.4893617
{LEMONILO MIE KUAH KARI AYAM} => {LEMONILO MIE INSTANT GORENG BUBUK BAYAM}200.4545455
{LEMONILO MIE KUAH KARI AYAM} => {LEMONILO MIE KUAH AYAM BAWANG}200.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 lift100%, yakni:

ABCDEFGHIJ0123456789
rules
<chr>
count
<int>
confidence
<dbl>
lift
<dbl>
{BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR} => {BIHUNKU SOTO SPESIAL 55GR}240.4897959110.5736
{BIHUNKU SOTO SPESIAL 55GR} => {BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR}240.4210526110.5736
{LA FONTE SAUS PASTA BOLOGNESEPOCH315GR} => {LA FONTE LP SPAGHETI 450 GR}120.4615385164.9744
{BIHUNKU BIHUN GORENG SPECIAL 60 GR} => {BIHUNKU KUAH AYAM BAWANG SPESIAL 55 GR}110.5000000131.3061
{MADU STICK ANGGUR 15G} => {MADU STICK JERUK 15G}110.4074074145.6255
{MADU STICK ORIGINAL 15 GRAM} => {MADU STICK JERUK 15G}100.4166667148.9352
{MOLTO PEWANGI PINK REFILL 450 ML} => {DAIA DETERGENT FLORAL EKTRA BUNGA 305GR}80.4444444211.8189
{TAOKAENOI BIG SHEET HOT SPICY 4 GR} => {TAO KAE NOI CRISPY BIG SHEETCLASSIC4GR}80.4210526174.7776
{ROJO LELE BERAS 4 KG 5 LITER} => {FOOD STASION GULA KRISTAL PUTIH 1 KG}70.4666667171.5733

Didapatkan ada 9 buah rules yang bisa dijadikan calon bundling produk. Namun, ada beberapa catatan terkait temuan ini:

  1. count dari rules yang ada tergolong kecil. Artinya real cases dari rules ini relatif jarang terjadi.
  2. confidence yang ada juga masih di 50%.

Berikut visualisasi dari rules tersebut:


6 Kesimpulan dan Saran

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.

ikanx101.github.io