Market Sepeti Analizi ve arka planda çalışan APRIORI Algoritmasını öğrenin. Perakendecilerin müşterilerin birlikte satın aldığı ürünleri öngörerek işleri nasıl büyüttüğünü göreceksiniz.
Bir veri bilimcisiniz (ya da olmak üzeresiniz!) ve bir perakende mağazası işleten bir müşteriyle çalışıyorsunuz. Müşteriniz size, belirli bir zaman aralığında çeşitli müşterilerin mağazadan satın aldığı ürünlerden oluşan tüm işlemlere ait verileri veriyor ve bu verileri kullanarak işlerini büyütmelerine yardımcı olmanızı istiyor. Müşteriniz bulgularınızı yalnızca stoktaki ürünleri değiştirmek/güncellemek/eklemek için değil, fiziksel mağazanın ya da çevrimiçi mağazanın yerleşimini değiştirmek için de kullanacak. Müşterinize yardımcı olacak sonuçları bulmak için, verilen işlem verileri üzerinde Birliktelik Kuralı Madenciliği kullanan Market Sepeti Analizi (MBA) uygulayacaksınız.
Bu eğitimde şunları öğreneceksiniz:
Birliktelik Kuralı Madenciliği nedir ve nerelerde kullanılır
APRIORI Algoritması nedir?
R ile görselleştirmeler kullanarak MBA/Birliktelik Kuralı Madenciliği nasıl uygulanır
Birliktelik Kuralı Madenciliği
Birliktelik Kuralı Madenciliği, bir kümedeki farklı nesneler arasında ilişki bulmak, bir işlem veritabanında, ilişkisel veritabanlarında veya diğer bilgi depolarında sık örüntüler bulmak istediğinizde kullanılır. Birliktelik Kuralı Madenciliğinin uygulamaları; Pazarlama, Sepet Verisi Analizi (ya da Market Sepeti Analizi), kümeleme ve sınıflandırmada karşımıza çıkar. Birliktelik Kuralları adı verilen kural setleri üreterek müşterilerin hangi ürünleri birlikte sıkça satın aldığını söyleyebilir. Basitçe ifade etmek gerekirse, çıktıyı eğer bu ise o halde şu biçiminde kurallar hâlinde verir. Müşteriler bu kuralları çok sayıda pazarlama stratejisi için kullanabilir:
Mağaza yerleşimini trendlere göre değiştirme
Müşteri davranışı analizi
Katalog tasarımı
Çevrimiçi mağazalarda çapraz pazarlama
Müşterilerin satın aldığı trend ürünler nelerdir
Ek satış içeren kişiselleştirilmiş e-postalar
Şu örneği ele alın:
Verilen bir işlem veri kümesi var. 1’den 5’e numaralanmış işlemleri görebilirsiniz. Her işlem, o işlemde satın alınan ürünleri gösteriyor. Bez bebek bezi ile Bira’nın üç işlemde birlikte alındığını görebilirsiniz. Benzer şekilde Ekmek ile Süt’ün üç işlemde birlikte alındığını görürüz; bu da onları sık öğe kümeleri yapar. Birliktelik kuralları aşağıdaki biçimde verilir:
$A=>B[Support,Confidence]$
$=>$ öncesindeki kısım eğer (Öncül), $=>$ sonrasındaki kısım ise o halde (Ardıl) olarak adlandırılır.
Burada A ve B, işlem verilerindeki öğe kümeleridir. A ve B ayrık kümelerdir.
Hem A hem B’nin bulunduğu işlem sayısının, A’nın bulunduğu toplam işlem sayısına bölünmesi.
$Confidence(Bread=>Milk)=\frac{3}{4}=0.75=75\%$
Şimdi Süt=>Bebek Bezi için güveni bulun.
Not: Destek ve Güven, kuralın ne kadar ilgi çekici olduğunu ölçer. Asgari destek ve asgari güven eşiklerine göre belirlenir. Müşteri tarafından belirlenen bu eşikler, kuralın gücünü sizin ya da müşterinizin tercihine göre karşılaştırmaya yardımcı olur. Eşiğe ne kadar yakınsa, kural müşteriye o kadar faydalıdır.
Sık Öğe Kümeleri: Desteği asgari destek eşiğine (min_sup) eşit veya ondan büyük olan öğe kümeleri. Yukarıdaki örnekte min_sup=3. Bu, kullanıcı tercihiyle belirlenir.
Güçlü kurallar: A=>B[Support, Confidence] kuralı min_sup ve min_confidence şartlarını sağlıyorsa güçlü kuraldır.
Kaldıraç (Lift): A=>B kuralındaki A ve B arasındaki korelasyonu verir. Korelasyon, bir A öğe kümesinin B öğe kümesi üzerindeki etkisini gösterir.
$Lift(A=>B)=\frac{Support}{Supp(A)Supp(B)}$
Örneğin, {Bread}=>{Milk} kuralı için kaldıraç şöyle hesaplanır:
$support(Bread)=\frac{4}{5}=0.8$
$support(Milk)=\frac{4}{5}=0.8$
$Lift(Bread=>Milk)=\frac{0.6}{0.8*0.8}=0.9$
Kuralın kaldıracı 1 ise A ve B bağımsızdır ve onlardan kural türetilemez.
Kaldıraç > 1 ise A ve B birbirine bağımlıdır; bağımlılığın derecesi lift değeriyle verilir.
Kaldıraç < 1 ise A’nın varlığı B üzerinde olumsuz etkiye sahiptir.
Birliktelik Kuralı Madenciliğinin Amacı
Verilen bir T işlem kümesine Birliktelik Kuralı Madenciliği uyguladığınızda amacınız şu kuralları bulmaktır:
Asgari desteğe eşit veya ondan büyük Destek
Asgari güvene eşit veya ondan büyük Güven
APRIORI Algoritması
Bu bölümde, Market Sepeti Analizi için R kütüphanelerinin arka planında çalışan algoritmayı öğreneceksiniz. Bu, müşterilerinizi daha iyi anlamanıza ve analizi daha dikkatli yapmanıza yardımcı olur. APRIORI algoritmasını ve nasıl çalıştığını zaten biliyorsanız, kodlama bölümüne geçebilirsiniz.
Birliktelik Kuralı Madenciliği iki aşamalı bir yaklaşım olarak görülür:
Sık Öğe Kümesi Üretimi: Önceden belirlenmiş min_support sayısından büyük veya ona eşit desteğe sahip tüm sık öğe kümelerini bulun
Kural Üretimi: Sık öğe kümelerinden tüm Birliktelik Kurallarını listeleyin. Tüm kurallar için Destek ve Güveni hesaplayın. min_support ve min_confidence eşiklerini sağlamayan kuralları budayın.
Sık Öğe Kümesi Üretimi tam veritabanı taraması gerektirdiği için hesaplama açısından en maliyetli adımdır.
Yukarıdaki adımlar arasında hesaplama açısından en maliyetli olanı Sık Öğe Kümesi üretimidir.
Yukarıda yalnızca 5 işlemden oluşan bir örnek gördünüz; ancak gerçek dünyada perakende işlem verileri GB’lar ve TB’lar seviyesine çıkabilir. Bu nedenle sonraki adımlarda işe yaramayacak öğe kümelerini elemek için optimize edilmiş bir algoritmaya ihtiyaç vardır. Bunun için APRIORI Algoritması kullanılır. Şöyle der:
Sık bir öğe kümesinin her alt kümesi de sık olmalıdır. Başka bir deyişle, Sık olmayan bir öğe kümesinin hiçbir üst kümesi üretilmemeli veya test edilmemelidir
Bu ilke, APRIORI algoritması prensibinin görsel bir temsili olan Öğe Kümesi Kafesi (Itemset Lattice) ile gösterilir. k-öğe-kümesi düğümlerinden ve o k-öğe-kümesinin alt küme ilişkilerinden oluşur.
Yukarıdaki şekilde, en altta işlem verilerindeki tüm öğeleri görürsünüz ve ardından boş kümeye kadar alt kümeler oluşturarak yukarı doğru ilerlersiniz. d adet öğe için kafesin boyutu $2^d$ olur. Bu, her kombinasyon için destek bularak Sık Öğe Kümesi üretmenin ne kadar zor olacağını gösterir. Aşağıdaki şekil, APRIORI’nin üretilmesi gereken küme sayısını ne kadar azalttığını gösterir:
{a,b} öğe kümesi sık değilse, tüm üst kümelerini dikkate almamız gerekmez.
Bunu bir örnekle anlayalım. Aşağıdaki örnekte, APRIORI’nin neden etkili bir algoritma olduğunu görecek ve ayrıca adım adım güçlü birliktelik kuralları üreteceksiniz. Not defteriniz ve kaleminizle eşlik edin!
Gördüğünüz gibi, işlem verilerinde yer alan tüm öğeleri tek tek içerecek şekilde 1-öğe-kümesi için Aday Listesi oluşturarak başlıyorsunuz. Gerçek dünyadaki perakende işlem verilerini düşündüğünüzde, bu aday üretiminin ne kadar maliyetli olabileceğini görebilirsiniz. Burada APRIORI devreye girer; Aday listesinin sayısını azaltmaya yardımcı olur ve sonunda kullanışlı kurallar üretilir. İzleyen adımlarda, Birliktelik kuralı madenciliğinin ilk adımı olan Sık Öğe Kümesi üretiminin sonuna nasıl ulaştığımızı göreceksiniz.
Bir sonraki adımınız tüm sık öğe kümelerini listelemek olacak. Bu örnekte L2={I1, I2},{I2, I3} olan son boş olmayan Sık Öğe Kümesini alacaksınız. Ardından, bu Sık Öğe Kümesi Listesinde yer alan öğe kümelerinin tüm boş olmayan alt kümelerini yapın. Aşağıdaki görselde gösterildiği gibi ilerleyin:
Yukarıda dört güçlü kural olduğunu görebilirsiniz. Örneğin, güveni %75 olan ${I2}=>I3$ kuralı, I2 satın alanların %75’inin I3’ü de satın aldığını söyler.
Artık veri madenciliğinde en çok kullanılan algoritmalardan biri olan APRIORI algoritmasını baştan sona öğrendiniz. Hadi koda geçelim, ohhh!
R kullanarak MBA/Birliktelik Kuralı Madenciliğinin uygulanması
Bu eğitimde UCI Machine Learning Repository’den bir veri kümesi kullanacaksınız. Veri kümesinin adı Online-Retail ve buradan indirebilirsiniz. Veri kümesi, 01/12/2010 ile 09/12/2011 tarihleri arasında Birleşik Krallık merkezli, kayıtlı bir mağazasız çevrimiçi perakendecinin işlem verilerini içerir. Bunu bir R veri kümesi yerine kullanma nedenimiz, perakende verilerini bu formda alma olasılığınızın daha yüksek olması ve bu veriler üzerinde veri ön işleme uygulamanızın gerekecek olmasıdır.
Veri Kümesi Açıklaması
Satır Sayısı:541909
Özellik Sayısı:08
Özellik Bilgileri
InvoiceNo: Fatura numarası. Nominal, her işleme benzersiz olarak atanan 6 basamaklı tam sayı. Bu kod 'c' harfiyle başlıyorsa iptali belirtir. +StockCode: Ürün (öğe) kodu. Nominal, her bir farklı ürüne benzersiz olarak atanan 5 basamaklı tam sayı.
Description: Ürün (öğe) adı. Nominal.
Quantity: İşlem başına her ürünün (öğenin) miktarı. Sayısal.
InvoiceDate: Fatura tarihi ve saati. Sayısal, her işlemin oluşturulduğu gün ve saat. Veri kümesinden örnek: 12/1/2010 8:26
UnitPrice: Birim fiyat. Sayısal, ürünün birim başına sterlin cinsinden fiyatı.
CustomerID: Müşteri numarası. Nominal, her müşteriye benzersiz olarak atanan 5 basamaklı tam sayı.
Country: Ülke adı. Nominal, her müşterinin ikamet ettiği ülkenin adı.
Kütüphanelerin Yüklenmesi
Önce gerekli kütüphaneleri yükleyeceksiniz. Her bir kütüphanenin kısa açıklaması ( Buradan alınmıştır) aşağıdaki tabloda verilmiştir; böylece her kütüphanenin ne yaptığını bilirsiniz:
Paket
Açıklama
arules
İşlem verilerini ve örüntüleri (sık öğe kümeleri ve birliktelik kuralları) temsil etmek, işlemek ve analiz etmek için altyapı sağlar.
arulesViz
'arules' paketini birliktelik kuralları ve öğe kümeleri için çeşitli görselleştirme teknikleriyle genişletir. Paket ayrıca kural keşfi için birkaç etkileşimli görselleştirme içerir.
tidyverse
Tidyverse, veri bilimi için tasarlanmış bir R paketleri koleksiyonudur.
readxl
R’de Excel Dosyalarını Okuyun
plyr
Veriyi Ayırma, Uygulama ve Birleştirme Araçları
ggplot2
Grafik ve çizimler oluşturun
knitr
R’de Dinamik Rapor Oluşturma
lubridate
Lubridate, tarih ve saatlerle çalışmayı kolaylaştıran bir R paketidir.
#install and load package arules#install.packages("arules")
library(arules)#install and load arulesViz#install.packages("arulesViz")
library(arulesViz)#install and load tidyverse#install.packages("tidyverse")
library(tidyverse)#install and load readxml#install.packages("readxml")
library(readxl)#install and load knitr#install.packages("knitr")
library(knitr)#load ggplot2 as it comes in tidyverse
library(ggplot2)#install and load lubridate#install.packages("lubridate")
library(lubridate)#install and load plyr#install.packages("plyr")
library(plyr)
library(dplyr)Altyapı:
Veri Ön İşleme
İndirilen dosyadan veri kümesini R’a okumak için read_excel(path to file) kullanın. read_excel(path-to-file-with-filename) içine dosya adı dahil tam dosya yolunuzu verin
#read excel into R dataframe
retail <- read_excel('D:/Documents/Online_Retail.xlsx')#complete.cases(data) will return a logical vector indicating which rows have no missing values. Then use the vector to get only rows that are complete using retail[,].
retail <- retail[complete.cases(retail),]#mutate function is from dplyr package. It is used to edit or add new columns to dataframe. Here Description column is being converted to factor column. as.factor converts column to factor column. %>% is an operator with which you may pipe values to another function or expression
retail %>% mutate(Description = as.factor(Description))Altyapı:
#Converts character data to date. Store InvoiceDate as date in new variable
retail$Date <- as.Date(retail$InvoiceDate)#Extract time from InvoiceDate and store in another variable
TransTime<- format(retail$InvoiceDate,"%H:%M:%S")#Convert and edit InvoiceNo into numeric
InvoiceNo <- as.numeric(as.character(retail$InvoiceNo))Altyapı:
Artık dataframe retail, Date ve Time olmak üzere iki ek özellikle 10 öznitelik içerecektir.
MBA/Birliktelik Kuralı madenciliğini uygulamadan önce, dataframe’i işlem verisine dönüştürmemiz gerekir; böylece bir faturada birlikte alınan tüm ürünler tek satırda yer alır. glimpse çıktısında her işlemin atomik biçimde olduğunu, yani bir faturaya ait tüm ürünlerin ilişkisel veritabanlarında olduğu gibi atomik olduğunu görebilirsiniz. Bu formata tekiller (singles) formatı da denir.
Yapmanız gereken, retail dataframe’indeki verileri CustomerID, CustomerID ve Date ile veya InvoiceNo ve Date kullanarak gruplamaktır. Bu gruplamaya ihtiyacımız var; üzerinde bir fonksiyon uygulayıp çıktıyı başka bir dataframe’e kaydedeceğiz. Bunu ddply ile yapabilirsiniz.
Aşağıdaki kod satırları bir InvoiceNo ve date’e ait tüm ürünleri birleştirir ve bu InvoiceNo ve date’ten gelen tüm ürünleri her bir öğe , ile ayrılmış tek bir satır olarak birleştirir
library(plyr)#ddply(dataframe, variables_to_be_used_to_split_data_frame, function_to_be_applied)
transactionData <- ddply(retail,c("InvoiceNo","Date"),function(df1)paste(df1$Description,
collapse =","))#The R function paste() concatenates vectors to character and separated results using collapse=[any optional charcater string ]. Here ',' is usedAltyapı:
Sonraki adımda, kural madenciliğinde işinize yaramayacakları için InvoiceNo ve Date’i NULL yapabilirsiniz.
#set column InvoiceNo of dataframe transactionData
transactionData$InvoiceNo <-NULL#set column Date of dataframe transactionData
transactionData$Date <-NULL#Rename column to items
colnames(transactionData)<- c("items")#Show Dataframe transactionData
transactionDataAltyapı:
Not: Sayfa 1 / 100.
İşlem verileri için bu formata sepet formatı denir. Sonraki adımda bu işlem verilerini bir .csv (Virgülle Ayrılmış Değerler) dosyasına kaydetmeniz gerekir. Bunun için write.csv()
write.csv(transactionData,"D:/Documents/market_basket_transactions.csv", quote =FALSE, row.names =FALSE)#transactionData: Data to be written#"D:/Documents/market_basket.csv": location of file with file name to be written to#quote: If TRUE it will surround character or factor column with double quotes. If FALSE nothing will be quoted#row.names: either a logical value indicating whether the row names of x are to be written along with x, or a character vector of row names to be written.Altyapı:
İşlem verilerinizin doğru biçimde olup olmadığını kontrol edin:
Sonraki adımda, bu işlem verilerini işlem sınıfı nesnesine yüklemeniz gerekir. Bu, arules paketinin read.transactions R fonksiyonu kullanılarak yapılır.
Aşağıdaki kod satırı, sepet formatında olan D:/Documents/market_basket_transactions.csv dosyasını alır ve onu işlem sınıfı nesnesine dönüştürür.
tr <- read.transactions('D:/Documents/market_basket_transactions.csv', format ='basket', sep=',')#sep tell how items are separated. In this case you have separated using ','Altyapı:
Yukarıdaki kod satırlarını çalıştırdığınızda çıktınızda çok sayıda EOF within quoted string görebilirsiniz, endişelenmeyin.
Elinizde zaten bir dataframe içinde işlem verisi varsa, bunu işlem nesnesine dönüştürmek için aşağıdaki kod satırını kullanın:
transactions in sparse format with
22191 transactions (rows) and
7876 items (columns)
transactions as itemMatrix in sparse format with
22191 rows (elements/itemsets/transactions) and
7876 columns (items) and a density of 0.001930725
most frequent items:
WHITE HANGING HEART T-LIGHT HOLDER REGENCY CAKESTAND 3 TIER
18031709
JUMBO BAG RED RETROSPOT PARTY BUNTING
14601285
ASSORTED COLOUR BIRD ORNAMENT (Other)1250329938
element (itemset/transaction) length distribution:
sizes
12345678910111213141516173598159411419088617586966766635936245375165315515224641819202122232425262728293031323334441483419395315306272238253229213222215170159138142353637383940414243444546474849505113410911190113949387886563676360594964525354555657585960616263646566676840414943362939302728172525202724226970717273747576777879808182838485152019131616111512791415128911868788899091929394959697989910010110211148656116443652424103104105106107108109110111112113114116117118120121432263432131333121221231251261271311321331341401411421431451461471502132211211221121115415716817117717818020220422823624925028532040041932221111111111111
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.003.0010.0015.2121.00419.00
includes extended item information - examples:
labels
11 HANGER
210 COLOUR SPACEBOY PEN
312 COLOURED PARTY BALLOONSAltyapı:
summary(tr), işlem nesnemiz hakkında bilgi veren çok yararlı bir komuttur. Yukarıdaki çıktı ne söylüyor, bakalım:
Toplam 22191 işlem (satır) ve 7876 öğe (sütun) var. 7876 sayısının veri kümesinde yer alan ürün açıklamaları, 22191 işlemin ise bu öğelerin koleksiyonları olduğuna dikkat edin.
Yoğunluk (Density), seyrek bir matristaki sıfır olmayan hücrelerin yüzdesini söyler. Bunu, o matriste satın alınan toplam öğe sayısının, matriste mümkün olan öğe sayısına bölünmesi gibi düşünebilirsiniz. Yoğunluğu kullanarak kaç öğe satın alındığını hesaplayabilirsiniz: 22191x7876x0.001930725=337445
Bilgi! Seyrek Matris: Seyrek matris ya da seyrek dizi, elemanlarının çoğu sıfır olan matristir. Buna karşılık, elemanlarının çoğu sıfır değilse matris yoğundur. Sıfır değerli eleman sayısının toplam eleman sayısına oranı, matrisin seyreklik oranı olarak adlandırılır (yoğunluğun 1 eksiğine eşittir).
Özet, en sık görülen öğeleri de söyleyebilir.
Öğe takımı/işlem uzunluk dağılımı: Bu, 1-öğe-kümesi, 2-öğe-kümesi vb. için kaç işlem olduğunu gösterir. İlk satır öğe sayısını, ikinci satır ise işlem sayısını gösterir.
Örneğin yalnızca 3598 adet tek öğeli işlem, 1594 adet iki öğeli işlem ve bir işlemde 419 öğe vardır ki bu en uzunudur.
itemFrequencyPlot kullanarak, itemMatrix’e dayalı nesnelerin dağılımını görmek için bir öğe Sıklığı Çubuk Grafiği oluşturabilirsiniz (ör. bizim durumumuzda >transactions veya >itemsets ve >rules içindeki öğeler).
# Create an item frequency plot for the top 20 itemsif(!require("RColorBrewer")){# install color package of R
install.packages("RColorBrewer")#include library RColorBrewer
library(RColorBrewer)}
itemFrequencyPlot(tr,topN=20,type="absolute",col=brewer.pal(8,'Pastel2'), main="Absolute Item Frequency Plot")Altyapı:
ilk argüman, çizdirilecek işlem nesnesi olan tr’dir. topN, en yüksek sıklığa sahip ilk N öğeyi çizdirmenizi sağlar. type, type="absolute" veya type="relative" olabilir. Absolute ise her öğenin sayısal sıklığını bağımsız olarak çizer. Relative ise bu öğelerin diğerlerine kıyasla kaç kez göründüğünü çizer.
itemFrequencyPlot(tr,topN=20,type="relative",col=brewer.pal(8,'Pastel2'),main="Relative Item Frequency Plot")Altyapı:
Bu grafik, 'WHITE HANGING HEART T-LIGHT HOLDER' ve 'REGENCY CAKESTAND 3 TIER' ürünlerinin en çok satıldığını gösteriyor. Dolayısıyla 'SET OF 3 CAKE TINS PANTRY DESIGN' satışını artırmak için, perakendeci bunu 'REGENCY CAKESTAND 3 TIER' yakınına koyabilir.
itemFrequencyPlot için diğer seçenekleri burada keşfedebilirsiniz.
Kuralların Üretilmesi!
Sonraki adım, APRIORI algoritmasını kullanarak kuralları çıkarmaktır. apriori() fonksiyonu arules paketindendir.
# Min Support as 0.001, confidence as 0.8.
association.rules <- apriori(tr, parameter = list(supp=0.001, conf=0.8,maxlen=10))Altyapı:
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target
0.80.11 none FALSETRUE50.001110 rules
ext
FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1TRUETRUEFALSETRUE2TRUE
Absolute minimum support count:22
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[30066 item(s),22191 transaction(s)] done [0.11s].
sorting and recoding items ...[2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 12345678910Altyapı:
Mining stopped (maxlen reached). Only patterns up to a length of 10 returned!Altyapı:
set of 49122 rules
rule length distribution (lhs + rhs):sizes
234567891010521116854164241485561021937613121
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.0005.0005.0005.4996.00010.000
summary of quality measures:
support confidence lift count
Min. :0.001036 Min. :0.8000 Min. :9.846 Min. :23.001st Qu.:0.0010821st Qu.:0.83331st Qu.:22.2371st Qu.:24.00
Median :0.001262 Median :0.8788 Median :28.760 Median :28.00
Mean :0.001417 Mean :0.8849 Mean :64.589 Mean :31.453rd Qu.:0.0015323rd Qu.:0.92593rd Qu.:69.2003rd Qu.:34.00
Max. :0.015997 Max. :1.0000 Max. :715.839 Max. :355.00
mining info:
data ntransactions support confidence
tr 221910.0010.8Altyapı:
apriori, madenciliğin uygulanacağı işlem nesnesi olarak tr’yi alır. parameter, min_sup ve min_confidence’ı ayarlamanıza olanak tanır. parameter için varsayılan değerler, 0.1 asgari destek, 0.8 asgari güven ve en fazla 10 öğedir (maxlen).
summary(association.rules) şunları gösterir:
Parametre Belirtimi: min_sup=0.001 ve min_confidence=0.8 değerleri; bir kuralda en fazla 10 öğe.
Toplam kural sayısı:49122 kural kümesi
Kural uzunluğu dağılımı: 5 öğe uzunluğu en çok kurala sahip: 16424 ve 2 öğe uzunluğu en az kurala sahip: 105
Kalite ölçüleri özeti: Destek, Güven ve Lift için min ve max değerleri.
Kural oluşturmak için kullanılan bilgiler: Algoritmaya sağladığımız veri, destek ve güven.
49122 kural olduğuna göre, sadece ilk 10’unu yazdıralım:
Yukarıdaki çıktıyı kullanarak şu tür analizler yapabilirsiniz:
'WOBBLY CHICKEN' alan müşterilerin %100’ü 'METAL' de almıştır.
'BLACK TEA' alan müşterilerin %100’ü 'SUGAR JARS' da almıştır.
Kural sayısını ve boyutunu sınırlama
Üretilen kuralların sayısını ve boyutunu nasıl sınırlayabilirsiniz? Bunu apriori içindeki parameters’ı ayarlayarak yapabilirsiniz. Bu parametreleri, elde edeceğiniz kural sayısını ayarlamak için belirleyin. Daha güçlü kurallar istiyorsanız conf değerini artırın; daha uzun kurallar için maxlen’i daha yüksek verin.
which(), değeri TRUE olan vektördeki elemanların konumunu döndürür.
colSums(), dataframe’ler ve sayısal diziler için satır ve sütun toplamları oluşturur.
is.subset(), bir vektörün elemanlarının diğerinin tüm elemanlarını içerip içermediğini belirler
Belirli öğelerle ilgili kuralların bulunması
Bazen belirli bir ürün üzerinde çalışmak istersiniz. X öğesinin satın alınmasını neyin etkilediğini bulmak istiyorsanız, apriori komutunda appearance seçeneğini kullanabilirsiniz. appearance, kuralın LHS (EĞER kısmı) ve RHS (O HALDE kısmı) için ayar yapma seçenekleri verir.
Örneğin, müşterilerin 'METAL' satın almadan önce ne aldığını bulmak için aşağıdaki kod satırını çalıştırın:
# Here lhs=METAL because you want to find out the probability of that in how many customers buy METAL along with other items
inspect(head(metal.association.rules))Altyapı:
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target
0.80.11 none FALSETRUE50.001110 rules
ext
FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1TRUETRUEFALSETRUE2TRUE
Absolute minimum support count:22
set item appearances ...[1 item(s)] done [0.00s].
set transactions ...[30066 item(s),22191 transaction(s)] done [0.10s].
sorting and recoding items ...[2324 item(s)] done [0.02s].
creating transaction tree ... done [0.02s].
checking subsets of size 12 done [0.01s].
writing ...[1 rule(s)] done [0.00s].
creating S4 object ... done [0.01s].Altyapı:
# Here lhs=METAL because you want to find out the probability of that in how many customers buy METAL along with other items
inspect(head(metal.association.rules))Altyapı:
lhs rhs support confidence lift count
[1]{METAL}=>{DECORATION}0.0022531661443.8250Altyapı:
Birliktelik Kurallarının Görselleştirilmesi
Veriye bağlı olarak yüzlerce hatta binlerce kural üretileceği için, bulgularınızı sunmanın birkaç yoluna ihtiyacınız olacak. ItemFrequencyPlot yukarıda zaten ele alındı ve en çok satılan ürünleri görmek için harika bir yol.
Burada şu görselleştirmeler ele alınacaktır:
Saçılım Grafiği (Scatter-Plot)
Etkileşimli Saçılım Grafiği
Tekil Kural Gösterimi
Saçılım Grafiği
Birliktelik kurallarının doğrudan görselleştirilmesi, arulesViz paketinin plot() fonksiyonunu kullanarak bir saçılım grafiği üretmektir. Eksenlerde Destek ve Güven kullanılır. Ek olarak, üçüncü ölçüt Lift nokta renklerini (grinin tonları) varsayılan olarak belirler.
# Filter rules with confidence greater than 0.4 or 40%
subRules<-association.rules[quality(association.rules)$confidence>0.4]#Plot SubRules
plot(subRules)Altyapı:
Yukarıdaki grafik, lift’i yüksek olan kuralların desteğinin düşük olduğunu gösteriyor. Grafik için şu seçenekleri kullanabilirsiniz:
Two-key plot x ve y eksenlerinde sırasıyla destek ve güveni kullanır. Renklendirme için order kullanılır. Order, kuraldaki öğe sayısıdır.
Etkileşimli Saçılım Grafiği
Kural kümenizi sunmak için arulesViz ve plotly kullanan harika bir etkileşimli grafik kullanabilirsiniz. Her kuralın üzerine geldiğinizde tüm kalite ölçütlerini (destek, güven ve lift) görebilirsiniz.
'plotly_arules' is deprecated.
Use 'plot' instead.
See help("Deprecated")plot: Too many rules supplied. Only plotting the best 1000 rules using measure lift (change parameter max if needed)To reduce overplotting, jitter is added! Use jitter =0 to prevent jitter.Altyapı:
Graf Tabanlı Görselleştirmeler
Graf tabanlı teknikler, düğümler ve kenarlar kullanarak birliktelik kurallarını görselleştirir; düğümler öğe adlarıyla etiketlenir ve öğe kümeleri veya kurallar ikinci bir düğüm kümesi olarak temsil edilir. Öğeler, yönlü oklarla öğe kümelerine/kurallarına bağlanır. Öğelerden kural düğümlerine giden oklar LHS öğelerini, bir kuraldan bir öğeye giden ok ise RHS’yi gösterir. Düğüm boyutu ve rengi genellikle ilgi ölçülerini temsil eder.
Graf çizimleri kuralları görselleştirmek için harikadır, ancak kural sayısı arttıkça sıkışık hâle gelirler. Bu nedenle graf tabanlı görselleştirmelerde daha az sayıda kuralı görselleştirmek daha iyidir.
subRules içinden en yüksek güvene sahip 10 kuralı seçelim.
top10subRules <- head(subRules, n =10, by ="confidence")Altyapı:
Şimdi etkileşimli bir graf çizin:
Not:plot içindeki engine=htmlwidget parametresiyle tüm grafiklerinizi etkileşimli yapabilirsiniz
arulesViz’den, birliktelik kuralları kümeleri için grafikler GraphML formatında veya Graphviz dot dosyası olarak dışa aktarılabilir; böylece Gephi gibi araçlarda incelenebilir. Örneğin, en yüksek lift’e sahip 1000 kural şu şekilde dışa aktarılır:
saveAsGraph(head(subRules, n =1000, by ="lift"), file ="rules.graphml")Altyapı:
Tekil Kural Gösterimi
Bu gösterime Paralel Koordinatlar Grafiği de denir. Hangi ürünlerin, hangi öğelerle birlikte, ne tür satışlara yol açtığını görselleştirmek için kullanışlıdır.
Yukarıda belirtildiği gibi, RHS müşterinin alacağını öngördüğümüz Ardıl’dır; konumlar LHS’dedir; burada 2, sepete en son eklenen, 1 ise daha önce elimizde olan öğeyi ifade eder.
# Filter top 20 rules with highest lift
subRules2<-head(subRules, n=20, by="lift")
plot(subRules2, method="paracoord")Altyapı:
En üstteki oka bakın. 'CHILDS GARDEN SPADE PINK' ve 'CHILDS GARDEN RAKE PINK' alışveriş sepetimde olduğunda, bunlarla birlikte 'CHILDS GARDEN RAKE BLUE' alma olasılığımın da yüksek olduğunu gösteriyor.
Sonuç
Tebrikler! Veri madenciliğinde en sık kullanılan algoritmalardan biri olan APRIORI’yi öğrendiniz. Birliktelik Kuralı Madenciliğini, uygulamalarını ve perakendecilikte Market Sepeti Analizi olarak adlandırılan uygulamasını öğrendiniz. Artık R’da Market Sepeti Analizini uygulayabilir ve birliktelik kurallarınızı harika grafiklerle sunabilirsiniz! İyi öğrenmeler!
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Bir veri bilimcisiniz (ya da olmak üzeresiniz!) ve bir perakende mağazası işleten bir müşteriyle çalışıyorsunuz. Müşteriniz size, belirli bir zaman aralığında çeşitli müşterilerin mağazadan satın aldığı ürünlerden oluşan tüm işlemlere ait verileri veriyor ve bu verileri kullanarak işlerini büyütmelerine yardımcı olmanızı istiyor. Müşteriniz bulgularınızı yalnızca stoktaki ürünleri değiştirmek/güncellemek/eklemek için değil, fiziksel mağazanın ya da çevrimiçi mağazanın yerleşimini değiştirmek için de kullanacak. Müşterinize yardımcı olacak sonuçları bulmak için, verilen işlem verileri üzerinde Birliktelik Kuralı Madenciliği kullanan Market Sepeti Analizi (MBA) uygulayacaksınız.
Bu eğitimde şunları öğreneceksiniz:
Birliktelik Kuralı Madenciliği
Birliktelik Kuralı Madenciliği, bir kümedeki farklı nesneler arasında ilişki bulmak, bir işlem veritabanında, ilişkisel veritabanlarında veya diğer bilgi depolarında sık örüntüler bulmak istediğinizde kullanılır. Birliktelik Kuralı Madenciliğinin uygulamaları; Pazarlama, Sepet Verisi Analizi (ya da Market Sepeti Analizi), kümeleme ve sınıflandırmada karşımıza çıkar. Birliktelik Kuralları adı verilen kural setleri üreterek müşterilerin hangi ürünleri birlikte sıkça satın aldığını söyleyebilir. Basitçe ifade etmek gerekirse, çıktıyı eğer bu ise o halde şu biçiminde kurallar hâlinde verir. Müşteriler bu kuralları çok sayıda pazarlama stratejisi için kullanabilir:
Şu örneği ele alın:
Verilen bir işlem veri kümesi var. 1’den 5’e numaralanmış işlemleri görebilirsiniz. Her işlem, o işlemde satın alınan ürünleri gösteriyor. Bez bebek bezi ile Bira’nın üç işlemde birlikte alındığını görebilirsiniz. Benzer şekilde Ekmek ile Süt’ün üç işlemde birlikte alındığını görürüz; bu da onları sık öğe kümeleri yapar. Birliktelik kuralları aşağıdaki biçimde verilir:
$A=>B[Support,Confidence]$
$=>$ öncesindeki kısım eğer (Öncül), $=>$ sonrasındaki kısım ise o halde (Ardıl) olarak adlandırılır.
Burada A ve B, işlem verilerindeki öğe kümeleridir. A ve B ayrık kümelerdir.
$Computer=>Anti-virus Software[Support=20\%,confidence=60\%]$
Yukarıdaki kural şunu söyler:
İzleyen bölümde Birliktelik Kuralı Madenciliğinin temel kavramlarını öğreneceksiniz:
Birliktelik Kuralı Madenciliğinin Temel Kavramları
Öğe kümesi (Itemset): Bir veya daha fazla öğenin bir araya gelmesi. K-öğe-kümesi, k öğeden oluşan küme demektir.
Destek Sayısı (Support Count): Bir öğe kümesinin görülme sıklığı
Destek (s): 'X' öğe kümesini içeren işlemlerin oranı
$Support(X)=\frac{frequency(X)}{N}$
Bir A=>B kuralı için Destek şöyle verilir:
$Support(A=>B)=\frac{frequency(A,B)}{N}$
Not: P(AUB), A ve B’nin birlikte gerçekleşme olasılığıdır. P, olasılığı gösterir.
Alıştırma olarak Süt=>Bebek Bezi için desteği bulmayı deneyin.
$Confidence(A=>B)=\frac{P(A\cap B)}{P(A)}=\frac{frequency(A,B)}{frequency(A)}$
Hem A hem B’nin bulunduğu işlem sayısının, A’nın bulunduğu toplam işlem sayısına bölünmesi.
$Confidence(Bread=>Milk)=\frac{3}{4}=0.75=75\%$
Şimdi Süt=>Bebek Bezi için güveni bulun.
Not: Destek ve Güven, kuralın ne kadar ilgi çekici olduğunu ölçer. Asgari destek ve asgari güven eşiklerine göre belirlenir. Müşteri tarafından belirlenen bu eşikler, kuralın gücünü sizin ya da müşterinizin tercihine göre karşılaştırmaya yardımcı olur. Eşiğe ne kadar yakınsa, kural müşteriye o kadar faydalıdır.
Sık Öğe Kümeleri: Desteği asgari destek eşiğine (min_sup) eşit veya ondan büyük olan öğe kümeleri. Yukarıdaki örnekte min_sup=3. Bu, kullanıcı tercihiyle belirlenir.
Güçlü kurallar: A=>B[Support, Confidence] kuralı min_sup ve min_confidence şartlarını sağlıyorsa güçlü kuraldır.
Kaldıraç (Lift): A=>B kuralındaki A ve B arasındaki korelasyonu verir. Korelasyon, bir A öğe kümesinin B öğe kümesi üzerindeki etkisini gösterir.
$Lift(A=>B)=\frac{Support}{Supp(A)Supp(B)}$
Örneğin,
{Bread}=>{Milk}kuralı için kaldıraç şöyle hesaplanır:$support(Bread)=\frac{4}{5}=0.8$
$support(Milk)=\frac{4}{5}=0.8$
$Lift(Bread=>Milk)=\frac{0.6}{0.8*0.8}=0.9$
Kuralın kaldıracı 1 ise A ve B bağımsızdır ve onlardan kural türetilemez.
Kaldıraç > 1 ise A ve B birbirine bağımlıdır; bağımlılığın derecesi lift değeriyle verilir.
Kaldıraç < 1 ise A’nın varlığı B üzerinde olumsuz etkiye sahiptir.
Birliktelik Kuralı Madenciliğinin Amacı
Verilen bir T işlem kümesine Birliktelik Kuralı Madenciliği uyguladığınızda amacınız şu kuralları bulmaktır:
APRIORI Algoritması
Bu bölümde, Market Sepeti Analizi için R kütüphanelerinin arka planında çalışan algoritmayı öğreneceksiniz. Bu, müşterilerinizi daha iyi anlamanıza ve analizi daha dikkatli yapmanıza yardımcı olur. APRIORI algoritmasını ve nasıl çalıştığını zaten biliyorsanız, kodlama bölümüne geçebilirsiniz.
Birliktelik Kuralı Madenciliği iki aşamalı bir yaklaşım olarak görülür:
Sık Öğe Kümesi Üretimi: Önceden belirlenmiş min_support sayısından büyük veya ona eşit desteğe sahip tüm sık öğe kümelerini bulun
Kural Üretimi: Sık öğe kümelerinden tüm Birliktelik Kurallarını listeleyin. Tüm kurallar için Destek ve Güveni hesaplayın. min_support ve min_confidence eşiklerini sağlamayan kuralları budayın.
Sık Öğe Kümesi Üretimi tam veritabanı taraması gerektirdiği için hesaplama açısından en maliyetli adımdır.
Yukarıdaki adımlar arasında hesaplama açısından en maliyetli olanı Sık Öğe Kümesi üretimidir.
Yukarıda yalnızca 5 işlemden oluşan bir örnek gördünüz; ancak gerçek dünyada perakende işlem verileri GB’lar ve TB’lar seviyesine çıkabilir. Bu nedenle sonraki adımlarda işe yaramayacak öğe kümelerini elemek için optimize edilmiş bir algoritmaya ihtiyaç vardır. Bunun için APRIORI Algoritması kullanılır. Şöyle der:
Bu ilke, APRIORI algoritması prensibinin görsel bir temsili olan Öğe Kümesi Kafesi (Itemset Lattice) ile gösterilir. k-öğe-kümesi düğümlerinden ve o k-öğe-kümesinin alt küme ilişkilerinden oluşur.
Yukarıdaki şekilde, en altta işlem verilerindeki tüm öğeleri görürsünüz ve ardından boş kümeye kadar alt kümeler oluşturarak yukarı doğru ilerlersiniz. d adet öğe için kafesin boyutu $2^d$ olur. Bu, her kombinasyon için destek bularak Sık Öğe Kümesi üretmenin ne kadar zor olacağını gösterir. Aşağıdaki şekil, APRIORI’nin üretilmesi gereken küme sayısını ne kadar azalttığını gösterir:
{a,b} öğe kümesi sık değilse, tüm üst kümelerini dikkate almamız gerekmez.
Bunu bir örnekle anlayalım. Aşağıdaki örnekte, APRIORI’nin neden etkili bir algoritma olduğunu görecek ve ayrıca adım adım güçlü birliktelik kuralları üreteceksiniz. Not defteriniz ve kaleminizle eşlik edin!
Gördüğünüz gibi, işlem verilerinde yer alan tüm öğeleri tek tek içerecek şekilde 1-öğe-kümesi için Aday Listesi oluşturarak başlıyorsunuz. Gerçek dünyadaki perakende işlem verilerini düşündüğünüzde, bu aday üretiminin ne kadar maliyetli olabileceğini görebilirsiniz. Burada APRIORI devreye girer; Aday listesinin sayısını azaltmaya yardımcı olur ve sonunda kullanışlı kurallar üretilir. İzleyen adımlarda, Birliktelik kuralı madenciliğinin ilk adımı olan Sık Öğe Kümesi üretiminin sonuna nasıl ulaştığımızı göreceksiniz.
Bir sonraki adımınız tüm sık öğe kümelerini listelemek olacak. Bu örnekte L2={I1, I2},{I2, I3} olan son boş olmayan Sık Öğe Kümesini alacaksınız. Ardından, bu Sık Öğe Kümesi Listesinde yer alan öğe kümelerinin tüm boş olmayan alt kümelerini yapın. Aşağıdaki görselde gösterildiği gibi ilerleyin:
Yukarıda dört güçlü kural olduğunu görebilirsiniz. Örneğin, güveni %75 olan ${I2}=>I3$ kuralı, I2 satın alanların %75’inin I3’ü de satın aldığını söyler.
Artık veri madenciliğinde en çok kullanılan algoritmalardan biri olan APRIORI algoritmasını baştan sona öğrendiniz. Hadi koda geçelim, ohhh!
R kullanarak MBA/Birliktelik Kuralı Madenciliğinin uygulanması
Bu eğitimde UCI Machine Learning Repository’den bir veri kümesi kullanacaksınız. Veri kümesinin adı Online-Retail ve buradan indirebilirsiniz. Veri kümesi, 01/12/2010 ile 09/12/2011 tarihleri arasında Birleşik Krallık merkezli, kayıtlı bir mağazasız çevrimiçi perakendecinin işlem verilerini içerir. Bunu bir R veri kümesi yerine kullanma nedenimiz, perakende verilerini bu formda alma olasılığınızın daha yüksek olması ve bu veriler üzerinde veri ön işleme uygulamanızın gerekecek olmasıdır.
Veri Kümesi Açıklaması
Özellik Bilgileri
Kütüphanelerin Yüklenmesi
Önce gerekli kütüphaneleri yükleyeceksiniz. Her bir kütüphanenin kısa açıklaması ( Buradan alınmıştır) aşağıdaki tabloda verilmiştir; böylece her kütüphanenin ne yaptığını bilirsiniz:
arulesarulesViztidyversereadxlplyrggplot2knitrlubridateVeri Ön İşleme
İndirilen dosyadan veri kümesini R’a okumak için
read_excel(path to file)kullanın.read_excel(path-to-file-with-filename)içine dosya adı dahil tam dosya yolunuzu verinArtık dataframe retail,
DateveTimeolmak üzere iki ek özellikle 10 öznitelik içerecektir.MBA/Birliktelik Kuralı madenciliğini uygulamadan önce, dataframe’i işlem verisine dönüştürmemiz gerekir; böylece bir faturada birlikte alınan tüm ürünler tek satırda yer alır.
glimpseçıktısında her işlemin atomik biçimde olduğunu, yani bir faturaya ait tüm ürünlerin ilişkisel veritabanlarında olduğu gibi atomik olduğunu görebilirsiniz. Bu formata tekiller (singles) formatı da denir.Yapmanız gereken,
retaildataframe’indeki verileriCustomerID,CustomerIDveDateile veyaInvoiceNoveDatekullanarak gruplamaktır. Bu gruplamaya ihtiyacımız var; üzerinde bir fonksiyon uygulayıp çıktıyı başka bir dataframe’e kaydedeceğiz. Bunuddplyile yapabilirsiniz.Aşağıdaki kod satırları bir
InvoiceNovedate’e ait tüm ürünleri birleştirir ve buInvoiceNovedate’ten gelen tüm ürünleri her bir öğe,ile ayrılmış tek bir satır olarak birleştirirSonraki adımda, kural madenciliğinde işinize yaramayacakları için InvoiceNo ve Date’i
NULLyapabilirsiniz.İşlem verileri için bu formata sepet formatı denir. Sonraki adımda bu işlem verilerini bir .csv (Virgülle Ayrılmış Değerler) dosyasına kaydetmeniz gerekir. Bunun için
write.csv()İşlem verilerinizin doğru biçimde olup olmadığını kontrol edin:
Sonraki adımda, bu işlem verilerini işlem sınıfı nesnesine yüklemeniz gerekir. Bu,
arulespaketininread.transactionsR fonksiyonu kullanılarak yapılır.Aşağıdaki kod satırı, sepet formatında olan
D:/Documents/market_basket_transactions.csvdosyasını alır ve onu işlem sınıfı nesnesine dönüştürür.Yukarıdaki kod satırlarını çalıştırdığınızda çıktınızda çok sayıda
EOF within quoted stringgörebilirsiniz, endişelenmeyin.Elinizde zaten bir dataframe içinde işlem verisi varsa, bunu işlem nesnesine dönüştürmek için aşağıdaki kod satırını kullanın:
trişlem nesnesini görüntüleyin:summary(tr), işlem nesnemiz hakkında bilgi veren çok yararlı bir komuttur. Yukarıdaki çıktı ne söylüyor, bakalım:Toplam 22191 işlem (satır) ve 7876 öğe (sütun) var. 7876 sayısının veri kümesinde yer alan ürün açıklamaları, 22191 işlemin ise bu öğelerin koleksiyonları olduğuna dikkat edin.
Yoğunluk (Density), seyrek bir matristaki sıfır olmayan hücrelerin yüzdesini söyler. Bunu, o matriste satın alınan toplam öğe sayısının, matriste mümkün olan öğe sayısına bölünmesi gibi düşünebilirsiniz. Yoğunluğu kullanarak kaç öğe satın alındığını hesaplayabilirsiniz: 22191x7876x0.001930725=337445
Özet, en sık görülen öğeleri de söyleyebilir.
Öğe takımı/işlem uzunluk dağılımı: Bu, 1-öğe-kümesi, 2-öğe-kümesi vb. için kaç işlem olduğunu gösterir. İlk satır öğe sayısını, ikinci satır ise işlem sayısını gösterir.
Örneğin yalnızca 3598 adet tek öğeli işlem, 1594 adet iki öğeli işlem ve bir işlemde 419 öğe vardır ki bu en uzunudur.
itemFrequencyPlotkullanarak,itemMatrix’e dayalı nesnelerin dağılımını görmek için bir öğe Sıklığı Çubuk Grafiği oluşturabilirsiniz (ör. bizim durumumuzda>transactionsveya>itemsetsve>rulesiçindeki öğeler).Şunda
ilk argüman, çizdirilecek işlem nesnesi olan
tr’dir.topN, en yüksek sıklığa sahip ilk N öğeyi çizdirmenizi sağlar.type,type="absolute"veyatype="relative"olabilir. Absolute ise her öğenin sayısal sıklığını bağımsız olarak çizer. Relative ise bu öğelerin diğerlerine kıyasla kaç kez göründüğünü çizer.Bu grafik, 'WHITE HANGING HEART T-LIGHT HOLDER' ve 'REGENCY CAKESTAND 3 TIER' ürünlerinin en çok satıldığını gösteriyor. Dolayısıyla 'SET OF 3 CAKE TINS PANTRY DESIGN' satışını artırmak için, perakendeci bunu 'REGENCY CAKESTAND 3 TIER' yakınına koyabilir.
itemFrequencyPlotiçin diğer seçenekleri burada keşfedebilirsiniz.Kuralların Üretilmesi!
Sonraki adım, APRIORI algoritmasını kullanarak kuralları çıkarmaktır.
apriori()fonksiyonuarulespaketindendir.apriori, madenciliğin uygulanacağı işlem nesnesi olaraktr’yi alır.parameter, min_sup ve min_confidence’ı ayarlamanıza olanak tanır.parameteriçin varsayılan değerler, 0.1 asgari destek, 0.8 asgari güven ve en fazla 10 öğedir (maxlen).summary(association.rules)şunları gösterir:Parametre Belirtimi: min_sup=0.001 ve min_confidence=0.8 değerleri; bir kuralda en fazla 10 öğe.
Toplam kural sayısı: 49122 kural kümesi
Kural uzunluğu dağılımı: 5 öğe uzunluğu en çok kurala sahip: 16424 ve 2 öğe uzunluğu en az kurala sahip: 105
Kalite ölçüleri özeti: Destek, Güven ve Lift için min ve max değerleri.
Kural oluşturmak için kullanılan bilgiler: Algoritmaya sağladığımız veri, destek ve güven.
49122 kural olduğuna göre, sadece ilk 10’unu yazdıralım:
Yukarıdaki çıktıyı kullanarak şu tür analizler yapabilirsiniz:
'WOBBLY CHICKEN' alan müşterilerin %100’ü 'METAL' de almıştır.
'BLACK TEA' alan müşterilerin %100’ü 'SUGAR JARS' da almıştır.
Kural sayısını ve boyutunu sınırlama
Üretilen kuralların sayısını ve boyutunu nasıl sınırlayabilirsiniz? Bunu
aprioriiçindekiparameters’ı ayarlayarak yapabilirsiniz. Bu parametreleri, elde edeceğiniz kural sayısını ayarlamak için belirleyin. Daha güçlü kurallar istiyorsanızconfdeğerini artırın; daha uzun kurallar içinmaxlen’i daha yüksek verin.Artık kuralların kaldırılması
Daha büyük kuralların alt kümeleri olan kuralları kaldırabilirsiniz. Bu tür kuralları kaldırmak için aşağıdaki kodu kullanın:
which(), değeri TRUE olan vektördeki elemanların konumunu döndürür.colSums(), dataframe’ler ve sayısal diziler için satır ve sütun toplamları oluşturur.is.subset(), bir vektörün elemanlarının diğerinin tüm elemanlarını içerip içermediğini belirlerBelirli öğelerle ilgili kuralların bulunması
Bazen belirli bir ürün üzerinde çalışmak istersiniz. X öğesinin satın alınmasını neyin etkilediğini bulmak istiyorsanız,
apriorikomutundaappearanceseçeneğini kullanabilirsiniz.appearance, kuralın LHS (EĞER kısmı) ve RHS (O HALDE kısmı) için ayar yapma seçenekleri verir.Örneğin, müşterilerin 'METAL' satın almadan önce ne aldığını bulmak için aşağıdaki kod satırını çalıştırın:
Benzer şekilde, METAL alan müşteriler ayrıca .... almıştır sorusunun cevabını bulmak için METAL’i lhs’te tutarsınız:
Birliktelik Kurallarının Görselleştirilmesi
Veriye bağlı olarak yüzlerce hatta binlerce kural üretileceği için, bulgularınızı sunmanın birkaç yoluna ihtiyacınız olacak.
ItemFrequencyPlotyukarıda zaten ele alındı ve en çok satılan ürünleri görmek için harika bir yol.Burada şu görselleştirmeler ele alınacaktır:
Saçılım Grafiği
Birliktelik kurallarının doğrudan görselleştirilmesi,
arulesVizpaketininplot()fonksiyonunu kullanarak bir saçılım grafiği üretmektir. Eksenlerde Destek ve Güven kullanılır. Ek olarak, üçüncü ölçüt Lift nokta renklerini (grinin tonları) varsayılan olarak belirler.Yukarıdaki grafik, lift’i yüksek olan kuralların desteğinin düşük olduğunu gösteriyor. Grafik için şu seçenekleri kullanabilirsiniz:
rulesObject: çizdirilecek kural nesnesimeasure: Kural ilginçlik ölçütleri. Support, Confidence, lift veyamethoddeğerine bağlı kombinasyonları olabilir.shading: Noktaları renklendirmede kullanılan ölçüt (Support, Confidence, lift). Varsayılan Lift’tir.method: Kullanılacak görselleştirme yöntemi (scatterplot, two-key plot, matrix3D).Two-key plot x ve y eksenlerinde sırasıyla destek ve güveni kullanır. Renklendirme için order kullanılır. Order, kuraldaki öğe sayısıdır.
Etkileşimli Saçılım Grafiği
Kural kümenizi sunmak için
arulesVizveplotlykullanan harika bir etkileşimli grafik kullanabilirsiniz. Her kuralın üzerine geldiğinizde tüm kalite ölçütlerini (destek, güven ve lift) görebilirsiniz.Graf Tabanlı Görselleştirmeler
Graf tabanlı teknikler, düğümler ve kenarlar kullanarak birliktelik kurallarını görselleştirir; düğümler öğe adlarıyla etiketlenir ve öğe kümeleri veya kurallar ikinci bir düğüm kümesi olarak temsil edilir. Öğeler, yönlü oklarla öğe kümelerine/kurallarına bağlanır. Öğelerden kural düğümlerine giden oklar LHS öğelerini, bir kuraldan bir öğeye giden ok ise RHS’yi gösterir. Düğüm boyutu ve rengi genellikle ilgi ölçülerini temsil eder.
Graf çizimleri kuralları görselleştirmek için harikadır, ancak kural sayısı arttıkça sıkışık hâle gelirler. Bu nedenle graf tabanlı görselleştirmelerde daha az sayıda kuralı görselleştirmek daha iyidir.
subRulesiçinden en yüksek güvene sahip 10 kuralı seçelim.Şimdi etkileşimli bir graf çizin:
Not:
plotiçindekiengine=htmlwidgetparametresiyle tüm grafiklerinizi etkileşimli yapabilirsinizarulesViz’den, birliktelik kuralları kümeleri için grafikler GraphML formatında veya Graphviz dot dosyası olarak dışa aktarılabilir; böylece Gephi gibi araçlarda incelenebilir. Örneğin, en yüksek lift’e sahip 1000 kural şu şekilde dışa aktarılır:Tekil Kural Gösterimi
Bu gösterime Paralel Koordinatlar Grafiği de denir. Hangi ürünlerin, hangi öğelerle birlikte, ne tür satışlara yol açtığını görselleştirmek için kullanışlıdır.
Yukarıda belirtildiği gibi, RHS müşterinin alacağını öngördüğümüz Ardıl’dır; konumlar LHS’dedir; burada 2, sepete en son eklenen, 1 ise daha önce elimizde olan öğeyi ifade eder.
En üstteki oka bakın. 'CHILDS GARDEN SPADE PINK' ve 'CHILDS GARDEN RAKE PINK' alışveriş sepetimde olduğunda, bunlarla birlikte 'CHILDS GARDEN RAKE BLUE' alma olasılığımın da yüksek olduğunu gösteriyor.
Sonuç
Tebrikler! Veri madenciliğinde en sık kullanılan algoritmalardan biri olan APRIORI’yi öğrendiniz. Birliktelik Kuralı Madenciliğini, uygulamalarını ve perakendecilikte Market Sepeti Analizi olarak adlandırılan uygulamasını öğrendiniz. Artık R’da Market Sepeti Analizini uygulayabilir ve birliktelik kurallarınızı harika grafiklerle sunabilirsiniz! İyi öğrenmeler!
Kaynakça:
https://datascienceplus.com/a-gentle-introduction-on-market-basket-analysis%E2%80%8A-%E2%80%8Aassociation-rules/
https://en.wikipedia.org/wiki/Sparse_matrix
https://cran.r-project.org/web/packages/arulesViz/vignettes/arulesViz.pdf
R hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Importing and Managing Financial Data in R kursunu alın.