DMBD P11

Contoh membuat data transaksi dari list (menggunakan data dari Tabel 1)

transaksi_list <- list(
c("Roti", "Selai", "Susu"),
c("Roti", "Mentega"),
c("Roti", "Selai", "Mentega"),
c("Susu", "Kopi"),
c("Roti", "Selai", "Susu", "Kopi")
)
# Memberi nama pada transaksi (opsional tapi baik untuk inspeksi)
names(transaksi_list) <- paste("T", 1:length(transaksi_list),
sep="")
# Menginstal dan memuat paket arules jika belum terinstal
library(arules)
## Loading required package: Matrix
## 
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
# Mengkonversi list menjadi objek transactions
data_transaksi <- as(transaksi_list, "transactions")
# Melihat ringkasan data transaksi
summary(data_transaksi)
## transactions as itemMatrix in sparse format with
##  5 rows (elements/itemsets/transactions) and
##  5 columns (items) and a density of 0.56 
## 
## most frequent items:
##    Roti   Selai    Susu    Kopi Mentega (Other) 
##       4       3       3       2       2       0 
## 
## element (itemset/transaction) length distribution:
## sizes
## 2 3 4 
## 2 2 1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     2.0     3.0     2.8     3.0     4.0 
## 
## includes extended item information - examples:
##    labels
## 1    Kopi
## 2 Mentega
## 3    Roti
## 
## includes extended transaction information - examples:
##   transactionID
## 1            T1
## 2            T2
## 3            T3
# Menginspeksi beberapa transaksi pertama
inspect(data_transaksi[1:5])
##     items                     transactionID
## [1] {Roti, Selai, Susu}       T1           
## [2] {Mentega, Roti}           T2           
## [3] {Mentega, Roti, Selai}    T3           
## [4] {Kopi, Susu}              T4           
## [5] {Kopi, Roti, Selai, Susu} T5

Menjalankan algoritma Apriori untuk menghasilkan aturan

# Misalkan kita set min_support = 0.2 (20%) dan min_confidence =0.5 (50%)
# minlen=2 berarti kita mencari aturan dengan minimal 2 item (1 di LHS, 1 di RHS)
aturan <- apriori(data_transaksi,parameter = list(supp = 0.2, conf = 0.5, minlen = 2, target = "rules"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.5    0.1    1 none FALSE            TRUE       5     0.2      2
##  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 ...[5 item(s), 5 transaction(s)] done [0.00s].
## sorting and recoding items ... [5 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [30 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
# Melihat ringkasan aturan yang dihasilkan
summary(aturan)
## set of 30 rules
## 
## rule length distribution (lhs + rhs):sizes
##  2  3  4 
## 13 13  4 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     2.0     3.0     2.7     3.0     4.0 
## 
## summary of quality measures:
##     support      confidence        coverage           lift            count    
##  Min.   :0.2   Min.   :0.5000   Min.   :0.2000   Min.   :0.6250   Min.   :1.0  
##  1st Qu.:0.2   1st Qu.:0.5000   1st Qu.:0.2500   1st Qu.:0.9028   1st Qu.:1.0  
##  Median :0.2   Median :0.6667   Median :0.4000   Median :1.2500   Median :1.0  
##  Mean   :0.3   Mean   :0.7528   Mean   :0.4267   Mean   :1.2222   Mean   :1.5  
##  3rd Qu.:0.4   3rd Qu.:1.0000   3rd Qu.:0.6000   3rd Qu.:1.5625   3rd Qu.:2.0  
##  Max.   :0.6   Max.   :1.0000   Max.   :0.8000   Max.   :1.6667   Max.   :3.0  
## 
## mining info:
##            data ntransactions support confidence
##  data_transaksi             5     0.2        0.5
##                                                                                                    call
##  apriori(data = data_transaksi, parameter = list(supp = 0.2, conf = 0.5, minlen = 2, target = "rules"))

Menginspeksi semua aturan yang dihasilkan

inspect(aturan)
##      lhs                    rhs       support confidence coverage lift     
## [1]  {Mentega}           => {Selai}   0.2     0.5000000  0.4      0.8333333
## [2]  {Mentega}           => {Roti}    0.4     1.0000000  0.4      1.2500000
## [3]  {Roti}              => {Mentega} 0.4     0.5000000  0.8      1.2500000
## [4]  {Kopi}              => {Susu}    0.4     1.0000000  0.4      1.6666667
## [5]  {Susu}              => {Kopi}    0.4     0.6666667  0.6      1.6666667
## [6]  {Kopi}              => {Selai}   0.2     0.5000000  0.4      0.8333333
## [7]  {Kopi}              => {Roti}    0.2     0.5000000  0.4      0.6250000
## [8]  {Susu}              => {Selai}   0.4     0.6666667  0.6      1.1111111
## [9]  {Selai}             => {Susu}    0.4     0.6666667  0.6      1.1111111
## [10] {Susu}              => {Roti}    0.4     0.6666667  0.6      0.8333333
## [11] {Roti}              => {Susu}    0.4     0.5000000  0.8      0.8333333
## [12] {Selai}             => {Roti}    0.6     1.0000000  0.6      1.2500000
## [13] {Roti}              => {Selai}   0.6     0.7500000  0.8      1.2500000
## [14] {Mentega, Selai}    => {Roti}    0.2     1.0000000  0.2      1.2500000
## [15] {Mentega, Roti}     => {Selai}   0.2     0.5000000  0.4      0.8333333
## [16] {Kopi, Susu}        => {Selai}   0.2     0.5000000  0.4      0.8333333
## [17] {Kopi, Selai}       => {Susu}    0.2     1.0000000  0.2      1.6666667
## [18] {Selai, Susu}       => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [19] {Kopi, Susu}        => {Roti}    0.2     0.5000000  0.4      0.6250000
## [20] {Kopi, Roti}        => {Susu}    0.2     1.0000000  0.2      1.6666667
## [21] {Roti, Susu}        => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [22] {Kopi, Selai}       => {Roti}    0.2     1.0000000  0.2      1.2500000
## [23] {Kopi, Roti}        => {Selai}   0.2     1.0000000  0.2      1.6666667
## [24] {Selai, Susu}       => {Roti}    0.4     1.0000000  0.4      1.2500000
## [25] {Roti, Susu}        => {Selai}   0.4     1.0000000  0.4      1.6666667
## [26] {Roti, Selai}       => {Susu}    0.4     0.6666667  0.6      1.1111111
## [27] {Kopi, Selai, Susu} => {Roti}    0.2     1.0000000  0.2      1.2500000
## [28] {Kopi, Roti, Susu}  => {Selai}   0.2     1.0000000  0.2      1.6666667
## [29] {Kopi, Roti, Selai} => {Susu}    0.2     1.0000000  0.2      1.6666667
## [30] {Roti, Selai, Susu} => {Kopi}    0.2     0.5000000  0.4      1.2500000
##      count
## [1]  1    
## [2]  2    
## [3]  2    
## [4]  2    
## [5]  2    
## [6]  1    
## [7]  1    
## [8]  2    
## [9]  2    
## [10] 2    
## [11] 2    
## [12] 3    
## [13] 3    
## [14] 1    
## [15] 1    
## [16] 1    
## [17] 1    
## [18] 1    
## [19] 1    
## [20] 1    
## [21] 1    
## [22] 1    
## [23] 1    
## [24] 2    
## [25] 2    
## [26] 2    
## [27] 1    
## [28] 1    
## [29] 1    
## [30] 1
# Mengurutkan aturan berdasarkan confidence
aturan_urut_conf <- sort(aturan, by = "confidence", decreasing =
TRUE)
inspect(aturan_urut_conf)
##      lhs                    rhs       support confidence coverage lift     
## [1]  {Mentega}           => {Roti}    0.4     1.0000000  0.4      1.2500000
## [2]  {Kopi}              => {Susu}    0.4     1.0000000  0.4      1.6666667
## [3]  {Selai}             => {Roti}    0.6     1.0000000  0.6      1.2500000
## [4]  {Mentega, Selai}    => {Roti}    0.2     1.0000000  0.2      1.2500000
## [5]  {Kopi, Selai}       => {Susu}    0.2     1.0000000  0.2      1.6666667
## [6]  {Kopi, Roti}        => {Susu}    0.2     1.0000000  0.2      1.6666667
## [7]  {Kopi, Selai}       => {Roti}    0.2     1.0000000  0.2      1.2500000
## [8]  {Kopi, Roti}        => {Selai}   0.2     1.0000000  0.2      1.6666667
## [9]  {Selai, Susu}       => {Roti}    0.4     1.0000000  0.4      1.2500000
## [10] {Roti, Susu}        => {Selai}   0.4     1.0000000  0.4      1.6666667
## [11] {Kopi, Selai, Susu} => {Roti}    0.2     1.0000000  0.2      1.2500000
## [12] {Kopi, Roti, Susu}  => {Selai}   0.2     1.0000000  0.2      1.6666667
## [13] {Kopi, Roti, Selai} => {Susu}    0.2     1.0000000  0.2      1.6666667
## [14] {Roti}              => {Selai}   0.6     0.7500000  0.8      1.2500000
## [15] {Susu}              => {Kopi}    0.4     0.6666667  0.6      1.6666667
## [16] {Susu}              => {Selai}   0.4     0.6666667  0.6      1.1111111
## [17] {Selai}             => {Susu}    0.4     0.6666667  0.6      1.1111111
## [18] {Susu}              => {Roti}    0.4     0.6666667  0.6      0.8333333
## [19] {Roti, Selai}       => {Susu}    0.4     0.6666667  0.6      1.1111111
## [20] {Mentega}           => {Selai}   0.2     0.5000000  0.4      0.8333333
## [21] {Roti}              => {Mentega} 0.4     0.5000000  0.8      1.2500000
## [22] {Kopi}              => {Selai}   0.2     0.5000000  0.4      0.8333333
## [23] {Kopi}              => {Roti}    0.2     0.5000000  0.4      0.6250000
## [24] {Roti}              => {Susu}    0.4     0.5000000  0.8      0.8333333
## [25] {Mentega, Roti}     => {Selai}   0.2     0.5000000  0.4      0.8333333
## [26] {Kopi, Susu}        => {Selai}   0.2     0.5000000  0.4      0.8333333
## [27] {Selai, Susu}       => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [28] {Kopi, Susu}        => {Roti}    0.2     0.5000000  0.4      0.6250000
## [29] {Roti, Susu}        => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [30] {Roti, Selai, Susu} => {Kopi}    0.2     0.5000000  0.4      1.2500000
##      count
## [1]  2    
## [2]  2    
## [3]  3    
## [4]  1    
## [5]  1    
## [6]  1    
## [7]  1    
## [8]  1    
## [9]  2    
## [10] 2    
## [11] 1    
## [12] 1    
## [13] 1    
## [14] 3    
## [15] 2    
## [16] 2    
## [17] 2    
## [18] 2    
## [19] 2    
## [20] 1    
## [21] 2    
## [22] 1    
## [23] 1    
## [24] 2    
## [25] 1    
## [26] 1    
## [27] 1    
## [28] 1    
## [29] 1    
## [30] 1
# Mengurutkan aturan berdasarkan lift
aturan_urut_lift <- sort(aturan, by = "lift", decreasing = TRUE)
inspect(aturan_urut_lift)
##      lhs                    rhs       support confidence coverage lift     
## [1]  {Kopi}              => {Susu}    0.4     1.0000000  0.4      1.6666667
## [2]  {Kopi, Selai}       => {Susu}    0.2     1.0000000  0.2      1.6666667
## [3]  {Kopi, Roti}        => {Susu}    0.2     1.0000000  0.2      1.6666667
## [4]  {Kopi, Roti}        => {Selai}   0.2     1.0000000  0.2      1.6666667
## [5]  {Roti, Susu}        => {Selai}   0.4     1.0000000  0.4      1.6666667
## [6]  {Kopi, Roti, Susu}  => {Selai}   0.2     1.0000000  0.2      1.6666667
## [7]  {Kopi, Roti, Selai} => {Susu}    0.2     1.0000000  0.2      1.6666667
## [8]  {Susu}              => {Kopi}    0.4     0.6666667  0.6      1.6666667
## [9]  {Mentega}           => {Roti}    0.4     1.0000000  0.4      1.2500000
## [10] {Roti}              => {Mentega} 0.4     0.5000000  0.8      1.2500000
## [11] {Selai}             => {Roti}    0.6     1.0000000  0.6      1.2500000
## [12] {Roti}              => {Selai}   0.6     0.7500000  0.8      1.2500000
## [13] {Mentega, Selai}    => {Roti}    0.2     1.0000000  0.2      1.2500000
## [14] {Selai, Susu}       => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [15] {Roti, Susu}        => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [16] {Kopi, Selai}       => {Roti}    0.2     1.0000000  0.2      1.2500000
## [17] {Selai, Susu}       => {Roti}    0.4     1.0000000  0.4      1.2500000
## [18] {Kopi, Selai, Susu} => {Roti}    0.2     1.0000000  0.2      1.2500000
## [19] {Roti, Selai, Susu} => {Kopi}    0.2     0.5000000  0.4      1.2500000
## [20] {Susu}              => {Selai}   0.4     0.6666667  0.6      1.1111111
## [21] {Selai}             => {Susu}    0.4     0.6666667  0.6      1.1111111
## [22] {Roti, Selai}       => {Susu}    0.4     0.6666667  0.6      1.1111111
## [23] {Mentega}           => {Selai}   0.2     0.5000000  0.4      0.8333333
## [24] {Kopi}              => {Selai}   0.2     0.5000000  0.4      0.8333333
## [25] {Roti}              => {Susu}    0.4     0.5000000  0.8      0.8333333
## [26] {Mentega, Roti}     => {Selai}   0.2     0.5000000  0.4      0.8333333
## [27] {Kopi, Susu}        => {Selai}   0.2     0.5000000  0.4      0.8333333
## [28] {Susu}              => {Roti}    0.4     0.6666667  0.6      0.8333333
## [29] {Kopi}              => {Roti}    0.2     0.5000000  0.4      0.6250000
## [30] {Kopi, Susu}        => {Roti}    0.2     0.5000000  0.4      0.6250000
##      count
## [1]  2    
## [2]  1    
## [3]  1    
## [4]  1    
## [5]  2    
## [6]  1    
## [7]  1    
## [8]  2    
## [9]  2    
## [10] 2    
## [11] 3    
## [12] 3    
## [13] 1    
## [14] 1    
## [15] 1    
## [16] 1    
## [17] 2    
## [18] 1    
## [19] 1    
## [20] 2    
## [21] 2    
## [22] 2    
## [23] 1    
## [24] 1    
## [25] 2    
## [26] 1    
## [27] 1    
## [28] 2    
## [29] 1    
## [30] 1
# Memfilter aturan, misalnya yang mengandung "Susu" di consequent
(rhs)
## nonstandardGenericFunction for "rhs" defined from package "arules"
## 
## function (x) 
## {
##     standardGeneric("rhs")
## }
## <bytecode: 0x000001769742f2d8>
## <environment: 0x00000176974224a0>
## Methods may be defined for arguments: x
## Use  showMethods(rhs)  for currently available ones.
aturan_susu_rhs <- subset(aturan, rhs %in% "Susu")
inspect(aturan_susu_rhs)
##     lhs                    rhs    support confidence coverage lift      count
## [1] {Kopi}              => {Susu} 0.4     1.0000000  0.4      1.6666667 2    
## [2] {Selai}             => {Susu} 0.4     0.6666667  0.6      1.1111111 2    
## [3] {Roti}              => {Susu} 0.4     0.5000000  0.8      0.8333333 2    
## [4] {Kopi, Selai}       => {Susu} 0.2     1.0000000  0.2      1.6666667 1    
## [5] {Kopi, Roti}        => {Susu} 0.2     1.0000000  0.2      1.6666667 1    
## [6] {Roti, Selai}       => {Susu} 0.4     0.6666667  0.6      1.1111111 2    
## [7] {Kopi, Roti, Selai} => {Susu} 0.2     1.0000000  0.2      1.6666667 1
# Memfilter aturan dengan lift > 1
aturan_lift_tinggi <- subset(aturan, lift > 1)
inspect(aturan_lift_tinggi)
##      lhs                    rhs       support confidence coverage lift    
## [1]  {Mentega}           => {Roti}    0.4     1.0000000  0.4      1.250000
## [2]  {Roti}              => {Mentega} 0.4     0.5000000  0.8      1.250000
## [3]  {Kopi}              => {Susu}    0.4     1.0000000  0.4      1.666667
## [4]  {Susu}              => {Kopi}    0.4     0.6666667  0.6      1.666667
## [5]  {Susu}              => {Selai}   0.4     0.6666667  0.6      1.111111
## [6]  {Selai}             => {Susu}    0.4     0.6666667  0.6      1.111111
## [7]  {Selai}             => {Roti}    0.6     1.0000000  0.6      1.250000
## [8]  {Roti}              => {Selai}   0.6     0.7500000  0.8      1.250000
## [9]  {Mentega, Selai}    => {Roti}    0.2     1.0000000  0.2      1.250000
## [10] {Kopi, Selai}       => {Susu}    0.2     1.0000000  0.2      1.666667
## [11] {Selai, Susu}       => {Kopi}    0.2     0.5000000  0.4      1.250000
## [12] {Kopi, Roti}        => {Susu}    0.2     1.0000000  0.2      1.666667
## [13] {Roti, Susu}        => {Kopi}    0.2     0.5000000  0.4      1.250000
## [14] {Kopi, Selai}       => {Roti}    0.2     1.0000000  0.2      1.250000
## [15] {Kopi, Roti}        => {Selai}   0.2     1.0000000  0.2      1.666667
## [16] {Selai, Susu}       => {Roti}    0.4     1.0000000  0.4      1.250000
## [17] {Roti, Susu}        => {Selai}   0.4     1.0000000  0.4      1.666667
## [18] {Roti, Selai}       => {Susu}    0.4     0.6666667  0.6      1.111111
## [19] {Kopi, Selai, Susu} => {Roti}    0.2     1.0000000  0.2      1.250000
## [20] {Kopi, Roti, Susu}  => {Selai}   0.2     1.0000000  0.2      1.666667
## [21] {Kopi, Roti, Selai} => {Susu}    0.2     1.0000000  0.2      1.666667
## [22] {Roti, Selai, Susu} => {Kopi}    0.2     0.5000000  0.4      1.250000
##      count
## [1]  2    
## [2]  2    
## [3]  2    
## [4]  2    
## [5]  2    
## [6]  2    
## [7]  3    
## [8]  3    
## [9]  1    
## [10] 1    
## [11] 1    
## [12] 1    
## [13] 1    
## [14] 1    
## [15] 1    
## [16] 2    
## [17] 2    
## [18] 2    
## [19] 1    
## [20] 1    
## [21] 1    
## [22] 1