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