JAMALLUDIN

21 DESEMBER 2021

1 MARKET BASKET ANALYIS DAN ALGORITMA APRIORI

1.1 MARKET BASKET ANALYSIS

Pengguanan Market Basket Analysis (MBA) dan Algoritma Apriori - yang merupakan salah satu algoritma terpopuler dari machine learning. untuk menjalankan algoritma ini diperlukan dibutuhkan dua data yaitu, data produk dan data transaksi

1.2 Memasukan data

# library yang digunakan

library(arules)
## Loading required package: Matrix
## 
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
transaksi <- read.transactions(file = "market.txt",
                               format = "single",
                               sep = "\t",
                               cols = c(1,2),
                               skip = 1)

# menampilkan data transaksi 

inspect(transaksi)
##      items                        transactionID
## [1]  {Pet Food, Sirup, Teh Celup} #01          
## [2]  {Gula, Teh Celup}            #02          
## [3]  {Pet Food, Sirup}            #03          
## [4]  {Sirup, Teh Celup}           #04          
## [5]  {Gula, Sirup, Teh Celup}     #05          
## [6]  {Pet Food, Teh Celup}        #06          
## [7]  {Pet Food, Sirup, Teh Celup} #07          
## [8]  {Teh Celup}                  #08          
## [9]  {Gula, Teh Celup}            #09          
## [10] {Gula, Pet Food, Sirup}      #10

1.3 Menghasilkan Model Market Basket Analysis

mba <- apriori(transaksi, parameter = list(supp = 0.1, confidence = 0.5))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
# Menampilkan paket daata data produk  

inspect(subset(mba, lift > 1))
##     lhs                      rhs        support confidence coverage lift    
## [1] {Pet Food}            => {Sirup}    0.4     0.8000000  0.5      1.333333
## [2] {Sirup}               => {Pet Food} 0.4     0.6666667  0.6      1.333333
## [3] {Gula, Pet Food}      => {Sirup}    0.1     1.0000000  0.1      1.666667
## [4] {Pet Food, Teh Celup} => {Sirup}    0.2     0.6666667  0.3      1.111111
##     count
## [1] 4    
## [2] 4    
## [3] 1    
## [4] 2

1.4 Hasil Akhir

Market Bakset Analysis (MBA) adalah teknik analyis yang digunakan oleh bisnis di bidang ritel untuk mencari asosiasi produk yang kuat, atau dengan kata lain menemukan produk lain yang bisa produk yang berdampak besar pada penjualan.

Algoritma yang bisa digunakan di R untuk melakukan MBA ini adalhah apriori dan packpages arules. Data yang diperlukan yaitu data transaksi dan data produk.

1.5 Algoritma Apriori dan Association Rules

Sebagai gambaran jika terdapat 100000 item bahkan lebih maka kemungkinan teredapat jutaan kombinasi yang harus diproses. Jumlah sebesar ini tidak bisa manual dan butuh bantuan Algoritma kumpoter untuk memprosesnya.

Dan Algoritma yang bisa digunakan adalah Algoritma Apriori yang merupakan algoritma di kategori association rules pada literatur machine learning. Algoritma ini akan menghasilkan kombinasi-kombinasi yang kemudian disusun dalam bentuk rule “Jika membeli ini…. maka akan juga membeli…”.

Ada cukup banyak penerapan dari association rules, seperti di dunia cyber security untuk mendeteksi intrusi jaringan, di bidang sales marketing untuk pemaketan produk, mencari pola pemakaian web, dan lain-lain.

1.6 Menampilkan Kombinasi

inspect(apriori(transaksi, parameter = list(support = .1, minlen = 2, target = 'frequent itemsets')))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##          NA    0.1    1 none FALSE            TRUE       5     0.1      2
##  maxlen            target  ext
##      10 frequent itemsets TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## sorting transactions ... done [0.00s].
## writing ... [9 set(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
##     items                        support count
## [1] {Gula, Pet Food}             0.1     1    
## [2] {Gula, Sirup}                0.2     2    
## [3] {Gula, Teh Celup}            0.3     3    
## [4] {Pet Food, Sirup}            0.4     4    
## [5] {Pet Food, Teh Celup}        0.3     3    
## [6] {Sirup, Teh Celup}           0.4     4    
## [7] {Gula, Pet Food, Sirup}      0.1     1    
## [8] {Gula, Sirup, Teh Celup}     0.1     1    
## [9] {Pet Food, Sirup, Teh Celup} 0.2     2

Terlihat ada sembilan kombinasi produk dengan nilai support adalah rasio dari kombinasi tersebut terhadap keseluruhan transaksi.

kombinasi {Pet Food, Sirup} memiliki support 0.4 yang artinya kombinasi ini terdapat di 4 dari 10 transaksi yang tercatat.

1.7 Kesimpulan

Algoritma apriori adalah salah satu algoritma yang merupakan penerapan praktis dari Market Basket Analysis (MBA). Algoritma ini digunakan untuk menganalisa banyaknya kombinasi produk yang terjadi di dalam transaksi ritel, yang akan sulit dan lama jika dilakukan secara manual.

Secara teknis, algoritma apriori akan mencari tingkat asosiasi antar item di dalam banyak kombinasi kelompok data secara otomatis. Kombinasi ini juga bisa disusun dengan suatu aturan (rule) asosiasi “Jika membeli ini produk A maka akan membeli produk B”, sehingga algoritma ini dikategorikan sebagai Association Rules di ranah machine learning.

Dengan menemukan paket produk yang asosiasinya kuat, Anda sebagai seorang data scientist dapat menyarankan kepada bisnis dapat melakukan berbagai action item seperti membuat paket produk dengan penawaran khusus, mendekatkan produk-produk tersebut saling berdekatan dalam satu rak, mengeluarkan rekomendasi produk di sistem e-commerce, mengurangi masalah stok, dan lain-lain.

2 Item, Itemsets, dan Rules

2.1 Association Rules

Penjelasan tentang lhs (left hand side), rhs (right hand side), item seperti Pet Food, itemset seperti {Gula, Pet Food} dan rule seperti {Pet Food} => {Sirup}, dan lain-lain

2.2 Kesimpulan

Penjelasan konsep dari gambar di bawah ini:

inspect(subset(mba, lift > 1))
##     lhs                      rhs        support confidence coverage lift    
## [1] {Pet Food}            => {Sirup}    0.4     0.8000000  0.5      1.333333
## [2] {Sirup}               => {Pet Food} 0.4     0.6666667  0.6      1.333333
## [3] {Gula, Pet Food}      => {Sirup}    0.1     1.0000000  0.1      1.666667
## [4] {Pet Food, Teh Celup} => {Sirup}    0.2     0.6666667  0.3      1.111111
##     count
## [1] 4    
## [2] 4    
## [3] 1    
## [4] 2

1.Item adalah produk tunggal yang terdapat dalam suatu transaksi. Contoh: Pet Food, Sirup, Gula, dan Teh Celup.

  1. Itemset adalah kombinasi satu atau lebih item yang terdapat dalam satu transaksi. Contoh: {Pet Food}, {Gula, Pet Food}, {Sirup}, dan lain-lain.

  2. Rule adalah pernyataan hubungan antar Itemset. Biasanya dapat diformulasikan menjadi “Jika membeli itemset A, maka akan membeli itemset B”. Contoh: {Pet Food} => {Sirup}, {Pet Food, Teh Celup} => {Sirup}, dan lain-lain.

3 Item dan Transaction

3.1 Membaca File Sebagai Dataframe

impor file data set

transaksi_tabular <- read.csv("market.txt",
                              sep = "\t")
print(transaksi_tabular)
##    ï..Kode.Transaksi      Item
## 1                #01 Teh Celup
## 2                #01     Sirup
## 3                #01  Pet Food
## 4                #02 Teh Celup
## 5                #02      Gula
## 6                #03     Sirup
## 7                #03  Pet Food
## 8                #04 Teh Celup
## 9                #04     Sirup
## 10               #05 Teh Celup
## 11               #05     Sirup
## 12               #05      Gula
## 13               #06 Teh Celup
## 14               #06  Pet Food
## 15               #07 Teh Celup
## 16               #07     Sirup
## 17               #07  Pet Food
## 18               #08 Teh Celup
## 19               #09 Teh Celup
## 20               #09      Gula
## 21               #10     Sirup
## 22               #10  Pet Food
## 23               #10      Gula

4 Membaca File Sebagai Transaction

Import file dataset dengan tipe data transactions:

read.transactions(file = "market.txt",
                  format = "single",
                  sep = "\t",
                  cols = c(1,2),
                  skip = 1)
## transactions in sparse format with
##  10 transactions (rows) and
##  4 items (columns)

Penjelasan dari baris kode diatas

  1. File: Parameter lokasi file yang bisa berasal dari url di web satau lokal. Pada contoh ini dibaca file data_transaksi.txt

  2. data_transaksi.txt: lokasi dan nama file dataset. Jika lokasi file dan aplikasi R terdapat di komputer lokal Anda, maka gantilah dengan lokasi file di lokal. Misalkan c:_transaksi.txt

  3. format: Format bisa “single” atau “basket”. “single” artinya tiap item transaksi dituliskan terpisah baris demi baris, dan ini cocok dengan format dari file yang digunakan. “basket” artinya seluruh item per transaksi ditulis per baris.

  4. sep: separator character atau karakter pemisah antar kolom, untuk file ini karakter pemisahnya adalah tab atau dalam notasi di R ditulis dengan “.

  5. cols: indeks dari kolom-kolom yang digunakan. Untuk format single maka kolom harus dua saja, kolom pertama adalah kode transaksi sedangkan kolom kedua menunjukkan item transaksi. Penulisan c(1,2) pada contoh kita artinya kolom pertama dan kedua yang kita gunakan.

  6. skip: jumlah baris yang dilewati sebelum mulai membaca data. Untuk dataset kita, baris pertama adalah header dan tidak diperlukan, jadi kita masukkan 1 sebagai input.

Penjelasan dari output kode diatas:

  1. transactions in sparse format: Ini artinya transaksi dalam bentuk sparse (tersebar). Ini mungkin akan lebih jelas ketika divisualiasikan dalam bentuk matriks.

  2. 10 transactions (rows): dataset kita secara total memiliki 10 transaksi. Ada informasi rows atau baris disini, ini bukan berarti data kita ada 10 baris di file yang digunakan. Karena pada kenyataannya, file memiliki 23 baris data / distinct. 4 items (columns): dataset secara total memiliki 4 item unik.

4.1 Menampilkan Daftar Item Transaksi

Item-item yang terdapat pada objek transactions dapat dilihat pada komponen itemInfo dengan didahului aksesor @ , jadi ditulis @iteminfo. Ini bermanfaat untuk melihat daftar unik item yang terdapat pada data transaksi yang sedang dianalisa.

transaksi@itemInfo

4.2 Menampilkan Daftar Kode Transaksi

Sepuluh transaksi yang telah dibaca oleh read.transactions dapat dilihat detil kode-kodenya dengan menggunakan komponen itemsetInfo dengan aksesor @ , atau lengkapnya ditulis dengan @itemsetInfo. Daftar ini bisa bermanfaat sebagai basis untuk menganalisa atau melakukan validasi dengan data yang ada pada sistem ritel.

transaksi@itemsetInfo

4.3 Tampilan Transaksi Dalam Bentuk Matrix

Ada kalanya kita ingin melihat sebaran item pada keseluruhan transaksi. Dengan menggunakan daftar output berupa teks akan terasa sangat panjang. Sebagai salah satu solusinya, bisa dengan menampilkan sebaran ini dalam bentuk matrix dua dimensi, dimana baris matrix urutan item dan pada kolom adalah item transaksi.

Matrix dari objek transaction dapat dilihat dari komponen data menggunakan aksesor @ , ditulis lengkap sebagai @data. Menyambung praktek sebelumnya, maka objek matrix pada variable transaksi ditulis sebagai berikut.

transaksi@data
## 4 x 10 sparse Matrix of class "ngCMatrix"
##                         
## [1,] . | . . | . . . | |
## [2,] | . | . . | | . . |
## [3,] | . | | | . | . . |
## [4,] | | . | | | | | | .

Penjelasan dari output baris kode diatas:

  1. 4 x 10 : artinya terdapat 4 item dan 10 transaksi.

  2. [1,] s/d [4,] : artinya index yang mewakili tiap item dalam transaksi.

  3. Simbol tanda titik . menunjukkan item tidak ada di transaksi.

  4. Simbol garis lurus | menunjukkan bahwa item ada di transaksi.

Kali ini garis-garis pada transaksi item ke-1 (Gula) yaitu [1,], bahwa ada transaksi di baris 2, 5, 9, dan 10. Cek dengan baris kode ini:

transaksi@itemInfo

Terlihat bahwa baris ke-1 satu adalah gula. Maka dicek, di baris mana saja ada transaksi gula.

4.4 Item Frequency

Mengetahui item dengan jumlah kemunculannnya pada keseluruhan transaksi. Informasi ini disebut sebagai item frequency.

Untuk menghasilkan informasi ini kita gunakan fungsi itemFrequency dengan input objek transaction, dan hasilnya berupa named vector atau vektor yang bisa diakses dengan nama.

itemFrequency(transaksi)
##      Gula  Pet Food     Sirup Teh Celup 
##       0.4       0.5       0.6       0.8

Hasil diatas menunjukkan bahwa frekuensi kemunculan Gula adalah 0.4 atau 40 persen dari porsi seluruh transaksi yang ada, Pet Food menempati 50 persen, dan seterusnya.

Lalu bagaimana jika bukan persentase yang ingin kita tampilkan, tapi jumlah item dalam angka sebenarnya?

Tentunya bisa dilakukan. Caranya adalah menambahkan parameter type=“absolute” ke dalam fungsi itemFrequency() sebagai berikut:

itemFrequency(transaksi, type = "absolute")
##      Gula  Pet Food     Sirup Teh Celup 
##         4         5         6         8

Hasil diatas artinya Gula memiliki kemunculan 4 kali dari seluruh transaksi yang ada, Pet Food muncul sebanyak 5 kali, Sirup sebanyak 6 kali, dan Teh Celup sebanyak 8 kali.

Fungsi itemFrequency ini sangat penting untuk membantu kita menganalisa transaksi yang lebih kompleks dimana item yang terlibat lebih banyak dan transaksi yang terjadi lebih besar

4.5 Statistik Top 3

Statistik sederhana untuk menjawab pertanyaaan seperti “Mana 3 item yang memiliki jumlah terbanyak di seluruh transaksi?” tidak bisa langsung dilakukan dengan satu fungsi di R, tapi perlu penggabungan beberapa perintah dimana salah satunya adalah fungsi sort.

data_item <- itemFrequency(transaksi, type = "absolute")

#Melakukan sorting pada data_item

data_item <- sort(data_item, decreasing = T)

#Mengambil 3 item pertama, atau bisa dengan data_item[1:3]

head(data_item, 3)
## Teh Celup     Sirup  Pet Food 
##         8         6         5
#Konversi data_item menjadi data frame dengan kolom Nama_Produk dan Jumlah.

data_item <- data.frame("Nama Produk" = names(data_item),
                        "Jumlah" = data_item,
                        row.names = NULL)

print(data_item)
##   Nama.Produk Jumlah
## 1   Teh Celup      8
## 2       Sirup      6
## 3    Pet Food      5
## 4        Gula      4

Penjelasan dari fungsi data.frame() diatas:

  1. data.frame: fungsi untuk membuat suatu data frame.

  2. “Nama Produk” <- names(data_item): adalah nama kolom pertama (“Nama Produk”) yang diisi dengan nama atau label dari vector data_item (Teh Celup, Sirup, Pet Food)

  3. “Jumlah” <- data_item: adalah nama kolom kedua (“Jumlah”) yang diisi dengan nilai-nilai vektor data_item (8, 6, 5)

  4. row.names = NULL: artinya tidak memerlukan label pada tiap baris data frame

4.6 Output Statistik Top 3 Sebagai File

Disini akan dipraktekkan bagaimana membuat file output untuk statistik top 3.

Dari hasil sebelumnya, kita sudah mendapatkan statistik top 3 dari jumlah item terbanyak dalam bentuk data frame. Ini bisa kita tuliskan langsung menggunakan fungsi write.csv, selengkapnya adalah sebagai berikut:

write.csv(data_item, file = "top3_item_retail.txt", eol = "\r\n")

Disini kita menulis variable data_item ke dalam file bernama “top_3_item.retail.txt” yang diisikan ke dalam parameter file. Terdapat tambahan parameter eol = “”, yang berguna untuk menghasilkan file yang bisa ditampilkan di Windows dengan baik.

4.7 Grafik Item Frequency

Selain tampilan transaksi dalam bentuk matriks, kita bisa juga melihat distribusi transaksi dari tiap item dalam bentuk grafik dengan menggunakan fungsi itemFrequencyPlot.

itemFrequencyPlot(transaksi)

Terlihat bahwa item Teh Celup paling laku dan Gula paling sedikit transaksinya.

5 Itemset dan Rules

Pada bagian ini, “Item, Itemset and Rules” telah dijelaskan dengan gamblang mengenai apa yang dimaksud dengan item, itemset yang terdiri dari beberapa item, dan rules yang menjelaskan hubungan antar itemset yang terdiri dari lhs (left hand side) dan rhs (right hand side).

Kita akan masuk ke inti dari algoritma apriori, yaitu bagaimana menghasilkan dan mengelola kombinasi itemset dan rules yang besar dengan R. Tentunya masih menggunakan dataset sederhana yang sudah kita perkenalkan dari awal.

5.1 Melihat Itemset per Transaksi dengan Inspect

Tiap transaksi terdiri atas beberapa item atau itemset. Pada praktek sebelumnya, kita baru melihat visualisasi dan sebaran matrix dari tiap transaksi namun masih sulit dicerna.

Untuk melihat notasi itemset yang lebih baik dan mudah dimengerti kita bisa menggunakan fungsi inspect().

Penggunaan function ini juga sederhana. Seperti terlihat pada contoh berikut dimana kita inspeksi variabe; transaksi kita.

inspect(transaksi)
##      items                        transactionID
## [1]  {Pet Food, Sirup, Teh Celup} #01          
## [2]  {Gula, Teh Celup}            #02          
## [3]  {Pet Food, Sirup}            #03          
## [4]  {Sirup, Teh Celup}           #04          
## [5]  {Gula, Sirup, Teh Celup}     #05          
## [6]  {Pet Food, Teh Celup}        #06          
## [7]  {Pet Food, Sirup, Teh Celup} #07          
## [8]  {Teh Celup}                  #08          
## [9]  {Gula, Teh Celup}            #09          
## [10] {Gula, Pet Food, Sirup}      #10

Tersebut merupakan daftar itemset dari sepuluh transaksi kita. Kolom items berisi item-item yang terjadi pada transaksi, dan transactionID berisi kode transaksi. Sebagai contoh, pada kode transaksi #01 terdapat itemset yang terdiri dari Pet Food, Sirup dan Teh Celup.

Format penulisan tiap itemset terdiri dari notasi kurung kurawal pembuka dan penutup, yang di dalamnya terdapat daftar item yang dipisahkan tanda koma untuk tiap itemnya.

5.2 Menghasilkan Rules dengan Apriori

Rule adalah formula yang menyatakan kombinasi dari dua itemset. Satu itemset ada di bagian kiri rule (left hand side) dan satunya di bagian kanan (right hand side).

# Menghasilkan associaton rules

apriori(transaksi)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [3 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
## set of 3 rules

Banyak sekali informasi dari output yang dihasilkan. Namun untuk saat ini, perhatikan baris terakhir dimana tertulis “set of 3 rules”. Ini artinya dengan fungsi apriori ini, kita mendapatkan tiga rules.

5.3 Melihat Rules dengan Fungsi Inspect

Hasil eksekusi apriori berupa rules sudah disimpan dalam variable bernama “mba”. Jadi untuk menampilkan isi rules pada variabel ini kita gunakan perintah berikut.

# Melihat isi dari rules dengan menggunakan fungsi inspect

inspect(mba)
##      lhs                      rhs         support confidence coverage lift     
## [1]  {}                    => {Pet Food}  0.5     0.5000000  1.0      1.0000000
## [2]  {}                    => {Sirup}     0.6     0.6000000  1.0      1.0000000
## [3]  {}                    => {Teh Celup} 0.8     0.8000000  1.0      1.0000000
## [4]  {Gula}                => {Sirup}     0.2     0.5000000  0.4      0.8333333
## [5]  {Gula}                => {Teh Celup} 0.3     0.7500000  0.4      0.9375000
## [6]  {Pet Food}            => {Sirup}     0.4     0.8000000  0.5      1.3333333
## [7]  {Sirup}               => {Pet Food}  0.4     0.6666667  0.6      1.3333333
## [8]  {Pet Food}            => {Teh Celup} 0.3     0.6000000  0.5      0.7500000
## [9]  {Sirup}               => {Teh Celup} 0.4     0.6666667  0.6      0.8333333
## [10] {Teh Celup}           => {Sirup}     0.4     0.5000000  0.8      0.8333333
## [11] {Gula, Pet Food}      => {Sirup}     0.1     1.0000000  0.1      1.6666667
## [12] {Gula, Sirup}         => {Pet Food}  0.1     0.5000000  0.2      1.0000000
## [13] {Gula, Sirup}         => {Teh Celup} 0.1     0.5000000  0.2      0.6250000
## [14] {Pet Food, Sirup}     => {Teh Celup} 0.2     0.5000000  0.4      0.6250000
## [15] {Pet Food, Teh Celup} => {Sirup}     0.2     0.6666667  0.3      1.1111111
## [16] {Sirup, Teh Celup}    => {Pet Food}  0.2     0.5000000  0.4      1.0000000
##      count
## [1]  5    
## [2]  6    
## [3]  8    
## [4]  2    
## [5]  3    
## [6]  4    
## [7]  4    
## [8]  3    
## [9]  4    
## [10] 4    
## [11] 1    
## [12] 1    
## [13] 1    
## [14] 2    
## [15] 2    
## [16] 2

Terlihat kalau variable mba menyimpan tiga rules dengan kolom-kolom berikut:

lhs: itemset di bagian kiri (left hand side)

rhs: itemset di bagian kanan (right hand side)

support, confidence dan lift: metrik-metrik yang digunakan untuk menilai kualitas dari rule. Umumnya semakin besar semakin baik. Detil dari metrik-metrik ini akan dibahas selanjutnya.

Kalau fokus kita kembali ke itemset lhs dan rhs untuk product packaging, terlihat rule kedua yaitu {Pet Food} => {Sirup} cukup menarik.

Kenapa bisa dikatakan menarik?

Karena support 0.4 menunjukkan bahwa kombinasi ini terdapat di 40 persen poulasi - berarti 4 dari 10 transaksi untuk dataset kita. Nilai lift juga di atas 1, yang artinya rule ini memiliki asosiasi tinggi antar itemset yang terdapat di rule ini.

Sedangkan {} => {Teh Celup} tidak menarik karena hanya berisi satu item. Rule sisanya, {Gula, Peta Food} = > {Sirup} terlalu unik - ini ditunjukkan dengan support 0.1 (10%) yang artinya hanya terdapat di 1 dari 10 transaksi.

Apa makna dari rule jika ingin kita aplikasikan?

Artinya ada beberapa opsi action item yang bisa kita lakukan:

rekomendasikan kepada setiap pelanggan yang membeli Pet Food untuk membeli Sirup.

rak display Pet Food dan Sirup bisa didekatkan.

Pet Food dan Sirup dipaketkan bersama dan dijual dengan harga khusus.

5.4 Filter RHS

Dari hasil inspect objek mba yang bertipe association rules di praktek sebelumnya, kita sekarang mengerti bahwa objek tersebut mengandung banyak informasi termasuk itemset yang terdapat di left hand side dan right hand side.

Ini penting untuk bisnis, misalkan untuk inventory. Kita ingin menjawab, adakah item yang kurang laku sebelumnya ada di dalam itemset dari rules yang dihasilkan oleh apriori? Jika ada, mungkin saya bisa paketkan bersama sehingga kemungkinan besar terjual lebih banyak.

Untuk melakukan ini kita akan melakukan filter atau subsetting dari rules. Banyak cara, salah satunya adalah dengan menggunakan gabungan function inspect, subset dan operator %in% dengan format berikut:

mba <- apriori(transaksi, parameter = list(supp = 0.1, confidence = 0.5))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
# Filter rhs dengan item "Sirup" dan tampilkan

inspect(subset(mba, rhs %in% "Sirup"))
##     lhs                      rhs     support confidence coverage lift     
## [1] {}                    => {Sirup} 0.6     0.6000000  1.0      1.0000000
## [2] {Gula}                => {Sirup} 0.2     0.5000000  0.4      0.8333333
## [3] {Pet Food}            => {Sirup} 0.4     0.8000000  0.5      1.3333333
## [4] {Teh Celup}           => {Sirup} 0.4     0.5000000  0.8      0.8333333
## [5] {Gula, Pet Food}      => {Sirup} 0.1     1.0000000  0.1      1.6666667
## [6] {Pet Food, Teh Celup} => {Sirup} 0.2     0.6666667  0.3      1.1111111
##     count
## [1] 6    
## [2] 2    
## [3] 4    
## [4] 4    
## [5] 1    
## [6] 2

5.5 Filter LHS

untuk memfilter bagian kiri atau left hand side;

mba <- apriori(transaksi)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [3 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
inspect(subset(mba, lhs %in% "Gula"))
##     lhs                 rhs     support confidence coverage lift     count
## [1] {Gula, Pet Food} => {Sirup} 0.1     1          0.1      1.666667 1

5.6 Filter LHS dan RHS (1)

Kita sebenarnya bisa melakukan filter untuk kedua sisi dengan menggunakan operator “&” untuk AND dan operator “|” untuk OR.

Berikut adalah contoh perintah inspect untuk filter lhs dengan item Pet Food dan rhs dengan item Sirup.

inspect(subset(mba, lhs %in% "Pet Food" & rhs %in% "Sirup"))
##     lhs                 rhs     support confidence coverage lift     count
## [1] {Pet Food}       => {Sirup} 0.4     0.8        0.5      1.333333 4    
## [2] {Gula, Pet Food} => {Sirup} 0.1     1.0        0.1      1.666667 1

5.7 Kesimpulan

“Item, Itemset dan Rules” telah dijelaskan dengan gamblang mengenai apa yang dimaksud dengan item, itemset yang terdiri dari beberapa item, dan rules yang menjelaskan hubungan antar itemset yang terdiri dari lhs (left hand side) dan rhs (right hand side).

6 Scoring and Evaluation: Support, Confidence, and Lift

6.1 Menghasilkan Rules dengan Parameter Support dan Confidence

menghasilkan tiga rules dengan function apriori secara default* tanpa parameter apapun. Padahal sebenarnya kita bisa memasukkan parameter tambahan berupa support dan confidence.

Tanpa parameter tambahan tersebut, maka nilai minimum support adalah 0.1 dan minimum confidence adalah 0.8 sebagai filter dari fungsi “apriori”.

Berikut adalah perintah untuk menghasilkan kembali association rules dengan function apriori, tapi kali ini dengan tambahan parameter minimum support dan confidence masing-masing bernilai 0.1 dan 0.5.

apriori(transaksi, parameter = list(supp = 0.1, confidence = 0.5))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
## set of 16 rules

Baris kode diatas menghasilkan 16 rules dengan tingkat support minimum 0.1 dan minimum confidence 0.5.

Untuk melihat rules apa saja yang terdapat di dalam 16 rules tersebut, maka kita harus menggunakan fungsi inspect(), bisa dengan menyimpan association rules ke dalam variabel atau langsung dengan menggunakan fungsi,

inspect(apriori(transaksi, parameter = list(supp = 0.1, confidence = 0.5)))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
##      lhs                      rhs         support confidence coverage lift     
## [1]  {}                    => {Pet Food}  0.5     0.5000000  1.0      1.0000000
## [2]  {}                    => {Sirup}     0.6     0.6000000  1.0      1.0000000
## [3]  {}                    => {Teh Celup} 0.8     0.8000000  1.0      1.0000000
## [4]  {Gula}                => {Sirup}     0.2     0.5000000  0.4      0.8333333
## [5]  {Gula}                => {Teh Celup} 0.3     0.7500000  0.4      0.9375000
## [6]  {Pet Food}            => {Sirup}     0.4     0.8000000  0.5      1.3333333
## [7]  {Sirup}               => {Pet Food}  0.4     0.6666667  0.6      1.3333333
## [8]  {Pet Food}            => {Teh Celup} 0.3     0.6000000  0.5      0.7500000
## [9]  {Sirup}               => {Teh Celup} 0.4     0.6666667  0.6      0.8333333
## [10] {Teh Celup}           => {Sirup}     0.4     0.5000000  0.8      0.8333333
## [11] {Gula, Pet Food}      => {Sirup}     0.1     1.0000000  0.1      1.6666667
## [12] {Gula, Sirup}         => {Pet Food}  0.1     0.5000000  0.2      1.0000000
## [13] {Gula, Sirup}         => {Teh Celup} 0.1     0.5000000  0.2      0.6250000
## [14] {Pet Food, Sirup}     => {Teh Celup} 0.2     0.5000000  0.4      0.6250000
## [15] {Pet Food, Teh Celup} => {Sirup}     0.2     0.6666667  0.3      1.1111111
## [16] {Sirup, Teh Celup}    => {Pet Food}  0.2     0.5000000  0.4      1.0000000
##      count
## [1]  5    
## [2]  6    
## [3]  8    
## [4]  2    
## [5]  3    
## [6]  4    
## [7]  4    
## [8]  3    
## [9]  4    
## [10] 4    
## [11] 1    
## [12] 1    
## [13] 1    
## [14] 2    
## [15] 2    
## [16] 2

Baris kode diatas menghasilkan 16 Rules dengan tingkat sopport minimum 0.1 dan confindence 0.5.

Untuk melihat rules apa saja yang terdapat 16 rules tersebut, maka harus menggunakaan fungs inspect() bisa dengan menyimpan association rules ke dalam variabel atau langsung dengan menggunakan fungsi,

inspect(apriori(transaksi, parameter = list(supp = 0.1, confidence = 0.5)))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target  ext
##      10  rules TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 1 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4 item(s), 10 transaction(s)] done [0.00s].
## sorting and recoding items ... [4 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 done [0.00s].
## writing ... [16 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
##      lhs                      rhs         support confidence coverage lift     
## [1]  {}                    => {Pet Food}  0.5     0.5000000  1.0      1.0000000
## [2]  {}                    => {Sirup}     0.6     0.6000000  1.0      1.0000000
## [3]  {}                    => {Teh Celup} 0.8     0.8000000  1.0      1.0000000
## [4]  {Gula}                => {Sirup}     0.2     0.5000000  0.4      0.8333333
## [5]  {Gula}                => {Teh Celup} 0.3     0.7500000  0.4      0.9375000
## [6]  {Pet Food}            => {Sirup}     0.4     0.8000000  0.5      1.3333333
## [7]  {Sirup}               => {Pet Food}  0.4     0.6666667  0.6      1.3333333
## [8]  {Pet Food}            => {Teh Celup} 0.3     0.6000000  0.5      0.7500000
## [9]  {Sirup}               => {Teh Celup} 0.4     0.6666667  0.6      0.8333333
## [10] {Teh Celup}           => {Sirup}     0.4     0.5000000  0.8      0.8333333
## [11] {Gula, Pet Food}      => {Sirup}     0.1     1.0000000  0.1      1.6666667
## [12] {Gula, Sirup}         => {Pet Food}  0.1     0.5000000  0.2      1.0000000
## [13] {Gula, Sirup}         => {Teh Celup} 0.1     0.5000000  0.2      0.6250000
## [14] {Pet Food, Sirup}     => {Teh Celup} 0.2     0.5000000  0.4      0.6250000
## [15] {Pet Food, Teh Celup} => {Sirup}     0.2     0.6666667  0.3      1.1111111
## [16] {Sirup, Teh Celup}    => {Pet Food}  0.2     0.5000000  0.4      1.0000000
##      count
## [1]  5    
## [2]  6    
## [3]  8    
## [4]  2    
## [5]  3    
## [6]  4    
## [7]  4    
## [8]  3    
## [9]  4    
## [10] 4    
## [11] 1    
## [12] 1    
## [13] 1    
## [14] 2    
## [15] 2    
## [16] 2

6.2 Filter LHS dan RHS (2)

Dengan 16 rules yang dihasilkan, kita bisa memiliki lebih banyak pilihan untuk melakukan filter lhs dan rhs seperti yang telah ditunjukkan bagian (1) diatas.

Fungsi “subset” di bawah ini berguna untuk melakukan filter berdasarkan lhs atau rhs yang memiliki item Teh Celup.

inspect(subset(mba, lhs %in% "Teh Celup" | rhs %in% "Teh Celup"))
##     lhs    rhs         support confidence coverage lift count
## [1] {}  => {Teh Celup} 0.8     0.8        1        1    8

Terdapat 9 rules sebagai hasil filter dan jika kita gunakan informasi support, confidence dan lift… maka kandidat yang bagus mungkin hanya rule ke 8 dimana nilai lift lebih dari 1 ({Pet Food, Teh Celup} => {Sirup}).

6.3 Filter Berdasarkan Lift

Bisa melakukan filter terhadap metrix kualiatas ari association rules: support, confidence dan lift dengan function subset. Function yang sama untuk melakukan filter terhadap lhs dan rhs.

inspect(subset(mba, (lhs %in% "Teh Celup" | rhs %in% "Teh Celup") & lift > 1))

6.4 Rekomendasi - Filter dengan %in%

Operator %in% yang sebelumnya kita gunakan sudah efektif. Namun operator ini tidak cocok jika kita ingin melakukan filter itemset dengan logika AND. Artinya seluruh item harus muncul dalam itemset yang terpilih. Untuk keperluan tersebut, gunakan operator %in%.

inspect(subset(mba, (lhs %ain% c("Pet Food", "Gula"))))
##     lhs                 rhs     support confidence coverage lift     count
## [1] {Gula, Pet Food} => {Sirup} 0.1     1          0.1      1.666667 1

6.5 Visualisasi Rules dengan Graph

Menghasilkan rules dan mengerti bagaimana metrik kualitas dapat digunakan sebagai basis pemilihan rule.

Namun ketika item semakin banyak, maka proses memilih berdasarkan angka-angka saja cukup merepotkan. Kadangkala visualisasi bisa sangat membantu analisa di proses ini.

library(arulesViz)
plot(subset(mba, lift > 1.1), method = "graph")

Grafik di atas dihasilkan oleh fungsi baris plot().

Perhatikan fungsi plot ini merupakan pengembangan dari package “arules”. Metode graph menunjukkan bahwa plot ini harus menghasilkan visualisasi dengan tipe jaringan.

6.6 Kesimpulan

menganalisa statistik yang terkait dengan item dan itemset. menghasilkan rule dan mencari itemset terbaik di rule - ini menjadi model untuk paket produk yang baik.