Önceki yazımda, veri sızıntısının ne olduğu, türleri, nasıl oluştuğu ve özellikle ölçeklendirme gibi kritik adımlarda nasıl fark edilmeden oluşabileceğini detaylıca ele almıştım. Şimdi ise gerçek dünyadan örneklerle veri sızıntısı vakalarını inceleyerek, bu hataları nasıl fark edebileceğimizi ve etkili yöntemlerle nasıl önleyebileceğimizi adım adım anlatacağım.
1. Aşırı Yüksek Performans: Modelin doğruluk ya da F1 skoru beklenmedik şekilde yüksekse, mannequin take a look at verisinden veya hedef değişkenden dolaylı bilgi alıyor olabilir. Örneğin, bir hastanın taburcu olup olmadığını tahmin ederken, taburcu tarihinin kullanılması veri sızıntısıdır.
2. Eğitim ve Check Arasındaki Performans Farkı: Eğitim verisinde çok başarılı ama take a look at verisinde başarısız modeller, eğitim sırasında görmemesi gereken verileri öğrenmiş olabilir. Örneğin, kredi skorlamada müşterinin son ödeme tarihinin eğitim verisinde bulunması sızıntı yaratır.
3. Çapraz Doğrulamada Tutarsızlıklar: Bazı çapraz doğrulama katmanlarında performans çok yüksekken bazılarında düşükse, mannequin gizli bilgi almış olabilir.
4. Bazı Özelliklerin Aşırı Önemli Olması: Özelliklerin aşırı yüksek öneme sahip olması, bu girdilerin hedefle doğrudan veya dolaylı bağlantılı olduğuna işaret eder.
5. Beklenmedik Mannequin Davranışları: Mannequin eğitim verisinde çok iyi performans gösterirken gerçek dünya verilerinde başarısızsa, bu veri sızıntısından kaynaklanabilir.
6. Veri Ön İşleme Hataları: Eğitim ve take a look at verilerinin ön işleme sırasında karıştırılması, take a look at verisinden bilgi sızmasına neden olur.
7. Akran Değerlendirmeleri ve İş Birliği: Projeyi başka bir gözle inceleyecek ekip arkadaşları, fark etmediğiniz veri sızıntılarını ortaya çıkarabilir.
8. Otomatik Veri Sızıntısı Kontrollerinin Eksikliği: Büyük veri setlerinde otomatik sızıntı tespit araçları kullanmak önemlidir. Örneğin, sklearn kütüphanesindeki permutation_importance
fonksiyonu şüpheli bağımlılıkları keşfetmekte faydalıdır.
9. Zaman İçinde Performans Düşüşü: Mannequin eski verilere göre iyi performans verirken yeni verilerde kötü sonuç veriyorsa, önceki başarılar sızıntıdan kaynaklanıyor olabilir.
10. Özellik Duyarlılığı Analizi: Bir özelliği çıkardığınızda performans çok düşüyorsa, o özellik veri sızıntısına yol açıyor olabilir.
1. Pipeline ile Veri Sızıntısını Önlemek
Pipeline (Boru hatları), çapraz doğrulama sırasında take a look at verilerinizden eğitilen modele istatistik sızdırılmasını önlemeye yardımcı olur ve dönüştürücüleri ve öngörücüleri eğitmek için aynı örneklerin kullanılmasını sağlar.
❌ Örnek Hatalı Uygulama:
Min-Max Normalizasyon gibi dönüşümler tüm veri seti üzerinde yapıldığında (örneğin, pandas ile doğrudan df['feature']
üzerinde tüm veri için min-max scaling yapmak), take a look at verisinden eğitim sürecine bilgi sızar. Çünkü bu işlem, take a look at verisinin dağılım bilgilerini de eğitim verisine karıştırır ve modelin gerçek performansını yanıltır.
✅ Doğru Yaklaşım:
Pipeline kullanarak, MinMaxScaler yalnızca eğitim verisi üzerinde match edilir, take a look at verisi ise sadece dönüşümden geçirilir. Bu sayede veri sızıntısı önlenir.
2. Goal Encoding’de Veri Sızıntısı
Hedef sızıntısı, modelin eğitim aşamasında, tahmin etmeye çalıştığı hedef değişkenle doğrudan veya dolaylı olarak ilişkili bilgileri kullanması durumudur. Bu, modelin gelecekte ulaşamayacağı bilgileri öğrenmesine ve gerçek dünyadaki performansının abartılmasına yol açar.
Özellikle karmaşık veri kümelerinde, hedef değişkeni etkileyen ya da onunla çok yakın ilişkili olan başka değişkenlerin modele dahil edilmesi hedef sızıntısına neden olabilir. Örneğin, modelin eğitildiği veri setinde hedef değişkene bağlı bazı bilgilerin yanlışlıkla dahil edilmesi veya veri ön işleme sırasında eğitim verisinin tamamının kullanılması bu durumu tetikler.
❌ Örnek Hatalı Kod:
Bu satır, hem eğitim hem take a look at verisi üzerinde yapılırsa, take a look at verisine ait goal
bilgisi encoding sırasında kullanılır → information leakage olur.
✅ Doğru Yöntem:
Cross-validation içinde goal encoding uygulanmalı.
3. Zaman Serisi Veri Sızıntısı
Zamansal veri sızıntısı, zaman serisi verileriyle çalışan modellerin eğitim aşamasında, geleceğe ait bilgilere doğrudan ya da dolaylı şekilde erişmesiyle oluşur. Bu durum, modelin doğruluk sonuçlarını yapay olarak yükseltir ve gerçek dünyadaki performansını olumsuz etkiler.
Bu sızıntı genellikle iki şekilde ortaya çıkar:
- Uygunsuz Zamansal Bölme: Eğitim ve take a look at verilerinin zaman sırası gözetilmeden bölünmesi sonucunda, mannequin eğitim aşamasında gelecekteki verilere maruz kalır. Bu, modelin gerçek dışı şekilde yüksek başarı göstermesine neden olur.
- Geriye Dönük Özellik Hesaplaması: Mannequin için oluşturulan bazı özelliklerin, gelecekteki zaman noktalarına ait bilgileri içermesi durumunda sızıntı oluşur. Bu tür özellikler, eğitim verisinde aslında mevcut olmaması gereken bilgileri barındırır ve modeli yanıltır.
❌ Örnek Hatalı Break up:
Bu rastgele bölme, gelecekteki tarihlere ait verilerin eğitim setine düşmesine neden olabilir.
✅ Doğru Yaklaşım:
Zaman tabanlı cut up kullanılmalı.
Veya TimeSeriesSplit
kullanılmalı:
Senaryo:
Makine öğrenmesi projemde Pokémon veri setini kullandım ve hedefim, bir Pokémon’un efsanevi (legendary) olup olmadığını tahmin etmekti. Bu sınıflandırma problemi için çeşitli algoritmalar uygulayarak mannequin performanslarını karşılaştırmak istedim.
Veri setinde, Legendary
adında Boolean (True/False) bir sütun vardı. Bu sütun hedef değişkenim olacaktı. Bununla birlikte, aynı bilgiyi taşıyan legendary_label
adında bir sütun daha oluşturdum:
❗ Kontrollü Veri Sızıntısı Deneyi
Bu noktada, bilinçli olarak bir veri sızıntısı senaryosu oluşturmak ve bunun mannequin performansı üzerindeki etkisini gözlemlemek istedim. Yani, legendary_label
gibi hedef değişkenin birebir kopyası olan bir sütunu, eğitim ve take a look at verisinde tutarak modeli bu şekilde eğittim:
⚠️ Ne Oldu?
Modeli böyle eğittiğimde, özellikle LightGBM, XGBoost, CatBoost ve Random Forest gibi güçlü ensemble modellerin take a look at verisinde %100 doğruluk verdiğini gördüm. Çünkü mannequin, legendary_label
sütunu sayesinde take a look at verisini önceden biliyor gibiydi.
KNN ve SVM gibi modellerde ise veri sızıntısının etkisi daha sınırlı kaldı çünkü bu algoritmalar güçlü sinyalleri ensemble yöntemler kadar iyi yakalayamıyor.
✅ Doğru Yaklaşım
Deneyin ardından, modeli gerçekçi şekilde değerlendirebilmek için legendary_label
sütununu veri setinden çıkardım:
⚠️ Ne Oldu?
Bu kez modellerin skorları daha düşük ama gerçekçi oldu. Böylece veri sızıntısının etkisini doğrudan gözlemleme fırsatı yakaladım.
Çıkarım:
Veri sızıntısı, modelin take a look at verisinde gerçek etiketleri “önceden bilmesine” yol açabilir. Bu durum, modelin tahmin yeteneğini olduğundan çok daha iyiymiş gibi gösterir. Özellikle güçlü modellerde (LightGBM, XGBoost, CatBoost) bu sızıntı etkisi dramatik biçimde ortaya çıkabilir. Dolayısıyla modelleme sürecinde bu tür sütunların dikkatlice kontrol edilmesi gerekir.
- Veri Hazırlığını Çapraz Doğrulama İçinde Yap: Ölçekleme, temizleme ve özellik seçimi gibi işlemleri her katmanda ayrı ayrı uygulayarak sızıntıyı önleyin.
- Doğrulama Veri Seti Sakla: Modelin gerçek performansını görmek için görülmemiş bir doğrulama seti kullanın.
- Veri Bölme İşlemine Dikkat Et: Eğitim ve take a look at verilerini kesin şekilde ayırın.
- Boru Hatları (Pipeline) Kullanın: Veri hazırlama ve mannequin eğitimi adımlarını pipeline ile bağlayarak işlem sırasını koruyun.
- Sızdıran Özellikleri Tespit Et ve Kaldır: Hedefle doğrudan bağlantılı kimlik, tarih gibi sütunları analiz edin ve çıkarın.
- Zaman Bazlı Kesme Uygula: Mannequin için sadece olay öncesi verileri kullanarak zaman bazlı sızıntıyı önleyin.
- Modeli Bağımsız Veriyle Check Et: Daha önce hiç kullanılmamış veri setlerinde performans ölçün.
- Gürültü Ekleyerek Sızdırmayı Azalt: Gerektiğinde giriş verilerine küçük rastgele gürültü ekleyin.
Veri sızıntısı, mannequin performansını yapay olarak şişirmenin ötesinde, projenin güvenilirliğini ve sürdürülebilirliğini ciddi şekilde tehdit eder. Gerçek dünyadaki başarımı düşürür, güven kaybına yol açar.
Bu nedenle;
- Veri işlemlerinin her çapraz doğrulama katmanında ayrı ayrı yapılması,
- Bağımsız ve görülmemiş doğrulama setlerinin kullanılması,
- Hedefle doğrudan bağlantılı özelliklerin dikkatle analiz edilip çıkarılması,
- Otomatik pipeline yapılarının kullanılması,
- Zaman serisi verilerinde zaman bazlı kesme yöntemlerinin uygulanması,
şarttır.
Erken aşamada veri sızıntısını fark etmek, sadece mannequin doğruluğunu gerçekçi kılmakla kalmaz; etik, sağlam ve sürdürülebilir modeller geliştirilmesini sağlar.