-

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.