R ile Birliktelik Kuralları Uygulaması
Merhaba,
Birliktelik Kuralları yöntemine dair kaleme aldığım eski yazılarıma aşağıdaki linkler aracılığıyla ulaşabilirsiniz.
Birliktelik Kuralları ve Uygulama Alanları
Birliktelik Kuralları Yönteminde Matematiksel Süreç
Birlikteli Kuralları Algoritmaları
Çalışmada yer alan parametrelerin açıklamaları aşağıda verildi. Parametreler hakkında detaylı bilgilere link ile erişilebilir.
Minsup: Minimum destek değeri
Minconf: Minimum güven değeri
Support: Kurala ait destek değeri
Confidence: Kurala ait güven değeri
Lift: Kurala ait kaldıraç değeri
Count: Kuralda yer alan ürünlerin birlikte alınma (görülme) sıklığı
R Kütüphaneleri
R üzerinde bir uygulama yapılmak istenildiğinde bazı kütüphanelere ihtiyaç duyulmaktadır. Bu ve bu gibi çalışmalar için gerekli olan kütüphaneler ve detayları Tablo 1, Tablo 2 Tablo 3 ve Tablo 4’te verildi.




Birliktelik Kuralları Uygulaması
R üzerinde gerçekleştirilen bu çalışmada Birliktelik Kuralları yöntemini uygulandı. Çalışmada, başvurulan arules kütüphanesi içerisindeki Groceries veri setinden yararlanıldı.
Data Aktarma ve Özet Bilgi
Bir kütüphanede yer alan veri setini içeri aktarmak için data() komutu kullanılır. Groceries datası hakkında özet bilgilere ulaşmak için aşağıdaki kod serisi kullanılabilir. Datanın boyutu 9385×169’dur. 9385 transactions (işlem) satır sayısına ve 169 items sütun sayısına karşılık gelir.
Programdaki data formatı seyrek matris (sparse matrix) denilen özel bir yapıdadır. Bu matriste boş olmayan hücrelerin yüzdesi yani matrisin yoğunluğu %2’dir (a density of 0.02609146). Bu değer ile beraber datadaki toplam ürün miktarına ulaşılır. Toplam ürün miktarını aşağıdaki formül verir.
Toplam Ürün Miktarı=Matrisin Yoğunluk Değeri*Satır Sayısı*Sütun Sayısı
Aşağıdaki görselde “Most Frequent Items” kısmı frekansı en yüksek ilk 5 ürünü ve ürünlerin adetlerini gösterir. “Element Length Distribution” kısmı data dağılımını verir. Bu kısma göre, 2 adet items içeren 1643 transaction olduğunu gösterir.
Tanımlayıcı Bilgiler
class() komutu ile başvurulan paket gösterilir. dim() komutu ile transactions ve items bilgisine ulaşılır. başvurulan paket gösterilir. transactions uzunluğuna length() komutu ile de ulaşılabilir.
İlk 10 Items Görüntüleme ve ItemSetList Oluşturma
ItemSetlist Tablo Halinde Görüntüleme ve ilk-Son 10 Items
ItemSetList Dışarı Aktarma (.txt)
1 |
write.table(ItemSetList, file='C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/ItemSetList.txt', sep = "\t",row.names = F) |
Absolute Frequency Plot
En çok tekrar eden ilk 20 items için Absolute Frequency grafiği oluşturduk.
1 2 3 4 |
itemFrequencyPlot(Groceries,topN=20,type="absolute",col=brewer.pal(8,'Pastel2'), main="Absolute Item Frequency Plot (Top 20)", xlab="Items", ylab="Item Frequency - Absolute") |
Relative Frequency Plot
En çok tekrar eden ilk 20 items için Relative Frequency grafiği oluşturduk.
1 2 3 4 |
itemFrequencyPlot(Groceries,topN=20,type="relative",col=brewer.pal(8,'Pastel2'), main="Relative Item Frequency Plot (Top 20)", xlab="Items", ylab="Item Frequency - Absolute") |
Dağılım
1 |
image(Groceries[1:5]) |
1 |
image(sample(Groceries,100)) |
Apriori Algoritması Parametrelere Değer Atama
Apriori algoritması ile kural oluşturmadan önce minsup ve minconf değerini atanır. Eğer değerler atanmaz ise program ön tanımlı olarak minsup değerini %10 ve minconf değerini %80 olarak hesaplar.
1 2 3 4 |
options(digits = 2) min_supp <- 0.003 min_conf <- 0.5 min_lenght <- 2 |
Kural Oluşturma
Apriori Sonuçlarını Görüntüleme
0.03 minsup ve 0.5 minconf değerlerine göre 421 adet birliktelik kuralı elde edildi.
Kurallar Hakkında Özet Bilgiler
Birliktelik kuralları için support, confidence, lift ve count parametreleri için bazı hesaplama sonuçlarına ulaşıldı.
İlk 9 Kuralı Görüntüleme
1.Kural Yorum:
cereals ve whole milk ürünlerinin beraber tercih edilme olasılığı %0.37’dir (support 0.0037). cereals ürününü tercih edenler %64 (confidence 0.64) olasılık ile whole milk tercih etme eğilimine girmektedir. Bu kural için lift değeri 2.5 olarak hesaplandı. Bu değer, kuralın öncül (cereals) ve ardıl (whole milk) bölümünde yer alan ürünlerin birbirinden bağımsızlığını ölçen oransal bir destek değeridir. Özetle, cereals ürünlerinin tercih edilmesi whole milk ürününün tercih edilmesini 2.5 kat kadar arttırıyor. Her iki ürünün beraber tercih edilme sıklığı 36’dır (count 36).
Kuralları Sıralama ve Görüntüleme
Aşağıda ilk kodda kurallar confidence, ikinci kodda support ve üçüncü kodda lift değerlerine göre büyükten küçüğe doğru sıralandı ve ilk 10 kural gösterildi.
Kuralları Dışarı Aktarma
Elde edilen kurallar CSV, RData ve html uzantısı ile dışarı aktarılabilir. Kurallar html uzantısı ile dışarı aktarıldığında aşağıdaki görselde görüldüğü üzere kural setinde arama yapılabilir, parametre değerlerine göre kurallar sıralanabilir ve bağlantı sahibi herkes tarafından kural setine erişim sağlanabilir.
1 2 3 4 5 |
rules_DF <- as(rules, "data.frame") write.csv2(rules_DF, file = "C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/rules.csv", row.names = FALSE) html_page <- inspectDT(rules) saveWidget(html_page, file = paste0("C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/", "BasketRules.html"), selfcontained = FALSE) save.image(file = "C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/BasketRules.RData") |
Kurallar html uzantısı ile dışarı aktarıldığında aşağıdaki görselde görüldüğü üzere kural setinde arama yapılabilir, parametre değerlerine göre kurallar sıralanabilir ve bağlantı sahibi herkes tarafından kural setine erişim sağlanabilir.
Görselleştirme
Scatter Plot
Scatter grafiği büyük kural gruplarını görselleştirmek için tercih edilebilir. Scatter grafiği support, confidence ve lift değerlerine göre kategorize edilebilir. Aşağıdaki görselde kuralların confidence değerine göre Scatter grafiği gösterilmektedir. Kurallar grafik üzerinde nokta olarak gösterilmektedir. Yüksek confidence değerine sahip kurallar daha koyu renkte gösterilmektedir.
1 |
plot(rules, measure=c("support","lift"), shading="confidence", main="Scatter Plot for Association Rules") |
Two-Key Plot
Two-Key grafiği büyük kural gruplarını görselleştirmek için tercih edilebilir. Two-Key grafiğinin x ekseninde support değerleri ve y ekseninde confidence değerleri yer alır. Kurallar grafik üzerinde nokta olarak gösterilmektedir. Order terimi kuralda geçerli olan ürün sayısını vermektedir. Aşağıdaki grafiklerde support ve confidence değerlerinin ters ilişkiye sahip olduğu görülmektedir.
1 2 3 4 5 |
plot(rules, shading="order", control=list(main ="Two-key plot")) plot(rules, shading="order", control=list(main = "Two-key plot", col=rainbow(5))) plot(rules, method = "two-key plot", measure = c("support", "confidence")) plot(rules, method = "two-key plot", measure = c("support", "lift")) |
Grouped Matrix
Grouped Matrix grafiği büyük kural gruplarını görselleştirmek için tercih edilebilir. Grouped Matrix grafiği, kuralın öncül ve ardıl tarafında bulunan ürünlerin kesişim noktalarını daire şekli ile belirtmektedir. Kuralları temsil eden dairelerin büyüklüğü support değerine ve renkleri lift değerine göre bağlı olarak değişmektedir. Lift değeri en yüksek olan kurallar koyu renkte gösterilir. Kuralların support değeri arttıkça kuralları temsil eden daireler büyümektedir.
1 |
plot(rules, method="grouped", main="Grouped Matrix for Association Rules") |
Graph Method
Graph Method grafiği ürünlerden hareketle, kuralların nasıl oluştuğunu inceler. Küçük kural grupları için tercih edilebilir. Hangi kuralda hangi ürünlerin yer aldığı net bir şekilde gösterir. Grafikte bulunan daireler kuralları temsil eder. Dairelerin büyüklüğü kuralın support değerine göre ve renkleri kuralın lift değerine göre şekil alır. Bir üründen daireye doğru giden oklar kuralın öncül tarafını, daireden herhangi bir ürüne doğru giden oklar kuralın ardıl tarafını temsil eder. Bu grafik için geçerli olan kod her çalıştırıldığında farklı bir görsel sunar.
1 2 |
plot(rules[1:10], method="graph", control=list(alpha="1"), main="Graph Method for Association Rules") plot(rules[1:10], method="graph", control=list(alpha="1"), main="Graph Method for Association Rules") |
Matrix Plot
Matrix Method grafiği, küçük veya orta büyüklükteki kural grupları için tercih edilebilir. Grafikte kuralları kareler temsil eder. Grafiğin x ekseni kuralların öncül tarafında bulunan ürünler ve y ekseni kuralların ardıl tarafında bulunan ürünleri temsil eder. Birinci grafikte karelerin renkleri lift değerine göre ve ikinci grafikte confidence değerine göre değişir. Değerler büyüdükçe renkler koyulaşır.
1 2 |
Matrix1 <- plot(rules, method = "matrix", measure = c("support", "confidence"), shading = "lift") Matrix2 <- plot(rules, method = "matrix", measure = c("support", "lift"), shading = "confidence") |
Parallel Coordinates Plot
Parallel Coordinates grafiği küçük kural gruplarını analiz etmek için tercih edilebilir. Graphics Method grafiğinde olduğu gibi kuralların hangi ürünlerden oluştuğunu ve hangi ürünler alındığında beraberinde alım olasılığı artan ürünlerin hangileri olduğu görülebilir. Grafiğin x ekseni ürünlerin kuraldaki sıra bilgisini, y ekseni kurallarda yer alan ürünlerin bilgisi yer alır. x eksenindeki 1 değeri ilk alınan ürün, 2 değeri ikinci alınan ürünü ve RHS alınan son ürünü temsil etmektedir. Grafikte yer alan her bir ok kuralları temsil etmektedir. Bu okların şekli kuralların sahip olduğu support ve confidence değerlerine göre değişmektedir. Yüksek support değerine sahip kurallar için okların genişliği artar ve yüksek confidence değerine sahip kurallar için okların rengi koyulaşmaktadır.
1 |
plot(rules, method ="paracoord", control = list(reorder = TRUE), main="GraphName6") |
html Plot
html uzantısı ile kurallar aktif bir şekilde incelenebilir. Aşağıdaki görselde görüldüğü üzere kural setinde yer alan ürünlere göre kurallar incelenebilir. Yani ürün bazlı kurallara erişim sağlanabilir. Ayrıca, bağlantı sahibi herkes tarafından erişim sağlanabilir.
1 2 3 |
top10rules <- head(rules, n = 10, by = "confidence") plot(top10rules, method = "graph", engine = "htmlwidget") saveAsGraph(head(rules, n = 1000, by = "lift"), file = "C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/rules.graphml") |
Matrix3D Plot
Aşağıda kuralların lift değeri baz alınarak Matrix3D grafiği sunuldu.
1 |
plot(rules, method = "matrix3D", measure = "lift") |
Ürün Bazlı Kural Oluşturma
Aşağıdaki görselde yer alan ilk kodda yoğurt öncül ve ikinci kodda ardıl olarak atandı. İlk kod ile öncül tarafta yoğurt bulunan herhangi bir kurala ulaşılamadı. İkinci kod ile ardıl tarafta yoğurt ürünü olacak şekilde 9 kural elde edildi ve bunlar gösterildi. Bu şekilde ürün özelinde kural incelemesi yapılmış olur.
Kod Dökümü
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
data("Groceries") Groceries summary(Groceries) GR_summary <- summary(Groceries) GR_summary@itemSummary GR_summary@lengths typeof(Groceries) class(Groceries) dim(Groceries) length(Groceries) str(Groceries) inspect(Groceries[1:10]) ItemSetList <- Groceries@itemInfo ItemSetList View(ItemSetList) head(Groceries@itemInfo, n=10) tail(Groceries@itemInfo, n=10) write.table(ItemSetList, file='C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/ItemSetList.txt', sep = "\t",row.names = F) itemFrequencyPlot(Groceries,topN=20,type="absolute",col=brewer.pal(8,'Pastel2'), main="Absolute Item Frequency Plot (Top 20)", xlab="Items", ylab="Item Frequency - Absolute") itemFrequencyPlot(Groceries,topN=20,type="relative",col=brewer.pal(8,'Pastel2'), main="Relative Item Frequency Plot (Top 20)", xlab="Items", ylab="Item Frequency - Absolute") image(Groceries[1:5]) image(sample(Groceries,100)) options(digits = 2) min_supp <- 0.003 min_conf <- 0.5 min_lenght <- 2 rules <- apriori(Groceries, parameter = list(supp = min_supp, conf = min_conf, minlen = min_lenght, target = "rules")) cat(paste0("\n","Association Rules Analysis", "\n", "= = = = = = = = = = = = = =", "\n", "Min. Supp. & Conf. Values:", "\t", min_supp, " & ", min_conf, "\n", "X ==> Y Rules Count:", "\t\t", length(rules))) summary(rules) inspect(rules[1:9]) rules_conf <- arules::sort(rules, by = "confidence", decreasing = TRUE) inspect(head(rules_conf, 10)) rules_supp <- arules::sort(rules, by = "support", decreasing = TRUE) inspect(head(rules_supp, 10)) rules_lift <- arules::sort(rules, by = "lift", decreasing = TRUE) inspect(head(rules_lift, 10)) rules_DF <- as(rules, "data.frame") write.csv2(rules_DF, file = "C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/rules.csv", row.names = FALSE) html_page <- inspectDT(rules) saveWidget(html_page, file = paste0("C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/", "BasketRules.html"), selfcontained = FALSE) save.image(file = "C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/BasketRules.RData") plot(rules, measure=c("support","lift"), shading="confidence", main="Scatter Plot for Association Rules") plot(rules, shading="order", control=list(main ="Two-key plot")) plot(rules, shading="order", control=list(main = "Two-key plot", col=rainbow(5))) plot(rules, method = "two-key plot", measure = c("support", "confidence")) plot(rules, method = "two-key plot", measure = c("support", "lift")) plot(rules, method="grouped", main="Grouped Matrix for Association Rules") plot(rules[1:10], method="graph", control=list(alpha="1"), main="Graph Method for Association Rules") plot(rules[1:10], method="graph", control=list(alpha="1"), main="Graph Method for Association Rules") Matrix1 <- plot(rules, method = "matrix", measure = c("support", "confidence"), shading = "lift") Matrix2 <- plot(rules, method = "matrix", measure = c("support", "lift"), shading = "confidence") plot(rules, method ="paracoord", control = list(reorder = TRUE), main="GraphName6") top10rules <- head(rules, n = 10, by = "confidence") plot(top10rules, method = "graph", engine = "htmlwidget") saveAsGraph(head(rules, n = 1000, by = "lift"), file = "C:/Users/gedle/Desktop/Data/Birliktelik Kuralları/Çıktılar/rules.graphml") plot(rules, method = "matrix3D", measure = "lift") rulesyogurt <- apriori(data = Groceries, parameter = list(supp=0.003, conf=0.5, minlen=2), appearance = list(default="rhs",lhs="yogurt"), control = list(verbose=F)) rulesyogurt rulesyogurt2 <- apriori(data = Groceries, parameter = list(supp=0.003, conf=0.5, minlen=2), appearance = list(default="lhs",rhs="yogurt"), control = list(verbose=F)) rulesyogurt2 inspect(head(rulesyogurt2,9)) |
KAYNAKÇA
Gedleç, Ş., Çok Boyutlu Birliktelik Kuralları Analizi ve İşletme Uygulaması. Yüksek Lisans Tezi. Marmara Üniversitesi.
https://cran.r-project.org/web/packages/arules/arules.pdf
Kemal
Elinize sağlık çok faydalı bir yazı olmuş
Şengül Gedleç
Yararlı olmasına sevindim. Teşekkür ederim. 🙂
Çağrı Aksu
Çok başarılı, teşekkürler
Şengül Gedleç
Beğenmenize sevindim 🙂