John

Tevfik Bulut

Data Scientist

Web Site

Linkedin

RPubs

Contact

Creativity is just connecting things. When you ask creative people how they did something, they feel a little guilty because they didn’t really do it, they just saw something. It seemed obvious to them after a while. That’s because they were able to connect experiences they’ve had and synthesize new things. Steve Jobs

İçindekiler

Intro

Within the scope of the study, the theoretical framework of Apriori algorithm was given, then a sample application was made on this data set by generating synthetic data in a case study setup.

Giriş

Birliktelik kuralı, veriler tarafından desteklenen bir sonuç veya algoritmik anlamda ifade edecek olursak eğer-o zaman (if-then-rule) kuralıdır. Birliktelik kurallarının geliştirilmesinin arkasında yatan motivasyon, büyük perakendecilerin satış noktası işlemlerinin içeriği ile ilgilenen pazar sepeti (market basket) analizidir. Böyle bir çalışmadan ortaya çıkan tipik bir birliktelik kuralında “ekmek ve tereyağı satın alan tüm müşterilerin yüzde 90’ı aynı zamanda süt de alıyor” olabilir. Müşteri davranışına ilişkin iç görüler, müşteri anketleri yoluyla da elde edilebilir, ancak işlem verilerinin analizi, çok daha ucuz olma ve mevcut tüm müşterileri kapsama avantajına sahiptir. Müşteri anketleriyle karşılaştırıldığında, işlem verilerinin analizinin bazı ciddi sınırlamaları vardır. Örneğin, satış noktası verileri tipik olarak müşterilerin kişisel ilgi alanları, yaşı ve mesleği hakkında herhangi bir bilgi içermez. Diğer taraftan, pazar sepeti analizi müşteri davranışına ilişkin yeni iç görüleri ortaya çıkarabilir ve daha iyi müşteri ilişkileri, müşteriyi elde tutma, daha iyi ürün yerleştirmeleri, ürün geliştirme ve sahtekarlık tespiti yoluyla daha yüksek karlar elde edilmesine imkan sağlayabilir. Çok sayıda müşteri tarafından birlikte satın alınan ürünler pazar sepeti analizi ile ortaya konabilir.

Birliktelik kurallarından ve kural madenciliği (rule mining) uygulamalarından biri olan Apriori algoritması, Agrawal ve Srikant tarafından 1993 yılında geliştirilmiştir. Apriori algoritması birliktelik analizlerinin yapılıp birliktelik kurallarının tespit edilmesinde yaygın bir şekilde kullanılan bir algoritmadır. Geniş ürün veya hizmet kümelerindeki ilişki kurallarının ortaya konulmasında kullanılan apriori algoritmasının ilk uygulama alanı olan pazar sepeti analizi (Market basket analysis), perakende alışverişle sınırlı değildir. Apriori algoritması pazar sepeti analizin yanında aşağıdaki şekilde belirtilen iş alanlarında da uygulanmaktadır:

name

Çalışma kapsamında apriori algoritmasının teorik çerçevesi verilmiş, ardından örnek bir olay kurgusu içerisinde sentetik veri üretilerek bu veri seti üzerinden örnek uygulama yapılmıştır.

Metodoloji

Bu kısımda ilk olarak apriori algoritmasının teorik çerçevesi verilmiştir. Ardından örnek olay senaryosu kapsamında basit tesadüfi örnekleme yöntemi kullanılarak üretilen sentetik veriler üzerinden örnek uygulama yapılmıştır. Analiz aşamasında R programlama dili, sonuçların çalışma kitaplarına yazdırılmasında ise Microsoft Excel çalışma kitapları kullanılmıştır.

Teorik Çerçeve

Birliktelik kuralı, {X -> Y} şeklindedir, burada {X} ve {Y} öğeler kümesidir. Bu birliktelik kuralının anlamı şudur: {X} içindeki tüm öğeler bir sepet içinde oluyorsa, {Y} de bu sepette “büyük olasılıkla” olacaktır.

  • {X} öncül veya birliktelik kuralının sol tarafı (LHS: left-hand-side) olarak da adlandırılır ve
  • {Y}, peşi sıra gelen veya birliktelik kuralının sağ tarafı (RHS: right-hand-side) olarak adlandırılır.

Bahsedilenleri aşağıdaki şekil üzerinde bir örnekler gösterirsek daha iyi anlaşılacağını düşünüyorum.

name

X market ürünleri için örnek bir ilişkilendirme kuralı {Patates, Soğan} -> {Ekmek} olabilir, yani X’den Patates ve Soğan {X} satın alınırsa, müşteriler büyük olasılıkla Ekmek de satın alır {Y} . “ -> ” sembolünün {X} ve {Y} arasında nedensel bir ilişkiyi göstermediğine dikkat etmek gerekir. Bu sembol yalnızca, {X} verildiğinde {Y} ‘nin koşullu olasılığının bir tahminini ortaya koymaktadır.

Şimdi on binlerce farklı ürünün bulunduğu bir gross market düşünün. Olası her ürün kombinasyonu arasındaki tüm ilişkileri hesaplamak istemeyiz . Bundan ziyade, tüm olası kurallar kümesinden yalnızca potansiyel olarak “ilgili” kuralları seçmek isteriz. Bu nedenle, analiz etmemiz gereken ilişki sayısını azaltmak için destek, güven ve lift ölçütlerini kullanırız:

  • Destek (support) ölçütü, bir dizi öğenin sepetlerde ne sıklıkta göründüğünün bir göstergesidir. Destek(X–>Y)=sayı(X,Y)/N formülü ile destek metriği hesaplanmaktadır. Burada N bize toplam işlem sayısını göstermektedir. İfadeyi açacak olursak destek ölçütü, X ve Y ürünlerini satın alanların sayısının toplam işlem sayısına oranlanması ile hesaplanır. Karşılaştırmalı modellerde destek ölçütü değeri ne kadar yüksek ise o kadar iyidir. Destek ölçüt değerinin destek eşik (threshold) değerlerinden büyük olması gerekir. Altında olanlar elenerek bir sonraki adıma geçilir.
  • Güven (confidence) ölçütü, destek kuralının ne kadar sıklıkla doğru bulunduğunun bir göstergesidir. Güven(X–>Y)=sayı(X∪Y)/sayı(X). Güven ölçütü, X ve Y ürünlerini satın alanların sayısının X ürünleri satın alanların sayısına oranlanması ile hesaplanan bir olasılık değeridir. Karşılaştırmalı modellerde güven ölçütü değeri ne kadar yüksek ise o kadar iyidir. Güven ölçüt değerinin güven eşik (threshold) değerlerinden büyük olması gerekir. Altında olanlar elenerek bir sonraki adıma geçilir.
  • Lift , hem desteği hem de güveni kullanan bir birliktelik ölçütüdür. Bu ölçüt, Y ve X öğelerinin ne kadar sıklıkta olduğunu kontrol ederken, X öğesi satın alındığında Y öğesinin satın alınma olasılığının ne kadar yüksek olduğunu bize gösterir. İstatistiksel olarak bağımsız olsalardı, X ve Y’nin beklenenden kaç kez daha sık birlikte meydana geldiğini ölçer. Lift(X–>Y)=Destek(X∪Y) / (Destek(X) x Destek(Y)) eşitliği ile hesaplanır. Lift değeri eşik değerleri ve yorumu şöyledir:
    1. lift = 1 ise öğeler (ürünler veya hizmetler) arasında ilişki olmadığı anlamına gelir.
    2. lift <1 ise X ürünü satın alınırsa Y ürünü satın alınma olasılığının yüksek olduğu anlamına gelir.
    3. lift <1 ise X ürünü satın alınırsa Y öğesinin satın alınmasının olası olmadığı anlamına gelir.

    Örnek Uygulama

    İlk olarak analizde kullanılacak R kütüphanelerini vererek işe başlayalım. Aşağıda gerekenden fazla kütüphane verdiğimi biliyorum. Ancak daha çok esneklik ve estetik tasarım tanıdığı için genellikle olması gerekenden fazla kütüphane ile çalışıyorum. Apriori algoritması için temel paketler “arules” ve “arulesViz” paketleridir.Aşağıda R kod bloğunun çalıştırılmasından sonra kütüphanelerin yüklenip yüklenmediğine dair mantıksal vektör sonuçları gelecektir. Eğer mantıksal vektör sonuçlarının hepsi TRUE ise kütüphanelerin hepsini yüklenmiştir demektir. Kolaylık sağlaması açısından yukarıda kütüphanelerin yüklenmesini gösterir tabloyu da elde etmek ve daha kolay okumanız için kod da yazdım. Bu kod çalıştırıldığında aşağıdaki tabloda görüleceği üzere bütün kütüphaneler yüklenmiştir. Eğer ilgili kütüphane yüklenmemiş olursa “Paket Kurulumu Gerekli” ifadesi satırda yazacaktır.

    Kütüphaneler

    kütüphane<-c("dplyr","tibble","tidyr","ggplot2","ggthemes","readr","readxl","ggpubr","formattable", "ggstance", "pastecs", "knitr", "gtsummary", "writexl", "psych", "reshape2", "GGally", "Hmisc", "corrplot","dendextend", "kableExtra", "pander","arules","arulesViz", "RColorBrewer","rmarkdown", "kableExtra", "report", "citation", "DT", "lubridate")
    yükle<-sapply(kütüphane, require, character.only = TRUE, warn.conflicts = FALSE)
     
    #Kütüphane yüklenme durumunu gösteren tablo
     
    tibble(Sıra=1:length(kütüphane), Kütüphane=names(yükle), Durumu=as.logical(yükle)) %>% mutate(Durumu=if_else(Durumu==TRUE, "Yüklendi", "Paket Kurulumu Gerekli")) %>% 
    kable(caption = htmltools::tags$caption(
        style = 'caption-side: top; text-align: center;background-color: #0077b5;color:white;font-family: arial; font-size: 20px;font-weight: bold;border: 3px solid #0e76a8;box-shadow: 10px 10px 20px grey',"Yüklenen Kütüphanelerin Listesi")) %>% 
    kable_styling(bootstrap_options = c("striped", "hover"),font_size = 16) %>% row_spec(0, bold = T, color = "black") 
    Yüklenen Kütüphanelerin Listesi
    Sıra Kütüphane Durumu
    1 dplyr Yüklendi
    2 tibble Yüklendi
    3 tidyr Yüklendi
    4 ggplot2 Yüklendi
    5 ggthemes Yüklendi
    6 readr Yüklendi
    7 readxl Yüklendi
    8 ggpubr Yüklendi
    9 formattable Yüklendi
    10 ggstance Yüklendi
    11 pastecs Yüklendi
    12 knitr Yüklendi
    13 gtsummary Yüklendi
    14 writexl Yüklendi
    15 psych Yüklendi
    16 reshape2 Yüklendi
    17 GGally Yüklendi
    18 Hmisc Yüklendi
    19 corrplot Yüklendi
    20 dendextend Yüklendi
    21 kableExtra Yüklendi
    22 pander Yüklendi
    23 arules Yüklendi
    24 arulesViz Yüklendi
    25 RColorBrewer Yüklendi
    26 rmarkdown Yüklendi
    27 kableExtra Yüklendi
    28 report Yüklendi
    29 citation Yüklendi
    30 DT Yüklendi
    31 lubridate Yüklendi

    Örnek olay

    Ankara ilinde ikamet olmakta olan Fehmi 🙂 , Covid-19’un devam ettiği dönemde mağaza zincirlerinin birinden 1 ayda farklı günlerde 9 kez alış-veriş yapmıştır. Bütün alış verişler içerisinde alınan toplam farklı ürün sayısı 12’dir. Bu 12 ürün şöyledir: “seker”, “cay”, “ekmek”, “süt”, “patates”, “soğan”, “zeytin”, “peynir”, “makarna”, “luppo”, “tomates”, “deterjan”. Tatlı apur cuburlara düşkün olan Fehmi alış-veriş listesine hepimizin bildiği Halley benzeri ürün olan Luppo’yu da eklemeyi ihmal etmemiştir 🙂 . Fehmi’nin yapılan alış-verişlerde aldığı ürünlerin listesi Tablo 1’de verilmiştir. Örneğin, Fehmi ilk alışverişte Tablo 1’de görüleceği üzere {deterjan, zeytin ve tomates} ürünlerini almıştır. Covid-19 yasaklarının başlayacağı hafta sonuna denk gelen Fehmi’nin son alışverişinde ise {tomates, seker, deterjan, patates, luppo, ekmek, peynir, cay, zeytin, makarna, süt} ürünleri alınmıştır. Bu son alış-veriş işlemi Tablo 1’de İ9 (işlem 9: transaction 9) olarak kodlanmıştır. Örnek olay kapsamındaki veriler tekrarsız basit tesadüfi örnekleme (simple random sampling without replacement) yöntemi kullanarak üretilmiştir. Not: Bu örnek olay kurgudan ibarettir, gerçek hayatta karşılığı bulunmamaktadır.

    İstenenler

    • Apriori algoritmasına uygun model veri setini oluşturunuz.
    • Apriori modelini kurunuz.
    • Güven, destek ve lift ölçüt değerlerinin grafiklerini çiziniz.
    • Modelde ilk ve son en az 10 kuralın ağ ve gruplandırılmış matris grafiklerini çiziniz.
    • Kurulan modelde en yüksek lift değerlerine sahip ilk 10 kuralı tablo halinde veriniz.
    • Diğer ürünlerin yanında Luppo ürünü alınan durumların (rhs) kurallarını gösteriniz.
    • Kurulan Luppo ürün modelinde en yüksek lift değerlerine sahip ilk 10 kuralı tablo halinde veriniz.
    • Analizlerde elde edilen veri setlerini xlsx formatında oluşturunuz.
    • Kurulacak 2. modeldeki destek (support) eşik değeri 0,5, güven (confidence) eşik değeri ise 0,6’dır. Maksimum ürün uzunluğu ise 10’dur. Bu - parametrelere göre 2. modeli kurarak, oluşan kurallarının tamamını xlsx uzantılı çalışma kitabına yazdırınız. Aynı zamanda kurulan 2. modelden üretilen kuralları lift değerlerinin büyüklüğüne göre sıralayıp tabloda gösteriniz.

    Verilenler

    Destek (support) eşik değeri 0,3, güven (confidence) eşik değeri ise 0,5’tir. Maksimum ürün uzunluğu ise 10’dur.

    Alış-veriş listesi

    Aşağıdaki kod bloğu ile alış-veriş listesi oluşturulmuş ve üretilmiştir.

    #ürün listesi
    urun=c("seker", "cay", "ekmek","süt", "patates", "soğan","zeytin", "peynir", "makarna", "luppo", "tomates","deterjan")
     
    set.seed(61)#basit tekrarsız örnekleme tekniği ile ürün listesinden tesadüfi alış-veriş listeleri oluşturulmuştur.
     
    orneklem1=sample(urun, size=3, replace = F)
     
    orneklem2=sample(urun, size=4, replace = F)
     
    orneklem3=sample(urun, size=5, replace = F)
     
    orneklem4=sample(urun, size=6, replace = F)
     
    orneklem5=sample(urun, size=7, replace = F)
     
    orneklem6=sample(urun, size=8, replace = F)
     
    orneklem7=sample(urun, size=9, replace = F)
     
    orneklem8=sample(urun, size=10, replace = F)
     
    orneklem9=sample(urun, size=11, replace = F)
     
    #Alış-verişe konu ürünlerin liste formatına dönüştürülmesi
    sepet <-  
      list(orneklem1, orneklem2, orneklem3, orneklem4, orneklem5, orneklem6, orneklem7, orneklem8, orneklem9
      )
    names(sepet) <- paste("İ", 1:length(sepet), sep = "")
     
    sepet
    ## $İ1
    ## [1] "deterjan" "zeytin"   "tomates" 
    ## 
    ## $İ2
    ## [1] "luppo"    "deterjan" "makarna"  "süt"     
    ## 
    ## $İ3
    ## [1] "cay"     "tomates" "luppo"   "seker"   "süt"    
    ## 
    ## $İ4
    ## [1] "makarna" "ekmek"   "peynir"  "luppo"   "süt"     "tomates"
    ## 
    ## $İ5
    ## [1] "deterjan" "peynir"   "patates"  "ekmek"    "luppo"    "soğan"    "makarna" 
    ## 
    ## $İ6
    ## [1] "tomates" "süt"     "soğan"   "ekmek"   "patates" "luppo"   "makarna"
    ## [8] "seker"  
    ## 
    ## $İ7
    ## [1] "cay"      "deterjan" "makarna"  "peynir"   "tomates"  "luppo"    "zeytin"  
    ## [8] "soğan"    "ekmek"   
    ## 
    ## $İ8
    ##  [1] "cay"      "makarna"  "seker"    "deterjan" "soğan"    "luppo"   
    ##  [7] "zeytin"   "peynir"   "patates"  "tomates" 
    ## 
    ## $İ9
    ##  [1] "tomates"  "seker"    "deterjan" "patates"  "luppo"    "ekmek"   
    ##  [7] "peynir"   "cay"      "zeytin"   "makarna"  "süt"

    Listenin analize uygun hale getirilmesi

    Burada oluşturulmuş olan liste aşağıda yazılan kod bloğu ile analizden önce “transactions” yani işlem formatına dönüştürülmüştür. Burada esasında yapılan şey, alış verişlerin sırası satırlara (alışverişin id’si), alınan ürünlerin adları ise sütunlara yazdırılır. Aşağıdaki ilk satırdaki kod bloğunun çalıştırılmasından sonra veri setimiz işlem formatına dönüştürülmüştür. Aşağıdaki bulgular veri setimizin 9 satır, yani 9 kez alış veriş yaptığımızı, sütunlarda da 12 ürünümüzün olduğunu göstermektedir. 2. sıradaki kod ise 1. sıradaki yazılan koda dayalı olarak çalışan ve 1. sıradaki kod ile aynı işlevi göstermektedir. dim() fonksiyonu veri setlerinde veri setinin boyutlarını, yani veri setinin kaç satır, kaç sütundan oluştuğunu göstermektedir. Bu işlemleri yaptıktan sonra modelimizi kurabilir.

    #Veri setinin satırlara ve sütunlara dönüştürülmesi: Bu işlemde yapılan alışverişlerin sırası satırlara ve satın alınan ürünler ise sütunlara dönüştürülür.
    islem <- as(sepet, "transactions")
    islem
    ## transactions in sparse format with
    ##  9 transactions (rows) and
    ##  12 items (columns)
    dim(islem)#veri setinin boyutu (sonuç=[1]  9 12) yani veri seti 9 satır (alış veriş işlemi), 12 sütun (ürünler:değişkenler)'dan oluşmaktadır.
    ## [1]  9 12

    Veri setindeki ürünlerin adları alınmak istenirse aşağıdaki kod bloğu yazılabilir.Aşağıdaki kod bloğunun çalıştırılmasından sonra elde edilen ürün adları vektör olarak aşağıda verilmiştir.

    itemLabels(islem)
    ##  [1] "cay"      "deterjan" "ekmek"    "luppo"    "makarna"  "patates" 
    ##  [7] "peynir"   "seker"    "soğan"    "süt"      "tomates"  "zeytin"

    Ürünlerin alışverişlerdeki sıklıklarına bakacak olursak aşağıdaki kod bloğunu yazabiliriz.R kod bloğunun çalıştırılmasından sonra alışverişler içerisinde en sık satın alınan ürünler aşağıdaki grafikte verilmiştir.

    itemFrequencyPlot(islem, topN = 10,  
                              col = brewer.pal(10, "Greens"), 
                              main = 'Göreceli Ürün Frekansı', 
                              type = "relative", 
                              ylab = "Göreceli Sıklık")

    Modelin kurulmasından önce işlemlerimizin özetini de aşağı yazılan R kod bloğu ile verelim.Kod bloğunun çalıştırılmasından sonra elde edilen alış-veriş işlemleri özeti aşağıda verilmiştir. Yukarıdaki frekansları gösteren grafikteki sonuçlara benzer olarak aşağıda tabloda da en sık alış veriş yapılan ürünler aşağıda da verilmiştir. Bunun dışında veri setimizin 9 satır ve 12 sütun (değişken=ürün)’dan oluştuğu görülmektedir.En son satırda ise box plot dediğimiz kutu diyagram parametreleri görülmektedir. Yani minimum ve maksimum değerler ile ortalama, 1. çeyreklik ve 3. çeyreklik verileri ortaya konulmuştur.

    summary(islem)
    ## transactions as itemMatrix in sparse format with
    ##  9 rows (elements/itemsets/transactions) and
    ##  12 columns (items) and a density of 0.5833333 
    ## 
    ## most frequent items:
    ##    luppo  makarna  tomates deterjan    ekmek  (Other) 
    ##        8        7        7        6        5       30 
    ## 
    ## element (itemset/transaction) length distribution:
    ## sizes
    ##  3  4  5  6  7  8  9 10 11 
    ##  1  1  1  1  1  1  1  1  1 
    ## 
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##       3       5       7       7       9      11 
    ## 
    ## includes extended item information - examples:
    ##     labels
    ## 1      cay
    ## 2 deterjan
    ## 3    ekmek
    ## 
    ## includes extended transaction information - examples:
    ##   transactionID
    ## 1            İ1
    ## 2            İ2
    ## 3            İ3

    Aşağıda yazılan kod bloğu ile 12 ürünün çapraz tablosunu da verelim.R kod bloğunun çalıştırılmasından sonra elde edilen çapraz tablo aşağıda verilmiştir.

    crossTable(islem, sort=TRUE)
    ##          luppo makarna tomates deterjan ekmek peynir süt cay patates seker
    ## luppo        8       7       6        5     5      5   5   4       4     4
    ## makarna      7       7       5        5     5      5   4   3       4     3
    ## tomates      6       5       7        4     4      4   4   4       3     4
    ## deterjan     5       5       4        6     3      4   2   3       3     2
    ## ekmek        5       5       4        3     5      4   3   2       3     2
    ## peynir       5       5       4        4     4      5   2   3       3     2
    ## süt          5       4       4        2     3      2   5   2       2     3
    ## cay          4       3       4        3     2      3   2   4       2     3
    ## patates      4       4       3        3     3      3   2   2       4     3
    ## seker        4       3       4        2     2      2   3   3       3     4
    ## soğan        4       4       3        3     3      3   1   2       3     2
    ## zeytin       3       3       4        4     2      3   1   3       2     2
    ##          soğan zeytin
    ## luppo        4      3
    ## makarna      4      3
    ## tomates      3      4
    ## deterjan     3      4
    ## ekmek        3      2
    ## peynir       3      3
    ## süt          1      1
    ## cay          2      3
    ## patates      3      2
    ## seker        2      2
    ## soğan        4      2
    ## zeytin       2      4

    Modelin kurulması

    Aşağıda yazılan R kod bloğu ile model kurulmuştur. Pazar sepet analizlerinde alınan ürünler arasındaki ilişki düzeyleri tanımlamada iki ölçütten yararlanılmaktadır. Bunlardan ilki destek (support), diğeri ise güven (confidence) ölçütleridir. Modelde minimum destek oranı değerimiz 0,3, güven olasılık değerimiz ise 0,5 olarak alınmıştır.Aşağıdaki kod bloğundaki model çalıştırıldıktan elde edilen model sonuçları aşağıda verilmiştir. Elde edilen bulgulara göre;

    • Modelimiz 786 kuraldan oluşmaktadır. Diğer ifadeyle lhs (X) ve rhs (Y) kural uzunlukların toplamı (R)= 7+92+243+260+135+42+7=786’ya eşittir.
    • Ortalama lift değerleri 1’in üzerindedir. Bu bulgu X ürünü satın alınırsa Y ürünü satın alınma olasılığının da yüksek olduğunu göstermektedir.
    • Güven ve destek ölçüt değerleri de belirlenmiş eşik değerlerin üzerindedir.
    #Min destek 0.3, güven ise 0.5.
    model <- apriori(islem, 
                     parameter = list(supp=0.3, conf=0.5, 
                                      maxlen=10, 
                                      target= "rules"))
    ## Apriori
    ## 
    ## Parameter specification:
    ##  confidence minval smax arem  aval originalSupport maxtime support minlen
    ##         0.5    0.1    1 none FALSE            TRUE       5     0.3      1
    ##  maxlen target  ext
    ##      10  rules TRUE
    ## 
    ## Algorithmic control:
    ##  filter tree heap memopt load sort verbose
    ##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
    ## 
    ## Absolute minimum support count: 2 
    ## 
    ## set item appearances ...[0 item(s)] done [0.00s].
    ## set transactions ...[12 item(s), 9 transaction(s)] done [0.00s].
    ## sorting and recoding items ... [12 item(s)] done [0.00s].
    ## creating transaction tree ... done [0.00s].
    ## checking subsets of size 1 2 3 4 5 6 7 done [0.00s].
    ## writing ... [786 rule(s)] done [0.00s].
    ## creating S4 object  ... done [0.00s].
    summary(model)
    ## set of 786 rules
    ## 
    ## rule length distribution (lhs + rhs):sizes
    ##   1   2   3   4   5   6   7 
    ##   7  92 243 260 135  42   7 
    ## 
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   1.000   3.000   4.000   3.735   4.000   7.000 
    ## 
    ## summary of quality measures:
    ##     support         confidence        coverage           lift      
    ##  Min.   :0.3333   Min.   :0.5000   Min.   :0.3333   Min.   :0.750  
    ##  1st Qu.:0.3333   1st Qu.:0.7500   1st Qu.:0.3333   1st Qu.:1.125  
    ##  Median :0.3333   Median :1.0000   Median :0.3333   Median :1.286  
    ##  Mean   :0.3598   Mean   :0.8773   Mean   :0.4283   Mean   :1.406  
    ##  3rd Qu.:0.3333   3rd Qu.:1.0000   3rd Qu.:0.4444   3rd Qu.:1.500  
    ##  Max.   :0.8889   Max.   :1.0000   Max.   :1.0000   Max.   :2.250  
    ##      count      
    ##  Min.   :3.000  
    ##  1st Qu.:3.000  
    ##  Median :3.000  
    ##  Mean   :3.238  
    ##  3rd Qu.:3.000  
    ##  Max.   :8.000  
    ## 
    ## mining info:
    ##   data ntransactions support confidence
    ##  islem             9     0.3        0.5

    Aşağıda yazılan kod bloğu ile ilk olarak güven ve destek ölçüt değerleri ile lift değerlerini gösteren grafik verilmiştir.

    plot(model, main="786 Kuralın Lift Değerlerinin Saçılım Grafiği")
    ## To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.

    Grafikte sadece güven (confidence) değerlerini görmek istersek aşağıdaki kod bloğunu yazmamız yeterlidir.

    plot(model, measure = "confidence", main="786 Kuralın Güven Değerlerinin Saçılım Grafiği")
    ## To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.

    Eğer kurduğumuz modeldeki kuralları güven, destek ve lift değerleri ile birlikte dinamik formatta (html) olarak görmek ve kaydetmek istersek aşağıdaki kod bloğunu yazabiliriz.

    html <- inspectDT(model)
    htmlwidgets::saveWidget(html, "kurallar.html", selfcontained = FALSE)
    browseURL("kurallar.html")

    Kurulan modelde ilişki kurallarının ağını çizmek ve onları yorumlamak mümkündür. Ancak ağın tamamını çizmek anlaşılırlığı azaltacağından aşağıda yazılan kod bloğu ile modeldeki ilk 30 ve son 15 kuralların ağ grafiği bu kısımda verilmiştir. Bunun nedeni oluşturulan kural gruplarının giderek artan ürün sayısına sahip olmasıdır.

    Aşağıdaki kod bloğunun ilk iki satırı çalıştırıldığında elde edilen ilk 30 kural ağı aşağıdaki ağ grafiğinde verilmiştir. Aşağıdaki grafikte destek ölçütü değerinin büyüklüğü dairenin büyüklüğü, lift değerinin büyüklüğü ise renk tonu ile doğru orantılı olarak değişiklik göstermektedir. Yani daire ne kadar büyükse destek (support) değeri, dairenin renki ne kadar koyu tonlarda ise lift değeri o kadar yüksek demektir.

    Kod bloğunun son iki satırı çalıştırıldığında ise elde edilen son 15 kural ağı aşağıdaki ağ grafiğinde verilmiştir. Aşağıdaki grafikte destek ölçütü değerinin büyüklüğü dairenin büyüklüğü, lift değerinin büyüklüğü ise renk tonu ile doğru orantılı olarak değişiklik göstermektedir. Yani daire ne kadar büyükse destek (support) değeri, dairenin renki ne kadar koyu tonlarda ise lift değeri o kadar yüksek demektir.

    #İlk 30 kural
    set.seed(61) #ağ yapısını sabitlemek için
    plot(head(model,30), method="graph", main="Modeldeki Ürünlerin İlk 30 Kural Ağı")
    ## Available control parameters (with default values):
    ## layout    =  stress
    ## circular  =  FALSE
    ## ggraphdots    =  NULL
    ## edges     =  <environment>
    ## nodes     =  <environment>
    ## nodetext  =  <environment>
    ## colors    =  c("#EE0000FF", "#EEEEEEFF")
    ## engine    =  ggplot2
    ## max   =  100
    ## verbose   =  FALSE

    #Son 15 kural
    set.seed(61) #ağ yapısını sabitlemek için
    plot(tail(model,15), method="graph", main="Modeldeki Ürünlerin Son 15 Kural Ağı")
    ## Available control parameters (with default values):
    ## layout    =  stress
    ## circular  =  FALSE
    ## ggraphdots    =  NULL
    ## edges     =  <environment>
    ## nodes     =  <environment>
    ## nodetext  =  <environment>
    ## colors    =  c("#EE0000FF", "#EEEEEEFF")
    ## engine    =  ggplot2
    ## max   =  100
    ## verbose   =  FALSE

    Şimdi de ilk 20 kuralın gruplandırılmış matrisini aşağıda yazılan kod bloğu ile verelim. Son 20 kural burada verilmemiştir. Bunun nedeni gruplar içerisindeki ürün sayısının artışına bağlı olarak matrisin aşırı karmaşık hal almasıdır.

    set.seed(61)
    plot(head(model,20), method = "grouped",  main="Modeldeki Ürünlerin İlk 20 Gruplandırılmış Matrisi")
    ## Available control parameters (with default values):
    ## k     =  20
    ## aggr.fun  =  function (x, ...)  UseMethod("mean")
    ## rhs_max   =  10
    ## lhs_label_items   =  2
    ## col   =  c("#EE0000FF", "#EEEEEEFF")
    ## groups    =  NULL
    ## engine    =  ggplot2
    ## verbose   =  FALSE

    Kurulan modelde en yüksek lift ölçütü değerlerine göre sahip ilk 10 kurala aşağıda yazılan kod bloğu ile bakalım.Kod bloğunun çalıştırılmasından sonra kurulan modelde en yüksek lift değerine sahip ilk 10 kural aşağıdaki tabloda verilmiştir. İdeal lift değerlerinin 1’den büyük olması istenir. Seçilen kurallara bakıldığında lift değerleri ile birlikte güven ve destek ölçüt eşik değerlerinin karşılandığını göstermektedir. Tabi biz burada en yüksek lift değerine sahip ilk 10 kuralı verdik. Dilerseniz araştırmanızın amacına ve tasarımına bağlı olarak ilk 20 veya son 30 gibi kurallar belirleyebilirsiniz. Bu tamamen sizin ne yapmak istediğiniz ile ilgili olan bir şeydir.

    inspectDT(head(model, by = "lift", 10))

    Sonuç

    Özetle, R’da yapılan Apriori algoritması çalışması ile veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunulması amaçlanmıştır konu alanında farkındalık oluşturulması amaçlanmıştır.

    Faydalı olması dileğiyle.

    Bilimle ve teknolojiyle kalınız.

    • Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
    • It can not be cited or copied without referencing.

    Yararlanılan Kaynaklar

    Kaynakça
    ID Referanslar
    [1] Alboukadel Kassambara (2020). ggpubr: ‘ggplot2’ Based Publication Ready Plots. R package version 0.4.0. https://CRAN.R-project.org/package=ggpubr
    [2] Barret Schloerke, Di Cook, Joseph Larmarange, Francois Briatte, Moritz Marbach, Edwin Thoen, Amos Elberg and Jason Crowley (2021). GGally: Extension to ‘ggplot2’. R package version 2.1.2. https://CRAN.R-project.org/package=GGally
    [3] Dietrich J (2020). citation: Software Citation Tools. R packageversion 0.4.1.
    [4] Douglas Bates and Martin Maechler (2021). Matrix: Sparse and Dense Matrix Classes and Methods. R package version 1.3-4. https://CRAN.R-project.org/package=Matrix
    [5] Erich Neuwirth (2014). RColorBrewer: ColorBrewer Palettes. R package version 1.1-2. https://CRAN.R-project.org/package=RColorBrewer
    [6] Frank E Harrell Jr (2021). Hmisc: Harrell Miscellaneous. R package version 4.6-0. https://CRAN.R-project.org/package=Hmisc
    [7] Garrett Grolemund, Hadley Wickham (2011). Dates and Times Made Easy with lubridate. Journal of Statistical Software, 40(3), 1-25. URL https://www.jstatsoft.org/v40/i03/.
    [8] Gergely Daróczi and Roman Tsegelskyi (2021). pander: An R ‘Pandoc’ Writer. R package version 0.6.4. https://CRAN.R-project.org/package=pander
    [9] H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
    [10] Hadley Wickham (2007). Reshaping Data with the reshape Package. Journal of Statistical Software, 21(12), 1-20. URL http://www.jstatsoft.org/v21/i12/.
    [11] Hadley Wickham (2021). tidyr: Tidy Messy Data. R package version 1.1.4. https://CRAN.R-project.org/package=tidyr
    [12] Hadley Wickham and Jennifer Bryan (2019). readxl: Read Excel Files. R package version 1.3.1. https://CRAN.R-project.org/package=readxl
    [13] Hadley Wickham, Jim Hester and Jennifer Bryan (2021). readr: Read Rectangular Text Data. R package version 2.1.1. https://CRAN.R-project.org/package=readr
    [14] Hadley Wickham, Romain François, Lionel Henry and Kirill Müller (2021). dplyr: A Grammar of Data Manipulation. R package version 1.0.7. https://CRAN.R-project.org/package=dplyr
    [15] Hao Zhu (2021). kableExtra: Construct Complex Table with ‘kable’ and Pipe Syntax. R package version 1.3.4. https://CRAN.R-project.org/package=kableExtra
    [16] Jeffrey B. Arnold (2021). ggthemes: Extra Themes, Scales and Geoms for ‘ggplot2’. R package version 4.2.4. https://CRAN.R-project.org/package=ggthemes
    [17] Jeroen Ooms (2021). writexl: Export Data Frames to Excel ‘xlsx’ Format. R package version 1.4.0. https://CRAN.R-project.org/package=writexl
    [18] JJ Allaire and Yihui Xie and Jonathan McPherson and Javier Luraschi and Kevin Ushey and Aron Atkins and Hadley Wickham and Joe Cheng and Winston Chang and Richard Iannone (2021). rmarkdown: Dynamic Documents for R. R package version 2.11. URL https://rmarkdown.rstudio.com.
    [19] Kirill Müller and Hadley Wickham (2021). tibble: Simple Data Frames. R package version 3.1.3. https://CRAN.R-project.org/package=tibble
    [20] Kun Ren and Kenton Russell (2021). formattable: Create ‘Formattable’ Data Structures. R package version 0.2.1. https://CRAN.R-project.org/package=formattable
    [21] Lionel Henry, Hadley Wickham and Winston Chang (2020). ggstance: Horizontal ‘ggplot2’ Components. R package version 0.3.5. https://CRAN.R-project.org/package=ggstance
    [22] Makowski, D., Ben-Shachar, M.S., Patil, I. & Lüdecke, D. (2020). Automated Results Reporting as a Practical Tool to Improve Reproducibility and Methodological Best Practices Adoption. CRAN. Available from https://github.com/easystats/report. doi: .
    [23] Michael Hahsler (2021). arulesViz: Visualizing Association Rules and Frequent Itemsets. R package version 1.5-1. https://CRAN.R-project.org/package=arulesViz
    [24] Michael Hahsler, Christian Buchta, Bettina Gruen and Kurt Hornik (2021). arules: Mining Association Rules and Frequent Itemsets. R package version 1.6-8. https://CRAN.R-project.org/package=arules
    [25] Philippe Grosjean and Frederic Ibanez (2018). pastecs: Package for Analysis of Space-Time Ecological Series. R package version 1.3.21. https://CRAN.R-project.org/package=pastecs
    [26] R Core Team (2021). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL https://www.R-project.org/.
    [27] Revelle, W. (2021) psych: Procedures for Personality and Psychological Research, Northwestern University, Evanston, Illinois, USA, https://CRAN.R-project.org/package=psych Version = 2.1.9,.
    [28] Sarkar, Deepayan (2008) Lattice: Multivariate Data Visualization with R. Springer, New York. ISBN 978-0-387-75968-5
    [29] Sjoberg DD, Whiting K, Curry M, Lavery JA, Larmarange J. Reproducible summary tables with the gtsummary package. The R Journal 2021;13:570–80. https://doi.org/10.32614/RJ-2021-053.
    [30] Taiyun Wei and Viliam Simko (2021). R package ‘corrplot’: Visualization of a Correlation Matrix (Version 0.92). Available from https://github.com/taiyun/corrplot
    [31] Tal Galili (2015). dendextend: an R package for visualizing, adjusting, and comparing trees of hierarchical clustering. Bioinformatics. DOI: 10.1093/bioinformatics/btv428
    [32] Therneau T (2021). A Package for Survival Analysis in R. R packageversion 3.2-11, <URL: https://CRAN.R-project.org/package=survival>;.
    [33] Yihui Xie (2021). knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.37.
    [34] Yihui Xie, Joe Cheng and Xianying Tan (2021). DT: A Wrapper of the JavaScript Library ‘DataTables’. R package version 0.20. https://CRAN.R-project.org/package=DT
    [35] Zeileis A, Croissant Y (2010). “Extended Model Formulas in R: MultipleParts and Multiple Responses.” Journal of Statistical Software,34(1), 1-13. doi: 10.18637/jss.v034.i01 (URL:https://doi.org/10.18637/jss.v034.i01).