← Modül 3

3.4. Özellik Dönüşümleri
Modül İlerlemesi

Dağılımı İyileştir, Modeli Rahatlat

Makine öğrenimi modelleri genellikle "normal dağılıma yakın" verilerle daha iyi çalışır. Özellik dönüşümleri, çarpık verileri düzeltip model performansını artırmanın en basit yollarından biridir.

NEDEN ÖZELLİK DÖNÜŞÜMÜ YAPARIZ?

🚨 PROBLEM: Çarpık Veriler

  • Gelir dağılımı gibi düşün: Çoğu insan az, çok azı çok kazanıyor
  • Ev fiyatları: Çoğu ev 500K-2M, ama 10M'luk saraylar da var
  • Bu uç değerler (outlier) modelleri yanıltıyor
  • Lineer modeller "normal dağılım" bekliyor

✅ ÇÖZÜM: Dönüşümler

  • Log: Büyük sayıları küçült, küçükleri büyüt
  • Sqrt: Hafif çarpıklıkları düzelt
  • Box-Cox: Akıllıca otomatik ayar
  • Sonuç: Model daha iyi öğrenir, tahminler daha doğru olur!

🏠 GERÇEK HAYAT ÖRNEKLERİ

💰 GELİR VERİSİ

[20K, 25K, 30K, 35K, 1.000K] → Log sonrası daha dengeli!

🏡 EV FİYATLARI

[500K, 750K, 1.2M, 15M] → Sqrt ile uç değer yumuşar

📊 WEB TRAFİĞİ

[100, 150, 200, 1.000.000] → Box-Cox ile normalize

Log Dönüşümü

Ne zaman?: Gelir, fiyat, nüfus gibi sağa çarpık verilerde

Formül: log(x) veya log(x+1) [sıfır varsa]

📈 Örnek: 1.000.000 → log(1.000.000) = 13.8

Karekök Dönüşümü

Ne zaman?: Orta derecede çarpıklık, sayım verileri

Formül: √x (karekök x)

📊 Örnek: 10.000 → √10.000 = 100

Box-Cox Dönüşümü

Ne zaman?: En iyi dönüşümü bilmiyorsan, otomatik ayar

Formül: (x^λ - 1)/λ [λ=0 ise log(x)]

🤖 Örnek: λ=0.5 için (√x - 1)/0.5

🎯 PRATİK KURALLAR

✅ YAPILACAKLAR

  • Sağa çarpıksa → Log (pozitif değerler)
  • Hafif çarpıksa → Sqrt (sayım verileri)
  • Emin değilsen → Box-Cox (en iyi λ'yı bul)
  • Daima kontrol et: Dönüşüm öncesi/sonrası histogram

❌ YAPILMAYACAKLAR

  • Negatiflerle log alma → log(x+min+1) kullan
  • Aşırı dönüşüm → Veriyi tanıyamaz hale getirme
  • Test verisini unutma → Aynı dönüşümü uygula
  • Anlamsız dönüşüm → Yorumlanabilir olmalı

🔬 KENDİ DENEYİNİZİ YAPIN

Aşağıdaki gerçek hayat örneklerini deneyin veya kendi verinizi girin:

A) Sayı Dizisi

Virgül, noktalı virgül veya boşlukla ayrılmış sayılar girin

Dönüşüm Yöntemi

Box-Cox Ayarları

Box-Cox λ:
-2 0.0 2

B) Önce / Sonra Karşılaştırması

Önce
Sonra

📊 İstatistikler

Ortalama / Standart Sapma:
Min / Max:
Çarpıklık (skew):
Değişim Katsayısı:

🐍 PRATİK PYTHON KODLARI

Basit Uygulama

import numpy as np
import pandas as pd

# Örnek veri - gelir dağılımı
gelirler = [30000, 45000, 52000, 2500000]

# 1. Log dönüşümü (en yaygın)
log_gelir = np.log1p(gelirler)  # log(x+1)
print("Log dönüşümü:", log_gelir)

# 2. Karekök dönüşümü  
sqrt_gelir = np.sqrt(gelirler)
print("Karekök:", sqrt_gelir)

# 3. Manuel Box-Cox (λ=0.5)
lambda_val = 0.5
bc_gelir = (np.power(gelirler, lambda_val) - 1) / lambda_val
print("Box-Cox:", bc_gelir)

Sklearn ile Profesyonel

from sklearn.preprocessing import PowerTransformer
from sklearn.pipeline import Pipeline
import pandas as pd

# DataFrame örneği
df = pd.DataFrame({
    'gelir': [30000, 45000, 52000, 2500000],
    'yas': [25, 30, 35, 40]
})

# Box-Cox transformer (otomatik en iyi lambda)
bc = PowerTransformer(method='box-cox')

# Sadece gelir sütununa uygula
df['gelir_boxcox'] = bc.fit_transform(df[['gelir']])

print("Dönüşüm öncesi çarpıklık:", df['gelir'].skew())
print("Dönüşüm sonrası çarpıklık:", df['gelir_boxcox'].skew())

# Pipeline ile kullanım
pipe = Pipeline([
    ('transform', PowerTransformer()),
    ('model', YourRegressionModel())
])

Modül 3 Tamamlandı!

Artık çarpık verileri düzeltmek için doğru dönüşümü seçebilir ve model performansınızı önemli ölçüde artırabilirsiniz!