Contoh Sederhana SPADE atau arulesSequences

Agak sedikit berbeda dengan aturan pembelian pada package(arules) atau algoritma apriori dimana setiap transaksi terjadi pada satu kali keranjang pembelian, maka pada SPADE transaksi memperhatikan adanya transaksi yang terjadi kembali oleh pembeli yang sama untuk barang yang berbeda atau berurutan.

contoh: jika seseorang membeli vCD film “transformer” apakah orang tersebut akan kembali membeli VCD film “transformer 2” ?

Jadi pada SPADE ini memperhatikan transaksi yang sifatnya kelanjutan dari transaksi yang sebelumnya dilakukan oleh orang yang sama.

Pada pembahasan ini akan diberikan contoh seperti berikut,

Contoh data pembelian Item menggunakan Kartu Kredit

ID Kartu Kredit 0012345

Riwayat transaksi

tanggal 15 Januari 2017 membeli A

tanggal 10 Juni 2017 membeli C

tanggal 15 Juni 2017 membeli B dan A

ID Kartu Kredit 0012346

Riwayat transaksi

tanggal 10 Januari 2017 membeli C

tanggal 10 Maret 2017 membeli B dan C

ID Kartu Kredit 0012347

Riwayat transaksi

tanggal 15 Januari 2017 membeli A

tanggal 15 Maret 2017 membeli C

Bagaimana cara memasukkan data diatas kedalam R? Salah satu caranya adalah dengan mengetikkan data diatas ke dalam Notepad

0012345 15 1 A

0012345 145 1 C

0012345 150 2 B A

0012346 10 1 C

0012346 70 2 B C

0012347 15 1 A

0012347 75 1 C

catatan: urutan kolom diatas adalah

SID EID SIZE ITEM_SET

dan asumsi EID digunakan 1 bulan = 30 hari

kemudian simpan data diatas dengan nama “kartu_kredit.txt” di dalam folder

C:/Users/lenovo/Documents/R/win-library/3.3/arulesSequences/misc

lokasi penyimpanan ini pasti akan berbeda di setiap komputer yang dipakai, dipastikan lokasi penyimpanan ada di dalam folder ‘misc’ dalam package ‘arulesSequences’.

Kemudian mulai menggunakan R untuk kasus tersebut,

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

jika masing-masing package diatas sudah dipanggil maka dapat dilanjutkan dengan

dat <- read_baskets(con = system.file("misc", "kartu_kredit.txt", package =
"arulesSequences"),
info = c("sequenceID","eventID","SIZE"))

maka kita bisa memanggil data yang telah kita masukkan,

dat
## transactions in sparse format with
##  7 transactions (rows) and
##  3 items (columns)
as(dat,"data.frame")
##   transactionID.sequenceID transactionID.eventID transactionID.SIZE items
## 1                  0012345                    15                  1   {A}
## 2                  0012345                   145                  1   {C}
## 3                  0012345                   150                  2 {A,B}
## 4                  0012346                    10                  1   {C}
## 5                  0012346                    70                  2 {B,C}
## 6                  0012347                    15                  1   {A}
## 7                  0012347                    75                  1   {C}

setelah memastikan data telah masuk dengan benar ke dalam package(arulesSequences) maka kita dapat menemukan pola

hasilseq <- cspade(dat,parameter=list(support=0.5,maxwin=360),control=list( tidLists=TRUE))

kemudian kita panggil kembali untuk melihat hasilnya

hasilseq
## set of 5 sequences

dan

summary(hasilseq)
## set of 5 sequences with
## 
## most frequent items:
##       C       A       B (Other) 
##       3       2       2       2 
## 
## most frequent elements:
##     {C}     {A}     {B} (Other) 
##       3       2       2       2 
## 
## element (sequence) size distribution:
## sizes
## 1 2 
## 3 2 
## 
## sequence length distribution:
## lengths
## 1 2 
## 3 2 
## 
## summary of quality measures:
##     support      
##  Min.   :0.6667  
##  1st Qu.:0.6667  
##  Median :0.6667  
##  Mean   :0.7333  
##  3rd Qu.:0.6667  
##  Max.   :1.0000  
## 
## includes transaction ID lists: TRUE 
## 
## mining info:
##  data ntransactions nsequences support
##   dat             7          3     0.5
as(hasilseq,"data.frame")
##    sequence   support
## 1     <{A}> 0.6666667
## 2     <{B}> 0.6666667
## 3     <{C}> 1.0000000
## 4 <{A},{C}> 0.6666667
## 5 <{C},{B}> 0.6666667

aturan yang terbentuk seperti diatas

aturan <- ruleInduction(hasilseq, confidence = 0.1, control  = list(verbose = TRUE))

kemudian melihat hasilnya

aturan
## set of 2 sequencerules

dan

as(aturan,"data.frame")
##             rule   support confidence lift
## 1 <{A}> => <{C}> 0.6666667  1.0000000    1
## 2 <{C}> => <{B}> 0.6666667  0.6666667    1

dalam contoh ini kita mencoba mensortir urutan berdasarkan nilai lift rasionya, meskipun pada contoh diatas nilai liftnya sama dapat dicontohkan sebagai berikut,

sortir <- sort(aturan, decreasing = TRUE, na.last = NA, by = "lift")

untuk melihat hasilnya,

sortir
## set of 2 sequencerules

dan

as(sortir,"data.frame")
##             rule   support confidence lift
## 1 <{A}> => <{C}> 0.6666667  1.0000000    1
## 2 <{C}> => <{B}> 0.6666667  0.6666667    1

hasil menunjukkan tidak adanya perubahan karena nilai lift rasio nya sama, untuk kasus yang lain dapat di sortir untuk nilai lift, support atau confidencenya.

Pada perintah diatas (kita perlihatkan kembali seperti dibawah ini)

hasilseq <- cspade(dat,parameter=list(support=0.5,maxwin=360),control=list( tidLists=TRUE))

terdapat nilai ‘maxwin=360’, nilai ini menunjukkan jumlah hari transaksi yang kita pertimbangkan untuk melihat adanya aturan asosiasi dalam jangka waktu 1 tahun (=360 hari). Kita bisa juga menggunakan batasan misalnya jangka waktu transaksi apakah pembeli membeli kembali dalam jangka waktu dua bulan (60 hari) maka nilai kita ganti menjadi ‘maxwin = 60’.

hasilseq1 <- cspade(dat,parameter=list(support=0.5,maxwin=60),control=list( tidLists=TRUE))

kemudian kita lihat hasilnya,

as(hasilseq1,"data.frame")
##    sequence   support
## 1     <{A}> 0.6666667
## 2     <{B}> 0.6666667
## 3     <{C}> 1.0000000
## 4 <{C},{B}> 0.6666667

nampak bahwa aturan asosiasi yang terbentuk hanya 4 aturan dalam waktu 60 hari.

Semoga bermanfaat,

Salam

RB Fajriya Hakim, email hakimf@uii.ac.id

Dept of Statistics, Universitas Islam Indonesia