-

Ericsson’dan Ing Bank’a Transferim

Şubat 2013’de çalışmaya başladığım Ericsson’dan Ekim 2015’de ayrıldım. Ericsson’da VodafoneNet CRM projesinde Software Developer olarak çalıştım. VodafoneNet CRM projesinde, web tabalı, Ericsson’un telekomünikasyon ürünü olan Emptor Telco kullanılıyor. Projede ekran ve akış tasarımları Tigris Studio ismindeki frameworkün xml tabanlı tool unda geliştiriliyor, arka taraf kodları da  .Net teknolojisi kullanılarak Visual Studio’da geliştiriliyor. Projede yeni akış, süreç, ekran geliştirme, canlı sistemden gelen problemlerin çözümü, müşteri operasyon ekiplerine destek gibi bütün alanlarda belirli sürelerde çalıştım. Çalışmaya başladığım ilk 1,5 sene müşteri ortamında Vodafone Plaza, Maslak’da çalışıyorduk daha sonra teknokent Arı2′de, Ericsson’un kendi ofisinde çalıştım, tabi yine ara ara destek olmak için müşteri ortamında çalışıyordum. 2,5 senenin sonunda Ericsson’dan ayrılmak benim için zor oldu fakat kariyerimi daha ileri taşıyabilmek için ayrılma kararı almıştım. Ekip arkadaşlarım, kendi yöneticim, Ericsson Arge’deki yöneticilerimden çok güzel geri bildirimler aldım, desteklerini hissetmek ve her zaman kapının açık olduğunu duymak mutluluk vericiydi. Ericsson çalıştığım ilk büyük kurumsal firma idi. Ericsson’da akademik çalışmalar destekleniyor, Ericsson’da çalıştığım süre boyunca yaptığım iş ile hiç alakası olmayan iki tane uluslararası konferansa katıldım. Ericsson sponsor olup masraflarımın bir kısmını karşıladı. Hatta hiç unutmam(biraz arabesk oldu, farkındayım) yüksek lisans tez sunumu için dış Üniversete’den hoca davet etmiştim, sunum Avcılar kampüsünde idi, şık olması açısından jürideki hocamı araba ile aldırmam gerekiyordu, araba mı kiralasam acaba ama kullanacak kimse yoktu :) kara kara düşünürken Ericsson R&D Specialist Arda Güreller’e konuyu açtım, sunum günü hocamı almam için araç tahsis etmişlerdi, çok az şirket yapar bunu gerçekten. Akademik çalışmalarımdaki maddi manevi desteklerinden dolayı Ercisson R&D Director Fatma Özdemir ve R&D Specialist Arda Güreller’e özel teşekkürler ederim. 2,5 sene boyunca çok güzel tecrübeler edindim, güzel insanlarla çalıştım. Bütün ekip arkadaşlarıma ve yöneticilerime tekrardan herşey için çok teşekkürler…

 

Ekip arkadaşlarımın benim için organize ettikleri veda yemeği

Ekip arkadaşlarımın benim için organize ettikleri veda yemeği

Gelelim sonrasına :) Telekomünikasyon sektörünü çok sevmiştim aslında ama aynı sektörde uygun bir pozisyona denk gelemedim. Daha doğrusu iş arama sürecinde sektör bağımsız olarak birçok yer ile görüştüm. Sonuç olarak bütün parametreleri bir arada düşünerek Ing Bank’da çalışmaya karar verdim. Telekomünikasyon sektöründen bankacılık sektörüne nasıl olur acaba diye tedirginliklerim vardı aslında ama yine de denemeden bilemem diye Bankacılık sektörüne adım atmış oldum :)  Ing Bank’da Kıdemli Yazılım Mühendisi olarak başladım, 2 ayım doldu burada. İlk izlenimlerim gayet olumlu, çalıştığım proje xNext isminde, Veripark’ın VeriBranch frameworkü kullanılarak banka sistemlerinin yeni teknolojiye geçişi, ben şube dönüşüm projeleri bölümüne dahil oldum. Birlikte çalıştığım insanları çok sevdim, insan ilişkileri gayet iyi, sıcak bir ortam var, müdürüm ve ürün yöneticim sektörde çok tecrübeliler, onlardan öğrenilecek çok fazla şey var. Proje çok büyük, framework derya deniz, öğrenecek çok fazla şey var ama iş yapmaya başladıkça öğreneceğime ve sürecin büyük kısmına hakim olabileceğime eminim :) Ortam ve birlikte çalıştığım insanlar açısından şanslı hissediyorum. Ofisimiz Ümraniye’de şimdilik tek derdim yol, Çapa’dan Ümraniye’ye gelmek biraz zor oluyor, ama yer değişikliği yapabilirim. Bakalım neler olacak; yeni maceralar, yeni tecrübeler beni bekliyor :)

 

Yüksek Lisans’ı Tamamladım

2013 Nisan ayında İstanbul Üniversitesi Bilgisayar Mühendisliği Yüksek Lisansı’na başladım. 1 sene ders bir sene tez şeklinde idi, Ericsson’da çalışmaya başladığım dönem yüksek lisansa da başlamıştım. İşe yeni başlamış olmamdan ötürü iş yüküm çok fazla değildi, haftada 1 gün okula gidebiledecek şekilde yöneticim ile konuşmuştum, işleri telafi edebilecek şekilde derslere gidebildim. Dersleri tamamladıktan sonra tez aşamasına geçtim. Tez konusuna karar vermek gerçekten çok zor oldu. Tez danışmanım Yrd. Doç. Dr. Emel Arslan ile her görüşmemizde ortaya çok farklı şeyler çıkıyordu, uzun bir süre konu ve içeriğine karar verememiştim. Yüksek Lisans derslerinden “Yapay Zeka”da bir araştırma konusu seçmemiz istenmişti ben de merak ettiğimden İş Zekası ile ilgili araştırma yapmıştım, literatür taraması yaparken ders hocam Yrd. Doç. Dr.  Zeynep Orman ile literatürün bu konuda eksik olduğunu farkettik. Araştırma yaparken yeterli kaynak bulamamıştım. İlerleyen zamanda Bt Akademi’den “Sql Server 2012 ile İş Zekası Uygulamaları” konulu 3 aylık bir eğitim aldım, pratik anlamda bu konuda bir şeyler öğrenme şansına sahip olmuştum. Kapsamı çok belli olmasa da tezimde  İş Zekası üzerine çalışma düşüncesi oluşmuştu. Bu arada Zeynep Hoca’nın motivasyonu ile akademik makale yazma ve uluslararası konferanslara gönderme ilgim oluştu, sanırım yüksek lisans boyunca yaptığım en iyi şey uluslararası konferanlara katılmak oldu. Bloğumda ayrıntılı paylaşmıştım Ağustos 2014’de San Francisco’da Mayıs 2015’de Roma’da makale sunmak üzere konferansa katıldım, çok ciddi tecrübeler edindim. Bu yazdığımız makaleler de yine İş Zekası Uygulamaları ile ilgiliydi. Bunları da baz alarak tez çalışmamda İş Zekası’nın teoriğinden başlayıp, bileşenleri le ilgili örnek uygulamaları içeren ve devamında Pazar sepeti analizini dahil eden bir çalışma yaptım.Tezimi 1,5 senede tamamladım, çok kapsamlı bir çalışma oldu. Mayıs 2015′de  “İş Zekası Uygulamaları ve Pazar Sepeti Analizi”  başlıklı tezimi Yrd.Doç.Dr. Emel Arslan, Prof.Dr. Ahmet Sertbaş, Doç.Dr. Atakan Kurt, Yrd.Doç.Dr. Gülfem Işıklar Alptekin ve Yrd.Doç.Dr. Zeynep Orman’dan oluşan jüriye sundum. Gülfem Hoca ile Galatasaray Üniversitesi’nden aldığım MIS eğitimi sırasında tanışmıştım, davetimi kırmayıp tez jürime dahil oldu. Tez savunması sırasında jüri biraz terletti, biraz da  zorlandım fakat tezim kabul edildi :) Aslında tezimin içeriğini parça parça bloğumda paylaştım, ilgilenenler için tamamını pdf versiyonu olarak paylaşmayı planlıyorum. İş Zekası ve Pazar Sepeti Analizi konusunda çalışma yapanların ihtiyaç duyabileceği bilgileri içeriyor olabilir. Tezin kabul edilmesi ile bir dolu prosedürden sonra resmi olarak Hazirna 2015 de Bilgisayar Mühendisliği Yüksek Lisans’dan mezun oldum. Yüksek lisansdan sonra doktoraya başlayıp başlamayacağım soruluyor, aslında bazen aklımdan geçiyor, bazen de çok zor geliyor. Ama en azından bir dönem dinlenmek isterim daha sonra duruma bakacağım :) Tezimin içerisinde önsöze eklemiştim ama blog yazımdan da paylaşmak isterim;

Çalışmalarım boyunca kıymetli zamanından ayırarak yardımlarını esirgemeyen, beni yönlendiren tez danışmanım Sayın Yrd. Doç. Dr. Emel Arslan’a, tez çalışması kapsamında hazırladığımız ve uluslararası konferanslarda kabul edilen iki adet akademik makalenin yazılmasında katkıda bulunan İstanbul Üniversitesi Bilgisayar Mühendisliği Öğretim üyesi Sayın Yrd. Doç. Dr. Zeynep Orman’a, konferans katılımıma maddi destekte bulunan İstanbul Üniversitesi Sağlık Kültür Spor Daire Başkanlığı’na, BT Akademi’den aldığım “Sql Server 2012 ile İş Zekası Uygulamaları Eğitimi”ndeki eğitmenim Sayın Resul Çavuşoğlu’na paylaştığı değerli bilgilerden ötürü, Ericsson ARGE’ye verdikleri maddi destek ve bilgi paylaşımından dolayı, sevgili aileme manevi destekleri için teşekkürü borç bilirim.

Derya Gündüz

Apriori ve Fp-Growth Algoritmaları’nın Karşılaştırılması

Önceki makalelerimde Pazar Sepeti Analizinde kullanılan algoritmalardan genel olarak bahsedip ayrıntılı olarak bu algoritmalardan Apriori ve Fp-Growth Algoritmalarını anlatmıştım. Bu makalede ise Apriori ve Fp-Growth algoritmaları bir örnek uygulama ile test edilip aynı zamanda karşılaştırma çalışması yapılacaktır. Bu uygulama için hazır Java kütüphaneleri kullanılmıştır, aynı veri kaynağı ile Apriori ve Fp-Growth algoritması test edilmiştir. İş Zekası ile ilgili çalışmalarımın genelinde kullandığım veri kaynağı ile aynı olması açısından AdventureWorksDW veri tabanındaki satış bilgileri kullanılmıştır. Java uygulaması birlikte satılan ürünlerin yer aldığı metin dosyasını girdi olarak kabul eder, bu dosya içeriği AdventureWorksDW veri tabanından doldurularak Java uygulamasında kaynak olarak kullanılmıştır. Bu yüzden öncelikle girdi dosyasının hazırlanması gerekmektedir. Veriyi AdventureWorksDW veri tabanından metin dosyasına ekleyen basit bir C# uygulaması yazılmıştır. Ürünlerin satış bilgilerini getirmek üzere aşağıdaki Sql sorgusu kullanılmıştır;

sqlAdo1

Sorguda internet satışlarını tutan ve ürün bilgilerini tutan tablo birleştirilerek 2008 yılı filtresi verilmiştir. SELECTcümlesinde aynı sipariş numarasına sahip kayıtları aynı satırda tutma işlemini gerçekleştiren GetOrderNumberByProductKeys fonksiyonu kullanılmıştır. Fonksiyonun Sql kodu aşağıdaki gibidir;

sqlAdo2Böylece 2008 yılında bir arada satılan ürünlerin listesi elde edilmiş olur, sonraki aşamada bu değerler metin dosyasına yazılacaktır. Sql sorgusundan alınan bilgilerin metin dosyasına yazılması ile ilgili C# kodu aşağıdaki gibidir:

kod1

Basit C# uygulaması ile Java uygulamasında kullanılacak olan ProductKeys.txt girdi dosyası hazır hale getirilmiştir.

Eclipse, Java dili geliştirme aracı, kullanılarak yazılan uygulama[1] açık kaynak kodlu SPMF ismindeki veri madenciliği Java Kütüphanesi, Philippe Fournier-Viger tarafından lisanslanmıştır ve kullanıma açıktır. Bu uygulamaya iki algoritma için yukarıda anlatılan ProductKeys.text dosyası girdi olarak verilmiştir, her iki algoritma için de minimum destek değeri 0.01 verilir. Buna göre uygulamadan iki algoritma için özet veriler ve çıktı metin dosyası oluşturur.

Apriori Algoritması için çıkan sonuç:

=============  APRIORI =============

Candidates count : 1485

The algorithm stopped at size 3, because there is no candidate

Frequent itemsets count : 58

Maximum memory usage : 12.800544738769531 mb

Total time ~ 692 ms

Fp-Growth Algoritması için çıkan sonuç:

=============  FP-GROWTH =============

Transactions count from database : 21255

Max memory usage: 10.554763793945312 mb

Frequent itemsets count : 94

Total time ~ 390 ms

Bu sonuçların yanı sıra aynı zamanda iki algoritma için yaygın öğeler kümesi, her birine ait destek sayısı ve destek değeri içeren metin dosyası oluşur.

Apriori Algoritması için çıkan sonuç incelenecek olursa; algoritma için 1485 adet yaygın öğe adayı bulunmuştur, en fazla 2 elemanlı yaygın öğe kümesi bulunabilinmiş, 58 adet yaygın öğe kümesi oluşturulmuş, algoritma çalışırken 13 mb alan kullanmış ve toplamda 692 milisaniye zaman harcanmıştır. Oluşturulan çıktı dosyasına bakıldığında oluşan yaygın öğe kümelerinden biri; 477 478  #SUP: 292 Sup:0.01373 dir, bu sonuca göre Water Bottle ve Mountain Bottle Cage ürünleri 292 defa birlikte satın alınmış, bu örnek için toplam 21255 adet veri kümesi olduğundan ve bu yaygın öğe kümesinin destek değeri;

Destek (A=>B)=   = = 0,01373   olur.

0,01373>0.01(minimum destek) şartını sağladığından yaygın öğeler kümesine dahil edilmiştir.

Fp-Growth algoritmasından çıkan sonuç incelenecek olursa; aynı veri kümesi için işlem yapıldığında 94 adet yaygın öğe kümesi oluşturulabilinmiştir, işlem için 10.55 mb alan kullanılmış ve algoritma sonucu 390 milisaniye’de  dönmüştür. Çıktı olarak oluşturulan kümeye bakıldığında sonuçlardan biri; 477 478 485 #SUP: 307      Sup:0.0144 dir, buna göre Water Bottle, Mountain Bottle Cage, Fender Set – Mountain ürünleri birlikte 307 defa satın alınmış ve destek değeri 0.014, minimum destek değerinden büyük olduğundan yaygın öğeler kümesine dahil edilmiştir.

İki algoritmadan çıkan özet sonuçlar aşağıdaki tabloya eklenmiştir. Çıkan sonuçlardan da anlaşılabileceği üzere Fp-Growth algoritmasından daha fazla yaygın öğe kümesi oluşmuştur, Fp-Growth algoritması daha kısa sürede cevap vermiş ve daha az bellek kullanmıştır.

 

Yaygın Öğe Sayısı Bellek Kullanımı Harcanan Zaman
Apriori 58 12.8005 mb 692 ms
Fp-Growth 94 10.5547 mb 390 ms

 

Algoritmalarla ilgili başka bir test, farklı sayıda eleman içeren dosya uygulamaya girdi olarak verilip çıkan sonuçları gözlemlemek olmuştur. Bu test için minimum destek=0,01, iki algoritma için de aynı olacak şekilde verilmiştir. İşlem sayısı 100 ile 27659 arasında değişecek şekilde  8 farklı değer için algoritmalar çalıştırılmıştır, çıkan sonuçlar aşağıdaki tabloda verilmiştir. Bu sonuçlara bakıldığında iki algoritma için de işlem sayısı arttıkça genel olarak harcanan süre artmıştır. Neredeyse bütün denemelerde Fp-Growth algoritmasının çalışma süresi Apriori Algoritması’nın çalışma süresinden kısa sürmüştür. Apriori algoritması genelde az sayıda işlem içeren veri tabanlarında iyi performans gösterir, Fp-Growth ise büyük veri tabanlarında daha performanslı çalışır [2]. Aynı test daha büyük veri tabanı ile yapılacak olursa iki algoritma arasındaki fark daha açık bir şekilde gözlemlenebilecektir. Bulunan yaygın öğe sayısına bakıldığında ise 1000 ve 5000 işlem içeren veri tabanında iki algoritma için aynı sayıda yaygın öğe bulunmuştur, bunun dışındakilerde ise Fp-Growth algoritmasında Apriori Algoritması’ndan daha fazla yaygın öğe bulunmuştur. Yaygın öğe sayısını eleman sayısına göre yorumlamak çok doğru olmayabilir çünkü elemanların arasındaki ilişkiye göre bulunan yaygın öğe sayısı farklılık gösterebilir.

 

Input Dosya Eleman Sayısı Apriori Alg.Çalışma Süresi (ms) Fp-Growth Alg.Çalışma Süresi (ms) Apriori Alg.Yaygın Öğe Sayısı Fp-Growth Alg.Yaygın Öğe Sayısı
100 156 187 131 570
1000 186 106 18 18
5000 274 172 30 30
10000 250 453 41 56
15000 459 394 58 82
20000 564 432 52 77
25000 689 444 55 82
27659 738 438 56 84

 

Apriori ve Fp-Growth algoritmaları için yapılan 3. testte ise sabit sayıda işlem içeren veri tabanı verilip (21255 işlem sayısı) farklı minimum destek değerleri için çıkan sonuçlar gözlemlenmiştir. Minimum destek değeri 0,01 den başlayıp 0,2’ye kadar 5 farklı değer için denenmiştir.  Çıkan sonuçlar aşağıdaki tabloda verilmiştir. Sonuçları incelediğimizde her iki algoritma için %20 olan destek değerinde yaygın öğe bulunamamıştır, ayrıca artan minimum destek değerine karşılık iki algoritma için de çalışma süresi azalmıştır. Minimum destek sayısı arttıkça iki algoritmanın bulmuş olduğu yaygın öğe sayısı azalmıştır. Fp-Growth algoritması artan minimum destek değerinden çok fazla etkilenmezken Apriori Algoritması’nda ise minimum destek değeri arttıkça çalışma süresinde ciddi bir düşüş gözlemlemek mümkündür. %10 ve %15’lik minimum destek değerleri için Apriori Algoritması Fp-Growth algoritmasından çok daha hızlı çalışmıştır.

 

Destek değeri Yüzdeliği(%) Apriori Alg.Çalışma Süresi (ms) Fp-Growth Alg.Çalışma Süresi (ms) Apriori Alg.Yaygın Öğe Sayısı Fp-Growth Alg.Yaygın Öğe Sayısı
1 679 447 56 84
5 354 351 13 15
10 282 394 3 3
15 281 379 1 1
20 - 483 0 0

 

İki tablodaki sonuçlar birlikte düşünülürse; Apriori algoritmanın az işlem içeren ve yüksek minimum destek değeri için daha iyi performans sergilediği sonucuna varılabilir. Bu tsteler daha fazla eleman içeren veri tabanında yapılacak olursa iki algoritma arasındaki fark daha keskin olacaktır. Benzer bir çalışma [2]’de de yapılmıştır. Bulunan sonuçlar birbirini destekler niteliktedir.

Kaynaklar:

[1]  Fournier-Viger, P., Gomariz, A., Gueniche, T., Soltani, A., Wu., C., Tseng, V. S, 2014, SPMF: a Java Open-Source Pattern Mining Library. Journal of Machine Learning Research (JMLR), 15, 3389-3393.

[2]  Győrödi, C., Győrödi, R., Holban, S., 2004, A Comparative Study of Association Rules Mining Algorithms, 1st Romanian-Hungarian Joint Symposium on Applied Computational Intelligence, 213-222.

 

 

Adomd.Net

Adomd.Net .Net ile kullanılan Sql Server Analiz Servisleri sağlayıcısıdır. Analiz Servisleri işlemleri için özelleştirilmiş sınıfları (classes) ve arayüzleri (interface) vardır. Visual Basic .Net, C# ve J# dilleri ile kullanılabilir. Adomd.Net veri madenciliği istemci (client) uygulamalarının programlanmasını kolaylaştırmak için klasik Ado.Net arayüzlerinin yanında veri madenciliği ve Olap (Online Analytical Processing) nesneleri içerir.

Adomd.Net Uygulama Örneği

Önceki yazılarımda Dmx sorguları ile daha önceden oluşturulan madencilik modeli üzerinde sorgu çalıştırıp Birliktelik Kuralları çıkarılabileceği örnek sorgular ile anlatmıştım.

Bu bölümdeki uygulama örneğinde  “Microsoft Birliktelik Kuralları” konulu makalemde oluşturulan madencilik modeli üzerinde Dmx sorguları çalıştırılacak, Adomd.Net kullanılarak bir web sitesi üzerinde alınan ürün için nasıl  ürün tavsiyesinde bulunulabileceği öğrenilecektir.

Madencilik modeli üzerinde çalıştırılan Dmx sorgusu kullanılarak Adomd.Net Api yardımıyla bir stored procedure (Sql’de kullanılan veri tabanı objesi) oluşturulacaktır, devamında oluşturulan procedure web sitesi tarafında yine Adomd.Net  Api kullanılarak çağırılacaktır.

Stored Procedure oluşturmak üzere Visual Studio’dan Class Library tipinde proje eklenir. Projeye referans olarak msmgdsrv.dll (Microsoft.AnalysisServices.AdomdServer)eklenir. Bu referans Server Adomd.Net ile ilgili özellikleri barındırır. Başka bir sınıf ekleyip ana metodu Adomd.Net Api kullanılacak şekilde dizayn edilir, bu işlem için Microsoft.AnalysisServices.AdomdClient.dll referansı eklenir.Devamında Adomd.Net bağlantısı kurulup Dmx sorgusunun çalıştırılması gerekmektedir. Dmx sorgusu sonucunda erişilen sonuç kümesi verilen ürün ile alınabilecek ürünlerin listesini verir. İlk eklenen Class1 içerisinden Class2 içerisindeki ana metodun çağrısı Server Adomd.Net Api özellikleri kullanılarak yapılır, Class1’den Class2’deki metodu çağıran kod bloğu aşağıdaki gibidir.

adomd1

Class2 içerisinde Adomd.Net Api özellikleri kullanılarak bağlantı yapılır, Dmx sorgusu eklenir ve sonuç kümesine erişilir. Kod bloğu aşağıdaki gibidir;

adomd2

Hazırlanan kod derlendikten sonra projedeki bin klasörü içinde proje adı ile bir dll (Dynamic Link Library) oluşacaktır. Bu dll’in madencilik modelinin referanslarına eklenmesi gerekmektedir. Sql Server Management Studio’ya Server Type olarak “Analysis Services” seçilip bağlanıldığında, Analiz Servisleri kapsamında yapılan çalışmalar yayınlanmış ise bu kısıma proje olarak eklenmiş olduğu görülebilir. Oluşturulan madencilik modelinin olduğu proje bulunup oluşturulan dll bu projenin “Assemblies” tabı altına eklenmelidir. Sql Server Management Studio üzerinden yeni referans ekleme ekranı Şekilde1’de gösterildiği gibidir. “ThesisAssociationExample” ismindeki proje altında eklenen veri kaynakları, veri kümleri ve Eklenen Association ismindeki madencilik modeli Şekil 1’den görülebilir. Şekil 1’deki projenin “Assemblies”  tabına yeni bir referans eklenebilir, bu örnek için oluşturulan SSASSP ismindeki referans eklenir.

Şekil1:Yeni referans ekleme ekranı.

Şekil1:Yeni referans ekleme ekranı.

Bu uygulama ile elde edilmek istenen; GetAssociatedProd metoduna 1 adet ürün modeli parametresi verilerek o ürün ile satın alınabilecek ürünler bilgisine ulaşmaktır. Sql Server Management Studio üzerinden Dmx sorgusu kullanarak oluşturulan stored procedure’ü çağırma işlemi aşağıdaki gibi gerçekleştirilebilir.

CALL [SSASSP].GetAssociatedProd(“ML Headset”)

Bu çağrı sonucundaDmx sorguları ile yapılan örnek uygulamalarda olduğu gibi; ML Headset ürününü satın alan müşterinin bununla birlikte alma olasılığı olan ilk 3 ürün ve bunlara ait olasılık değerlerini vermektedir.

Buraya kadar olan kısımda web sitesi üzerinden öneri yapmak için gerekli alt yapı sağlamış oldu. Bu bölümde ise oluşturulan procedure’ü kullanarak alınan ürüne istinaden öneride bulunulacaktır.

Bu işlemi denemek üzere AdventureWorks veri tabanı kullanılarak oluşturulan Asp.Net projesindeki tasarım ve şablon kullanılarak öneri sisteminin simülasyonu yapılmıştır [2]. Web sitesi genel bir alışveriş sitesi mantığı ile yapılmıştır; ürünler listelenir, kullanıcı ürünü seçip sepetine atar ve daha sonra ödemeyi yapıp ürünü satın alır. Makale kapsamında alınan ürüne göre kullanıcıya alabileceği ürünler gösterilecektir.

Web sitesinin satın alınabilecek ürünleri gösterdiği basit ara yüzü Şekil 2’deki gibidir.

Şekil2: Web sitesinde ürün listesinin gösterildiği ekran.

Şekil2: Web sitesinde ürün listesinin gösterildiği ekran.

Birliktelik Kuralları’nın çıkarılıp web sitesi üzerinden öneride bulunma kısmında yine Adomd.Net Api kullanılarak bağlantılar oluşturulur, Dmx sorgusu ile oluşturulan procedure çağırılır, bu işlem için eklenen kod bloğu aşağıdaki gibidir:

adomd3

Ürünü sepete eklemek için Add to Cart (Sepete Ekle) denmelidir ve alışveriş sepetinin görülebildiği sayfaya yönlenir, bu sayfada seçilen ürün ile alınabilecek ürünler ve olasılık değerleri listelenir, alışveriş sepeti sayfası Şekil 3’deki gibidir, temsili olarak bu ürünler için tablo eklenmiştir. Çıkan sonuca göre Hitch Rack- 4 – Bike modelindeki aksesuarı alan bir müşterinin Sport- 100 ürününü de alma ihtimali %29 dur, bu yüzden bu ürün müşteriye tavsiye edilebilir.

Şekil3: Pazar sepetindeki ürünlerin ve önerilen ürünlerin gösterildiği web sayfası.

Şekil3: Pazar sepetindeki ürünlerin ve önerilen ürünlerin gösterildiği web sayfası.

Kaynaklar:

[1]   MacLennan, J., Tang, Z., Crivat, B., 2008, Programming Sql Server Data Mining, Data Mining with Microsoft SQL Server 2008, Chapter 16, Wiley Publishing Inc., ISBN: 978-0-470-27774-4, 487-580.

[2]    Mundy, J., Thornthwaite, W., Kimbal, R., 2011, Sql Server 2008 R2 and the Microsoft Business Intelligence Toolset, Wiley Publising Inc., Indianapolis, Indiana, ISBN-13:978-0470640388.

 

 

 

Microsoft Birliktelik Kuralları

Microsoft Birliktelik Kuralı öneri sistemlerinde kullanılmak üzere Sql Server’ın Analiz Servisleri tarafından sağlanan bir çeşit birliktelik kuralıdır. Öneri sistemleri müşterilerin daha önce yaptıkları alışverişlere bağlı olarak ürün satın almaları için tavsiyede bulundukları sistemdir. Microsoft Birliktelik Kuralı, pazar sepeti analizlerinde kullanılan faydalı bir yöntemdir. Microsoft Birliktelik Kuralı Apriori Algoritması’nı kullanmaktadır.

Microsoft Birliktelik Kuralı’nın nasıl çalıştığını, projeye nasıl entegre olduğunu göstermek için Sql Server Tutorial’dan alıntılanan örnek uygulamayı anlatacağım. Microsoft Birliktelik Kuralı örneğini uygulamak için Sql Server Data Tools geliştirme aracından yeni proje eklenir. Şekil 1’de görülen yeni proje ekleme ekranı açıldığında “Business Intelligence/Analysis Services” altındaki “Analysis Services Multidimensional and Data Mining Project” ismindeki proje tipi seçilir.

Şekil1

 

Bütün iş zekası uygulamalarında olduğu gibi bir veri kaynağına ihtiyaç duyulur. Veri kaynağı eklenmeye çalışıldığında karşımıza wizard (sihirbaz) ekranı çıkacaktır. Sihirbaz ekranı ilerletildiğinde yeni veri kaynağı eklenebilecek Şekil 2’deki ekran açılır.

Şekil2

 

Şekil 2’deki “Solution Explorer” bölümünde görüldüğü gibi veri kaynağı ekledikten sonra ilgili tabloları çekmek üzere kullanılacak veri kaynağı görüntülerini (data source views) eklemek gerekmektedir. View (sanal tablo) ’leri eklemek için “Data Source Views”e sağ tıklayıp “New Data Source View” seçilir. Açılan Şekil 3’deki sihirbaz ekranında önceden oluşturulmuş vAssocSeqOrdersvve VAssocSeqLineItems ismindeki view’ler eklenir.

Şekil3

 

Bu aşamada view’lerin içeriğinden bahsetmek faydalı olacaktır. AdwentureWorks Veri Ambarı’nda internet üzerinden alışveriş yapan her kullanıcının kendi sepeti vardır ve alınacak ürünler sepet içerisinde biriktirilir. Pazar sepeti analizleri için her alışveriş sepetindeki ürün küme olarak değerlendirilir ve ürünler arasındaki ilişki sepetteki ürünler arasındaki ilişkiden yola çıkılarak yapılır. Bu yüzden FactInternetSales tablosundan başlayıp diğer tablolar ile ilişkiler kurulur. Eklenen iki view’de kullanılan vDMPrep ismideki view’in Sql sorgusu aşağıdaki gibidir;

sql1

2008 yılındaki satışlar ve satın alma bilgilerini gösteren vAssocSeqOrders view’inSql sorgusu aşağıdaki gibidir;

sql2

2008 yılındaki satışlar için vAssocSeqLineItemsSql sorgusuaşağıdaki gibidir;

sql3

 

 

 

Veri kaynağı olarak kullanılan view’ler eklendikten sonra iki tablo arasındaki bağlantı Şekil 4’deki gibi belirtilmelidir, iki tablodaki OrderNumber kolonu bağlanmalıdır. Bu bağlantının VAssocSeqLineItems’dan vAssocSeqOrdersv olması gerekir.

şekil4

 

Sonraki adımda veri madenciliği yapısı (mining structure) ve modeli seçilmelidir. Şekil 2’de görünen “Solution Explorer” bölümündeki “Mining Model” seçeneği sağ tıklandığında çıkan “New Mining Structure” seçilir. Açılan sihirbaz ekranı ilerletildiğinde farklı madencilik modellerinin seçilebileceği Şekil 5’deki ekran ile karşılaşılır, bu ekranda Microsoft Analiz Servisleri’nin desteklemiş olduğu madencilik modelleri görülebilir, bu örnek için “Microsoft Association Rules” seçilir.

şekil5

 

Birliktelik Kuralları’nda eklenen tablolarda case ve nested tablolar yer almaktadır. Case tablosu müşteri ile ilgili bilgileri içeren, nested tablo ise sipariş ile alakalı bilgi içeren tablodur. Bu yüzden vAssocSeqOrders tablosu case, vAssocSeqLineItems tablosu nested tablo olarak Şekil 6’daki gibi seçilir. Şekil 4’deki OrderNumber kolonu bağlantısı kurulurken nested tablodan case tabloya olmasına dikkat edilmelidir.

Şekild6

 

Case ve nested tabloların seçildiği ekran ilerletildiğinde eğitim verisinin (training data) seçildiği Şekil 7 ekranı açılacaktır. Case tablosundaki OrderNumber, Age, Gender, Region, IncomeGroupkolonları seçilir. Seçilen kolonlar madencilik yapısına dahil edilmiştir anlamına gelir. Pazar Sepeti Analizi her biralışverişte hangi ürünler alındı, kısmı ile ilgilendiği içinCustomerKeykolonunu eklemeye gerek bulunmamaktadır. OrderNumber kolonu anahtar (key) alan olarak seçilmelidir. Case tablosundan Model kolonunu key alan olarak seçip modele dahil edilmiş olur.

şekil7

 

Girdi (input) olarak seçilen alanlar Birliktelik Kuralları oluşturulurken kuralın içinde yer alan bir parametre olacaktır. Yapılan seçimler ile madencilik modeli Şekil 8’deki gibi oluşur, yapıya dahil edilen kolonlar sonradan input’a dönüştürülerek de kullanılabilir.

şekil8

 

Madencilik yapısı eklendikten sonra cinsiyet (gender) bilgisi Input olarak değiştirilir, sonuçları görebilmek için Şekil 9’daki “Mining Model Viewer” bölümü açılır, bu alan açıldığında projenin yayınlanacağı(deploy) bilgisi verilir ve proje yayınlandıktan sonra Şekil 9’daki Birliktelik Kuralları oluşur.

şekil9

 

“Mining Model Viewer” ekranında olasılık (probability) ve güven (support, importance) değerleri verilir, varsayılan (default) olarak olasılık=0.40, güven=0.15 olarak gelmektedir, bu değerler değiştirilerek kullanılabilir. Olasılık değeri 0.40’dan ve güven değeri 0.15’den büyük olan kuralların listesine bakıldığında model ve cinsiyet değerlerini parametre alarak kurallar oluşturulmuştur. Verilen olasılık ve güven değerleri ile 64 tane kural oluşturulmuş, çıkan kurallardan bazıları analiz edilecek olursa;

ML Mountain Tire = Existing, Sport 100 = Existing > Mountain Tire Tube = Existing:

ML Mountain Tire ürünü ile Sport 100 ürününü birlikte alan müşteriler 0.985 olasılık ile Mountain Tire Tube de satın alır.

Road Bottle Cage = Existing, Gender = M > Water Bottle = Existing:

Road Bottle Cage ürünü alan erkek müşteriler 0.890 olasılık ile Water Bottle de satın alır.

Bu kuralların kullandığı yaygın öğe kümeleri Şekil 10’dan görülebilir. Şekilde görüldüğü gibi 247 adet yaygın öğe kümesi bulunmuş. Minimum güven sayısı olarak 213 verildiğinde 213’den büyük değerdeki kümeler kurallara dahil edilir. Örneğin Road Bottle Cage, Water Bottle ürünler erkek müşteriler tarafından 764 defa aynı siparişte satın alınmış, aynı ürünler kadın müşteriler tarafından 749 defa birlikte satın alınmıştır.

şekil10

 

Kaynaklar:

[1]   Microsoft Association Algorithm, https://msdn.microsoft.com/en-us/library/  ms174916.aspx, [Ziyaret tarihi:30 Mart 2015].

Veri Madenciliği Programlama- DMX (Data Mining Extensions)

Sql Server madencilik Api (Application Programming Interfaces) leri aşağıdaki gibidir;

  • Oledb (Ole For Databases)
  • Ado (Activex Data Objects)
  • Ado.Net (Activex Data Objects For .Net)
  • Adomd.Net (Activex Data Objects (Multidimensional) For .Net)
  • Server Adomd.Net (Server Activex Data Objects (Multidimensional) For .Net)
  • Amo (Analysis Management Objects)
  • Dmx (Data Mining Extensions)
  • Xmla (Extensible Markup Language For Analysis)

Sql Server Analiz Servisleri için bu Api’lerden;

  • Ado Microsoft AciveX Data Object referansı ile
  • Adomd.Net Microsoft.AnalysisServices.AdomdClientreferansı ile
  • Server Adomd.Net Microsoft.AnalysisServices.AdomdServer referansı ile
  • Amo Microsoft.AnalysisServices veya Microsoft.DataWareHouse.Interfaces referansı ile

Visual Studio’da kullanılabilir.

Dmx (Data Mining Extensions)

Dmx Microsoft Sql Server Analiz Servisleri’nde veri madenciliği modelleri oluşturmak ve onlar üzerinde deneme, arama ve aynı zamanda tahmin yürütmeyi sağlamak üzere geliştirilmiş bir dildir. Dmx cümleleri iki çeşit olabilir; veri tanımlayıcı cümleler (data definition statements) ve veri düzenleyici cümleler (data manipulation statement). Veri düzenleyici cümleler yeni veri madenciliği yapısı ekleme, içe aktarma (import), dışa aktarma (export), var olan modeli silme gibi işlemleri gerçekleştirir. Veri tanımlayıcı cümlelerde aşağıdaki yapılar kullanılabilir;

CREATE MINING STRUCTURE

CREATE MINING MODEL

ALTER MINING STRUCTURE

EXPORT

IMPORT

SELECT INTO

DROP MINING STRUCTURE

Veri düzenleyen cümleler ise var olan model üzerinde arama işlemi yapmak, modelde güncelleme yapmak ve tahmin yürütmek işlemlerini gerçekleştirir. Veri düzenleyen cümleler aşağıdaki yapıları kullanabilir;

INSERT INTO

SELECT DISTINCT FROM <MODEL > (DMX)

SELECT FROM <MODEL>.CONTENT (DMX)

SELECT FROM <MODEL>.CASES (DMX)

SELECT FROM <MODEL>.SAMPLE_CASES (DMX)

SELECT FROM <MODEL>.DIMENSION_CONTENT (DMX)

SELECT FROM <model> PREDICTION JOIN

DELETE (DMX)

SELECT FROM <model> PREDICTION JOIN cümlesi 3 kısımdan oluşur;

  • Sonuç kümesi olarak dönen kümede  yer alan madencilik modeli kolonlarının bir listesi ve tahminlemede kullanılan fonksiyonlar,
  • Tahminleme oluşturmak için kullanılacak olan kaynak sorgu,
  • Madencilik modeli kolonları ile kaynak veri arasındaki eşleşme.

SELECT FROM <model> PREDICTION JOIN kullanımı aşağıdaki gibidir;

dmx1

Kod bloğundaki ilk satır madencilik modelinden gelmesi beklenen kolonları belirtmektedir. [NATURAL] PREDICTION JOIN kısmı hangi işlemin yapılacağını gösterir. Devamındaki kısım ise müşterinin Pazar sepetindekiürünlerini temsil etmektedir.

Eğer tahmin işlemine minimum olasılık değeri de dahil edilmek istenirse, <select list> yerine PREDICT([Default Association].[Products],INCLUDE_STATISTICS,3)

eklenmelidir. Bu metottaki ilk parametre modeldeki hangi kolonun değerinin gösterileceği, ikinci parametre destek, olasılık ve düzeltilmiş olasılık (adjusted probablity) değerlerinin sonuç kümesinde yer alacağını, 3 olarak yazan parametre ise ürünle ilişkili olan ilk 3 ürünün sonuç kümesinde gösterileceğini tarif etmektedir.

Dmx Sorguları

Bu kısımda daha önceden oluşturulmuş madencilik modeli, Association, kullanılarak örnek Dmx sorguları oluşturulmuştur. Madencilik modeli oluşturulurken veri kaynağı olarak Microsoft’un ücretsiz kullanıma sunduğu örnek veri tabanı olan AdventureWorks kullanılmıştır. Aşağıdaki kod bloğundaki amaçWater Bottle ürününü satın alan müşterilerin alabileceği ilk 5 ürünü ihtimalleri ile ortaya koymaktır. Predict metoduna INCLUDE_STATISTICS parametresi eklenerek sonuç kümesine destek ve olasılık değerlerinin de dahil edileceği belirtilmektedir.

dmx2

Aşağıdaki tabloda Water Bottle ürününü satın alan müşterilerinin bu ürün ile birlikte alma ihtimali olabilecek ilk 5 ürün listelenmektedir. Tabloya bakıldığında %39 olasılık ile Water Bottle ürününü alan müşteriler Mountain Bottle Cage ürününü de satın alır, sonucuna varılabilir.

Model $SUPPORT $PROBABILITY $ADJUSTEDPROBABILITY
Mountain Bottle Cage 1941 0.398184495 0.676180659
Road Bottle Cage 1702 0.371197252 0.682846288
Cycling Cap 2095 0.146957802 0.549763307
Mountain-200 2477 0.144504416 0.526861463
Road-750 1443 0.118989205 0.569686621

 

Bir sonraki örnek senaryo; Mountain Bottle Cage ürününü alan erkek müşterilerin satın alma ihtimali olan ilk 3 ürün, bu bilgi aşağıdaki kod bloğu ile elde edilmektedir. Madencilik modeli oluşturulurken cinsiyet bilgisi de input (girdi) olarak eklenmiş, bu yüzden Dmx sorgusuna input olarak cinsiyet bilgisi de eklenebilir.

Dmx3

Yukarıdaki Dmx sorgunun sonucu aşağıdaki tablo vermektedir. Tabloya göre Mountain Bottle Cage ve Mountain Tire Tube ürünü satın alan erkek müşterilerin sırası ile Water Bottle, HL Mountain Tire, ML Mountain Tire ürün modellerini alma ihtimalleri vardır,  %31 olasılık ile Mountain Bottle Cage ve Mountain Tire Tube ürünü alan erkek müşteriler HL Mountain Tire ürünü de alır, sonucu çıkarılabilir.

Tablo 4.5: Dmx sorgusu sonucunda oluşan tahmin kümesi.

Model $SUPPORT $PROBABILITY $ADJUSTEDPROBABILITY
Water Bottle 4076 0.836166924 0.676180659
HL Mountain Tire 1331 0.314649243 0.691508771
ML Mountain Tire 1083 0.25 0.688964227

 

Kaynaklar:

[1]   MacLennan, J., Tang, Z., Crivat, B., 2008, Programming Sql Server Data Mining, Data Mining with Microsoft SQL Server 2008, Chapter 16, Wiley Publishing Inc., ISBN: 978-0-470-27774-4, 487-580.

[2]    Data Mining Extensions (DMX) Reference, https://msdn.microsoft.com/en-us/ library/ms132058.aspx, [Ziyaret tarihi:30 Mart 2015].

[3]    Lesson 4: Executing Market Basket Predictions, https://msdn.microsoft.com/en-us/library/ms345329.aspx, [Ziyaret tarihi:10 Nisant 2015].

Fp-Growth Algoritması

Fp-Growth algoritması büyük veri kümelerinde çalışmaktadır ve sistem kaynaklarını verimli bir şekilde kullanan birliktelik kuralı çıkarım algoritmasıdır. Fp-Growth algoritması kendisi ile aynı işi yapan diğer birçok algoritmaya göre daha performanslı çalışır ve maliyeti azaltır, algoritma böl ve yönet stratejisini kullanmaktadır. En önemli özelliği tüm veri tabanını FP-Ağaç (Fp-Tree, Frequent Pattern Tree) adı verilen sıkıştırılmış bir ağaç veri yapısı şeklinde tutmasıdır. Algoritma veri tabanını toplamda iki kez tarar, ilk taramada bütün öğelerin destek değerini hesaplar, ikinci taramada ağaç veri yapısını oluşturur. Fp-Growth algoritması yaygın öğeler kümesini bulurken aday öğeler kümesi kullanmaz, yaygın öğeler Fp-Ağaç yapısından bulunur.

Genel olarak algoritma üç adımdan oluşur; destek sayılarının hesaplanması, Fp-Ağaç yapısının kurulması ve ağaç yapısından kuralların çıkarılması. Veri tabanı ilk kez tarandığında bulunan destek sayıları içerisinde minimum destek değerinden küçük olanlar hesaplama dışında bırakılır. Aşağıdaki tabloda bir alışveriş sepeti örneği bulunmaktadır, bu tabloda bulunan her harf bir ürünü temsil eder, tabloda farklı alışverişlerde aynı anda alınan ürünler görülebilir. İlk aşamada veri tabanı destek değerlerini bulmak üzere 1 kez taranır ve ürünlerin destek sayıları hesaplanır. Öğelerin ağaçtaki başlangıç noktaları Başlık Tablosu’nda (header table), Şekil 1’deki gibi tutulur, bu tablo ağaçta dolaşmayı ve ağaç içerisinde işaretçiler ile birbirine bağlanan aynı düğümlerin takibini kolaylaştırır. Minimum destek değerinin bu örnek için 2 olduğu varsayılır, buna göre {e} ürünü hesaplamalara dahil edilmeyecektir. Bulunan destek değerlerine göre ürünler en büyük destek değerinden en küçük destek değerine sahip olan ürünler şeklinde sıralanır. Bulunan yaygın öğeler (c:5), (a:4), (b:3), (d:3), (f:2) şeklinde sıralanır. Aynı zamanda her bir alışveriş sepeti içindeki öğeler de sıklıklarına göre sıralanırlar. Daha önce minimum destek eşiğinden dolayı elenen değerler sıralamaya eklenmez, örneğimiz için {e} ürünü sıralı ürünlere dahil edilmez, aşağıdaki tabloda Sıralı Ürünler’i de görmek mümkündür.

 

Alışveriş No Sepetteki Ürünler Sıralı Ürünler
 1 a, b, c c, a, b
2 c, d, a c, a, d
3 e, f, c ,b c, b, f
4 a, b, c, d, e c, a, d, b
5 a, c, d, f c, a, d, f

Hesaplama işlemlerinden sonra Fp-Ağaç yapısının kurulması işlemine geçilir. Ağaç yapısında kök (root) boş küme olarak yazılır. Daha sonra her bir alışveriş sepetinin sıralı şekli 1 numaralı alışverişten başlanarak ağaca yerleştirilir. İşlem yapılacak öğe ağaçta yer almıyorsa onun için yeni bir düğüm eklenir ve destek değeri 1 yapılır. Destek değerleri de ağaçtaki öğeler ile birlikte tutulur. Eğer öğe ağaçta var ise destek değeri 1 arttırılır. Alışveriş sepetindeki sıralı öğeler Şekil 1’deki gibi ağaca yerleştirilmiştir.

Şekil1

Şekil 1

 

Fp-Ağacı’nın özellikleri;

Bütünlük;

  • Yaygın öğeleri bulmak için bütün öğeleri barındırmaktadır.

Sıkıştırılmış;

  • Yaygın olmayan öğeler Fp-Ağacı’nda bulunmaz,
  • Destek sayısı daha büyük olan öğeler ağacın köküne daha yakındır,
  • Asıl veri kümesinden daha büyük değildir.

Fp-Ağacı’ndan koşullu örüntü çıkarılması

Başlık Tablosu’ndanher öğenin bulunduğu ilk düğüm tespit edilir ve ağaç içerisinde aşağıdan yukarıya olacak şekilde öğenin ulaşabileceği bütün düğümlere ulaşılır, koşullu örüntü temelleri (conditional pattern base) bulunur. Şekil 1’deki örnek için bulunabilecek koşullu örüntü temelleri aşağıdaki tablodaki gibidir. Kök düğümden sonra gelen ilk düğüm c dir, tek başına kural oluşturamayacağı için ondan sonra gelen düğümden başlanarak kök düğüme doğru her bir öğenin koşullu örüntüleri bulunmuştur.

Öğe Koşullu Örüntü
 a c:4
b ac:2, c:3, a:2
d ac:3
f c:2

 

Şekil 2’den Fp-Growth algoritmasının genel yapısı görülebilir. Algoritmada öncelikle veri tabanındaki her bir nesnenin destek değeri hesaplanır, algoritmaya girdi olarak verilen minimum destek değerine eşit ve büyük olanlar öğeler F listesine eklenir ve büyükten küçüğe doğru sıralanır. Her bir alışveriş sepeti için öğelerin destek değerine göre sıralanarak sıkıştırılmış biçimde ağaca yerleştirilir. Eklenecek öğe ağaçta yoksa onun için yeni bir düğüm eklenir ve destek değeri 1 verilir, öğe ağaçta var ise destek değeri 1 arttırılır. Ağaç içerisinde aynı nesneyi içeren öğeler birbirine bağlanır. Bu şekilde öğeler ağacı oluşturulmuş olur.

Şekil 2

Şekil 2

 

Bundan sonraki aşamada ağaçtaki her bir öğe için Şekil 3’deki Growth algoritması çalıştırılır. Öncelikle öğenin içerisinde geçtiği bütün yollar belirlenir, tek bir dal varsa yaygın öğeler kümesi o dalı oluşturulan nesnelerin kombinasyonudur.  Bulunan yollar o öğe için koşullu örüntü temelini oluşturur, her bir koşullu örüntü temelinden koşullu örüntü ağacı oluşturulur. Growth algoritması destek değeri en küçük öğeden başlanarak her bir öğe için ayrı ayrı çalıştırılır. Algoritmanın bu kısmı için Şekil 1’de verdiğimiz Fp-Ağacından {b}  öğesini düşünecek olursak ; {b}’nin geçtiği yollar (c:5,a:4,b:1), (c:5,a:4,d:3,b:1), (cb:1) dir. Algoritmanın {b} için çalıştırıldığını varsaydığımızdan b kümelere dahil edilmez, geriye kalan kümelerin destek sayıları {b}’nin destek değerine eşittir.  (c:1,a:1), (c:1,a:1,d:1), (c:1)  yolları {b}’nin şartlı örüntü temelleridir. Bu yollar için algoritma tekrar çalıştırılır. Öğelerin destek değeri; (c:3), (a:2), (d:1) olur, minimum destek değeri 2 olduğundan {d} elenmiş olur. {c} ve {a} öğeleri için yeni yaygın öğe ağacı kurulur. {c} için {(cab:2),(cb:3)} yaygın öğeleri, {a} için (ab:2) bulunur. Sonuç olarak {b} için {(b:3), (cab:2), (cb:3), (ab:2)} yaygın öğeleri bulunur. Algoritma örüntü ağacı üzerinde özyinelemeli (recursive) olarak çalışır. Her bir eleman için Growth algoritması çalıştırıldığında yaygın öğeler kümeleri oluşturulmuş olur.

Şekil 3

Şekil 3

 

Kaynaklar:

[1]   Birant, D.,Kut, A., Ventura, M., Altınok, H., Altınok, B., Altınok, E., Ihlamur, M., 2010, İş Zekası Çözümleri için Çok Boyutlu Birliktelik Kuralları Analizi, 12. Akademik Bilişim Konferansı Bildirileri, 10-12 Şubat 2010 Muğla, Türkiye, 257-264.

[2]   Öğüdücü, Ş.G, Veri Madenciliği İlişkilendirme Kuralları, http://www3.itu.edu.tr/ ~sgunduz/courses/verimaden/, [Ziyaret tarihi:16 Nisan 2015].

Apriori Algoritması

Apriori Algoritması 1994 yılında Agrawal ve Srikant tarafından geliştirilmiştir. Birliktelik kuralı çıkarım algoritmalarından en çok bilinen ve kullanılanıdır. Algoritmanın ismi yaygın öğeler kümelerinin ön bilgisini kullanıyor olmasından dolayı önceki (prior) anlamındaki “Apriori” dir.

n elemanlı bir eleman kümesi için  yaygın öğe ve  yaygın öğe adayı oluşturulabilir. Apriori Algoritması yaygın öğeleri azaltma noktasında görev almaktadır. Şekil 1’de görüldüğü gibi 5 elemanlı bir küme için olabilecek bütün yaygın öğeler ağaca eklenmiştir, {A,B} eleman kümesi yaygın öğeye dahil olamıyorsa {A,B} ‘nin geçtiği bütün alt kümeler ağaçtan çıkarılır.

Apriori Algoritması’nın temeli; n-elemanlı yaygın öğe kümesi minimum destek kriterini sağlıyorsa bu kümenin bütün alt kümeleri bu kriteri sağlar. Bu yüzden Apriori Algoritması, (n+1)-elemanlı yaygın öğe kümesini bulmak için n-elemanlı sık geçen öğe kümesine ihtiyaç duymaktadır.

Şekil 1

Şekil 1

 

Algoritma temelinde iteratif (tekrarlayan) niteliğe sahiptir, yaygın öğe kümlerini bulurken birçok kez veri tabanına bağlanarak tarama işlemini gerçekleştirmektedir. Başlangıçta veri tabanını tarayarak öğenin alışverişlerde kaç kere geçtiği tespit edilir, bu destek sayısına karşılık gelmektedir. Minimum destek değerinden küçük olan öğeler kümelere dahil edilmemektedir. Yaygın öğe kümelerini bulmak için ilk olarak minimum destek kriterini sağlayan 1-elemanlı yaygın öğe kümesi bulunur, 2-elemanlı yaygın öğe kümesini bulmak için 1-elemanlı yaygın öğe kümesi, 3-elemanlı yaygın öğe kümesini bulmak için 2-elemanlı yaygın öğe kümesi kullanılır. Her adımında bir önceki adımda bulunan yaygın öğe kümeleri, yaygın öğe aday kümeleri (candidate itemsets) adı verilen yeni potansiyel yaygın öğe kümelerini üretmek için kullanılır. Aday kümelerin destek değeri, adım içerisinde hesaplanır ve minimum destek ölçütünü sağlayanlar yaygın öğe kümelerine dahil edilir. Yaygın öğeler bir sonraki adım için aday küme olur. Bu işlem algoritma yaygın öğe kümesi bulamayıncaya kadar devam etmektedir.

Apriori Algoritması’nın klasik özet kodu (pseudo code) aşağıdaki gibidir.

AprioriAlg

 

Apriori-gen Fonksiyonu aşağıdaki gibidir;

AprioriGen

 

Algoritmadan da anlaşılabileceği üzere L(k-1)  yaygın öğe kümesini kullanarak k-elemalı  Ck yaygın öğe aday kümesi oluşturulur. Apriori-gen fonksiyonu aday öğe kümelerinin oluştulması noktasında görev almaktadır. Bu fonksiyon ile önce  L(k-1) öğe kümesi kendisi ile birleştirme (join) işlemi uygulanmaktadır. Birleştirme işleminde  L(k-1)  yaygın aday kümesinin her satırında yer alan son öğe haricinde diğer öğelerlerin çapraz olarak benzerliği aranır ve son öğe haricinde diğer öğelerle yakalanan benzerliklerden aday öğe kümeleri oluşturulmaktadır . Oluşturulan aday öğe kümeleri budama (prune) işlemine tabi tutulur ve yaygın öğe aday kümesini geriye döndürmektedir.

Budama işleminde Ck  yaygın öğe aday kümesinden eleman silme işlemi uygulanır, aday öğe kümesindeki bir öğenin alt kümelerinden biri  L(k-1) yaygın öğe Ck kümesinde yer almıyorsa bu öğe  aday öğe kümesinden silinir.

Apriori Algoritması döngü yapısını daha iyi kavrayabilmek için Şekil 2’deki örnek üzerinden yaygın öğe kümesi ve aday öğe kümelerinin nasıl güncellendiği anlatılacaktır.

Şekil 2’deki örnek için minimum destek değeri 2 olarak verilmiştir. “Database D” ismindeki tabloda birlikte alınan ürünleri görebiliriz. İlk aşamada 1-elemanlı aday öğe kümeleri  C1 ismi ile tanımlanarak yazılmıştır.  C1 öğe kümesinden  L1 yaygın öğe kümesi oluşturulurken minimum destek değeri kontrol edilir, minimum destek değerinden küçük olan öğeler kümeden atılır, dolayısı ile {4} elemanı küme dışında bırakılır ve geriye kalan öğeler ile L1 yaygın öğe kümesi oluşturulur. Sonraki adımda 1-elemanlı öğe kümelerinden 2-elemanlı öğe kümeleri oluşturmak üzere çalışma yapılır.  L1 yaygın öğe kümesinin öğelerinin ikili kombinasyonuna benzer şekilde ( L1 U L1 ) yeni C2  ismindeki aday öğe kümesi oluşturulur. Bu aday küme Apriori-gen fonksiyonundaki budama işlemine tabi tutulur ve  C2 kümesinin elemanlarına ait alt kümelerinin L1 kümesinde olup olmadığına bakılır,  L1 içinde yer almayanlar silinir, budanmış olur . C2  den L2  oluşturulurken yine aynı şekilde minimum destek değeri kontrol edilir, Şekil 2.17’deki örnek için {1,2} ve {1,5} kümeleri silinir ve L2 içerisinde yer almamış olur. Döngü sonraki aşamada  L2 öğe kümesinin 3lü kombinasyonlarını bulur ve  C3 isminde aday öğe kümesini oluşturur. {4} elemanı yaygın öğeler kümesinde olmadığından {2,3,4} aday öğeler kümesine dahil edilmez, aynı şekilde {1,2} kümesi aday öğe kümelerine dahil edilmediğinden {1,2,3,5} de 3-elemanlı aday öğe kümesine dahil edilmez. 3-elemanlı kümeye dahil edilebilecek olarak {2,3,5} kümesi vardır, destek sayısı 2 olduğundan ve minimum destek değerinden büyük olduğundan L3 ={2,3,5} olur. Devamında 4 elemanlı aday öğe kümesi bulunamadığından işlem sona erer. Daha fazla elemanlı kümeler için döngü her seferinde öğe sayısını arttırarak devam eder ve bu süreç yeni yaygın öğe kümesi bulamayıncaya kadar devam eder.

Şekil2

Şekil2

 

 

Kaynaklar:

[1]   Agrawal, R., Imielinski, T. ve Swami, A., 1993, Mining Association Rules Between Sets of Items in Large Databases, In Proceedings of the ACM SIGMOD International Conference on Management of Data, June 1 Washington, USA,  207-216.

[2]   Öğüdücü, Ş.G, Veri Madenciliği İlişkilendirme Kuralları, http://www3.itu.edu.tr/ ~sgunduz/courses/verimaden/, [Ziyaret tarihi:16 Nisan 2015].

[3]   Han, J. ve Kamber, M., 2001, Data Mining: Concepts and Techniques, Morgan Kaufmann Publishers, San Francisco, ISBN:0123814790 9780123814791.

[4]   Güngör, E., Yalçın,N.,Yurtay, N., 2013, Apriori Algoritması ile Teknik Seçmeli Ders Seçim Analizi, UZEM 2013 Ulusal Uzaktan Eğitim ve Teknolojileri Sempozyumu, 01-03 Kasım 2013 Konya,Türkiye, 122-127.

[5]   Gülce, A.C., 2010, Veri Madenciliğinde Apriori Algoritması ve Apriori Algoritması’nın Farklı Veri Kümelerinde Uygulanması, Yüksek Lisans Tezi, Trakya Üniversitesi Fen Bilimleri Enstitüsü.

[6]   [26].    Özseven, T. ve Düğenci M., 2011, LOG Analiz: Erişim Kayıt Dosyaları Analiz Yazılımı ve GOP Üniversitesi Uygulaması, Bilişim Teknolojileri Dergisi, 4(2), 55-56.

[7]    Özçakır, F.C, Çamurcu, A.C, 2007, Birliktelik Kurali Yöntemi İçin Bir Veri Madenciliği Yazilimi Tasarimi Ve Uygulaması,  İstanbul Ticaret Üniversitesi Fen Bilimleri Dergisi, 6(12), 21-37.

Pazar Sepeti Analizi ve Birliktelik Kuralları

Pazar Sepeti Analizi

Son yıllardaki en önemli gelişmelerden biri veri hacmindeki artıştır. Bu artış ile veriler daha büyük veri tabanlarında tutulmaya başlandı. Bunun sonucu olarak Veri Tabanlarında Bilgi Keşfi-VTBK (Knowledge Discovery in Databases) isminde arayışlar ortaya çıkmıştır. VTBK farklı aşamalardan oluşmaktadır, veri madenciliği en önemli aşamalardan bir tanesidir. Veri madenciliği büyük miktarda veri içinden gelecekle ilgili tahmin yapmamızı sağlayacak bağıntı ve kuralların bilgisayar programları kullanarak aranmasıdır.

Pazar sepeti; müşterinin bir alışveriş esnasında neler aldığını gösterir. Müşterinin satın alma eğilimlerinin incelenmesi genel olarak Pazar Sepeti Analizi olarak adlandırılır. Pazar Sepeti Analizi veri madenciliğinde çok yaygın olarak kullanılan bir yöntemdir. Müşterilerin hangi ürün veya hizmeti almaya eğilimli olduğu veya aldığı bir ürün ile birlikte başka hangi ürünleri alabileceğinin analiz edilmesi daha fazla satış yapma yollarındandır. Pazar Sepeti Analizi, promosyon analizi çalışmaları, raf dizimi, müşteri alışkanlıkları analizi, mağazanın düzenlenmesi, stok kontrolü, kupon verilmesi, etkili satış yöntemlerinin geliştirilmesi gibi konularda fayda sağlamaktadır.

Pazar Sepeti Analizi’nde Birliktelik Kuralları (Association Rules) tekniği kullanılmaktadır.

Birliktelik Kuralları

Büyük veri kümeleri arasındaki ilişkileri bulan, olayların birlikte gerçekleşme ihtimallerini geçmiş verileri analiz edip ortaya koyarak geleceğe yönelik çalışmaları destekleyen, veri madenciliği yöntemine Birliktelik Kuralları denmektedir. Birliktelik Kuralları; ekonomi, eğitim, e-ticaret, pazarlama, telekomünikasyon gibi birçok sektörde geniş kullanıma sahiptir.

Veri madenciliğindeki teknikler verinin tanımlanmasını sağlayan tanımlayıcı (descriptive) ve sonuçları bilinmeyen verilerin tahmini için kullanılan tahmin edici (predictive) teknikler olarak ikiye ayrılmaktadır. Gerileme (regression), sınıflandırma (classification), sapma (deviation) tahmin edici yöntemlere, kümeleme (clustering) ve Birliktelik Kuralları ise tanımlayıcı tekniklere örnek olarak verilebilir.

Birliktelik kuralının en popüler örneği çocuk bezi (diapers) ve bira (beer) örneğidir. Normalde iki ürün arasında hiç bir ilişki yokmuş gibi görünmektedir. Literatürde bu konu ile ilgili meşhur bir hikaye vardır, Walmart ismindeki süpermarket zincirinin yaptığı analiz şu şekildedir; “Yeni çocuk sahibi olan ebeveynler eğlenmek için vakit bulamayıp cuma günlerini partiye gitmek yerine eve bira alarak evde geçirmek zorunda kalıyorlar. Bu yüzden bebek bezi alan baba çoğunlukla yanında bir de bira alır,” gibi bir çıkarımda bulunmaktadırlar. Bu doğrultuda bebek bezi ve birayı yakın yerlere koyarak satışlarını arttırmayı hedeflemektedirler.

Birliktelik kuralının gerçek hayatta kullanılan bir örneği de internet üzerinden kitap satışı yapan amazon.com‘dur. Müşteriye satın aldığı kitaptan yola çıkarak daha önce bu kitap ile satın alınma olasılığı en yüksek olan kitapları önermektedir. Günümüzde birçok web sitesinde bu yöntem aktif olarak kullanılmaktadır.

Birliktelik kuralının matematiksel modeli Agrawal, Imielinski ve Swami tarafından 1993 yılında ortaya çıkarılmıştır.

Birliktelik Kuralları’nda Kullanılan Temel Kavramlar;

Öğeler Kümesi (itemset): Bir veya daha çok öğeden oluşan kümedir.

Destek sayısı (support count): Öğeler kümesinin veri kümesinde görülme sıklığıdır.

Destek(support): Veride bağıntının ne kadar sık olduğunu tanımlar, öğeler kümesinin içinde bulunduğu birlikteliklerin toplam birliktelik sayısına oranıdır. Destek(A=>B) şeklinde gösterilmektedir.

Güven (confidence) : A malını almış bir kişinin B malını alma olasılığını vermektedir. Öğeler arasındaki birlikteliklerin doğruluğunu ifade etmektedir. Güven(A=>B) şeklinde gösterilmektedir.

Yaygın öğeler (frequent itemsest): Destek değeri minimum destek değerinden büyük ya da eşit olan öğeler kümesidir.

Destek (A)=

Destek (A=>B)=

Güven (A=>B)= Olasılık(B|A)  =

Örnek olarak farklı zamanlarda yapılmış olan aşağıdaki gibi bir Pazar sepeti listesi olsun;

Tablo 1: Farklı zamanlara oluşturulmuş Pazar sepetleri.

A1 Süt, Ekmek
A2 Ekmek, Yumurta
A3 Süt, Peynir
A4 Yumurta, Ekmek, Peynir, Süt
A5 Peynir, Yumurta, Süt

 

Yaygın Öğeler;

1-Elemanlı Öğeler Kümesi

{Süt}à  Destek Sayısı(Süt)=4; Tablo 1’deki örneğe göre 5 Pazar sepetinin 4’ünde {Süt} ürünü satın alınmış, bu yüzden {Süt} ürününün destek sayısı 4 dür.

{Ekmek}-> Destek Sayısı(Ekmek)=3

{Yumurta}-> Destek Sayısı(Yumurta)=3

{Peynir}-> Destek Sayısı(Peynir)=3

2-Elemanlı Öğeler Kümesi

{Süt, Ekmek}-> Destek Sayısı(Süt, Ekmek)=2

{Ekmek, Yumurta}-> Destek Sayısı(Ekmek, Yumurta)=2

{Süt, Peynir}-> Destek Sayısı(Süt, Peynir)=3

{Yumurta, Peynir}-> Destek Sayısı(Yumurta, Peynir)=2

{Yumurta, Süt}-> Destek Sayısı(Yumurta, Süt)=2

3-Elemanlı Kümeler

{Yumurta, Ekmek, Peynir}-> Destek Sayısı(Yumurta, Ekmek, Peynir)=1

{Yumurta, Ekmek, Süt}-> Destek Sayısı(Yumurta, Ekmek, Süt)=1

{Ekmek, Peynir, Süt}-> Destek Sayısı(Ekmek, Peynir, Süt)=1

{Peynir, Yumurta, Süt}-> Destek Sayısı(Peynir, Yumurta, Süt)=2

4-Elemanlı Kümeler

{Yumurta, Ekmek, Peynir, Süt}-> Destek Sayısı(Yumurta, Ekmek, Peynir, Süt)=1

Hesaplamalar yapılırken minimum destek sayısı filtresi verilebilir. Örneğin minimum destek sayısı filtresi 2 ise hesaplamalara destek sayısı 1 olanlar dahil edilmez. Destek ve Güven sayılarının nasıl hesaplandığı aşağıdaki örnek ile anlaşılabilir:

Destek({Yumurta}=>{Peynir})= Destek Sayısı(Yumurta,Peynir)/Toplam Alışveriş Sayısı=2/5

Güven ({Peynir, Süt}=>{Yumurta})=Destek Sayısı(Peynir,Yumurta,Süt)/Destek Sayısı(Peynir,Süt)=2/3

Bütün yaygın öğe kümeleri oluşturulduktan sonra minimum destek sayısı ve minimum güven değerlerine eşit ve büyük olan kümeler yaygın öğeler kümesine dahil edilir ve birliktelik kuralları oluşturulur. Destek ve güven değerleri 0 ile 1 arasında değişmektedir. 1’e ne kadar yakınlarsa aralarındaki ilişki o kadar güçlüdür denilebilir. Güven değeri %100 ise kural “kesin” dir. Bu yüzden minimum güven kriterinin büyük verilmesi doğru sonucu vermesi açısından önemlidir. İki öğenin birlikteliğinin kesine yakın olabilmesi için hem destek hem de güven kriterinin yüksek olması gerekmektedir. Ayrıca minimum destek değeri küçük belirlenirse yöntem karmaşıklaşır ve çok sayıda yaygın öğe kümesi elde edilir.

Birliktelik kuralları için kullanılan çok farklı algoritmalar bulunmaktadır. Bunlardan bazıları aşağıdaki gibidir.

  • AIS: Agrawal tarafından 1993 yılında geliştirilmiştir,
  • Apriori: Agrawal ve Srikant tarafından 1994 yılında geliştirilmiştir,
  • SETM: Houtsma ve Swami tarafından 1995 yılında geliştirilmiştir,
  • Partition: Savasere tarafından 1995 yılında geliştirilmiştir,
  • FP-Growth: Han P.,Pei J.,Yin Y. Tarafından 2000 yılında geliştirilmiştir,
  • RARM (Rapid Association Rule Mining): Das tarafından 2001 yılında geliştirilmiştir,
  • CHARM: Zaki ve Hsiao tarafından 2002 yılında geliştirilmiştir.

Bu algoritmalardan ilki AIS, en bilineni Apriori Algoritması’dır.

Birliktelik kuralı madenciliği (Association Rule Mining) bütün yaygın öğe kümelerinin bulunması ve yaygın öğe kümelerinden Birliktelik Kuralları’nın üretilmesi olarak iki adımdan oluşmaktadır. Kullanılacak algoritmanın hızı birinci adımı etkilemektedir, ikinci adım genel olarak bütün algoritmalarda aynıdır.

Bir sonraki makalede bu algoritmalardan Apriori ve Fp-Growth incelenip örnek uygulamalar ile desteklenip karşılaştırma çalışması yapılacaktır.

Kaynaklar

[1]   Alpaydın, E., 2000, Zeki Veri Madenciliği: Ham Veriden Altın Veriye Ulaşma Yöntemleri, Bilişim 2000 Eğitim Semineri Bildiriler Kitabı, Bilişim 2000 Eğitim Semineri.

[2]   [15]. Ay, D. ve Çil, İ., 2008, Migros Türk A.Ş.’de Birliktelik Kuralları’nın Yerleşim Düzeni Planlamada Kullanılması, Endüstri Mühendisliği Dergisi, 21(2), 15-20.

[3]   Chen, Y.L., Chen, J.M. ve Tung, C.W., 2006, A Data Mining Approach For Retail Knowledge Discovery With Consideration of the Effect of Shelf-Space Adjacency on Sales, Decisions Support Systems, 42(3), 1503-1520.

[4]   [17]. Frawley, W. J., Piatetsky-ShApiro, G. ve Matheus, C. J., 1991, Knowledge Discovery Databases: An Overview, in Knowledge Discovery in Databases, AI Magazine, 13(3), 57-69.

[5]   ]. Güngör, E., Yalçın,N.,Yurtay, N., 2013, Apriori Algoritması ile Teknik Seçmeli Ders Seçim Analizi, UZEM 2013 Ulusal Uzaktan Eğitim ve Teknolojileri Sempozyumu, 01-03 Kasım 2013 Konya,Türkiye, 122-127.

[6]   Küçüksille, E., 2009, Veri Madenciliği Süreci Kullanılarak Portföy Performansının Değerlendirilmesi ve IMKB Hisse Senetleri Piyasasında Bir Uygulama, Doktora Tezi, Süleyman Demirel Üniversitesi Sosyal Bilimler Enstitüsü.

[7]   Data Mining Introduction Part 7: Microsoft Association, http://www.Sqlservercentral.com/articles/Microsoft+Association+algorithm/101807/, [Ziyaret tarihi:16 Nisan 2015].

[8]   Agrawal, R., Imielinski, T. ve Swami, A., 1993, Mining Association Rules Between Sets of Items in Large Databases, In Proceedings of the ACM SIGMOD International Conference on Management of Data, June 1 Washington, USA,  207-216.

[9]   [22]. Özçakır, F.C, Çamurcu, A.C, 2007, Birliktelik Kurali Yöntemi İçin Bir Veri Madenciliği Yazilimi Tasarimi Ve Uygulaması,  İstanbul Ticaret Üniversitesi Fen Bilimleri Dergisi, 6(12), 21-37.

[10]  Öğüdücü, Ş.G, Veri Madenciliği İlişkilendirme Kuralları, http://www3.itu.edu.tr/ ~sgunduz/courses/verimaden/, [Ziyaret tarihi:16 Nisan 2015].

Günlük Veri Tabanı ve Veri Ambarı Karşılaştırması

Bu yazıda operasyonel (günlük) veri tabanından çekilen rapor ile Veri Ambarı’ndan çekilen rapor arasındaki performans farkını örnek senaryolar kullanarak ortaya çıkarmaya çalışacağız. Bu işlem için benzer sonuçlar üreten 2 rapor örneği kullanacağız. İki rapordan ilkinde veri kaynağı olarak günlük veri tabanı kullanılırken, ikinci rapor örneğinde veri kaynağı olarak Veri Ambarı kullanıyoruz.

1.Rapor: Bu uygulama örneğinde Microsoft’un ücretsiz kullanıma sunduğu AdventureWorks veri tabanı kullanılmıştır. Rapor senaryosunda AdventureWorks şirketinin satışlarına ay, yıl ve çalışan filtresi verilmiştir. Örnek senaryo için AdventureWorks2012 veri tabanını veri kaynağı olarak ekliyoruz. Bu aşamada daha önce oluşturulup paylaşılmış veri tabanları da kullanılabilir. Aşağıdaki şekillerden yeni paylaşımlı veri kaynağının nasıl eklenebileceği görülebilir, sunucuya bağlanarak kullanılacak veri tabanı bilgileri seçilir.

rapor1

rapor2

 

Devamında eklenen veri kaynağından oluşturulmuş veri kümelerine ihtiyaç duyulur. Veri kümeleri oluşturulurken çalışan, ay, yıl, satılan ürünlerin miktarı, kategorisi ile ilişkili olan tablolar düşünülmelidir. Bu senaryo örneğinde 2 adet veri kümesi kullanılmıştır.

Rapor kullanıcısından filtre amaçlı, çalışan seçilmesi isteneceğinden çalışan adı ve ID değerini içeren bir koleksiyona ihtiyaç duyulmaktadır. Satış yapan çalışan bilgilerini içeren veri kümesini oluşturmak üzere aşağıdaki Sql sorgusu kullanılmıştır;

sql1Rapor filtrelerini oluşturmak amacı ile parametre eklememiz gerekmektedir. Bu senaryoda yıl, ay ve çalışan filtreleri olduğundan her biri için parametre eklenmesi gerekmektedir.

İkinci veri kümesi için ürünün kategorisi ve yapılan satışlar ile ilgili tablolardan bilgiler alınmalıdır. EmpSalesMonth ismindeki veri kümesini oluşturan Sql sorgusu aşağıdaki gibidir;

sql2

Sql sorgusundaki where clause’da yer alan @ReportYear, @ReportMonth, @EmployeeID parametreleri kullanıcı arayüzünden aşağıdaki gibi seçilen değerler ile dolar.

rapor3

Veri kümesinin eklendiği ekran görüntsü aşağıdaki gibidir. Bu ekranda kullanılacak veri kaynağı seçilir ve Sql sorgusu query bölümüne eklenir. Veri kümesinin Sql sorgusu query designer, text form veya stored procedure olarak eklenebilir.

rapor4

 

Parametreler seçildiğinde David Campbell ismindeki çalışanın Kasım 2005, 2006, 2007 yıllarında farklı kategorilerde yapmış olduğu satış miktarlarını ve oranlarını gösteren sonuçlar tablo ve grafik olarak aşağıdaki şekilde verilmiştir. Çıkan sonuçlarda çalışanın farklı yıllarda yaptığı Aksesuar (Accessories), Bisiklet (Bikes), Giyim (Clothing), Parça (Components) kategorileri için toplam satış miktarları grafiksel olarak ve aynı zamanda rakamsal olarak verilmiştir.

 

rapor5
2.Rapor:
İkinci rapor örneği için benzer sonuçlar üreten raporu oluşturmak üzere Veri Ambarı veri kaynağı olarak eklenir. Bu örnek için AdventureWorksDW2012 ismindeki veri kaynağı eklenir.

Çalışan bilgilerini veren veri kümesi aşağıdaki Sql kodu ile oluşturulmuştur;

Sql3

 

 

 

 

İlk rapor örneği ile karşılaştırdığımızda çalışan bilgilerini almak için tek tablo kullanmıştır.

EmpSalesMonthDW ismindeki ikinci veri kümesi için aşağıdaki Sql sorgusu kullanılmıştır;

sql4

Veri Ambarı’ndan oluşturulan veri kümesinde operasyonel veri tabanından oluşturulan veri kümesinekıyasla daha az tablo kullanılmıştır. Satış ile ilgli işlemler için FactResellerSalestablosu kullanılmıştır. Hareket (fact) tablosu ürün, kategori, tarih ve çalışan gibi bilgilere ulaşmak üzere sabit (dim) tablolarına bağlanmıştır.

İki Raporun Karşılaştırılması

iki senaryo örneği karşılaştırılırken kullanılan ana veri kümeleri EmpSalesMonth ve EmpSalesMonthDW’u oluşturulan scriptler Sql Server Management Studio’da çalıştırılmıştır, bu sorguların performansını ölçmek için Microsoft Sql Server eklentisi olan Sql Statistics (Sql istatistik) ismindeki araç kullanılmıştır. Sql Statistics özelliği aktive edildikten sonra çalıştırılan sorgularda sorgu sonucu ile birlikte istatistiki veriler de elde edilir.

Sql Statistics ismindeki araç kullanılarak sorgular 5’er kere çalıştırılmıştır, kullanılan araç sayesinde harcanan süreler kayıt altına alınmıştır.Aşağıdaki Tablo 1 ve Tablo 2′de  iki rapor için çıkan sonuçlar görülebilir. Sorgular her çalıştırıldığında farklı zaman harcanmıştır, ancak ortalama zamanlar düşünülerek karşılaştırma yapılacak olursak; Veri Ambarı’ndan çekilen sorgu operasyonel veri tabanından çekilen sorgunun ortalama toplam işletim (average total execution time) süresi 3 kattan fazla daha hızlı yanıt vermiştir. Sunucudan gelen cevap süresi de Veri Ambarı’ndan 4 katdan fazla daha hızlıdır. İki yöntem arasında açık bir performans farkı bulunmaktadır.

Tablo 1: EmpSalesMonth oluşturan sorgunun milisaniye cinsinden çıkan sonuçları.

Channels 5.Deneme 4.Deneme 3.Deneme 2.Deneme 1.Deneme Ortalama
Client processing time 355 219 594 752 156 415.2
Wait time on serverreplis 1752 1602 1720 6371 1437 2576.4
Total execution time 2107 1821 2314 7123 1593 2991.6

 

Tablo 2: EmpSalesMonthDW oluşturan sorgunun milisaniye cinsinden çıkan sonuçları.

Channels 5.Deneme 4.Deneme 3.Deneme 2.Deneme 1.Deneme Ortalama
Client processing time 15 125 47 47 94 65.6
Wait time on server replies 703 671 734 601 640 669.8
Total execution time 718 796 781 648 734 735.4

 

Kaynaklar:

[1]   .AdventureWorks Sample Reports 2008 R2, http://msftdbprodsamples.codeplex. com / releases/view/89245, [Ziyaret tarihi:10 Mayıs 2015].

[2]   AdventureWorks website sample, https://msfteeprodsamples.codeplex.com/ wikipage?title=SS2008!Readme_Storefront, [Ziyaret tarihi:25 Nisan 2015].