Makale Özeti

Bu makalemde sizlerle beraber Data Mining(Veri Madenciliği) algoritmalarından Naive Bayes algoritmasını inceleyeceğiz. Algoritmanın çalışma şeklini çözdükten sonra ise bu algoritmayı çalıştırıp bize sonuçları üretebilecek bir bileşen yazacağız.

Makale

        Merhabalar,

        Bu makalemde sizlerle beraber Data Mining(Veri Madenciliği) algoritmalarından Naive Bayes algoritmasını inceleyeceğiz. Algoritmanın çalışma şeklini çözdükten sonra ise bu algoritmayı çalıştırıp bize sonuçları üretebilecek bir bileşen yazacağız.
       
        Data Mining elde bulunan verilerin işlenerek bilgiye ulaşılması işlemidir. Naıve Bayes ise bu işlemde kullanılabilecek sınıflandırma algoritmalarının en basitlerinden bir tanesidir. Açıklamak gerekirse naive bayes algoritmasında her kriterin sonuca olan etkilerinin olasılık olarak hesaplanması temeline dayanmaktadır. Data mining işlemini en çok verilen örneklerden biri ile açıklayacak olursak elimizde tenis maçının oynanıp oynanmamasına dair bir bilgi olduğunu düşünelim. Ancak bu bilgiye göre tenis maçının oynanması veya oynanmaması durumu kaydedilirken o anki hava durumu, sıcaklık, nem ve rüzgar durumu bilgileri de alınmış olsun. Biz bu bilgileri değerlendirdiğimizde varsayılan tahmin yöntemleri ile hava bugün rüzgarlı tenis maçı bugün oynanmaz şeklinde kararları farkında olmasak'da veririz. Ancak Data Mining bu kararların tüm kriterlerin etkisi ile verildiği bir yaklaşımdır. Dolayısıyla biz ileride öğrettiğimiz sisteme bugün hava güneşli, sıcak, nemli ve rüzgar yok şeklinde bir bilgiyi verdiğimizde sistem eğitildiği daha önce gerçekleşmiş istatistiklerden faydalanarak tenis maçının oynanma ve oynanmama ihtimalini hesaplar ve bize tahminini bildirir.

        Bu tür tahminler gsm, bankacılık, sigortacılık, market gibi birçok alanda kullanılmaktadır. Bilhassa gelecek yıllara ait yönetimsel kararların alınmasında, sahtekarlık denetlenmesinde, birlikte gerçekleşen koşulların ortaya çıkarılmasında kullanılmaktadır. Belirttiğimiz sektörlere örnekler verecek olursak GSM operatörlerinde sahtekarlık denetlenmesinde, Bankacılık sektöründe karakteristiğiniz dışında yüklü bir kredi kartı harcaması, havale yaptığınızda sahtekarlık olabileceğine dair, Sigortacılıkta sigorta edilen kişi araç veya mülkün belirli kriterlere göre o risk'e uğrama olasığının tespit edilmesinde, Marketlerde hangi ürünlerin birlikte satıldığının ortaya çıkarılmasında kullanılmaktadır. Bu belirttiklerimizin yanısıra sağlık sektöründe bir kişinin tahlil sonuçlarının değerlendirilerek bir hastalığa yakalanmış olup olmama olasılığının değerlendirilmesindede sıkça kullanılmaktadır.

        Data Mining'in kullanım alanları sadece belirttiğimiz örneklerle sınırlandırılamaz. Kişisel görüşümü belirtmem gerekirse bugüne kadar yazdığımız uygulamalarda firmaların verilerini irili ufaklı veritabanlarında topladık. Artık bu veriler işlenebilecek ve bu verilerden bilgi denen esas değerli kavram çıkarılabilecek düzeye gelmiştir. Data Mining için elinizdeki verinin çokluğundan ziyade verinin kaliteli olması önemlidir. Kaliteli veriler kirli bilgiler içermeyen, eksik veriler içermeyen, gruplanabilir ve ölçeklenebilir veriler içeren veritabanlarından elde edilebilir veya data mining adımlarından biri olan pre-processing aşamasında bu bilgiler silinerek veya çeşitli yöntemler uygulanarak kaliteli hale getirilirler.Bu adımda veri aktarımları, kirli verinin temizlenmesi, boş alanların sonucu etkilemeyecek şekilde doldurulması veya boş alan içceren verilerin silinmesi gibi işlemler yapılmaktadır.

        Bir sonraki adım ise çeşitli algoritmaların uygulanması ve bu algoritmalardan çıkan verilerin test edilmesi sonucu en sağlıklı algoritmaya karar verilmesi ve bu algoritmanın karar verme mekanizması olarak uygulamalara implement edilmesi hedeflenmektedir. Peki bilgisayar dediğimiz yapı bu işlemleri nasıl yapıyor ve nasıl karar verebilecek zeka yapısına ulaşabiliyor. Machine Learning denilen bu sistem esasında belirli algoritmaların (Tree algoritmaları, Logistic algoritmaları, Bayes algoritmaları, Neural Network algoritmaları) elimizde bulunan veriye uygulanması sonucu gerçekleşir. Elimizde bulunan verinin yapısına ve içeriğine göre algoritmaların farklı problemlerde farklı başarı oranları göstermesi doğaldır. Dolayısıyla en iyi algoritma budur diye genel birşey yoktur problemin tipine göre değişebilmektedir. Algoritma ilk önce belirli bir training(eğitim) data'sı ile eğitilir. Daha sonra eğitilen bu algoritma(Genellikle test datasının yarısı hacminde bir data ile) testing(test) datası ile test edilir. Buradaki amaç daha önceden eğitilmiş algoritmanın test datasında bulunan kriterler ile test datasında bulunan sonuçları doğru tahmin edip edememesinin incelenmesidir. Buda algoritmanın başarısı anlamına gelmektedir.

        Bu kısımda algoritma tarafından üretilen değerlerin TruePositive, TrueNegative, FalseNegative, FalsePositive sayılarına göre değerlendirilmesi gerekmektedir.

        TP: Olumlu sonucu olan ve olumlu öngörülmüş örnek sayısıdır.
        FN: Olumlu sonucu olan ve olumsuz öngörülmüş örnek sayısıdır.
        FP : Olumsuz sonucu olan ve olumlu öngörülmüş örnek sayısıdır.
        FP : Olumsuz sonucu olan ve olumsuz öngörülmüş örnek sayısıdır.

        Bu oranlar ile ilgili örnek bir tablo aşağıdadır.

 

Öngörülen

Doğru Sonuç 1 0
1 TP FN
0 FP TN

        Şimdi ise doğruluk ve hata oranı hesaplamalarına bakalım.

        Doğruluk = (TP+TN)/(TP+FN+FP+TN)
        Hata Oranı = (FN + FP)/(TP+FN+FP+TN)

        Şimdi bu işlemleri yapabilmek için Naive Bayes algoritmasının nasıl çalıştığını inceleyelim.
        Elimizde bulunan örnek veri kümesinin aşağıdaki gibi olduğunu düşünelim.
       

        Elimizde bulunan bu verilere göre 15. gün oluşabilecek bir olayın sonucunu tahmin etmeye çalışalım. Bu 15. gün'de bulunan veri Outlook(Sunny), Temperature(Cool), Humidity(High), Wind(Strong) şeklinde olsun ve tenis maçının oynanıp oynanmayacağını tahmin edelim. Naive Bayes algoritmasının formülü aşağıdaki gibidir.

       

        Söz ile anlatmak gerekirse bir sonucun çıkma olasılığı o sonuca etkiyen tüm faktörlerin o sonucu sağlama olasılıklarının çarpımıdır. Şimdi yukarıdaki örnek için bu hesabı yapacak olursak.

        PlayTennis sonucunun yes çıkması olasılığı sonuçlardan 9 tanesi yes olduğundan 9/14'dür. Bu olasılık için bundan sonraki tüm hesaplarımız bu 9 kayıt üzerinden yapılacaktır.

       

        Outlook Sunny iken PlayTennis'in yes çıkma olasılığı : 2/9
        Temperature Cool iken PlayTennis'in yes çıkma olasılığı : 3/9
        Humidity High iken PlayTennis'in yes çıkma olasılığı : 3/9
        Wind Strong iken PlayTennis'in yes çıkma olasılığı : 3/9

        Dolayısıya sonucun Yes çıkma olasılığı P(y)=9/14 x 2/9 x 3/9 x 3/9 x 3/9=0,0053

        Şimdi ise sonucun No çıkma olasılığını inceleyelim. PlayTennis sonucunun no çıkması olasılığı sonuçlardan 5 tanesi no olduğundan 5/14'dür. Bu olasılık için bundan sonraki tüm hesaplarımız bu 5 kayıt üzerinden yapılacaktır.

               

        Outlook Sunny iken PlayTennis'in no çıkma olasılığı : 3/5
        Temperature Cool iken PlayTennis'in no çıkma olasılığı : 1/5
        Humidity High iken PlayTennis'in no çıkma olasılığı : 4/5
        Wind Strong iken PlayTennis'in no çıkma olasılığı : 3/5    

        Dolayısıya sonucun No çıkma olasılığı P(n)=5/14 x 3/5 x 1/5 x 4/5 x 3/5=0,0205

        No çıkma olasılığı yes çıkma olasılığından büyük olduğundan dolayı (P(n)>P(y)) algoritmanın öğrendiği verilerden tahmini tenis maçının oynanmayacağı yönündedir.


Makalemin ikinci kısmında ise bu algoritmanın C# kullanılarak nasıl geliştirilebileceğini inceleyeceğiz.

         oztamer@hotmail.com
         tamer.oz@yazgelistir.com
         oztamer@hotmail.com