Kazanimlar:
- Alan bilgisiyle anlamlı türev özellikler üretip kategorikleri uygun yöntemle (one-hot, etiket, hedef) kodlayabilme
- Sayısal değişkenleri model tipine göre ölçekleyip (standartlaştırma, normalizasyon) gereksiz veya eksik ölçeklemeden kaçınabilme
- Tüm dönüşümleri eğitim/test bölmesinden sonra ve yalnızca eğitimden öğrenerek özellik kaynaklı sızıntıyı önleyebilme
Makine öğrenmesinde eski bir söz vardır: "Uygulamalı makine öğrenmesi, aslında özellik mühendisliğidir." Çünkü bir modelin başarısı çoğu zaman hangi algoritmayı seçtiğinizden çok, modele hangi girdileri verdiğinizden gelir. Özellik (İngilizcesiyle feature — modele girdi olarak verilen her değişken; sütun da denir) mühendisliği, ham veriden modelin öğrenebileceği anlamlı sinyaller üretme sanatıdır. Yapay zeka bu aşamada zengin bir fikir kaynağıdır: "bu veriden hangi özellikler üretilebilir" diye sorduğunuzda onlarca öneri sıralar. Ama bu önerilerin bir kısmı değerli, bir kısmı işe yaramaz, bir kısmı ise tehlikeli (sızıntı) olabilir. Ayıklamak sizin işiniz.
Neden özellik mühendisliği
Ham veri modele nadiren en iyi biçimde gelir. "Doğum tarihi" sütunu tek başına anlamsızken, ondan üretilen "yaş" değeri güçlü bir sinyaldir. "Sipariş zaman damgası"ndan "haftanın günü", "gündüz/gece", "tatil mi" gibi özellikler çıkarabilirsiniz. İki sütunu birleştirip oran üretebilirsiniz ("borç/gelir oranı"). İşte özellik mühendisliği, alan bilgisini matematiksel sinyale çevirmektir; ve tam da bu yüzden en çok insan zekâsı gerektiren aşamadır.
Kategorik değişkenleri sayıya çevirmek: kodlama
Modeller genellikle sayıyla çalışır, metinle değil. Kategorik değişkenleri (şehir, renk, ürün tipi gibi) sayıya çevirmeye kodlama (İngilizcesiyle encoding) denir. Üç yaygın yöntem:
One-hot kodlama (İngilizcesiyle one-hot encoding): Her kategori için 0/1 değerli ayrı bir sütun açar. "sehir" için İstanbul, Ankara, İzmir sütunları oluşur; bir müşteri İstanbulluysa sadece o sütun 1 olur. Kategori sayısı azken idealdir; çok fazla kategori varsa yüzlerce sütun üretir (buna "boyut patlaması" denir).
Etiket kodlama (İngilizcesiyle label encoding): Her kategoriye bir sayı verir (İstanbul=0, Ankara=1). Basittir ama modele yanlışlıkla bir sıra (Ankara > İstanbul gibi) öğretebilir; bu yüzden sırasız kategorilerde dikkatli kullanılır.
Hedef kodlama (İngilizcesiyle target encoding): Her kategoriyi, o kategorideki hedef değişkenin ortalamasıyla değiştirir. Çok güçlüdür ama en tehlikeli sızıntı kaynağıdır: eğer test verisinin hedefini de hesaba katarsanız model geleceği görmüş olur. Yalnızca eğitim verisinden ve dikkatli (çapraz doğrulama içinde) hesaplanmalıdır.
Ölçekleme: büyük sayılar modeli ezmesin
Bazı modeller (mesafe temelli olanlar, doğrusal modeller, sinir ağları) değişkenlerin ölçeğine duyarlıdır. "gelir" (0-500.000) ile "yaş" (0-100) aynı modele girerse, gelir sadece daha büyük olduğu için baskın çıkabilir. Ölçekleme (İngilizcesiyle scaling) bunu düzeltir. İki yaygın yöntem: standartlaştırma (İngilizcesiyle standardization — her değeri "ortalamadan kaç standart sapma uzakta" biçimine çevirir) ve normalizasyon (İngilizcesiyle min-max normalization — değerleri 0-1 aralığına sıkıştırır). Ağaç temelli modeller (karar ağaçları, random forest) ölçeğe duyarsızdır, onlarda ölçekleme gerekmez.
Dikkat: Ölçekleme ve kodlama parametreleri (ortalama, standart sapma, kategori-ortalama eşlemesi) yalnızca eğitim verisinden hesaplanmalı, sonra aynısı test verisine uygulanmalıdır. Test verisini de hesaba katmak sızıntıdır ve modelinizi gerçekte olduğundan iyi gösterir.
Özellik mühendisliğinde sızıntının kalbi
Özellik üretimi, veri sızıntısının en sık doğduğu yerdir. İki tipik hata: Zaman sızıntısı — geleceğin bilgisini içeren bir özellik üretmek ("son 30 gün ortalaması"nı hesaplarken tahmin gününden sonraki günleri de katmak). İstatistik sızıntısı — bir özelliği (ölçekleme ortalaması, hedef kodlama değeri) tüm veriden hesaplayıp eğitim/test bölmesinden önce yapmak. Kural: her dönüşümü, önce eğitim/test bölünmesini yaptıktan sonra ve yalnızca eğitim verisinden öğrenin. Bunu düzenli yapmanın en güvenli yolu pipeline (İngilizcesiyle işlem hattı — tüm dönüşümleri tek bir zincirde toplayıp bölme sonrası uygulayan yapı) kullanmaktır.
Yöntem
Ne için
Sızıntı riski
Not
One-hot kodlama
Az kategorili değişken
Düşük
Çok kategoride boyut patlar
Etiket kodlama
Sıralı kategori
Düşük
Sırasızda yanlış sıra öğretir
Hedef kodlama
Çok kategorili, güçlü sinyal
Çok yüksek
Sadece eğitimden, CV içinde
Standartlaştırma
Doğrusal/mesafe modelleri
Orta
Parametre sadece eğitimden
Zaman pencereli özellik
Zaman serisi
Yüksek
Geleceği katma
Üç mini vaka
Vaka 1 — Değerli özellik. Bir kredi ekibi, ham "aylık gelir" ve "aylık borç ödemesi" sütunlarından "borç/gelir oranı" özelliğini üretti. Bu tek türetilmiş özellik, model doğruluğunu %71'den %79'a çıkardı; çünkü riski asıl belirleyen mutlak gelir değil, orandı. Ders: alan bilgisiyle üretilen oranlar güçlü sinyaldir.
Vaka 2 — Hedef kodlama sızıntısı. Bir ekip, "posta kodu"nu hedef kodlamayla (o bölgedeki ortalama churn oranı) sayıya çevirdi ama bunu bölme öncesi tüm veriden yaptı. Model test setinde %94 verdi, üretimde %68'e düştü. 6 haftalık emek boşa gitti. Ders: hedef kodlama yalnızca eğitim içinde, dikkatle yapılır.
Vaka 3 — Ölçekleme unutması. Bir analist, mesafe temelli bir modele geliri (0-400.000) ve müşteri yaşını (18-75) ölçeklemeden verdi. Model neredeyse yalnızca gelire baktı, yaş etkisi ezildi. Ölçekleme eklenince segmentasyon anlamlı hâle geldi. Ders: mesafe/doğrusal modellerde ölçekleme ihmal edilmez.
Dört kopyalanabilir şablon
1) Özellik fikri üretme (eleme sende):
Rolün: özellik mühendisliği asistanı. df sütunlarım: dogum_tarihi,siparis_zamani (timestamp), gelir_tl, borc_tl, sehir, urun_kategorisi.Hedef: "kredi geri ödeyecek mi" (0/1). Bu sütunlardan üretilebilecek15 özellik öner; her biri için sızıntı riskini (düşük/orta/yüksek)belirt. Geleceğin bilgisini içerenleri açıkça işaretle.
2) Güvenli kodlama (bölme sonrası):
"sehir" ve "urun_kategorisi"ni one-hot kodlayan kod yaz. ÖNEMLİ:kodlamayı sadece eğitim verisine fit et, sonra test verisine transformuygula (sklearn OneHotEncoder ile). Eğitimde görülmeyen kategoriyinasıl ele aldığını (handle_unknown) açıkla.
3) Pipeline ile sızıntısız dönüşüm:
sklearn Pipeline kur: sayısal sütunlara StandardScaler, kategoriksütunlara OneHotEncoder uygula, sonuna bir sınıflandırıcı ekle.Tüm dönüşümlerin train/test bölmesinden SONRA ve yalnızca eğitimdenöğrenilmesini garanti et. Kodu ve neden sızıntısız olduğunu açıkla.
4) Zaman pencereli özellik (sızıntı kontrolü):
Her müşteri için "son 30 gündeki sipariş sayısı" özelliğini üret amaKESİNLİKLE tahmin gününden sonraki verileri katma. Kodun geleceğebakmadığını satır satır açıkla. Referans tarih sütununu ben vereceğim.
Zayıf prompt / Güçlü prompt
Zayıf prompt:
Bu veriye iyi özellikler ekle.
"İyi" tanımsız, hedef belirsiz, sızıntı kontrolü yok. YZ rastgele, belki sızdıran özellikler üretir.
Güçlü prompt:
Rolün: özellik mühendisi. Hedef: "30 gün içinde churn" (0/1),tahmin referans tarihi: kayit_tarihi. df'te islem geçmişi var.Görev: 8 özellik üret, HER BİRİ için "tahmin anında bu bilgi elimdemi" sorusunu yanıtla. Zaman pencereli özelliklerde referans tarihtensonrasını katma. Kodu train/test bölmesinden sonra uygulanacakbiçimde, pipeline uyumlu yaz.
Burada hedef, referans zaman ve sızıntı kontrolü baştan tanımlıdır.
Sık yapılan hatalar
- Dönüşümü bölme öncesi tüm veriden öğrenmek. Ölçekleme/kodlama parametresi test verisini görürse sızıntı olur.
- Hedef kodlamayı dikkatsiz kullanmak. En güçlü ama en sızdıran yöntemdir; sadece eğitimden, çapraz doğrulama içinde.
- Zaman pencereli özellikte geleceği katmak. "Son 30 gün" hesabına tahmin gününden sonrası girerse model geleceği görür.
- Ağaç modelinde gereksiz, doğrusal modelde eksik ölçekleme. Model tipine göre ölçekleme kararı verilir.
- YZ'nin her özellik önerisini sorgusuz eklemek. Öneriler arasında işe yaramaz ve sızdıran özellikler olabilir.
İpucu: Ürettiğiniz her özellik için tek bir soruyu bir not olarak yazın: "Bu değeri, tahmin yapacağım anda elimde olan bilgiyle hesaplayabilir miyim?" Cevap net "evet" değilse özelliği kullanmayın. Bu tek disiplin, özellik kaynaklı sızıntıların çoğunu eler.
Özetle
Özellik mühendisliği, ham veriden anlamlı sinyaller üretme sanatıdır ve modelin başarısını çoğu zaman algoritmadan daha çok belirler. Kategorikleri kodlama (one-hot, etiket, hedef), sayısalları ölçekleme (standartlaştırma, normalizasyon) ve alan bilgisiyle türev özellikler üretme temel araçlardır. Ama bu aşama aynı zamanda sızıntının kalbidir: tüm dönüşümler eğitim/test bölmesinden sonra ve yalnızca eğitim verisinden öğrenilmelidir. YZ bol fikir üretir; değerliyi tehlikeliden ayıran insan yargısıdır.
Uygulama görevi
Bir hedef değişken belirleyin ve elinizdeki sütunlardan en az beş türev özellik tasarlayın. Her biri için "tahmin anında elimde mi" sorusunu yazılı olarak yanıtlayın ve en az bir tanesini "sızıntı riski yüksek" diye eleyin. Ardından güvenli özellikleri bir pipeline içinde, bölme sonrası uygulanacak biçimde kodlayın.
Kontrol listesi
- [ ] Tüm dönüşümleri train/test bölmesinden sonra mı uyguladım?
- [ ] Ölçekleme/kodlama parametrelerini yalnızca eğitimden mi öğrendim?
- [ ] Her özellik için "tahmin anında elimde mi" sorusunu yanıtladım mı?
- [ ] Hedef kodlama gibi yüksek riskli yöntemlerde ekstra dikkat gösterdim mi?
- [ ] Model tipine uygun (ağaç/doğrusal) ölçekleme kararı verdim mi?