You are on page 1of 5

Data Preprocessing ve Teknikleri

Not: Eğer burada anlattıklarımın sadece teoriğini değil pythonda uygulanışını da öğrenmek
isterseniz kaggle.com’da yayınlıyorum. Kaggle’da, Can Ahmet Kurt kullanıcı adını aratırsanız
profilime ulaşırsınız. Buraya Türkçe olarak yazdığım her şey orada İngilizce olarak yazıldı ve Python
ile kodları da yazıldı. Oradan bu işin yazılımını da öğrenebilirsiniz.

1. Data Preprocessing Nedir?

Data Preprocessing yani veri ön işleme gerçek dünyadan topladığımız ham verileri modele
vermeden önce yaptığımız, ham yani eksik, kötü verileri işleyerek modelin kolayca anlayabileceği,
kullanılabilir hale getirmemize denir. Veri ön işleme yaparak modelin veriyi anlamasını sağlıyoruz.
Ayrıca modeli işlenmiş veriyle çalıştırarak eğitim süresini de azaltıyoruz.

2. Neden Data Preprocessing Yapıyoruz? Neden İhtiyaç Duyuyoruz?

Ham verilerde genellikle kayıp, tutarsız, çok boyutlu, çok büyük, kategorik veriler vardır ve bu
veriler modelin doğru çalışmasını kötü yönde etkiler. Sonuç olarak da modelin doğruluğu yani
tahmin kalitesi düşer. Kısaca yüksek doğrulukta bir model oluşturmak istiyorsak veriyi iyi
işlemeliyiz. Veri işleme iyi modeller elde etmek için çok önemlkildir.

3. Data Preprocessing En Önemli Teknikleri


 Data Cleaning
 Dimensionality Reduction
 Feature Engineering
 Sampling Data
 Data Transformation
 Imbalanced Data

3.1.Data Cleaning

En önemli veri işleme tekniklerinden biridir. Verinin kalitesini artırmak için verideki eksik, hatalı
verileri çıkardığımızı adımdır. Bu teknik verideki eksik, yanlış, alakasız, yinelenen verileri
anlamamızı ve değiştirmemizi veya silmemizi ifade eder. Yapacağımız işlem ise projemize ve
verimize bağlıdır.

3.1.1. Noisy Data

Gürültülü veri olarak adlandırılır. Anlamsız verilerdir. Mesela yaş değişkeni için negatif bir
değer bu başlığa girer. Böyle bir gözlem değeri bir ifade etmeyeceğinden onu silebilir veya
null hale getirebiliriz. İstenmeyen veya alakasız verilerde bu konuya girer. Mesela yazılımcı
maaş tahmini yapmak için kişinin boyunu bilmemize gerek yok. Bunun gibi. Noisy Data’yı
işlemenin yolları:

3.1.1.1. Binning

Binning yöntemi veriyi gruplara ayırarak yeni veri elde etmeye veya çeşitli teknikler
kullanarak veriyi sessizleştirmeye denir. Bu sayede veri daha basitleşecektir. Mesela
herhangi bir verisetinde uzunluk değişkeni olduğunu düşünelim. Bu verisetinde 1000 adet
gözlem değeri var. Uzunluk de çok değişken. Yani 700-800 tane farklı değer var ve bu
değerler 1 ile 100 arasında değişiyor. Binning yönteminde bu değişkeni gruplara
ayırıyoruz. Yani 1 ile 10, 10 ile 20, 20 ile 30 gibi. Grupları elde ettikten sonra farklı yollar
izleyebiliriz.

Mesela bazı kaynaklarda şunu gördüm, 1 ile 100 arasını tamamen gruplara ayırıyoruz ve
bu grupları yeni bir kategorik sütun yapıyoruz. Yani 1 ile 10 arasındaki değerleri tutan
grubu 1000 satırlı bir hale getiriyoruz. 1 ile 10 arasında olan indekslere 1 gerisine 0
yazıyoruz. Bu sayede sayısal ve gürültülü sütunumuz yerine kategorik sütun elde
ediyoruz.

Başka kaynaklarda ise şöyle bir teknik ile karşılaştım ve bu teknik çoğu yerde kullanılıyor
ve tavsiye ediliyor. Az önceki teknikte sayısal sütunları kategorize etmiştik. Burada ise
yine sayısal kalıyor ama veri sessizleşiyor. Yine aynı şekilde gruplara ayırmıyoruz. Bu sefer
değişkenin değer aralığına göre ayırmıyoruz. Bu sefer önce değişkenin listesini küçükten
büyüğe sıralıyoruz. Sonra eşit parçalara bölüyoruz. Mesela 12 adet gözlem sayısı varsa 4-
4-4 şekline ayırabiliriz. Sonra her grubu kendi içinde ele alıyoruz ve her grubun
ortalamasını alıyoruz ve o gruptaki değerlere atıyoruz. Yani ilk 4’lünün ortalaması 5 olsun
mesela. Bunun sonucunda ilk gruptaki tüm değerleri 5 yapıyoruz. Bunun diğer gruplar
içinde yapıyoruz. Gruplardaki değerlere ortalamasını atamaktan başka
yapabileceklerimizde var. Grubun sol yarısına minimum sağ yarısına ise maksimum değeri
atayabiliriz. Bu yöntem çokça kullanılır. Bu sayede datayı yumuşaklaştırdık.

3.1.2. Missing Value

Gerçek dünya verilerinde karşılaşılan en yaygın sorunlardan biride kayıp değerlerdir. Çoğu
zaman verilerin bazı kısımları kaybolur. Çoğu ML modeli de kayıp değerleri işleyemez. Buda
bizim kayıp değerlere müdahale etmemiz gerektiğinin göstergesidir.

3.1.2.1. Kayıp Değerleri Kontrol Etme

Kayıp değerleri ele almak için öncelikle kayıp değer olup olmadığını ve ne şekilde ele
almak içinde ne kadar olduğunu bilmeliyiz. Bunu da pandasın özellikleriyle yapıyoruz.
Sonuçta verimiz bir pandas DataFrame. Eksik değerleri görmek için df.isna().sum() işlevini
çağırıyoruz.

3.1.2.2. Kayıp Değerleri Ele Almanın Yolları

Eksik değerleri ele almanın iki temel yolu vardır.


 Kayıp Değerleri Silmek
 Kayıp Değerleri Doldurmak
3.1.2.3. Kayıp Değerleri Silmek

Bu yaklaşım pek önerilmez. Çünkü veri bulmak hayli zor iken bu yöntem ile elimizdeki
veriyi de azaltmış oluruz. Ama kullanmamız gereken yerlerde mutlaka olacak. Eksik
değerleri silmek için iki yöntemimiz var.

a. Satırları Silmek

Eğer bir satırda çok fazla eksik veri varsa veya çok büyük bir verimiz varsa ve çok az
satırda eksik verimiz varsa bu yöntem kullanılır. Hızlı bir şekilde eksik verilerden
kurtulmuş oluruz. Ama tabii ki uygun yerde kullanmalıyız.

b. Sütunları Silmek

Eğer bir kolonda yani sütunda çok fazla eksik veri varsa o sütundaki eksik verileri
doldurmakla uğraşmak yerine direkt sütunu atabiliriz. Sütunun yarısından fazlası boş ise
atmamız uygundur.

3.1.2.4. Eksik Değerleri Doldurma


1. Sayısal Değerleri Doldurma
a. Ortalama ile Doldurma

Bu yöntemde eksik değerleri eksik değerin olduğu sütunun ortalamasıyla


dolduruyoruz. Sayısal değerler için en çok kullanılan doldurma yöntemidir. Aykırı
değerler var ise bu yöntem doğru olmayacaktır. Bu yöntemi kullanmak için önce
aykırı değerler ele alınmalıdır.

b. Medyan ile Doldurma

Medyan bir dizi sıralandığında ortada kalan değerdir. Eğer dizinin uzunluğu çift ise iki
medyan vardır ve bunlar ortada kalan iki değerdir. Aykırı değerler olduğunda da bu
yöntem kullanılabilir.

c. Önceki Değerle doldurma

Genellikle zaman serisi verilerinde kullanılır. Basit bir yöntemdir. Eksik değer bir
önceki değer ile doldurulur. Bu teknikte doldurulmaya baştan başlanır. Bunu sebebi
eksik değerin bir önceki değeri de eksik değer ise karışıklık olmasın diyedir.
Doldurulmaya baştan başlanırsa eksik değerin bir önceki değeri eksik değer olsa bile
doldurulacağı için sorun olmaz. Ancak şunu unutmamak gerekir eğer eksik değer
sütunun ilk değeri ise doldurulamaz.

d. Sonraki Değerle Doldurma

Bu yöntem ise yukarıdakinin tam tersidir. Bu sefer eksik değer sütunda kendisinden
bir sonraki eksik değer ile doldurulur. Önceki değerle doldurma yönteminde sütunun
ilk değerine olduğu gibi burada da son değer doldurulamaz.

e. İnterpolasyon
İnterpolasyon var olan sayısal değerleri kullanarak boş değerleri tahmin etmektir.
Bizimde boş değerleri doldurmak istediğimizi düşünürsek bu yöntemi de eksik
değerlerimizi doldurmak için kullanabiliriz.

2. Kategorik Değerleri Doldurma

Sayısal değerlerde olduğu gibi kategorik değerlerde de eksikler olabilir. Bu yüzden bu tür
kayıpları da doldurmalı veya ele almalıyız.

a. Mod ile doldurma

Mod bir grupta en fazla tekrar eden yani sütundaki en çok kullanılan değerdir. Kategorik
kayıpları doldurmak için ilk yöntemimiz ilgili sütunun modu ile doldurmaktır. Kategorik
değişkenlerde en çok kullanılan yöntemdir.

b. Önceki Değer ile Doldurma

Sayısal kayıplarda olduğu gibi kategorik eksik verilerde de bir önceki verilerle
doldurabiliriz

c. Sonraki Değer ile Doldurma

Sayısal kayıplarda ve bir önceki yöntemde olduğu gibi sonraki verilerle doldurabiliriz.

3. Scikit-Learn ile Eksik Değerleri Doldurma


a. Tek Değişkenli Yaklaşım

Tek değişkenli yaklaşımda yalnızca tek bir sütun dikkate alınır. Sklearn kütüphanesinin
SimpleImputer sınıf ile fit_transform ederek bu yaklaşım için eksik değerler doldurulabilir.
Bu yöntem ile tek değişkenli yaklaşım olduğu için eksik değerler ortalama, medyan veya
mod ile doldurulabilir.

b. Çok Değişkenli Yaklaşım.

Çok değişkenli yaklaşımda değerler doldurulurken sadece ilgili sütuna değil diğer
sütunlarla ilişkisine de bakılır. Yaş ve ücret değişkenlerinden oluşan bir verimiz olduğunu
düşünelim. Bu iki değişken birbiriyle doğru orantılı. Yani yüksek ücret olduğunda yaş da
yüksek oluyor. Bu durumda yaş sütunundaki eksik değerleri doldururken ücret sütununa
da bakmak iyi olacaktır. İşte buna çok değişkenli yaklaşım diyoruz. Çok değişkenli
yaklaşım için sklearn’den iki sınıfı kullanabiliriz. Bunlar KNNImputer ve IterativeImputer

1. IterativeImputer

IterativeImputer aslında bir regresyon modeli çalıştırır. Eksik değerlerini doldurmak


istediğimiz sütunu sonuç sütunu yani tahmin edilen sütun yapar. Sonuç sütununda
eksik olmayan sütunları alır ve modeli eğitir. Sonra da eksik olan yerleri tahmin yapar.
Bu şekilde eksik değerleri regresyon modeline tahmin ettirerek eksik değerleri
doldurur.

2. KNNImputer
IterativeImputter’in regresyon modeli ile eksik verileri tahmin ettiği gibi KNNImputer
ise KNN modeli ile eksik verileri tahmin eder.

3.1.3. Outliers
3.1.3.1. Outliers Nedir?

Outliers yani aykırı değerler sütundaki verinin dağılıma karşı uzakta kalan değerlerdir.
Mesela bir sütunumuzun 1 ile 10 arasında değiştiğini düşünün. Ancak bu sütundan bir
değer 300. İşte değeri 300 olan bu veri bir aykırı değerdir. Çünkü verinin dağılıma aykırı
duruyor. Aykırı değerler makine öğrenmesi modelleri için zorluk çıkarır. Modellerin
kafasını karıştırır demekte yanlış olmaz.

You might also like