scieee AI-readable full text Open interactive document viewer

Uygulamalı Veri Madenciliği Algoritmaları İkinci Bölüm "Veri Hazırlama ve Ön İşleme"

Güler, Ferdi; Topsir, Aysel

Abstract

This chapter emphasizes the importance of data preparation and preprocessing in data mining, addressing issues such as missing values, outliers, and noise. It covers techniques including data cleaning, transformation (encoding, normalization, standardization), feature engineering, dimensionality reduction, and data augmentation (e.g., SMOTE), supported with practical Python and R implementations on the German Credit Risk dataset.

Full text

11 İKİNCİ BÖLÜM VERİ HAZIRLAMA VE ÖN İŞLEME Ferdi GÜLER 1 Aysel TOPŞİR 2 1. GİRİŞ: VERİ HAZIRLAMANIN ÖNEMİ Veri madenciliğinin en önemli adımlarından biri veriyi hazırlama sürecidir. Veride yer alan tutarsızlıklar ve hataların düzeltilmesiyle veri temizliğine başlanmaktadır. Ardından farklı kaynaklardan gelen veriler bir araya getirilerek tutarlı ve bütünleşik bir veri kümesi oluşturulması hedeflenmektedir. Daha sonra sadece analizle ilgili verilerin seçimiyle süreç devam etmektedir. Bu süreçte algoritmaların doğru çalışmasını sağlamak için verilerin normalize edilmesi ve uygun formatlara dönüştürülmesi amaçlanmaktadır (Jiawei & Micheline, 2006). Ahady ve diğerleri (2023) çalışmalarında veri hazırlık aşamasında yapılan erken kararların, modelin son performansıyla etkileşim halinde olduğu ve bu kararların etkilerinin genellikle göz ardı edildiğine vurgu yapmışlardır. Sonuç olarak, modellerin daha doğru tahminler yapması ve daha anlamlı sonuçlar elde edebilmesi için düzgün bir veri hazırlama süreci oldukça önemlidir (Sami vd., 2021). Veri madenciliği Şekil 1’de görüldüğü üzere çok yönlü ve disiplinler arası bir yapıya sahip olduğundan günümüzde çok önemli bir alan haline gelmiştir (Jiawei VE Micheline, 2006). 1 Yüksek Lisans Öğrencisi, Giresun Üniversitesi, İstatistik Bölümü, [email protected], 0009-0008-0425-8101 2 Doktora Öğrencisi, Yıldız Teknik Üniversitesi, Endüstri Mühendisliği Bölümü, [email protected]r, 0000-0002-1494-6281 12 Şekil 1: Veri Madenciliği: Disiplinler Arası Etkileşim Kaynak: Jiawei & Micheline, 2006. 2. TEORİK TEMELLER Veri madenciliği süreçlerinde kullanılan verinin yapısı ve türü, uygulanan yöntemlerin ve elde edilen sonuçların doğruluğunu doğrudan etkiler. Bu nedenle veriler genellikle nümerik (sayısal) ve kategorik değişkenler olarak sınıflandırılmaktadır (Zaki vd., 2020). a) Nümerik (Sayısal) Değişkenler: • Sürekli Değişken: Gerçek sayılar veya tam sayılar gibi sürekli değerleri ifade etmektedir (Sıcaklık, Uzunluk…). • Ayrık Değişken: Sonlu veya sayılabilir sonsuz değerleri içermektedir (Öğrenci sayısı, Hastane randevu sayısı…). • Binary (İkili) Değişken: 0 ve 1 olmak üzere yalnızca iki değerden oluşmaktadır (Cinsiyet, Doğru/Yanlış…). b) Kategorik Değişkenler: • Nominal Değişken: Değerler sırasızdır ve sadece eşitlik karşılaştırmaları anlamlı olan özellikleri ifade etmektedir (Renkler, Kan Grupları, …). • Ordinal Değişken: Değerler sıralı olduğu ancak değerler arasındaki farkın ölçülemez olduğu özelliklerdir (Eğitim seviyesi, Sosyal statü, …). 13 Qiu ve Liu, (2023) çalışmalarında hem nümerik hem de kategorik verilerin analitik süreçlerde eşit derecede önemli olduğunu vurgulanmaktadır. Ayrıca bu verilerin doğru bir şekilde dönüştürülmesinin özellikle tablo formatındaki veri setleriyle çalışan makine öğrenimi algoritmalarında başarı oranını artırdığına dikkat çekilmektedir. Veri setlerinin analitik süreçlerde kullanılabilir hale getirilmesi yalnızca verilerin doğru dönüştürülmesiyle sınırlı kalmamakta, aynı zamanda eksik veriler (missing data) ve uç değerler (outlier) ve gürültü (noise) gibi kalite problemlerinin de etkin bir şekilde ele alınmasını gerektirmektedir. Bunlar veri setinin bütünlüğünü ve model performansını doğrudan etkileyen temel unsurlar olarak karşımıza çıkmaktadır. Eksik veriler (missing data), genellikle gözlemsel veya deneysel çalışmalar sırasında bilgi kaybı, katılımcıların çalışmadan ayrılması, yanıt eksiklikleri gibi nedenlerle ortaya çıkmaktadır. Örneklem büyüklüğü azalması ve Yanlılık/Güvenirlilik problemleri eksik verilerin neden olduğu sorunlar olarak karşımıza çıkmaktadır. Eksik veri türleri (Kwak & Kim, 2017): Tamamen Rastgele Eksik (MCAR): Eksikliğin diğer verilerle hiçbir ilişkisinin olmadığı ve rastgele ortaya çıktığı durumu ifade etmektedir. Örnek olarak bir ankette, bir katılımcının internet bağlantısı kesildiği için rastgele bir şekilde soruları yanıtlamadan çıkması verilebilir. Bu durumda eksiklik, katılımcı cevaplarından veya diğer verilerden bağımsızdır. Rastgele Eksik (MAR): Eksikliğin, gözlemlenen diğer verilerle ilişkisinin olduğu ancak eksik olan verilerle bir ilişkisinin olmadığı durumdur. Örnek olarak bir sağlık araştırmasında, yaşlı katılımcıların fiziksel bir test sırasında yoruldukları için bazı ölçümleri tamamlamaması verilebilir. Burada eksiklik, yaş gibi gözlemlenen bir özellikle ilişkilidir, ama eksik olan ölçümün kendisiyle doğrudan bağlantılı değildir. Rastgele Olmayan Eksik (NMAR): Eksikliğin, eksik verinin kendisiyle doğrudan bir ilişkisinin olduğu durumdur ve bu tür eksiklikler çok daha karmaşıktır. Örnek olarak bir depresyon anketinde, depresyon seviyesi yüksek olan bireylerin bu konudaki soruları yanıtlamaktan kaçınması verilebilir. Burada eksiklik, tam da eksik olan veri olan depresyon seviyesiyle ilişkilidir. Uç değerler (Outliers), veri kümesindeki diğer gözlemlerden önemli ölçüde sapma gösteren aşırı değerleri ifade etmektedir. Veri kümesinde uç değerler olması, analiz sonuçlarını etkileyerek ortalama ve standart sapma gibi istatistiksel ölçütlerde yanıltıcı sonuçlara yol açabilmektedir. Uç değerler genellikle Hatalı Veri Girişi, Katılımcı Davranışı ve Ölçüm Hataları gibi nedenlerle ortaya çıkmaktadır. Ayrıca boxplot görselleştirme araçları ve standart 14 sapma yöntemi uç değerlerin tespitinde sıkça kullanılan yöntemler bulunmaktadır (Brown & Kros, 2003). Genelde zaman serisi ya da sensor tabanlı verilerde çok karşılaşılan gürültü (Noise), veri setinde istenmeyen ya da rastgele varyasyonlar olarak tanımlanmaktadır. Gürültü, analizin doğruluğunu bozabilir ve sonuçların güvenilirliğini azaltabilir. Gürültü genellikle Ölçüm Parazitleri, Çevresel Faktörler, Hatalı İşleme gibi şekillerde ortaya çıkmaktadır. Gürültüyü azaltmak için yaygın olarak filtreleme teknikleri (Düşük Geçişli Filtreleme, Yüksek Geçişli Filtreleme) veya istatistiksel düzeltme yöntemleri (Ortalama Düzeltme, Regresyon Analizi, Aykırı Değere Tespiti ve Düzeltmesi) uygulanmaktadır (Brown & Kros, 2003). 3. VERİ HAZIRLAMA SÜRECİ VE ÖN İŞLEME ADIMLARI Veri analizi sürecinin güvenilir ve doğru sonuçlar üretebilmesi için eksik veri, uç değerler ve gürültünün etkili bir şekilde ele alınmasının yanı sıra, veri setlerinin uygun ön işleme teknikleriyle hazırlanması gerekmektedir. Veri ön işleme, ham verilerin daha iyi analiz edilebilir bir hale dönüştürülmesini sağlayarak, modelleme ve tahmin süreçlerinin başarısını doğrudan etkileyen önemli bir adımdır. Ayrıca verilerin kalitesini artırmak amacıyla eksik değerlerin işlenmesi, özellik türlerinin dönüştürülmesi ve benzeri tekniklerin uygulanmasıyla, makine öğrenimi modelinin verimliliğini iyileştiren bir süreçtir (Sami vd., 2021). 3.1. Veri Toplama ve Okuma Veri toplama, farklı kaynaklardan gelen bilgilerin sistematik bir şekilde bir araya getirilmesini sağlamaktadır. Veri okuma ise, toplanan verilerin işlenmesi ve analiz için hazır hale getirilmesi anlamına gelmektedir. Veri toplama ve okuma, büyük veri süreçleri için oldukça önemlidir (Rozony vd., 2024). Veri Okuma Uygulaması R ve Python Kodları Bu çalışmada, Kaggle’dan elde edilen ‘German Credit Risk - With Target’ isimli Alman kredi borçlularının davranışlarını içeren veriyi analiz edeceğiz (Kaggle, 2023). Öncelikle, borçluların kredi başvurularını hangi amaçlarla gerçekleştirdiğini ve her bir borçlunun kaç farklı işte çalıştığını inceleyeceğiz. Bunun yanı sıra, kredinin iyi veya kötü risk taşıyıp taşımadığını belirleyen olası kalıpları tespit etmeye çalışacağız. Tablo 1’de 19-75 yaş arası 1000 Alman kredi borçlusuna ait bilgileri içeren, borçluların yaş ve cinsiyet gibi demografik özelliklerinin yanı sıra, çalışma durumu (iş kategorisi), barınma durumu (kira, ev 15 sahibi vb.), birikim ve vadesiz hesap bilgileri gibi finansal değişkenleri kapsayan 10 değişkenden oluşan veri seti görülmektedir. Bu veriyi okutmak için Python ve R programlama dilleri gösterilmektedir. Tablo 1: Alman Kredi Borçlularının Risk Profili: 19-75 Yaş Arası 1000 Kişinin Demografik ve Finansal Özellikleri Öncelikle Kaggle’dan indirdiğimiz ‘german_credit_data.csv’ isimli verinin Python ile okutulması için Pandas kütüphanesi kullanılmakta ve veri ‘orijinal_veri’ ismiyle yüklenmektedir. Python Kodu: # !pip install pandas # ilk kez yüklenecek kütüphanelerde import pandas as pd orijinal_veri = pd.read_csv('german_credit_data.csv', index_col=0) Age Sex Job Housing Saving Account Checking Account Credit Amount Duration Purpose Risk 67 male 2 own NA little 1169 6 radio/TV bad 22 female 2 own Little moderate 5951 48 radio/TV good 49 male 1 own Little NA 2096 12 education good 45 male 2 free Little little 7882 42 furniture bad 53 male 2 free Little little 4870 24 car good 35 male 1 free NA NA 9055 36 education good 53 male 2 own quite rich NA 2835 24 furniture good 35 male 3 rent Little moderate 6948 36 car good 61 male 1 own Rich NA 3059 12 radio/TV bad … … … … … … … … … … … … … … … … … … … … … … … … … … … … … … 31 female 1 own Little NA 1736 12 furniture good 40 male 3 own Little little 3857 30 car good 38 male 2 own Little NA 804 12 radio/TV good 23 male 2 free Little little 1845 45 radio/TV bad 27 male 2 own moderate moderate 4576 45 car good 16 Aynı şekilde ‘german_credit_data.csv’ isimli verinin R ile okutulması için veri RStudio uygulaması üzerinden ‘Import Dataset’ bölümünden seçerek ya da aşağıda verilen kod ile ‘orijinal_veri’ ismiyle yüklenebilmektedir. R Kodu: # Install.packages(“readr”) # ilk kez veriyi yüklenecekse eğer library(readr) orijinal_veri <- read.csv("german_credit_data.csv", row.names = 1) 3.2. Veri Temizleme Veri temizleme, büyük verilerin entegrasyonunun başarısı için vazgeçilmez bir süreçtir. Bu süreç sadece verilerin doğruluğunu artırmakla kalmaz, aynı zamanda entegrasyon sürecindeki karmaşıklıkları azaltmakta ve daha güvenilir sonuçlar elde edilmesine katkı sağlamaktadır (Rozony vd., 2024). İkinci bölümde bahsettiğimiz gibi, veri temizleme sürecinde eksik veriler, uç değerler ve gürültü, en sık karşılaşılan ve en çok üzerinde durulan sorunlar arasındadır. Veri Temizleme Uygulaması R ve Python Kodları Öncelikle veri temizleme adımına başlanmadan önce verinin bilgilerine ve sayısal değişkenlerin özet istatistiğine bakılması gerekmektedir. Böylece verinin yapısı anlaşılabilmektedir ve eksikler görülebilmektedir. Python Kodu: print("\nVeri Seti Bilgileri:") orijinal_veri.info() print("\nÖzet İstatistikler:") orijinal_veri.describe() R Kodu: cat("\nVeri Seti Bilgileri:\n") print(str(orijinal_veri)) cat("\nÖzet İstatistikler:\n") print(summary(orijinal_veri)) 17 Şekil 2’de veri setinin bilgileri görülmektedir. Burdan ‘Non-Null Count’ kısmına bakıldığında ‘Saving accounts ve Checking account’ isimli değişkenlerde eksik veri olduğu ve eksik veri miktarları görülmektedir. ‘Dtype’ kısmına bakıldığında ise verideki değişkenlerin türleri karşımıza çıkmaktadır. Buna göre 'Sex, Housing, Saving accounts, Checking account, Purpose ve Risk’ isimli değişkenlerin kategorik değişkenler ve ‘Age, Job, Credit amount ve Duration’ isimli değişkenlerin sayısal değişkenler olduğu anlaşılmaktadır. Şekil 2: Veri Seti Bilgileri ve Veri Setinin Sayısal Değişkenlerinin Özet İstatistikleri Yukarıda Şekil 2’de görülen Özet İstatistiklere ek olarak, veriyi anlamak için veri görselleştirme adımlarından da yararlanmak gerekmektedir. Buna göre Yukarıda Şekil 2’de sunulan özet istatistiklere ek olarak, veri setini daha iyi anlamak için veri görselleştirme tekniklerinden faydalanılması önemlidir. Bu kapsamda, Şekil 3’te Yaş değişkeninin dağılım grafiği yeşil renk kullanılarak çizilmiştir. Ayrıca, Yaş değişkeninin Risk ile ilişkisi de incelenmiştir. Analize göre: • Risk durumu iyi olan bireyler (mavi renk ile gösterilen), genellikle 2535 yaş aralığında yoğunlaşmaktadır. 18 • Risk durumu kötü olan bireyler (turuncu renk ile gösterilen) ise daha çok 20-30 yaş aralığında toplanmaktadır. • Her iki grupta da 40 yaş sonrasında birey sayısında belirgin bir azalma gözlemlenmektedir. Şekil 3: Yaş Dağılımlarına Göre Alman Kredi Borçlularının Risk Profilleri Bu görselleştirme, yaşın risk profiliyle olan ilişkisini anlamak için önemli bir ipucu sunar. Örneğin, genç yaş gruplarında kötü risk oranının daha yüksek olması, kredi politikalarının bu yaş aralığına yönelik daha dikkatli tasarlanması gerektiğini gösterebilir. Eksik veri işleme yaklaşımı için, veri setinde eksik veri barındıran değişkenler ve bunların türleri belirlendikten sonra, bu eksikliklerin nasıl ele alınacağına karar verilmelidir. Eksik verilerle başa çıkmak için iki temel yöntem uygulanabilir: eksik değerlerin doldurulması veya veri setinden çıkarılması. Bu karar, veri miktarının yeterliliği ve eksik değişkenin analizdeki önemi gibi kriterler göz önünde bulundurularak verilir. Eksik verilerin doldurulması tercih edildiğinde, değişkenin türüne göre farklı stratejiler benimsenir: • Kategorik değişkenler için genellikle en sık tekrar eden değer (mod) ile doldurma yöntemi kullanılır. Örneğin, bir “meslek” değişkeninde eksik 25 standardizasyon ve normalizasyon yapılarak verinin ölçeklendirilmesi algoritmaların daha verimli çalışmasını sağlamak için oldukça önemlidir. 3.3.1. Kategorik Verilerin Dönüştürülmesi (Binarization): Veriyi daha anlamlı hale getirmek için uygulanan dönüşüm işlemi olan kategorik verilerin sayısal hale dönüştürülmesi, verinin farklı biçimlerde temsil edilmesini sağlayarak analiz ve modelleme süreçlerini desteklemektedir. Her kategorik değerin bir ikili (binary) değişkene dönüştürülmesi durumunu ifade etmektedir. Örneğin, cinsiyet özelliği için "Erkek" ve "Kadın" kategorilerinin 0 ve 1 olarak kodlanması gibidir (Aggarwal, 2015). 3.3.2. Standardizasyon Standardizasyon, veri dönüşüm aşamasında kullanılan bir ölçeklendirme tekniğidir. Bu yöntem, verinin ortalamasını 0 ve standart sapmasını 1 olacak şekilde dönüştürmektedir. Standardizasyon işlemi aşağıdaki formül ile gerçekleştirilmektedir (Sujon vd., 2024): 𝑍 = 𝑋 − 𝜇 𝜎 Burada: • 𝑍, standardize edilmiş değeri, 𝑋 ise bir özelliğin orijinal değerini, • 𝜇, veri setinin ortalamasını 𝜎 ise veri setinin standart sapmasını ifade etmektedir. Standardizasyon, özelliklerin farklı ölçeklerde olduğu durumlarda makine öğrenimi modellerinin belli değerlere daha ağırlık vermesini engellemenin önüne geçer. Standardizasyon, özellikle özelliklerin farklı ölçeklerde olduğu durumlarda oldukça faydalıdır. Örneğin, bir veri setinde bir özellik metre cinsinden (0-100 aralığında), başka bir özellik ise kilogram cinsinden (0-1000 aralığında) ölçülmüş olabilir. Bu tür durumlarda, makine öğrenimi modellerinin büyük değerlere sahip özelliklere gereğinden fazla ağırlık vermesini önlemek için standardizasyon devreye girer. Mesela, bir makine öğrenimi modelinde ev fiyatlarını tahmin etmeye çalıştığımızı düşünelim. Veri setinde "alan" (metrekare) ve "oda sayısı" gibi iki özellik olsun. Alan 50-300 metrekare arasında değişirken, oda sayısı 1-5 arasında olabilir. Eğer bu veriler standardize edilmezse, model alan özelliğine daha fazla odaklanabilir. Standardizasyon sayesinde her iki özellik de aynı ölçeğe getirilir ve modelin daha dengeli bir şekilde öğrenmesi sağlanır. 26 3.3.3. Normalizasyon Normalizasyon, geniş bir özellik aralığını standart bir aralığa (genellikle [0, 1]) dönüştürmek için kullanılan bir diğer ölçeklendirme tekniğidir. Bu işlem şu formülle ifade edilmektedir (Singh & Singh, 2020): 𝑋!"#$ =𝑋 − 𝑋$%! 𝑋$&' −%𝑋$%! Burada: • 𝑋!"#$, normalize edilmiş değerini, 𝑋, bir özelliğin orijinal değerini, • 𝑋$%!, özelliğin minimum, 𝑋$&' ise özelliğin maksimum değerini ifade etmektedir. Mesela, bir öğrencinin sınav notu 80, ders çalışma süresi ise 5 saat olsun. Veri setinde notların minimum değeri 40, maksimum değeri 100; çalışma süresinin minimum değeri 0, maksimum değeri 10 saat ise: Not için: 𝑋!"#$ = (80 - 40) / (100 - 40) = 40 / 60 = 0.67, Çalışma süresi için: 𝑋!"#$ = (5 - 0) / (10 - 0) = 5 / 10 = 0.5. Bu sayede her iki özellik de 0-1 aralığında ifade edilir ve makine öğrenimi modelinin bu verilerden daha tutarlı sonuçlar çıkarması sağlanır. Veri Dönüştürme Uygulaması R ve Python Kodları İlk olarak kategorik verilerin sayısal verilere dönüştürülmesi gerekmektedir. Böylece veri seti makine öğrenme algoritmalarının öğrenebileceği bir hale gelmektedir. Bunun için 2 temel yöntem vardır. Birincisi ‘Label Encoding’ yani iki tekil değere sahip veriler için uygundur. Örneğin; Sex değişkeni ‘Male’ ve ‘Female’ tekil değerlerine sahiptir. İkincisi ise ‘One-Hot Encoding’ ise ikiden fazla tekil değere sahip veriler için uygulanmaktadır. Örneğin; Checking account değişkeni ‘no account’, ‘little’, ‘moderate’ ve ‘rich’ tekil değerlerine sahiptir. Python Kodu: label_encoder = LabelEncoder() for özellik in kategorik_özellikler: if donusturulmus_veri[özellik].nunique() == 2: donusturulmus_veri[özellik] = label_encoder.fit_transform(donusturulmus_veri[özellik]) 27 print(f"{özellik} özelliğine Label Encoding uygulandı.") for özellik in kategorik_özellikler: if donusturulmus_veri[özellik].nunique() > 2: donusturulmus_veri = pd.get_dummies(donusturulmus_veri, columns=[özellik], drop_first=True, dtype=int) print(f"{özellik} özelliğine One-Hot Encoding uygulandı.") R Kodu: donusturulmus_veri <- temiz_veri for (col in kategorik_ozellikler) { if (n_distinct(donusturulmus_veri[[col]]) == 2) { donusturulmus_veri[[col]] < as.numeric(factor(donusturulmus_veri[[col]], levels = unique(donusturulmus_veri[[col]]))) - 1 } else { dummy_variables <- model.matrix(~ . - 1, data = data.frame (donusturulmus _ veri[[col]])) dummy_variables <- dummy_variables[, -1, drop = FALSE] colnames(dummy_variables) <- make.names(paste0(col, "_", colnames(dummy_variables)), unique = TRUE) donusturulmus_veri <- cbind(donusturulmus_veri, dummy_variables) donusturulmus_veri[[col]] <- NULL } } Son durumda veride 22 değişken bulunmaktadır ve veri setinin boyutu 945x22 olmuştur. Daha sonra verinin türüne veya çalışmanın amacına göre Standardizasyon veya Normalizasyon yapılmaktadır. Bu çalışmada makine öğrenmesi ile sınıflandırma yapılacağından veriye normalizasyon uygulamak tercih edilmektedir. Normalizasyon uygulanmış 945x22 boyutlu veri artık makine öğrenmesi algoritmalarıyla sınıflandırmak için hazır duruma gelmiştir ve diğer veri ön işleme adımlarına ihtiyaç bulunmamaktadır. Python Kodu: from sklearn.preprocessing import StandardScaler 28 from sklearn.preprocessing import MinMaxScaler donusturulmus_veri_standardize = donusturulmus_veri.copy() scaler = StandardScaler() donusturulmus_veri_standardize[sayısal_özellikler] = scaler.fit_transform(donusturulmus_veri_standardize[sayısal_özellikler]) print(donusturulmus_veri_standardize) donusturulmus_veri_normalize = donusturulmus_veri.copy() scaler = MinMaxScaler() donusturulmus_veri_normalize[sayısal_özellikler] = scaler.fit_transform(donusturulmus_veri_normalize[sayısal_özellikler]) print(donusturulmus_veri_normalize) R Kodu: donusturulmus_veri_standardize <- donusturulmus_veri for (col in sayisal_ozellikler) { donusturulmus_veri_standardize[[col]] <- scale(donusturulmus_veri[[col]])} donusturulmus_veri_normalize <- donusturulmus_veri for (col in sayisal_ozellikler) { donusturulmus_veri_normalize[[col]] <- (donusturulmus_veri[[col]] - min(donusturulmus_veri[[col]])) / (max(donusturulmus_veri[[col]]) - min(donusturulmus_veri[[col]]))} Şekil 7: Standardizasyon (a) ve Normalizasyon (b) İşlemi Sonucunda Ortaya Çıkan Veriden Bir Kesit. 29 (a) (b) Veri setine uygulanan ‘Veri Temizleme’ ve ‘Veri Dönüştürme’ adımlarının sonucunda sınıflandırma için hazır hale gelen 945x22 boyutlu veri için ‘Özellik Mühendisliği’ ve ‘Veri Zenginleştirme’ gibi ön işleme adımlarını uygulamak gerekmese de bu yöntemlerin uygulaması da veri seti üzerinde bir sonraki bölümde gösterilmektedir. 3.4. Özellik Mühendisliği Özellik mühendisliği, bağımsız değişkenlerin (açıklayıcı değişkenler) daha anlamlı ve açıklayıcı biçimlerde dönüştürülmesi veya yeniden yapılandırılması yoluyla modelin tahmin performansını artırmayı amaçlayan bir süreçtir. Bu süreç, verilerin modele daha iyi uyum sağlamasını ve analizlerin daha doğru sonuçlar üretmesini hedeflemektedir (Kuhn & Johnson, 2019). 3.4.1. Özellik Seçimi Özellik seçimi, modelin en iyi tahmin performansını sağlayan bir özellik alt kümesini seçme işlemidir. Bu süreç, modelin genelleştirme yeteneğini artırırken aşırı öğrenmeyi (overfitting) de önlemeye yardımcı olmaktadır (Kuhn & Johnson, 2019). Özellik seçimi yapılarak ilgisiz veya gereksiz özelliklerin kaldırılması ya da mevcut özelliklerin farklı bir veri alanına dönüştürülmesi, analitik sürecin daha verimli hale gelmesine katkı sağlamaktadır. Batista ve Monard (2003) çalışmalarında k-en yakın komşu algoritmasının, özellik seçimi sürecinde en anlamlı özelliklerin belirlenmesinde etkili olduğu belirtilmişlerdir. 30 3.4.2. Boyut İndirgeme Boyut indirgeme, yüksek boyutlu veri kümelerindeki karmaşıklığı azaltarak daha anlamlı bir veri temsili oluşturmayı amaçlayan bir yöntemdir. Bu süreçte Temel Bileşen Analizi (PCA), özellikleri daha düşük bir boyuta indirerek toplam varyansın büyük kısmını korumayı hedeflemektedir. Negatif Olmayan Matris Faktörizasyonu (NMF) ise veriyi daha anlamlı ve yorumlanabilir bileşenlere ayırmaktadır. Ayrıca Tümleşik Temsiller Yöntemiyle (Many-toMany Transformations), özellikler daha az boyutlu bir alana dönüştürülerek hem verilerin daha basit bir şekilde temsil edilmesi sağlanmakta hem de modelin tahmin gücün artırabilmektedir (Kuhn & Johnson, 2019). Özellik Mühendisliği Uygulaması R ve Python Kodları Bu bölümde, bir veri setine Özellik Seçimi için Boruta algoritması ve Boyut İndirgeme için Temel Bileşen Analizi (PCA) uygulanmaktadır. Ancak, eğer veri seti zaten az sayıda özellik içeriyorsa bu işlemler gerekli olmayabilir. Özellik Mühendisliği (Özellik Seçimi ve Boyut İndirgeme) genellikle binlerce özelliği barındıran genetik veriler gibi büyük ve karmaşık veri setleri için tercih edilir. Örneğin, bir genetik veri setinde 10.000’den fazla gen ifadesi bulunabilir ve bu tür durumlarda önemli özellikleri seçmek veya veri boyutunu azaltmak model performansını artırabilir. Boruta algoritması, veri setindeki en önemli özellikleri belirlemek için kullanılır. Aşağıda, bu algoritmanın Python ve R dillerindeki uygulamaları sunulmuştur. 31 Python Kodu: from boruta import BorutaPy from sklearn.ensemble import RandomForestClassifier veri = donusturulmus_veri_normalize.copy() X = veri.iloc[:, :-1] y = veri.iloc[:, -1] rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5, random_state=42) boruta = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=42) boruta.fit(X.values, y.values) selected_features = X.columns[boruta.support_].tolist() print("\nSeçilen özellikler:", selected_features) veri_boruta = X[selected_features].copy() veri_boruta.loc[:, 'Risk'] = y.values Çıktı: Seçilen özellikler: ['Age', 'Credit amount', 'Duration', 'Checking account_no account'] R Kodu: set.seed(42) veri <- donusturulmus_veri_normalize veri$Risk <- as.factor(veri$Risk) rf <- randomForest(Risk ~ ., data = veri, ntree = 500) boruta <- Boruta(Risk ~ ., data = veri, doTrace = 2) final_features <- getSelectedAttributes(boruta, withTentative = TRUE) veri_boruta <- veri %>% select(all_of(final_features), Risk) print(final_features) 32 Çıktı: [1] "Age", [2] "Credit_amount", [3] "Duration" [4] "Saving_accounts_donusturulmus_veri..col..no.account" [5] "Saving_accounts_donusturulmus_veri..col..rich" [6] "Checking_account_donusturulmus_veri..col..moderate" [7] "Checking_account_donusturulmus_veri..col..no.account" [8] "Checking_account_donusturulmus_veri..col..rich" [9] "Purpose_donusturulmus_veri..col..car" [10] "Purpose_donusturulmus_veri..col..radio.TV" Yukarıdaki örnekte, Python uygulamasında 4 özellik seçilirken, R uygulamasında 10 özellik seçilmiştir. Bu fark, algoritmanın yapılandırma ayarlarından veya veri setinin işlenme biçiminden kaynaklanabilir. PCA, veri setindeki varyansın büyük bir kısmını korurken boyut sayısını azaltmak için kullanılır. Aşağıdaki kodlar, varyansın %90’ından fazlasını açıklayan bileşenleri seçer. Python Kodu: from sklearn.decomposition import PCA pca = PCA(n_components=0.90) X_pca = pca.fit_transform(veri) veri_pca = pd.DataFrame(X_pca, columns=[f'PC{i+1}' for i in range(X_pca.shape[1])]) print("PCA Verinin Boyutu:", veri_pca.shape) Çıktı: PCA Verinin Boyutu: (945, 13) 33 R Kodu: veri[] <- lapply(veri, function(x) { if (is.character(x) || is.factor(x)) { as.numeric(factor(x)) } else { x }}) pca <- prcomp(veri[, -ncol(veri)], center = TRUE, scale. = TRUE) cumulative_variance <- cumsum(summary(pca)$importance[2, ]) num_components <- which(cumulative_variance >= 0.90)[1] veri_pca <- as.data.frame(pca$x[, 1:num_components]) veri_pca$Risk <- veri$Risk cat("PCA Verinin Boyutu:", dim(veri_pca), "\n") Çıktı: PCA Verinin Boyutu: 945 17 Bu örnekte, Python’da PCA ile 13 bileşen, R’da ise 17 bileşen elde edilmiştir. Farklı boyutlar, veri ön işleme adımları veya kütüphane uygulamalarındaki varsayılan ayarlarından kaynaklanabilir. PCA, özellikle görüntü işleme gibi yüksek boyutlu verilerde (örneğin, 28x28 piksel bir görüntünün 784 özelliğini azaltmak) sıkça kullanılır ve modelin hesaplama yükünü hafifletir. Bu uygulamalar, veri setinin yapısına bağlı olarak farklı sonuçlar verebilir ve özellik mühendisliği stratejilerinin seçiminde veri boyutu ile hedeflenen analiz türü dikkate alınmalıdır. 3.5. Veri Zenginleştirme (Artırma) Veri artırımı (Data Augmentation - DA), eğitim verilerinin miktarını artırmak için yaygın olarak kullanılan bir yöntemdir. Temel olarak veri artırımı, öğrenme modellerinin (özellikle sınıflandırıcıların) performansını ve sağlamlığını iyileştirmek amacıyla mevcut eğitim verilerini dönüştürerek sentetik örnekler üretme sürecidir (Abayomi-Alli vd., 2022). Bu sentetik veriler, genellikle modelin tahminlerinin değişmemesi gereken veriler üzerinde küçük değişiklikler yapılarak oluşturulur. Örneğin, bir görüntü veri setinde bir resmi hafifçe döndürmek veya parlaklığını değiştirmek sentetik bir örnek üretir. Bu yöntem, birbirinden uzak örnekler arasında doğal olarak oluşması zor kombinasyonların modellenmesini sağlar. Ayrıca, Veri Artırımı, özellikle Derin Sinir Ağlarının (Deep Neural Networks) eğitiminde en etkili tekniklerden biri olarak öne çıkar (Shorten vd., 2021). 34 Veri Zenginleştirme Uygulaması R ve Python Kodları Bu kısımda, veri zenginleştirme için Yapay Azınlık Fazla Örnekleme Tekniği (SMOTE) kullanılarak sentetik veri üretimi gösterilmiştir. Aşağıda Python ve R dillerinde bu işlemin uygulamaları yer almaktadır. Python Kodu: from imblearn.over_sampling import SMOTE X = veri.iloc[:, :-1] y = veri.iloc[:, -1] random_indices = np.random.choice(X.shape[0], size=100, replace=False) X_random = X.iloc[random_indices] y_random = y.iloc[random_indices] veri_random = pd.concat([X_random, y_random], axis=1) print(veri_random.shape) print("Random Verinin Boyutu:", veri_random.shape) X_r = veri_random.iloc[:, :-1] y_r = veri_random.iloc[:, -1] target_sample_size = 1000 num_classes = len(np.unique(y_r)) samples_per_class = target_sample_size // num_classes sampling_dict = {cls: samples_per_class for cls in np.unique(y_r)} smote = SMOTE(sampling_strategy=sampling_dict, random_state=42) X_resampled, y_resampled = smote.fit_resample(X_r, y_r) veri_smote = pd.DataFrame(X_resampled, columns=X_r.columns) veri_smote['Risk'] = y_resampled print("SMOTE Veri Boyutu:", veri_smote.shape) Çıktı: Random Verinin Boyutu: (100, 22), SMOTE Veri Boyutu: (1000, 22)