Feature Engineering & Data Preprocessing(Özellik Mühendisliği & Veri Ön İşleme)

Şevval Yurtekin
5 min readJun 28, 2021

--

Özellik mühendisliği ham verilerden yeni özellikler çıkarabilmemizi sağlayan metotlardır. Temel amaç, veriyi makine öğrenmesi modellerine hazırlamaktır, böylece performans açısından daha iyi sonuçlar elde etmemizi sağlayacaktır.

The features you use influence more than everything else the result. No algorithm alone, to my knowledge, can supplement the information gain given by correct feature engineering. — Luca Massaron

Kullandığınız özellikler sonucu her şeyden daha fazla etkiler. Bildiğim kadarıyla hiçbir algoritma tek başına doğru özellik mühendisliğinin sağladığı bilgi kazanımını tamamlayamaz. - Luca Massaron
https://towardsdatascience.com/the-data-science-process-a19eb7ebc41b

Outliers (Aykırı Değerler)
Missing Values (Eksik Değerler)
Encoding (Label Encoding, One-Hot Encoding, Rare Encoding)
Feature Scaling (Özellik Ölçeklendirme)

Verideki genel eğilimin oldukça dışına çıkan değerlere aykırı değer (outlier) denir. Aykırı değer analizi için bir çok yöntem kullanılmaktadır. Bunlar, standart sapma, Z-skoru yaklaşımı ve boxplot(interquartile range-IQR) yöntemidir.

En çok kullanılan yöntem olan boxplot yönteminde, değerler küçükten büyüğe sıralanır. Q3 (üçüncü çeyrek değer) ve Q1 (birinci çeyrek değer) değerleri hesaplanır. Q3–Q1 ifadesinden IQR elde edilir.

üst limit = Q3 + 1.5 * IQR  #bundan sonrası aykırı değeralt limit = Q1 - 1.5 * IQR  #bundan öncesi aykırı değer
https://ravenfo.com/2021/02/11/aykiri-deger-analizi/

Aykırı değer problemini çözmek için değerleri silebiliriz veya baskılayabiliriz. Baskılama yönteminde, veri setindeki değişken aykırı değere sahipse belirlemiş olduğumuz üst limit ve alt limit değerleri ile değiştiriyoruz, yani baskılamış oluyoruz.

Local Outlier, gözlemleri bulundukları konumda yoğunluk tabanlı skorlayarak buna göre aykırı değer olabilecek değerleri tanımlamaktadır. Bir noktanın lokalinde bu noktanın komşularıyla arasındaki yoğunluk değerlendirir. Eğer bir nokta komşularının yoğunluklarından daha az yoğunluğa sahipse, komşularından uzak yani aykırı değer olarak tanımlanabilir.

Eksik değerler, veri setinde büyük bir probleme yol açmaktadır (NaN ve NA). Bu değerler bazen veri tabanlarından kaynaklanabilir bazen de bir yokluğu ifade etmektedir. Bu değerler yanlış analiz yapmamıza yol açar. Bu tür durumlarda eksik gözlemleri silebiliriz ancak veri eksikliğine yol açacaktır. Eğer verimiz büyükse bunu göz ardı edebiliriz fakat normal değerde bir veri setiyle çalışıyorsak veriyi silerken tekrar düşünmeliyiz :) Eğer bir eksiklik rastgele ortaya çıkmamışsa, diğer değişkenlerin etkisiyle ortaya çıktıysa hemen silip veya doldurmamamız gerekir. Örneğin, bir kişinin kredi kartı harcaması 0 gözükmektedir. Eğer bu kişinin kredi kartı var mı yok mu bilgisin de YOK ise 0 gözükmesi normaldir. Kişinin kredi kartı yoksa harcaması da olmamasını bekleriz. O yüzden bu eksikliği doldurmak veya silmek anlamlı değildir.

Eksik verileri doldurmak için bir kaç yöntem izleyebiliriz. Örneğin, veri setindeki değişkenin eksik değerlerini ortalama, medyan, mod gibi değerleri ile doldurabiliriz. Veri setimiz uygunsa 0 ile doldurabiliriz. Ayrıca scikit-learn kütüphanesinden SimpleImputer ile veriyi ortalama, medyan, mod veya sabit bir değer ile doldurabiliriz. Tahmine dayalı atama ise eksik değerlerin makine öğrenmesi yöntemleri ile doldurulmasıdır. Eksiklik barından değişken bağımlı değişken gibi kabul edilir diğer değişkenlerle modellenip, eksikliğe sahip değişkendeki eksiklik doldurulur, tahmin edilir.

Encoding, değişkenlerin temsil şeklini değiştirmek

Label Encoding, işlemi kategorik değişkenlerin bilgisayarın anlayabildiği şekilde işlenmesi için bir dönüşüm sağlamaktadır.

Yukarıdaki figürde görüldüğü gibi iki kategoriye sahip bir cinsiyet değişkeni var. Binary (0–1) şekilde label encoding işlemini gerçekleştirdik. Ancak daha fazla sınıfa sahip olan bir değişkende olsa yine label encoding ile 0,1,2,3.. gibi sınıflandırabiliriz.

One-Hot Encoding, bir çok makine öğrenmesi modeli kategorik verilerle çalışamaz. Bu yüzden one-hot encoding, ikiden fazla kategoriye sahip olan kategorik değişkenlerin binary (0–1) olarak dönüştürme işlemi olarak adlandırılır.

Rare encoding, belirli bir frekanstan az olan değerleri bir sınıfta toplamamızı sağlar. Böylelikle frekansı çok düşük olan değerleri tek tek değerlendirmek yerine tek bir sınıfta değerlendirmek işlemleri hızlandırmamızı sağlamaktadır.

Feature Scaling (Özellik Ölçeklendirme)

Standart Scaler, ortalama değerin 0, standart sapmanın ise 1 değerini aldığı, dağılımın normale yaklaştığı bir yöntemdir. Ortalamayı değerden çıkartıp, standart sapmaya bölme ile elde ederiz. Veri setindeki tüm gözlem birimleri -1 ile 1 arasında değer almış oluyor.

z = (X - u) / s

Robust Scaler, aykırı değerlere karşı dayanıklıdır. IQR istatistiğine göre veriyi ölçeklendirme işlemi yapmaktadır.

IQR = Q3-Q1

Min-Max Scaler, verinin 0 ile 1 arasında değerler alması durumudur. Değerden o veri aralığındaki minimum değeri çıkartırız ve aralık değerine böleriz.

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

Feature Extraction (Özellik Çıkarımı), dediğimiz kavram ise verilerden yeni anlamlı veriler üretmektir. Bunun için ilk önce değişkenleri incelemeliyiz. Hatta değişkenlere hipotez testleri uygulayıp, değişkenlerin önemini öğrenebiliriz.

Şimdi bu özellikleri bir veri seti ile ele alalım. Veri setimizde Employee ID, Gender, Marital Status, Age, Year of Exprience, Ability Score,Title ve Salary değişkenleri ve 10 gözlem değeri bulunmaktadır.

Yukarıdaki fonksiyon ile aykırı değer olup olmama durumunu ele aldık. Eksik değer gözlemlemek için ise,

df.isnull().values.any()
# True

Değişkenler bazında eksik olan değerleri gösterdi.

Bu eksik değerleri ortalama değerler ile doldurdum. Veri setine göre bu durum değişebilir. Büyük bir veri setimiz olsaydı eksik değerleri silebilirdik.

Şimdi encode işlemi yapalım. Var olan gender, marital status ve title kategorik değişkenlerini dönüştürelim.

Şimdi de Title değişkenini ele alalım. Burada pozisyon seviyelerini Label Encoder ile sıraladık. Herkesin bildiği üzere Junior pozisyon 0, en küçük değer, Director ise en büyük değeri 3' ü alır. Yani label encoder ile sıralı verileri encode edebiliyoruz.

Bu mini veri seti örneğinde aykırı değer yakalama, eksik değer doldurma, encode gibi işlemleri gerçekleştirdik. Büyük veri setlerinde yapılan feature engineering ve data pre-processing adımları için burayı inceleyebilirsiniz.

Kaggle hesabıma buradan ulaşabilirsiniz. Keyifli okumalar :)

REFERANSLAR

DSMLBC5

--

--