Veri Sızıntısı (Data Leakage): ML Projelerinin En Sık "Sessiz Katili"
Test setinde %99 doğruluk, üretimde %60. Aradaki fark sizi öldürür. Veri sızıntısı, ML hatalarının kralı.

"Modelim %99 doğru, ama üretimde patladı"
Her veri bilimci bunu yaşar. Nedeni: data leakage (veri sızıntısı).
Tanım: model eğitim sırasında, gerçek dünyada erişemeyeceği bilgiyi kullanır. Test seti aldatıcı yüksek skor verir.
Türler
1. Target leakage
Hedef değişken, özellik olarak modele veriliyor (doğrudan veya dolaylı).
Klasik örnek: hastalık tahmini.
- Özellikler arasında: "antibiyotik aldı mı?"
- Hasta antibiyotik aldıysa zaten hasta → mükemmel ama anlamsız tahmin.
Çözüm: hedefin sonucu olabilecek özellikleri çıkar.
2. Train-test contamination
Test verisi eğitime karışmış.
Örnek:
- Aynı müşteri hem train hem test sette.
- Aynı resim farklı augmentation ile her ikisinde.
- Hisse senedi: aynı şirket farklı tarihlerde.
Çözüm: dikkatli split (grup, zaman bazlı).
3. Time travel
Geleceğin bilgisini geçmişin tahminine kullanma.
Örnek: 2024 satış tahmini için 2024 ortalamasını feature kullanma.
Çözüm: rolling/expanding window — sadece o ana kadar olan bilgi.
4. Preprocessing sızıntısı
# YANLIŞ:
scaler.fit(X_all) # tüm veri ile fit
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Scaler test setinin istatistiklerini öğrendi.
# DOĞRU:
scaler.fit(X_train)
X_test = scaler.transform(X_test)
5. Cross-validation hatası
# YANLIŞ:
X_imputed = imputer.fit_transform(X)
cross_val_score(model, X_imputed, y, cv=5)
Imputer tüm veriden imputation öğrendi.
# DOĞRU:
pipeline = make_pipeline(imputer, model)
cross_val_score(pipeline, X, y, cv=5)
Pratik örnekler
Telekom churn
Sızıntı: "müşterinin iptal sebebi" özelliği — iptal sonrası giriliyor.
Çözüm: sadece iptal tarihinden ÖNCEKİ bilgiler.
Kredi onay
Sızıntı: "kredi sonrası gelir değişimi".
Çözüm: sadece başvuru tarihindeki bilgiler.
Tıbbi tanı
Sızıntı: görüntü dosya isminde "kanser_var" ibaresi (yanlışlıkla ID).
Çözüm: metaverileri temizle.
Reklam tıklama
Sızıntı: "kullanıcı sayfada ne kadar kaldı" — sadece tıkladıysa biliyoruz.
Çözüm: post-hoc bilgiler dışla.
Tespit yolları
1. Aşırı yüksek skor şüphesi
Test doğruluğunuz %99'a yakınsa: şüphelen. Çoğu ML problemi bu kadar kolay değil.
2. Feature importance
Tek bir özellik tüm açıklama gücüne sahipse: muhtemelen sızıntı.
3. Reverse engineering
"Bu özellik üretim zamanında var olur mu?" sorusunu her özellik için sor.
4. Train vs prod karşılaştırması
Üretim performansı eğitimden çok düşükse: sızıntı + overfitting karışımı.
Önleme stratejileri
1. Pipeline kullan
scikit-learn pipeline veya MLflow ile eğitim-değerlendirme akışını tek nesne olarak yönet.
2. Stratified, group, time-based split
- Sınıflandırma: stratified split.
- Müşteri tahmini: müşteri bazında split (aynı müşteri tek tarafta).
- Zaman serisi: zamana göre split (geleceği görme).
3. Cross-validation içinde tüm ön işleme
Imputation, scaling, feature engineering — hepsi CV içinde.
4. Hold-out test
CV ile model seçimi → hold-out sette son test.
5. Domain expert ile gözden geçirme
Tıbbi proje: doktor ile özellikleri kontrol et.
Modern AI'da
LLM çağında yeni sorun: benchmark contamination.
MMLU, HumanEval, GSM-8K test setlerinin internet üzerinde olması → model eğitiminde görür.
Sonuç: rapor edilen benchmark skorları şişirilmiş.
Çözüm: yeni, gizli benchmarks (LMSYS Arena, Hidden eval).
Türk vakaları
- Bir Türk fintek: kredi modeli %95 AUC → üretimde %72. Sızıntı: başvuru tarihinden sonraki ödeme.
- E-ticaret churn: müşteri ID'sinde gizli pattern.
- Sigorta tarama: COVID döneminde tıbbi veride zaman sızıntısı.
Kapanış
Veri sızıntısı görünmez ama öldürücü. Bir veri bilimci için en önemli beceri: şüpheci olmak. Her başarılı modeli sorgula: "Acaba sızıntı mı var?"
Kahin sözü: yüksek test skorunu kutlama → araştır. Çünkü asıl test üretimde başlar.
Etiketler
Kendinizi Test Edin
Cevaplarınız profilinizde istatistik olarak saklanır.
1. Data leakage nedir?
2. Klasik target leakage örneği?
3. Preprocessing sızıntısı nasıl önlenir?
4. Zaman serisi için doğru split?
5. Modern AI'da yeni sızıntı türü?
İlgili Yazılar
Sekreter Problemi: Hayatın En İyi Seçimini Yapmak için "%37 Kuralı"
Bir işe alma görüşmesi, bir ev arama süreci, hatta hayat arkadaşı seçimi… Hepsinin altında aynı klasik matematik problemi yatar. Cevap şaşırtıcı biçimde tek bir sayıya bağlıdır: %37.
MatematikPisagor Teoremi ve Saklı Bir Sır: İrrasyonel Sayılar Nasıl Keşfedildi?
Dik üçgenlerle ilgili o ünlü kural, aynı zamanda matematik tarihinin en sarsıcı keşfine yol açtı: kesir olarak yazılamayan sayılar. Üstelik bu keşif, bir bilim topluluğunu temellerinden sarstı.
MatematikFibonacci Dizisi ve Altın Oran: Tavşanlardan Ayçiçeklerine Uzanan Örüntü
Bir tavşan üretme bilmecesiyle başlayan basit bir sayı dizisi, ayçiçeği tohumlarından çam kozalaklarına, deniz kabuklarından galaksilere kadar doğanın her yerinde nasıl karşımıza çıkıyor?