Bir işi yarım bırakmayı sevmiyorum…
İş yerinde, Mart-Nisan ayları arasında İç Piyasa Fon Kullandırım projesine dahil oldum. Projedeki amacım, değişkenlerin belge kontrol süresi üzerindeki etkisini ölçmekti; yani hangi değişken, belge kontrol süresi üzerinde ne kadar etkiliydi, anlamak istiyorduk. Tabi tasarım model aslında belliydi, benden istenen ise sadece veriler ile bunu desteklemekti. Bunun için de gerekli olan, veri seti ve genel iş akışıydı. (Genel iş akışının altını çiziyorum çünkü doğru bir model kurduysanız işin alt detayını zaten çıkan çıktılardan sonra araştırmanız gerekir 😉) Onun için çok fazla gerekli olmayan iş bilgisiyle de kafamı karıştırmak istemedim. Gel zaman, git zaman bunu çeşitli departmanlara danışarak regresyon ile yapabileceğimize karar verdik. Ben de oturdum, çoklu değişkenli regresyon yöntemiyle SPSS de bunu ispatlamak için çalışmalara başladım. Akşamları her gün 1-2 saatimi youtube’da SPSS videolarına ve ders kaynaklarına ayırmaya başladım. 2 ay boyunca veri setimize ne tür taklalar attırırsak attıralım R square’de %10 geçemedik 😀 Tabi 2 ay emek verip, ulaştığımız sonuç: Regresyon ile bu verilerin analiz edilemeyeceği gerçeğiydi. Evet, tüm yenilginin faturasını kendime kestim çünkü numeric değişkenlerden oluşmayan data seti ile regresyon analizinin sonuç üretmesi zaten beklenemezdi (Lojistik regresyon hariç). Bundan sonrası için alternatif yöntemler pek de düşünülmeden, başarısızlığın nedenine veri eksikliği yazılıp, projenin analiz kısmı kapatılmıştı. Lakin benim tarafımda henüz kapanmamıştı 😊 Eğer elinizde string/flag/kategorik gibi değişkenleriniz ağırlıklı ise R square’in %10 da kalması zaten çok normaldi. Hatta bu bile bir başarıydı 😉 Tabii bunu temmuz ayında Y. Lisans’ın Big Data dersinde anladım. Bu tarz dataların classification algoritmalar ile çözülmesi gerekiyordu.
Knime Giriş
Okunuşu Naym’dır. Alman lisanslı olduğundan Nayn (Nein) diye espri yapmaya çalışanlar olabiliyor, siz boşverin onları, tebessüm edin, geçin. 😊
Knime programı, veri madenciliği programları arasında çok popüler olmasa da geleceği oldukça parlak bence. Programın kullanımının kolay ve ücretsiz olması, onu öne çıkaran en önemli özelliklerden birisi bence…
Örnek üzerinden modelimizi kurar isek:
Modelimizdeki ilk Node’mız XLS File Reader yardımıyla verileri sisteme okutmak. Zaten gerekli seçimleri yapıp, execute ettiğimizde, sistem sizin gösterdiğiniz tüm verileri alacaktır. Burada karşılaşılan genel problem, satır başlıklarını sisteme alırken sorun yaşanabilmektedir. Configure kısmında “Tables contains column names in row Number 1” seçeneğinin işaretli olduğundan emin olmanız gerekir.
Aşağıdaki şekilde Column filter node kullanarak 46 değişkenden, belirlediğimiz 30 değişkene düşürdük. Zaten data type baktığınızda da dataların büyük bir bölümünün string olduğunu görürüz.
Kullanacağımız Random Forest algoritmasının daha iyi sonuç vermesi için, Numeric Binner ile medyanın altında kalanlar için İyi, üstünde kalanlar için de Kötü olarak kategorize edip toplamda 2 tür class oluşturduk.
Verileri, partitioning node yardımıyla %65 train için %35 test için ayırdık. Ama sonrası için veri setindeki dengesiz dağılımları önlemek için smote özelliğini kullanma gereği duyduk. Aslında açılımına bakarak da ne yapmak istediğimizi çok rahat anlayabilirsiniz. “Synthetic Minority Oversampling Technique” ile dengesiz dağılımın önüne geçmek için sentetik datalar ürettik. Bu şekilde az olan petrol ve benzeri azınlık gruplar dengelenip, model için daha doğru öğrenme sağladık. Bazı algoritmalar, ZeroR değerine göre performans odaklı davranıp, hiç öğrenme yapmadan da %95’lere varan yüksek sonuçlar üretebiliyor. Dolayısıyla bu gibi durumların önüne geçmek için Knime’ın Smote özelliğini kullandık.
Modelimizde kullandığımız Random Forest algoritması ile %76 bir accuracy elde ettik. Aslında veri setimizde gerekli dönüşüm/manipülasyon yapsaydık %80’lere çıkabileceğimize de eminim.
Confusion matrix bakarsak; Satırlar: Belge kontrol süresi / Sütünler: Prediction edilen sonuçlardır. Aşağıdaki matrix okuyacak olursak; 1545 “İyi” iken biz de “İyi” olarak tahmin etmişiz lakin; 498 “İyi” iken biz “Kötü” olarak tahmin etmişiz.
ROC eğrisinin 0,5’den büyük olması beklenir, yani eğrinin y=x doğrusunun üstünde olması istenir ki bizim kurduğumuz modelde de zaten 0,81 değeri ile gayet başarılıdır.
Peki nedir Random Forest algoritması?
Bu algoritmayı, decision tree algoritmasının altında gruplandırabiliriz. Karar ağacı öğrenmesinde, bir ağaç yapısı oluşturularak ağacın yaprakları seviyesinde sınıf etiketleri ve bu yapraklara giden ve başlangıçtan çıkan kollar ile özellikler üzerinde tek bir ağaç yapısı kurulur. Fakat Random forest algoritmasında ise birden fazla ağaç ilişkisi kurulur. Algoritmanın hesaplanmasında, information gain ve entropy değerleri üzerinden nitelikler oluşturulur. Yani bir değişkenin oluşturacağı bağıntı sayısı ne kadar fazla ise information gain o kadar yüksek, entropy(belirsizlik) değeri de o kadar düşüktür. Information gain yüksek olan değişkenden dallanma başlar. Buna göre de karar ağacı oluşturulur. Fakat ben, Knime da simple tree yapısına bakmak yerine split değerine bakıyorum çünkü bir değişken ne kadar çok split edilmiş ise information gain de o kadar yüksektir yorumunu yapıyorum.
Sonuç olarak: Aşağıdaki şekilde de gösterildiği üzere: %76 accuracy ile “Mal Cinsi Üst Kategorisi” 29 split değerine göre “Belge kontrol süresini” en çok etkileyen değişkenimizdir. En başta da belirttiğim üzere, Mal Cinsinin, belge kontrol süresini en çok etkileyen değişken olmasını bekliyorduk, öyle de oldu 🙂
(Özetle: Yarım kalan proje Ağustos ayında tamamlanmıştır 😊)
Kendime Not:
Bazen, sorunların üstesinden gelmek için zamana ihtiyaç duyarsınız. Ta ki yeni şeyler görüp, öğrenip, hatalarınızdan yeni dersler çıkarana kadar…
Bilirsiniz ki ancak o zaman kaldığınız yerden devam edebilirsiniz ve ileriye baktığınızda hayatınızda aşamayacağınız hiçbir problemin olmadığını görürsünüz.
Siz yeter ki umudunuzu kaybetmeyin 😉