Contoh Simpel package ‘arules’

Jika kita sudah menginstal library(arules) maka kita dapat memanggilnya dengan perintah,

library(Matrix)
library(arules)
## 
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
## 
##     %in%, write

kemudian dapat kita lihat posisi library(arules) dalam direktori kita

search()
##  [1] ".GlobalEnv"        "package:arules"    "package:Matrix"   
##  [4] "package:stats"     "package:graphics"  "package:grDevices"
##  [7] "package:utils"     "package:datasets"  "package:methods"  
## [10] "Autoloads"         "package:base"

terlihat bahwa posisi package(arules) ada di nomor 2, sehingga untuk mengetahui apa saja perintah di dalam package(arules) bisa digunakan perintah,

ls(2)
##  [1] "%ain%"                  "%in%"                  
##  [3] "%pin%"                  "addComplement"         
##  [5] "affinity"               "aggregate"             
##  [7] "apriori"                "coerce"                
##  [9] "coverage"               "crossTable"            
## [11] "decode"                 "discretize"            
## [13] "dissimilarity"          "duplicated"            
## [15] "eclat"                  "encode"                
## [17] "generatingItemsets"     "image"                 
## [19] "info"                   "info<-"                
## [21] "initialize"             "inspect"               
## [23] "interestMeasure"        "intersect"             
## [25] "is.closed"              "is.element"            
## [27] "is.maximal"             "is.subset"             
## [29] "is.superset"            "itemFrequency"         
## [31] "itemFrequencyPlot"      "itemInfo"              
## [33] "itemInfo<-"             "itemIntersect"         
## [35] "itemLabels"             "itemLabels<-"          
## [37] "items"                  "items<-"               
## [39] "itemSetdiff"            "itemsetInfo"           
## [41] "itemsetInfo<-"          "itemUnion"             
## [43] "labels"                 "lhs"                   
## [45] "lhs<-"                  "LIST"                  
## [47] "match"                  "merge"                 
## [49] "nitems"                 "predict"               
## [51] "quality"                "quality<-"             
## [53] "random.patterns"        "random.transactions"   
## [55] "read.PMML"              "read.transactions"     
## [57] "recode"                 "rhs"                   
## [59] "rhs<-"                  "ruleInduction"         
## [61] "sample"                 "setdiff"               
## [63] "setequal"               "show"                  
## [65] "size"                   "sort"                  
## [67] "SORT"                   "subset"                
## [69] "summary"                "support"               
## [71] "supportingTransactions" "t"                     
## [73] "tidLists"               "transactionInfo"       
## [75] "transactionInfo<-"      "union"                 
## [77] "unique"                 "write"                 
## [79] "WRITE"                  "write.PMML"

ada banyak perintah di dalam package(arules) diantaranya adalah algoritma ‘apriori’. Untuk mengetahui secara detil algoritma apriori bisa diketikkan help(apriori).

Mari kita coba menggunakan package(arules) dengan algoritma apriori ini.

Memasukkan data,

data<-list(c("roti","susu","daging","buah"),
           c("roti","popok","bir","daging"),
           c("sosis","bir","popok"),
           c("payung","bir","popok","sambal"),
           c("payung","bir","jus","buah"))

kemudian kita panggil data yang telah kita masukkan,

data
## [[1]]
## [1] "roti"   "susu"   "daging" "buah"  
## 
## [[2]]
## [1] "roti"   "popok"  "bir"    "daging"
## 
## [[3]]
## [1] "sosis" "bir"   "popok"
## 
## [[4]]
## [1] "payung" "bir"    "popok"  "sambal"
## 
## [[5]]
## [1] "payung" "bir"    "jus"    "buah"

di dalam package(arules) ini maka data transaksi harus ditransformasikan dalam data berbentuk data transaksi

data.tran<-as(data,"transactions")
data.tran
## transactions in sparse format with
##  5 transactions (rows) and
##  10 items (columns)

terlihat data sebanyak 5 transaksi dan terdiri dari 10 item barang.

class(data.tran)
## [1] "transactions"
## attr(,"package")
## [1] "arules"

perintah diatas untuk mengetahui kelas dari data.tran

data transaksi juga dilihat dalam bentuk matriks(0,1)

as(data.tran,"matrix")
##   bir buah daging jus payung popok roti sambal sosis susu
## 1   0    1      1   0      0     0    1      0     0    1
## 2   1    0      1   0      0     1    1      0     0    0
## 3   1    0      0   0      0     1    0      0     1    0
## 4   1    0      0   0      1     1    0      1     0    0
## 5   1    1      0   1      1     0    0      0     0    0

kemudian kita bisa melihat data.tran sebagai data frame

as(data.tran,"data.frame")
##                       items
## 1   {buah,daging,roti,susu}
## 2   {bir,daging,popok,roti}
## 3         {bir,popok,sosis}
## 4 {bir,payung,popok,sambal}
## 5     {bir,buah,jus,payung}

untuk melihat grafik histogram dari data transaksi ini maka dapat digunakan perintah

itemFrequencyPlot(data.tran,type="absolute")

dengan perintah ‘apriori’ maka ingin dicari barang yang dibeli secara bersamaan

data.ap<-apriori(data.tran)
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport support minlen maxlen
##         0.8    0.1    1 none FALSE            TRUE     0.1      1     10
##  target   ext
##   rules FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## Warning in apriori(data.tran): You chose a very low absolute support count of 0. You might run out of memory! Increase minimum support.
## apriori - find association rules with the apriori algorithm
## version 4.21 (2004.05.09)        (c) 1996-2004   Christian Borgelt
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[10 item(s), 5 transaction(s)] done [0.00s].
## sorting and recoding items ... [10 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [70 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

package(arules) telah mengerjakan perintah ‘apriori’ dari data yang dimasukkan, namun belum memperlihatkan pola aturan dari item barang yang ada di transaksi.

Perintah berikut menampilkan pola aturan dari barang yang terbeli,

inspect(head(sort(data.ap,by="support"),n=6))
##   lhs         rhs      support confidence     lift
## 1 {}       => {bir}        0.8        0.8 1.000000
## 2 {popok}  => {bir}        0.6        1.0 1.250000
## 3 {daging} => {roti}       0.4        1.0 2.500000
## 4 {roti}   => {daging}     0.4        1.0 2.500000
## 5 {payung} => {bir}        0.4        1.0 1.250000
## 6 {sosis}  => {popok}      0.2        1.0 1.666667

keterangan: lhs = left hand-side rhs = right hand-side

nilai minimum support dan nilai (n) aturan asosiasi yang terbentuk dapat dirubah-rubah seperti contoh berikut,

data.ap1<-apriori(data.tran,parameter=list(supp=0.4,maxlen=3))
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport support minlen maxlen
##         0.8    0.1    1 none FALSE            TRUE     0.4      1      3
##  target   ext
##   rules FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## apriori - find association rules with the apriori algorithm
## version 4.21 (2004.05.09)        (c) 1996-2004   Christian Borgelt
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[10 item(s), 5 transaction(s)] done [0.00s].
## sorting and recoding items ... [6 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 done [0.00s].
## writing ... [5 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

kemudian untuk melihat aturannya,

inspect(head(sort(data.ap1,by="support"),n=20))
##   lhs         rhs      support confidence lift
## 1 {}       => {bir}        0.8        0.8 1.00
## 2 {popok}  => {bir}        0.6        1.0 1.25
## 3 {daging} => {roti}       0.4        1.0 2.50
## 4 {roti}   => {daging}     0.4        1.0 2.50
## 5 {payung} => {bir}        0.4        1.0 1.25

sehingga kita bisa mengambil kesimpulan terdapat 5 aturan dan ada beberapa yang cukup sedikit ‘aneh’ misalnya,

jika membeli ‘popok’ maka membeli ‘bir’ dengan nilai support = 0.6 dan nilai confident = 1. Artinya dari data transaksi terdapat 60% nya membeli popok dan bir secara bersamaan dan jika seseorang membeli popok maka pasti akan membeli bir. Menurut jurnalnya maka diketahui bahwa yang membeli popok dan bir secara bersamaan adalah orang laki-laki(suami) yang berbelanja untuk kebutuhan rumah tangganya.

Salam,

RB Fajriya Hakim email hakimf@uii.ac.id

Dept of Statistics Universitas Islam Indonesia