Halo guys, kali ini kita akan lanjut bahas part 2 tentang MBA ya, yang belum lihat part 1 nya bisa buka Market Basket Analysis Menggunakan R Part 1 . Kemudian untuk Full code dan datanya bisa download DISINI
6. Apriori algorithm
6.1 Pilihan support dan confidence
Langkah pertama untuk membuat sekumpulan association rules adalah menentukan ambang optimal untuk support dan confidence. Jika kita menetapkan nilai-nilai ini terlalu rendah, maka algoritma akan membutuhkan waktu lebih lama untuk dieksekusi dan kita akan mendapatkan banyak rules (kebanyakan tidak akan berguna). Lalu, nilai apa yang kita pilih? Kita dapat mencoba berbagai nilai support dan confidence dan melihat secara grafis berapa banyak rules yang dibuat untuk setiap kombinasi.
# Support and confidence values
supportLevels <- c(0.1, 0.05, 0.01, 0.005)
confidenceLevels <- c(0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1)
# Empty integers
rules_sup10 <- integer(length=9)
rules_sup5 <- integer(length=9)
rules_sup1 <- integer(length=9)
rules_sup0.5 <- integer(length=9)
# Apriori algorithm with a support level of 10%
for (i in 1:length(confidenceLevels)) {
rules_sup10[i] <- length(apriori(trans, parameter=list(sup=supportLevels[1],
conf=confidenceLevels[i], target="rules")))
}
# Apriori algorithm with a support level of 5%
for (i in 1:length(confidenceLevels)){
rules_sup5[i] <- length(apriori(trans, parameter=list(sup=supportLevels[2],
conf=confidenceLevels[i], target="rules")))
}
# Apriori algorithm with a support level of 1%
for (i in 1:length(confidenceLevels)){
rules_sup1[i] <- length(apriori(trans, parameter=list(sup=supportLevels[3],
conf=confidenceLevels[i], target="rules")))
}
# Apriori algorithm with a support level of 0.5%
for (i in 1:length(confidenceLevels)){
rules_sup0.5[i] <- length(apriori(trans, parameter=list(sup=supportLevels[4],
conf=confidenceLevels[i], target="rules")))
}
Pada grafik berikut kita dapat melihat jumlah rules yang dihasilkan dengan tingkat support 10%, 5%, 1% dan 0,5%.
# Number of rules found with a support level of 10%
plot1 <- qplot(confidenceLevels, rules_sup10, geom=c("point", "line"),
xlab="Confidence level", ylab="Number of rules found",
main="Apriori with a support level of 10%") +
theme_bw()
# Number of rules found with a support level of 5%
plot2 <- qplot(confidenceLevels, rules_sup5, geom=c("point", "line"),
xlab="Confidence level", ylab="Number of rules found",
main="Apriori with a support level of 5%") +
scale_y_continuous(breaks=seq(0, 10, 2)) +
theme_bw()
# Number of rules found with a support level of 1%
plot3 <- qplot(confidenceLevels, rules_sup1, geom=c("point", "line"),
xlab="Confidence level", ylab="Number of rules found",
main="Apriori with a support level of 1%") +
scale_y_continuous(breaks=seq(0, 50, 10)) +
theme_bw()
# Number of rules found with a support level of 0.5%
plot4 <- qplot(confidenceLevels, rules_sup0.5, geom=c("point", "line"),
xlab="Confidence level", ylab="Number of rules found",
main="Apriori with a support level of 0.5%") +
scale_y_continuous(breaks=seq(0, 130, 20)) +
theme_bw()
# Subplot
grid.arrange(plot1, plot2, plot3, plot4, ncol=2)
Kita dapat menggabungkan empat baris untuk meningkatkan visualisasi.
# Data frame
num_rules <- data.frame(rules_sup10, rules_sup5, rules_sup1, rules_sup0.5, confidenceLevels)
# Number of rules found with a support level of 10%, 5%, 1% and 0.5%
ggplot(data=num_rules, aes(x=confidenceLevels)) +
# Plot line and points (support level of 10%)
geom_line(aes(y=rules_sup10, colour="Support level of 10%")) +
geom_point(aes(y=rules_sup10, colour="Support level of 10%")) +
# Plot line and points (support level of 5%)
geom_line(aes(y=rules_sup5, colour="Support level of 5%")) +
geom_point(aes(y=rules_sup5, colour="Support level of 5%")) +
# Plot line and points (support level of 1%)
geom_line(aes(y=rules_sup1, colour="Support level of 1%")) +
geom_point(aes(y=rules_sup1, colour="Support level of 1%")) +
# Plot line and points (support level of 0.5%)
geom_line(aes(y=rules_sup0.5, colour="Support level of 0.5%")) +
geom_point(aes(y=rules_sup0.5, colour="Support level of 0.5%")) +
# Labs and theme
labs(x="Confidence levels", y="Number of rules found",
title="Apriori algorithm with different support levels") +
theme_bw() +
theme(legend.title=element_blank())
Mari kita analisis hasilnya,
Tingkat support 10%. Kita hanya mengidentifikasi beberapa rules dengan tingkat confidence yang sangat rendah. Ini berarti bahwa tidak ada pengaitan yang relatif sering dalam kumpulan data. Kita tidak dapat memilih nilai ini, rules yang dihasilkan tidak representatif.
Tingkat support 5%. Kita hanya mengidentifikasi rules dengan tingkat confidence minimal 50%. Tampaknya kita harus mencari level support di bawah 5% untuk mendapatkan jumlah rules yang lebih banyak dengan confidence yang wajar.
Tingkat support 1%. Kita mulai mendapatkan lusinan rules, yang 13 di antaranya memiliki tingkat confidence setidaknya 50%.
Tingkat support 0,5%. Terlalu banyak rules untuk dianalisis!
Singkatnya, kita akan menggunakan tingkat support 1% dan tingkat confidence 50%.
# Apriori algorithm execution with a support level of 1% and a confidence level of 50%
rules_sup1_conf50 <- apriori(trans, parameter=list(sup=supportLevels[3],
conf=confidenceLevels[5], target="rules"))
Association rules yang dihasilkan adalah sebagai berikut,
# Inspect association rules
inspect(rules_sup1_conf50)
## lhs rhs support confidence coverage lift
## [1] {Tiffin} => {Coffee} 0.01058361 0.5468750 0.01935289 1.134577
## [2] {Spanish Brunch} => {Coffee} 0.01406108 0.6326531 0.02222558 1.312537
## [3] {Scone} => {Coffee} 0.01844572 0.5422222 0.03401875 1.124924
## [4] {Toast} => {Coffee} 0.02570305 0.7296137 0.03522830 1.513697
## [5] {Alfajores} => {Coffee} 0.02237678 0.5522388 0.04052011 1.145705
## [6] {Juice} => {Coffee} 0.02131842 0.5300752 0.04021772 1.099723
## [7] {Hot chocolate} => {Coffee} 0.02721500 0.5263158 0.05170850 1.091924
## [8] {Medialuna} => {Coffee} 0.03296039 0.5751979 0.05730269 1.193337
## [9] {Cookies} => {Coffee} 0.02978530 0.5267380 0.05654672 1.092800
## [10] {NONE} => {Coffee} 0.04172966 0.5810526 0.07181736 1.205484
## [11] {Sandwich} => {Coffee} 0.04233444 0.5679513 0.07453886 1.178303
## [12] {Pastry} => {Coffee} 0.04868461 0.5590278 0.08708800 1.159790
## [13] {Cake} => {Coffee} 0.05654672 0.5389049 0.10492894 1.118042
## count
## [1] 70
## [2] 93
## [3] 122
## [4] 170
## [5] 148
## [6] 141
## [7] 180
## [8] 218
## [9] 197
## [10] 276
## [11] 280
## [12] 322
## [13] 374
Visualisasi berikut merepresentasikan rules sebagai grafik dengan item sebagai labeled vertices, dan rules direpresentasikan sebagai vertices/simpul yang terhubung ke item menggunakan panah.
Apa lagi yang bisa kita lakukan? Kita dapat merepresentasikan rules sebagai visualisasi berbasis matriks yang dikelompokkan. Ukuran support dan lift masing-masing diwakili oleh ukuran dan warna balon. Dalam hal ini, ini bukan visualisasi yang bagus, karena kita hanya memiliki coffee di sisi kanan rules.
Ada fungsi luar biasa yang disebut ruleExplorer() yang mengeksplorasi association rules menggunakan manipulasi dan visualisasi interaktif menggunakan shiny.
6.4 Eksekusi lainnya
Kita telah mengeksekusi algoritma Apriori dengan nilai support dan confidence yang sesuai. Apa yang terjadi jika kita menjalankannya dengan nilai rendah? Bagaimana visualisasi apakah berubah? Mari kita coba dengan tingkat support 0,5% dan tingkat confidence 10%.
# Apriori algorithm execution with a support level of 0.5% and a confidence level of 10%
rules_sup0.5_conf10 <- apriori(trans, parameter=list(sup=supportLevels[4], conf=confidenceLevels[9], target="rules"))
Scatter plot
Mungkin sekian dulu untuk post kali ini tentang MBA , Terimakasih
credit: https://github.com/lulukuo530/BakeryTranscation
No comments: