Machine Learning for Retail with R: Product Packaging using Apriori Algorithm

Fadilah Nur Imani
7 min readDec 17, 2020

--

Photo by Alexander Kovacs on Unsplash

Project ini akan membahas mengenai market basket analysis dengan objective mendapat product packaging yang inovatif yang dapat membantu penjualan item slow-moving. Algoritma dan bahasa pemrograman yang akan digunakan adalah algoritma apriori dan bahasa R. Klik di sini untuk melihat notebooknya atau klik di sini untuk melihat summary dari reading material. Please feel free to leave any comments, constructive feedback is happily welcomed!

DQLab.id Fashion adalah sebuah toko fashion yang menjual berbagai produk seperti jeans, kemeja, kosmetik, dan lain-lain. Walaupun cukup berkembang, namun dengan semakin banyaknya kompetitor dan banyak produk yang stoknya masih banyak tentunya membuat kuatir Pak Agus, manajer DQLab.id Fashion.

Salah satu solusi adalah membuat paket yang inovatif. Dimana produk yang sebelumnya tidak terlalu laku tapi punya pangsa pasar malah bisa dipaketkan dan laku sehingga akhirnya bisa meningkatkan keuntungan dan loyalitas para pelanggan DQLab.id Fashion.

Dataset Transaksi Penjualan DQLab.id Fashion

Data yang digunakan adalah data transaksi 3 bulan dalam bentuk format TSV (Tab Separated Value) bernama nama transaksi_dqlab_retail.tsv dan jumlah baris 33,669 baris data (3,450 kode transaksi).

Data transaksi_dqlab_retail.tsv

Data transaksi ini telah dirapikan untuk Anda dengan hanya mengandung dua variable, yaitu:

  1. Kode Transaksi
  2. Nama Barang

Variable lain seperti harga, tanggal, jumlah pembelian, dan lain-lain — tidak dimasukkan sesuai permintaan pihak DQLab.id Academy kepada DQLab.id Fashion dengan alasan dua variable tersebut sudah cukup.

Project ini terdapat 3 bagian, yaitu:

  1. Mendapatkan insight top 10 dan bottom 10 dari produk yang terjual.
  2. Mendapatkan daftar seluruh kombinasi paket produk dengan korelasi yang kuat.
  3. Mendapatkan daftar seluruh kombinasi paket produk dengan item tertentu.

Import Library dan Read File

Dalam bahasa R, package/library yang digunakan untuk merepresentasikan, memanipulasi, dan menganalisis data dan pola transaksi menggunakan frequent itemsets dan aturan asosiasi adalah library arules. Untuk dapat menggunakan library arules, saya meng-importnya seperti pada baris kode ke-1.

Setelah import library, saya meng-import data yang akan digunakan ke dalam variabel transaksi_tabular menggunakan function read.transactions. Function read.transactions adalah salah satu function pada library arules yang digunakan untuk membaca data transaksi dan membuat sebuah objek transactions. Parameter dari function read.transactions yang digunakan pada analisis ini adalah:

  • file: nama file transaksi,
  • format: format dari data set, valuenya dapat berupa “basket” atau “single”,
  • sep: separator antar field, pada file ini separatornya berupa “\t”,
  • cols: berisi vector dengan dua value yang menunjukkan urutan/nama kolom transaksi dan item ids (c(1,2)),
  • skip: jumlah baris yang di skip, pada file ini karena row pertama berisi header (nama field) maka jumlah baris yang di skip adalah 1.
Import library dan read file

Dari output di atas, didapat informasi bahwa ada 3450 transaksi dan ada 69 item yang terdapat pada objek transactions bernama transaksi_tabular tersebut.

Output Awal: Statistik Top 10

Untuk melihat frequency dari masing-masing item (single item) function yang digunakan adalah itemFrequency. Parameter dari function itemFrequency yang digunakan adalah:

  • x: nama variable penampung objek transaksi,
  • type: tipe value yang akan dikembalikan oleh function, value parameter ini ada dua tipe yaitu frequency/support atau “relative” dan count dari item atau “absolute”.

Selanjutnya function yang digunakan adalah function sort untuk mengurutkan objek data_top. Untuk melihat statistik top 10 (item dengan frequency paling banyak) value data akan diurutkan secara decreasing (decreasing = TRUE). Lalu untuk menampilkan data top 10, maka dipilih 10 data teratas yaitu data_top[1:10].

Terakhir, untuk menampilkan data, format data diubah menjadi data frame melalui base function data.frame.

Output awal: statistik top 10

Output Awal: Statistik Bottom 10

Tahap untuk mendapatkan statistik bottom 10 mirip seperti tahap sebelumnya, hanya saja berbeda di value dari parameter sort, untuk mendapatkan item dengan frequency paling sedikit, value dari paramter decresing diubah menjadi decreasing = FALSE.

Output awal: statistik bottom 10

Mendapatkan Kombinasi Produk yang Menarik

Selanjutnya, Manager DQLab.id Fashion meminta daftar 10 paket kombinasi produk yang menarik. Kombinasi menarik yang dimaksud manager disini adalah adalah kombinasi yang memiliki asosiasi atau hubungan erat. Untuk mengukur besar hubungan antar kombinasi item, ada dua measurement yang perlu diperhatikan, yaitu support dan confidence.

Support

Support adalah formula yang menghitung berapa probabilitas konsumen membeli kombinasi item dari jumlah seluruh transaksi. Nilai minimum support (support threshold) ditentukan oleh user.

Support formula

Confidence

Confidence menghitung probabilitas kejadian suatu kombinasi item dibeli secara bersamaan, dimana salah satu item sudah pasti dibeli. Nilai confidence memiliki range dari 0–1, dimana confidence = 0 mengindikasikan bahwa item Y tidak pernah dibeli ketika item X dibeli. Nilai confidence = 1 mengindikasikan sebaliknya, yaitu item Y selalu dibeli saat X dibeli.

Confidence formula

Namun, meskipun nilai support dan confidence mengindikasikan bahwa kombinasi memiliki hubungan erat, hal tersebut tidak berarti bahwa hubungan tersebut valid. Untuk memvalidasi hubungan tersebut, dibutuhkan suatu measurement yang dapat memvalidasi bahwa benar saat suatu kombinasi item dibeli secara bersamaan. Salah satu contoh measurement yang dapat digunakan adalah lift.

Lift

Lift mengindikasikan bahwa hubungan antar item pada suatu kombinasi valid, atau apakah suatu kombinasi item muncul bersamaan lebih sering/lebih jarang daripada random.

  • Lift = 1, berarti tidak ada hubungan antar kombinasi item (kombinasi item muncul bersamaan secara random atau kebetulan).
  • Lift > 1, berarti ada hubungan positif pada suatu kombinasi item (kombinasi item muncul bersamaan lebih sering daripada random).
  • Lift < 1, berarti ada hubungan negatif pada suatu kombinasi item (kombinasi item muncul bersamaan lebih jarang daripada random).
Lift formula

Selanjutnya, kombinasi yang diminta memiliki produk minimal 2 item, dan maksimum 3 item. Kombinasi produk itu muncul setidaknya 10 dari dari seluruh transaksi. Memiliki tingkat confidence minimal 50%.

Untuk mendapatkan kombinasi produk tersebut, kita dapat menggunakan algoritma apriori melalui function apriori pada library arules.

Berdasarkan informasi yang diberikan manager, value dari parameter yang digunakan pada function apriori tersebut adalah sebagai berikut:

  • support = 10/jumlah seluruh transaksi,
  • confidence = 50% = 0.5,
  • minlen = 2,
  • maxlen = 3.

Untuk mendapatkan 10 kombinasi paling menarik, kita menggunakan function head dengan n = 10 dan diurutkan berdasarkan value lift. Hasil dari 10 kombinasi tersebut disimpan pada combination_result.

Mendapatkan kombinasi produk yang menarik

Jika diperhatikan, value dari lift 10 kombinasi tersebut semuanya > 1, artinya ada hubungan positif antara kombinasi antar item di atas.

Mencari Paket Produk yang Bisa Dipasangkan dengan Item Slow-Moving

Slow-moving item adalah produk yang pergerakan penjualannya lambat atau kurang cepat. Ini akan bermasalah apabila item produk tersebut masih menumpuk. Kadang kala item ini belum tentu tidak laku, hanya saja mungkin harganya tidak bagus dan jarang dibutuhkan jika dijual satuan. Nah, jika tidak dijual satuan data scientist perlu mencari asosiasi kuat dari item produk ini dengan produk lain sehingga jika dipaketkan akan menjadi lebih menarik.

Manager DQLab.id Fashion juga meyakini hal ini, setalah di analisis, diidentifikasi bahwa ada dua item produk yang menurut dia stoknya masih banyak dan perlu dicari pasangan item untuk pemaketannya. Dua item produk tersebut adalah “Tas Makeup” dan “Baju Renang Pria Anak-anak”. Manager ingin meminta kombinasi yang bisa dipaketkan dengan kedua produk tersebut.

Masing-masing produk tersebut dikeluarkan 3 rules yang asosiasinya paling kuat, sehingga total ada 6 rules. Persyaratan-persyaratan asosiasi kuat ini masih sama dengan yang telah disebutkan sebelumnya, kecuali tingkat confidence dicoba pada tingkat minimal 0.1.

Agar bisa mendapatkan hasil kombinasi untuk item tertentu, yaitu “Tas Makeup” dan “Baju Renang Pria Anak-anak” kita menggunakan function subset. Selanjutnya, untuk memilih 3 rules dengan asosiasi (hubungan) paling kuat dari masing-masing item, kita menggunakan function head dan mengurutkan hasilnya berdasarkan value lift tertinggi.

Mencari paket produk yang bisa dipasangkan dengan item slow-moving

Dari hasil di atas, didapat hasil 3 kombinasi masing-masing untuk 2 item slow-moving item yang memiliki asosiasi paling kuat, yaitu,

Tas Makeup:

  • {Baju Renang Anak Perempuan, Tas Pinggang Wanita} => {Tas Makeup}
  • {Baju Renang Anak Perempuan, Tas Ransel Mini} => {Tas Makeup}
  • {Baju Renang Anak Perempuan, Celana Pendek Green/Hijau} => {Tas Makeup}

Baju Renang Pria Anak-anak:

  • {Gembok Koper, Tas Waist Bag} => {Baju Renang Pria Anak-anak}
  • {Flat Shoes Ballerina, Gembok Koper} => {Baju Renang Pria Anak-anak}
  • {Celana Jeans Sobek Wanita, Jeans Jumbo} => {Baju Renang Pria Anak-anak}

Final Output

Hasil dari analisis untuk kombinasi item slow-moving di atas, disimpan ke dalam file bernama kombinasi_retail_slow_moving.txt.

kombinasi_retail_slow_moving.txt

--

--