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.
Data yang digunakan diambil dari Weka dataset dapat diakses pada data supermarke.csv, merupakan dataset yang berisis daftar pembelian barang setiap transaksinya.
Summary data dan dilihat data secara keseluruhan
summary(supermarket)
TID name
Min. : 1 Length:79626
1st Qu.:1162 Class :character
Median :2324 Mode :character
Mean :2317
3rd Qu.:3476
Max. :4627
Saya akan memulai dengan menunjukkan barang yang paling banyak dibeli di supermarket ini.
Setelah itu saya membuah sebuah rules algoritma apriori. pertama, ubah data frame menjadi sebuah list
head(sup_list)
$`1`
[1] "baby needs " "bread and cake " "baking needs " "juice sat cord ms"
[5] "biscuits" "canned vegetables " "cleaners polishers" "coffee"
[9] "sauces gravy pkle" "confectionary" "dishcloths scour" "frozen foods "
[13] "razor blades " "party snack foods " "tissues paper prd " "wrapping"
[17] "mens toiletries " "cheese" "milk cream" "margarine"
[21] "small goods " "fruit" "vegetables" "750ml white nz "
$`2`
[1] "canned fish meat " "canned fruit " "canned vegetables " "sauces gravy pkle"
[5] "deod disinfectant" "frozen foods " "pet foods " "laundry needs "
[9] "tissues paper prd " "deodorants soap" "haircare" "milk cream"
[13] "fruit" "vegetables"
$`3`
[1] "bread and cake " "baking needs " "juice sat cord ms" "biscuits"
[5] "canned fruit " "sauces gravy pkle" "puddings deserts" "wrapping"
[9] "health food other " "small goods " "dairy foods " "beef"
[13] "lamb" "fruit" "vegetables" "stationary"
$`4`
[1] "bread and cake " "baking needs " "juice sat cord ms" "biscuits"
[5] "canned vegetables " "breakfast food " "cleaners polishers" "frozen foods "
[9] "jams spreads" "pet foods " "party snack foods " "tissues paper prd "
[13] "deodorants soap" "mens toiletries " "cheese" "margarine"
[17] "dairy foods " "beef" "stationary" "prepared meals "
$`5`
[1] "bread and cake " "baking needs " "juice sat cord ms" "tea"
[5] "cleaners polishers" "coffee" "sauces gravy pkle" "frozen foods "
[9] "jams spreads" "laundry needs " "wrapping" "deodorants soap"
[13] "haircare" "dental needs " "meat misc " "milk cream"
[17] "margarine" "beef" "poultry" "potatoes"
[21] "vegetables" "condiments" "small goods2 "
$`6`
[1] "bread and cake " "baking needs " "juice sat cord ms" "tea"
[5] "biscuits" "canned vegetables " "breakfast food " "confectionary"
[9] "frozen foods " "spices" "party snack foods " "tissues paper prd "
[13] "deodorants soap" "margarine" "dairy foods " "fruit"
[17] "potatoes" "vegetables" "stationary" "bake off products "
kemudian, buat class list menjadi transactions. Hal ini akan mempermudah untuk melakukan algoritma apriori.
sup_transaction %>%
head(3) %>%
inspect()
items transactionID
[1] {750ml white nz ,
baby needs ,
baking needs ,
biscuits,
bread and cake ,
canned vegetables ,
cheese,
cleaners polishers,
coffee,
confectionary,
dishcloths scour,
frozen foods ,
fruit,
juice sat cord ms,
margarine,
mens toiletries ,
milk cream,
party snack foods ,
razor blades ,
sauces gravy pkle,
small goods ,
tissues paper prd ,
vegetables,
wrapping} 1
[2] {canned fish meat ,
canned fruit ,
canned vegetables ,
deod disinfectant,
deodorants soap,
frozen foods ,
fruit,
haircare,
laundry needs ,
milk cream,
pet foods ,
sauces gravy pkle,
tissues paper prd ,
vegetables} 2
[3] {baking needs ,
beef,
biscuits,
bread and cake ,
canned fruit ,
dairy foods ,
fruit,
health food other ,
juice sat cord ms,
lamb,
puddings deserts,
sauces gravy pkle,
small goods ,
stationary,
vegetables,
wrapping} 3
sup_transaction %>%
dim()
[1] 4601 100
Buat rules menggunakan fungsi apriori dengan parameter supp = 0.1 dan conf = 0.75
sup_rules <- apriori(data = sup_transaction, parameter = list(supp = 0.1,
conf = 0.75))
Apriori
Parameter specification:
Algorithmic control:
Absolute minimum support count: 460
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[100 item(s), 4601 transaction(s)] done [0.09s].
sorting and recoding items ... [47 item(s)] done [0.01s].
creating transaction tree ... done [0.01s].
checking subsets of size 1 2 3 4 5 6 7 done [0.32s].
writing ... [9958 rule(s)] done [0.32s].
creating S4 object ... done [0.09s].
Lakukan summary untuk rules
summary(sup_rules)
set of 9958 rules
rule length distribution (lhs + rhs):sizes
2 3 4 5 6 7
41 720 3440 4367 1320 70
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.000 4.000 5.000 4.644 5.000 7.000
summary of quality measures:
support confidence coverage lift count
Min. :0.1002 Min. :0.7500 Min. :0.1098 Min. :1.042 Min. : 461.0
1st Qu.:0.1067 1st Qu.:0.7716 1st Qu.:0.1324 1st Qu.:1.196 1st Qu.: 491.0
Median :0.1161 Median :0.7995 Median :0.1452 Median :1.252 Median : 534.0
Mean :0.1259 Mean :0.8080 Mean :0.1563 Mean :1.260 Mean : 579.2
3rd Qu.:0.1332 3rd Qu.:0.8408 3rd Qu.:0.1674 3rd Qu.:1.313 3rd Qu.: 613.0
Max. :0.5079 Max. :0.9205 Max. :0.6438 Max. :1.594 Max. :2337.0
mining info:
Badingkan rules berdasarkan confidence, support, dan lift.
inspect(sup_conf)
lhs rhs support confidence coverage lift count
[1] {biscuits,
frozen foods ,
milk cream,
pet foods ,
vegetables} => {bread and cake } 0.1032384 0.9205426 0.1121495 1.271897 475
[2] {baking needs ,
biscuits,
fruit,
margarine,
milk cream,
vegetables} => {bread and cake } 0.1008476 0.9188119 0.1097587 1.269506 464
[3] {biscuits,
frozen foods ,
margarine,
milk cream,
vegetables} => {bread and cake } 0.1167138 0.9179487 0.1271463 1.268313 537
[4] {biscuits,
canned vegetables ,
frozen foods ,
fruit,
vegetables} => {bread and cake } 0.1069333 0.9179104 0.1164964 1.268260 492
[5] {baking needs ,
frozen foods ,
fruit,
margarine,
milk cream,
vegetables} => {bread and cake } 0.1030211 0.9168279 0.1123669 1.266764 474
Nilai confindence yang tinggi menunjukkan peluang untuk terbelinya barang B jika sudah membeli barang A. Pada data frame di atas, dapat dilihat bahwa nilai confidence tertinggi ada pada item bread and cake. hal ini menjelaskan bahwa peluang iterm bread and cake terbeli sanggat tinggi. Banyak kombinasi pebelian item yang akan membuat seorang pelanggan membeli bread dan cake.
Nilai rasio support menunjukkan peluang sesorang pembeli membeli sebuah atau kombinasi barang. Dengan kata lain, support adalah rasio terbelinya suatu barang terhadap total pembelian milik cream ==> bread and cake memiliki peluang tertinggi dibandingkan barang lainya yaitu sebesaar 0.5. situasi ini menjelaskan bahwa ketika seorang membeili milk cream ia akan membeli bread and cake juga.
inspect(sup_lift)
lhs rhs support confidence coverage lift count
[1] {baking needs ,
biscuits,
bread and cake ,
juice sat cord ms,
sauces gravy pkle} => {party snack foods } 0.1010650 0.8072917 0.1251902 1.594141 465
[2] {laundry needs ,
wrapping} => {tissues paper prd } 0.1038905 0.7697262 0.1349707 1.576106 478
[3] {biscuits,
bread and cake ,
frozen foods ,
juice sat cord ms,
sauces gravy pkle} => {party snack foods } 0.1056292 0.7928222 0.1332319 1.565569 486
[4] {biscuits,
margarine,
wrapping} => {tissues paper prd } 0.1006303 0.7565359 0.1330146 1.549097 463
[5] {baking needs ,
biscuits,
cheese,
tissues paper prd } => {margarine} 0.1019344 0.7701149 0.1323625 1.548645 469
Nilai lift adalah tingkat kemampuan suatu peristiwa untuk mendorong terjadinya peristiwa lain. Dalam kasus ini, nilai lift dapat di jelaskan dengan kemapuan pembeilan suatu barang untuk meningkatkan peulang terbelinya brang lain. contoh pada data frame diatas, nilai lift dari nomer 1 adalah sebesar 1.5. Nilai lift > 1 berarti pembelian baking needs, biscuits, bread and cake, juice sar cord ms, dan sauces gravt pkele
Memiliki kemampuan untuk meningkatkan peluang pembelian party snack foods.
Agar mudah dianalisa maka harus menggunak Visualisasi
Berdasarkan rules yang telah dibuat pada fungsi apriori() tersebut, berikut visualisasinya
plot(sup_rules,
method = "graph",
measure = "lift",
engine = "htmlwidget")
Warning: Too many rules supplied. Only plotting the best 100 using ‘lift’ (change control parameter max if needed).
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
Grafik diatas menunjukkan hubungan atau keterkaitan pembelian suatu barang terdapat pembelian barang lain. Panah menunjukkan barang yang dibeli selanjutnya. Disini, kita dapat melihat barang mana yang paling banyak dibeli dan memiliki keterkaitan terhadap pembelian barang lainya. Metode ini sangat baik digunakan di industri retail karena dapat membantu dalam penyediaan barang (supply chain) dan juga meningkatkan revenue tiap bulanya. Dengan mengetahui penjulan suat barang tertentu, pihak supilier dapat menentukan item yang memiliki potensi untuk dijual selanjutnya.
Interpretasi: dengan Support 0.1 dan Confidence 0.75, sebanyak 9958 rules generated. Pada plot di atas terlihat cluster yang terbentuk hanya 1 dengan produk-produk saling berkaitan antara satu dengan lainnya. Parameter Support dan Confidence yang tinggi membuat produk2 yang paling banyak dibeli dan juga secara bersamaan muncul sebagai produk2 yang saling terkait satu dan lainnya. Kejadian kemunculan cluster besar ini dapat terjadi dalam toko yang memiliki kategori produk groceries atau produk-produk yang kemungkinan besar akan dibeli bersamaan setiap bulan. Pada grafik ini, dapat dilihat node di tengah yaitu snack party food dan biscuit tampak paling banyak terhubung dengan rules di sekitarnya. Dapat disimpulkan secara primordial bahwa kedua kategori produk tersebut paling umum dibeli oleh konsumen sehingga, sebagai contoh, promo bundling berisi produk tersebut bersama dengan produk yang jarang dibeli dapat meningkatkan awareness maupun konversi pada sales produk dengan stock tersisa banyak maupun yang telah mendekati kedaluarsa.