Anasayfa / Genel bir bakış / Veri Hazırlığının Vazgeçilmezi : Özellik Ölçeklendirme

Veri Hazırlığının Vazgeçilmezi : Özellik Ölçeklendirme

Merhaba VBO okuyucuları!

Bu yazımda sizlere veri hazırlığında çok önemli yeri olan ve Feature Scaling olarak da bilinen ‘Özellik Ölçeklendirme’ kavramından ve yöntemlerinden bahsedeceğim. Verileri modele vermeden önce dikkat edilmesi gereken önemli noktalardan bazıları şunlardır:

  • Verinin dağılımı: Verinin normal dağılıp dağılmaması, bazı algoritmaların çalışmasını etkileyen bir faktör. Veriler sağa yatık, ya da sola yatıksa, model performansı bu durumdan etkilenebilir.
  • Özellikler arasındaki ölçek farklılıkları: Klasik bir örnekten gidecek olursak, verimiz yaş ve gelir boyutlarını içeriyor olsun. Yaş aralığı 0-90 yaşlarını kapsıyor ve gelir boyutu da 0- 250.000 TL arasında değerler içeriyor olsun. Burada Öklid, Manhattan gibi uzaklık bazlı hesaplamaları kullanan algoritmalar için değerler sapacaktır. Bu bağlamda bu özellliklerin ortak bir veri aralığına çekilmesi ile daha doğru sonuçlar elde edebiliriz.

Bu değerleri normal hale getirmek ve baskınlığı azaltmak adına bazı yöntemler mevcuttur. Bunlar, normalizasyon, standardizasyon gibi metodlardır. Bu metodlar uzaklık tabanlı ve gradyan tabanlı tahminleyici algoritmaları kullanmadan önce uygulanması faydalı olan yöntemlerdir. Peki bu metodlar nedir ve hangi durumlarda kullanılır?

  • MinMax Scaling, verinin 0 ile 1 arasında değerler aldığı bir durumdur. Burada dağılım, verinin dağılımı ile benzerdir. Burada ‘outlier’ denilen dışta kalan verilere karşı hassasiyet durumu vardır, bu yüzden bu değerlerin fazla olduğu bir durumda iyi bir performans gösteremeyebilir.

Formülü aşağıdaki gibidir. Açıklayacak olursak: Değerimizden o veri aralığındaki minimum değeri çıkartıyoruz, aralık değerine bölüyoruz.

X-Xmin / Xmax-Xmin
from sklearn import preprocessing
min_max_scaler = MinMaxScaler()
scaled_df = min_max_scaler.fit_transform(df)
df_sc = pd.DataFrame(scaled_df)
  • Robust Scaler, Normalizasyon ile benzer şekilde çalışır. Aykırı değerlere sahip verilerde daha iyi sonuçlar verebilir. Yine veri dağılımı ile benzerlik gösterir ancak aykırı değerler dışarıda kalır. Medyan değeri sonradan kullanılmak üzere elenir ve değerler 1.ve 3. kartil aralığına oturtulur.
X-Q1(X) / Q3(X)-Q1(X)
from sklearn import preprocessing
robust_scaler = RobustScaler()
scaled_df = max_scaler.fit_transform(df)
df_sc = pd.DataFrame(scaled_df)
  • MaxAbs Scaler, her özelliğin maksimum mutlak değeri 1 olacak şekilde her özelliği ayrı ayrı ölçeklendirir ve dönüştürülür.
X / max(abs(X))
from sklearn import preprocessing
max_scaler = MaxAbsScaler()
scaled_df = max_scaler.fit_transform(df)
df_sc = pd.DataFrame(scaled_df)
  • Standardizasyon, ortalama değerin 0, standart sapmanın ise 1 değerini aldığı, dağılımın normale yaklaştığı bir metoddur. Formülü şu şekildedir, elimizdeki değerden ortalama değeri çıkartıyoruz, sonrasında varyans değerine bölüyoruz.
(X - u) / s
from sklearn import preprocessing
scaler = preprocessing.StandardScaler()
scaled_df = scaler.fit_transform(df)
df_sc = pd.DataFrame(scaled_df)
  • PowerTransformer, varyansı stabilize etmek ve çarpıklığı en aza indirmek için en uygun ölçeklendirme faktörünü bulur. Yine ortalama değerin 0, standart sapmanın ise 1 değerini aldığı bir metoddur.
from sklearn import preprocessing
transform_power = preprocessing.PowerTransformer()
scaled_df = transform_power.fit_transform(df)
df_sc = pd.DataFrame(scaled_df)

Bir önceki yazımda RFM analizinden bahsetmiştim, bu link üzerinden ulaşabilirsiniz. Şimdi çıkan RFM tablosundaki verileri normalize/standardize edelim.

Bu yöntemler ile uzaklık tabanlı algoritmalarda daha farklı sonuçlar alınabilir. Kullanılması faydalı olacaktır.

clus = rfm_table[['Monetary','Recency','Frequency']]
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
d_scaled = scaler.fit_transform(clus)
data_scaled1 = pd.DataFrame(d_scaled)
data_scaled1.head()
012
01.191780-0.9595420.285250
11.317505-0.9595422.360848
21.068039-0.9595422.822092
30.452246-0.9595422.437722
40.736600-0.9595422.437722

Burada verileri incelediğimizde negatif ve pozitif değerler aldıklarını görüyoruz. Dağılım benzerlik gösteriyor.

data_scaled1.describe()
012
count5.88E+035.88E+035.88E+03
mean2.54E-16-3.03E-15-8.97E-15
std1.00E+001.00E+001.00E+00
min-2.05E-01-9.60E-01-4.07E-01
25%-1.81E-01-8.40E-01-4.07E-01
50%-1.44E-01-5.06E-01-2.53E-01
75%-4.83E-028.51E-015.46E-02
max4.11E+012.57E+003.01E+01
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(clus)
data_scaled2 = pd.DataFrame(x_scaled)
data_scaled2.head()
012
00.033800.02267
10.03684400.09068
20.03080500.105793
30.015900.093199
40.02278300.093199

Burada verileri incelediğimizde 0 ve 1 arasında değerler aldığını görüyoruz. Dağılımın bu iki değer arasında dağıldığını görüyoruz.

data_scaled2.describe()
012
count587858785878
mean0.0049530.2721770.013323
std0.0242070.2836770.032769
min000
25%0.0005680.0338750
50%0.0014720.1287260.005038
75%0.0037850.513550.015113
max111

Burada özellik ölçeklendirme metodlarından ikisini de örneklendirmiş olduk. Bu yöntemler gerçekten hayat kurtarıcı olabiliyor. Uzaklık temelli algoritmaları kullanırken öncesinde verileri bu işlemlere tabi tutarak maliyeti azaltıp, modelin performansını iyileştirebilirsiniz.

Yorumlarınız için şimdiden teşekkürler!

Kaynakça:

https://medium.com/analytics-vidhya/feature-scaling-in-scikit-learn-b11209d949e7

https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html

Hakkında Sena Merter Dereli

Pazarlama & Müşteri Analitiği Araştırmacısı / n11.com'da Pazarlama Analitiği Uzmanı

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Tensorflow Lite Modeli ile Colab Üzerinden Görüntü Sınıflandırma: Derin Öğrenme Uygulaması

Bildiğiniz üzere derin ağlarda / katmanlarda öğrenme işlemine biz kabaca derin öğrenme diyoruz. Bu açıklama …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir