Veri sızıntısı olmadan eğitim, doğrulama ve test bölmek
Bölme ölçütü veri değil kullanım senaryosudur: tahmin geleceğe yapılacaksa zaman temelli, aynı kişi veya cihazdan birden çok satır varsa gruba göre, sınıf dağılımı dengesizse katmanlı bölme kullanılır; koşullar bir arada ise birleştirilir. Bölme özellik çıkarımından önce yapılır ve ölçekleme, eksik doldurma, kodlama parametreleri yalnızca eğitim bölmesinden öğrenilir. Test bölmesi sürüm kararına kadar açılmaz.
ÖNKOŞULLAR
- Satır düzeyinde kimlik taşıyan bir veri kümesi: kayıt kimliği, varsa grup kimliği (kişi, cihaz, müşteri, belge) ve olay zaman damgası
- Modelin üretimde hangi anda ve hangi alanlar elindeyken çalışacağının yazılı tanımı
- Özellik çıkarımını ve eğitimi tek komutla yeniden koşturabilen bir hat; elle hazırlanmış ara dosyalar sızıntıyı gizler
- Hedef değişkenin hangi sistemde ve ne zaman doldurulduğunu bilen bir alan uzmanı
GEREKEN ARAÇLAR
- Grup ve katman destekli bölme fonksiyonları taşıyan bir makine öğrenmesi kütüphanesi
- Veri çerçevesi kütüphanesi
- Dönüşümleri modelle birlikte zincirleyen bir hat (pipeline) soyutlaması
- Bölme tohumunu ve sınırlarını koşuyla birlikte kaydeden bir deney izleyici
- Not defteri veya betik ortamı
- 01
Tahmin anını yaz
Modelin üretimde hangi anda, hangi alanlar elindeyken çalışacağını tek cümleyle yazın; bu cümle hangi alanın özellik, hangisinin sızıntı olduğunu belirler.
Sızıntı tartışmalarının çoğu, herkesin farklı bir tahmin anı varsaymasından çıkıyor. Cümle şu biçimde yazılır: "Model, sipariş oluşturulduktan hemen sonra, ödeme sonucu henüz belli değilken çalışacak." Bu cümle yazıldığı anda veri sözlüğündeki alanların yarısı tartışma dışı kalır: tahmin anında henüz doldurulmamış bir alan, ne kadar güçlü bir sinyal verirse versin özellik olamaz.
Alan Tahmin anında dolu mu? Karar Sipariş tutarı Evet Özellik olabilir Ödeme sonucu Hayır, dakikalar sonra dolar Sızıntı Müşteri kayıt tarihi Evet Özellik olabilir İptal nedeni Hayır, hedefle birlikte dolar Sızıntı Son 30 günlük sipariş sayısı Evet, tahmin anına kadar sayılırsa Koşullu: pencere tahmin anında kapanmalı Son satır en çok hata yapılan yer: geriye dönük türetilen pencere özellikleri, pencereyi tahmin anından sonraya taşırsa sessizce sızıntı üretir. - 02
Kayıt, grup ve zaman kimliklerini çıkar
Her satır için kayıt kimliğini, varsa grup kimliğini ve olay zaman damgasını ayrı sütunlara çıkarın; bölme kararı yalnızca bu üç sütuna dayanır.
Grup kimliği, aynı gerçek dünya varlığından gelen satırları birbirine bağlayan sütundur. Sağlıkta hasta, endüstride cihaz, destek verisinde müşteri, belge işlemede kaynak dosya. Bu sütun çıkarılmadan yapılan her bölme, satırların bağımsız olduğu varsayımına dayanır ve o varsayım çoğu kurumsal veri kümesinde yanlıştır.
- Kayıt kimliği: satırı tekil olarak belirler, tekilleştirme kontrolünde kullanılır.
- Grup kimliği: aynı varlıktan gelen satırları bağlar; yoksa neden olmadığı yazılır.
- Olay zaman damgası: satırın gerçekleştiği an — kayda geçtiği an değil.
- Katman anahtarı: sınıf etiketi veya bölmeler arasında dağılımı korunacak alan.
- Kaynak sistemi: aynı olayın iki sistemden iki kez gelmesi yakın kopya üretir.
Doğrulama adımı: grup başına satır sayısının dağılımına bakın. Ortalama birin belirgin üzerindeyse rastgele bölme baştan elenir. Tek bir grubun toplam satırların büyük bir bölümünü taşıdığı durumlarda ise bölme dengesizleşir; o grubun hangi bölmeye düştüğü sonucu tek başına oynatabilir.
- 03
Bölme stratejisini senaryoya göre seç
Geleceğe tahminde zaman temelli, tekrar eden varlıklarda gruba göre, dengesiz sınıfta katmanlı bölme seçin; birden çok koşul geçerliyse bunları birleştirin.
Strateji seçimi bir tercih değil, bir çıkarım: tahmin anı ve grup yapısı yazıldıysa strateji zaten belirlenmiştir. Tartışma çıkıyorsa genellikle birinci veya ikinci adım eksik yapılmıştır.
Senaryo Bölme Gerekçe Geleceğe tahmin, zaman damgalı olaylar Zaman temelli Üretimde model hep geçmişten öğrenip geleceği tahmin eder Aynı varlıktan çok sayıda satır Gruba göre Model varlığı ezberler, örüntüyü değil Seyrek pozitif sınıf Katmanlı Rastgele bölmede test bölmesi pozitif örneksiz kalabilir Birden çok kurum veya bölge Kaynağa göre ayrılmış Yeni bir kuruma genellemeyi ölçer Bağımsız, zamansız, dengeli satırlar Rastgele Diğer koşullar yoksa geçerlidir Son satır varsayılan değil, istisna: rastgele bölme ancak dört koşulun dördü de sağlanmadığında doğrudur. Koşullar çoğu zaman birlikte gelir, ama gruba göre bölmeyi zaman temelli bölmeyle birleştirmeden önce hangi soruyu ölçtüğünüze karar verin. Model üretimde geçmişini zaten gördüğü müşterileri puanlayacaksa kesim tarihi yeterlidir ve o müşterilerin kesim öncesi satırları eğitimde kalır — üretimde de o geçmiş elinizde olacaktır. Model hiç görmediği müşterileri puanlayacaksa bölme hem zaman temelli hem gruba göre kurulur ve test bölmesine düşen müşterilerin kesim öncesi satırları da eğitimden çıkarılır. İkisini karıştırmak ölçümü kötümser ya da iyimser tarafa kaydırır. Katmanlı gruplu bölme de aynı mantıkla kurulur — katman korunur ama katman uğruna grup bölünmez.
- 04
Zaman temelli bölmede kesim noktası ve bekleme aralığı koy
Eğitim, doğrulama ve test için zaman sırasını koruyan kesim tarihleri seçin ve her kesimin öncesine etiketin olgunlaşma süresi kadar bir bekleme aralığı bırakın.
Etiketin olgunlaşma süresi, olayın gerçekleşmesi ile etiketinin kesinleşmesi arasında geçen zamandır: iade penceresi, tahsilat vadesi, arıza teyidi. Kesim tarihine kadar olan tüm satırları eğitime koyduğunuzda, kesime yakın satırların etiketi veri toplandığı anda henüz kesinleşmemiş olabilir. Bu satırlar hem yanlış etiket taşır hem de test dönemiyle örtüşür.
python import pandas as pd # Kesim tarihleri ve bekleme süresi bu örnekte varsayımdır. KESIM_DOGRULAMA = pd.Timestamp("2025-11-01") KESIM_TEST = pd.Timestamp("2026-01-01") BEKLEME = pd.Timedelta(days=30) # etiketin olgunlaşma süresi egitim = veri[veri.olay_zamani < KESIM_DOGRULAMA - BEKLEME] dogrulama = veri[ (veri.olay_zamani >= KESIM_DOGRULAMA) & (veri.olay_zamani < KESIM_TEST - BEKLEME) ] test = veri[veri.olay_zamani >= KESIM_TEST] # Her kesimin öncesindeki bekleme aralığı hiçbir bölmeye girmez: etiketi # henüz kesinleşmemiş satırlar ne eğitime ne doğrulamaya alınır. assert egitim.olay_zamani.max() < dogrulama.olay_zamani.min() assert dogrulama.olay_zamani.max() < test.olay_zamani.min()Kesim tarihi keyfî seçilmez. Test döneminin, modelin üretimde karşılaşacağı mevsimselliği ve en az bir tam iş çevrimini içermesi gerekir; yalnızca kampanya dönemine denk gelen bir test bölmesi, kampanya dışı davranış hakkında hiçbir şey söylemez. Aynı nedenle tek bir kesim yerine kayan pencereli birkaç kesim kurup sonuçların tutarlılığına bakmak daha güvenilirdir. Doğrulama bölmesi de zaman sırasına uyar: eğitim bölmesinden rastgele ayrılan bir doğrulama kümesi geleceği eğitime geri taşır ve zaman temelli bölmeden kazanılanı geri verir.
- 05
Grup sızıntısını kapat ve doğrula
Aynı kişi, cihaz, müşteri veya belgeden gelen tüm satırlar tek bölmede kalmalı; bölme sonrası grup kesişimini boş küme testiyle otomatik doğrulayın.
Grup sızıntısının etkisi, sızıntı türleri arasında en çok hafife alınanı. Aynı hastanın bir görüntüsü eğitimde, diğeri testteyse model hastalığı değil hastayı tanır; test skoru yüksek çıkar, yeni hastada düşer. Ölçüm ile üretim arasındaki bu fark, model değiştirerek kapatılamaz çünkü sorun modelde değil bölmede.
python from sklearn.model_selection import GroupShuffleSplit bolucu = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=0) egitim_idx, test_idx = next(bolucu.split(X, y, groups=veri.hasta_kimligi)) egitim_gruplari = set(veri.hasta_kimligi.iloc[egitim_idx]) test_gruplari = set(veri.hasta_kimligi.iloc[test_idx]) # Bu doğrulama testlere konur; elle bir kez bakmak yetmez. assert not (egitim_gruplari & test_gruplari), "grup sızıntısı"Grup kimliği her zaman hazır gelmez. Metin kümelerinde aynı haberin farklı sitelerdeki sürümleri, görsel kümelerinde aynı sahnenin ardışık kareleri, destek kayıtlarında kopyalanmış şablon cevaplar farklı kimlik taşır ama aynı bilgiyi içerir. Bu durumda grup kimliği türetilir: yakın kopyalar kümelenir ve küme numarası grup olarak kullanılır.
- 06
Dönüşümleri bölmeden sonra öğren
Ölçekleme, eksik doldurma, kodlama ve özellik seçimi parametrelerini yalnızca eğitim bölmesinden öğrenin; doğrulama ve testte aynı parametreleri yeniden hesaplamadan uygulayın.
Bu adımın kuralı tek cümlede özetlenir: bölmelerin dışında hiçbir istatistik hesaplanmaz. Kural basit ama ihlali kolay, çünkü keşif aşamasında tüm veri üzerinde hesaplanan bir ortalama, farkında olmadan modelleme koduna taşınıyor.
- Ölçekleme: ortalama ve standart sapma yalnızca eğitim bölmesinden.
- Eksik doldurma: medyan, mod veya tahmin modeli eğitim bölmesinden öğrenilir.
- Kategori kodlama: hedefe dayalı kodlama sızıntının en sık kaynağıdır; bölme içi çapraz kodlama gerekir.
- Özellik seçimi: tüm veride korelasyona bakıp sütun elemek de sızıntıdır.
- Aykırı değer eşiği: yüzdelikler eğitim bölmesinden hesaplanır.
- Örnekleme dengeleme: yalnızca eğitim bölmesine uygulanır, doğrulama ve test gerçek dağılımı korur.
python from sklearn.compose import ColumnTransformer from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler hazirlik = ColumnTransformer([ ("sayisal", Pipeline([ ("doldur", SimpleImputer(strategy="median")), ("olcekle", StandardScaler()), ]), sayisal_sutunlar), ]) hat = Pipeline([("hazirlik", hazirlik), ("model", model)]) hat.fit(X_egitim, y_egitim) # medyan ve ölçek yalnızca eğitimden öğrenilir skor = hat.score(X_dogrulama, y_dogrulama) - 07
Çapraz doğrulamayı aynı kurala uydur
Çapraz doğrulama katlarını da grup ve zaman kuralına uydurun; rastgele k-kat, gruplu veride tek bölmedeki sızıntının aynısını k kez üretir.
Çapraz doğrulama, tek bölmenin rastlantısını azaltmak için kullanılır; sızıntıyı azaltmaz. Bölme kuralı neyse katlama kuralı da odur. Bu nokta gözden kaçtığında ekip, tek bölmede fark edilebilecek bir sızıntıyı ortalamanın altında gizlemiş olur.
Bölme kuralı Karşılığı olan çapraz doğrulama Dikkat Zaman temelli İleri doğru kayan pencere Her kat yalnızca kendinden önceki veriyle eğitilir Gruba göre Gruplu k-kat Grup, katlar arasında bölünmez Katmanlı Katmanlı k-kat Sınıf oranı her katta korunur Gruplu ve katmanlı Katmanlı gruplu k-kat Katman yaklaşık korunur; grup bütünlüğü önceliklidir Kaynağa göre Kaynak dışarıda bırakma Her katta bir kurum veya bölge tamamen dışarıda kalır Katlar arasındaki skor dağılımı da bir bilgi taşır. Katlar arasında geniş bir yayılım, modelin kararsız olduğunu veya katların birbirinden yapısal olarak farklı olduğunu gösterir; ortalamayı tek başına raporlamak bu bilgiyi siler. Kat başına skorları ve hangi katın hangi dönemi ya da kaynağı kapsadığını birlikte yazın.
- 08
Sızıntı izlerini denetle
Beklenenden yüksek doğruluk, tek bir baskın özellik ve eğitim ile test farkının kapanması sızıntı işaretidir; her birini kaynağına kadar takip edin.
Sızıntıyı kesin olarak gösteren tek bir test yok; birlikte görüldüğünde neredeyse hep sızıntıya çıkan belirtiler var. Ortak yanları şu: sonuç, alan uzmanının problemin zorluğu hakkındaki sezgisiyle çelişir. Bu yüzden ilk denetim aracı bir metrik değil, sonucun alan uzmanına gösterilmesidir.
Belirti Muhtemel kaynak Bakılacak yer Doğruluk alan uzmanını şaşırtacak kadar yüksek Hedeften türetilmiş alan Özellik önem sıralamasının ilk üçü Tek özellik önemin neredeyse tamamını taşıyor Hedefin vekili olan sütun O sütunun hangi sistemde ne zaman dolduğu Eğitim ve test skoru neredeyse eşit Test satırları eğitimde de var Kayıt kimliği ve yakın kopya kontrolü Zaman temelli bölmede skor, rastgele bölmedekinden çok düşük Rastgele bölmede sızıntı vardı Pencere özelliklerinin kapanış anı Canlıda skor düşüyor, çevrimdışı yüksek Tahmin anı yanlış varsayılmış Üretimde alanların dolma sırası Beş belirtinin beşi de modelde değil, hattın önceki adımlarında çözülür. Şüpheli bir alanı doğrulamanın en hızlı yolu onu çıkarıp modeli yeniden eğitmek. Skor sert biçimde düşüyorsa alan gerçekten taşıyıcıdır ve tahmin anında var olup olmadığı tek tek doğrulanmalıdır. İkinci yol hedefi karıştırmak: etiketler rastgele karıştırıldığında model hâlâ rastgeleden iyi sonuç veriyorsa, hat bir yerde etiket bilgisini girdiye taşıyor demektir.
- 09
Bölmeyi dondur ve sürümle
Kesim tarihi, grup listeleri ve tohum dâhil bölme sınırlarını kayıt altına alın; test bölmesini yalnızca sürüm kararında açın ve kaç kez açıldığını yazın.
Bölme, veri kümesinin bir özelliği değil deneyin bir parçasıdır; yeniden üretilemiyorsa karşılaştırma da yapılamaz. İki modelin skorunu karşılaştırmanın ön koşulu ikisinin aynı bölmede ölçülmüş olmasıdır ve bu, tohumu koda gömmekle değil bölmeyi kaydetmekle sağlanır.
- 01Bölme stratejisini ve gerekçesini tek paragrafla yazın.
- 02Zaman temelli bölmede kesim tarihini ve bekleme aralığını kaydedin.
- 03Grup bölmesinde grup kimliği listelerini veya üretimi belirleyen tohumu saklayın.
- 04Bölme başına satır ve sınıf sayılarını kaydedin; sonraki koşularda karşılaştırma için.
- 05Test bölmesinin her açılışını tarih ve gerekçesiyle kaydedin.
SIK DÜŞÜLEN TUZAKLAR
Bölmeden önce ölçekleme yapmak
Tüm veri üzerinde hesaplanan ortalama ve standart sapma, test satırlarının bilgisini eğitime taşır. Sonuç, üretimde tekrarlanmayan bir doğruluk artışıdır ve fark genellikle ancak canlıda görülür.
Yakın kopyaları tekilleştirmemek
Aynı içerik iki bölmede birden bulunduğunda model test sırasında ezberlediği satırı görür. Metin ve görsel kümelerinde bu çoğunlukla tam kopya değil yakın kopya biçimindedir ve kayıt kimliği eşitliğiyle yakalanamaz.
Hedeften türetilmiş alanı özellik olarak bırakmak
Hedefle birlikte doldurulan alanlar — kapanış nedeni, iptal tarihi, son durum kodu — neredeyse kusursuz bir model üretir. Bu alanlar tahmin anında henüz yoktur; model üretime çıktığında hepsi boş gelir.
Rastgele k-kat çapraz doğrulamayı varsayılan saymak
Aynı hastanın, müşterinin veya cihazın satırları katlara dağıldığında her kat kendi sızıntısını üretir ve ortalama bunu gizler. Rastgele k-kat yalnızca satırlar gerçekten bağımsızsa doğrudur.
Test bölmesini defalarca açmak
Her bakış, ekibin eşikleri ve özellik seçimini o bölmeye göre ayarlamasına yol açar. Test bölmesi bir süre sonra sessizce ikinci bir doğrulama bölmesine dönüşür ve koruma işlevini kaybeder.
KONTROL LİSTESİ
- Tahmin anı ve o anda erişilebilir alanlar tek cümleyle yazılı
- Her satırda kayıt kimliği var; tekrar eden varlıklar için grup kimliği tanımlı
- Bölme stratejisi kullanım senaryosuna gerekçelendirilerek seçildi
- Zaman temelli bölmede kesim tarihi ve bekleme aralığı belgelendi
- Bölmeler arası grup kesişimi otomatik bir testle boş küme olarak doğrulanıyor
- Tüm dönüşüm parametreleri yalnızca eğitim bölmesinden öğreniliyor
- Çapraz doğrulama katları aynı grup ve zaman kuralına uyuyor
- Test bölmesinin kaç kez ve hangi gerekçeyle açıldığı kayıtlı
Maddelerin tamamı işaretlenmeden kurulum üretime alınmamalı.
Sık sorulan sorular
Eğitim, doğrulama ve test oranı kaça bölünmeli?
Sabit bir oran yok; belirleyici olan test bölmesinin kararı taşıyıp taşımadığı. Oranı seçmeden önce şunu hesaplayın: seçtiğiniz oranla test bölmesinde en seyrek sınıftan kaç örnek kalıyor? O sayı, iki model arasındaki farkı görmenize yetmeyecek kadar küçükse oran yanlıştır. Küçük kümelerde tek bir doğrulama bölmesi ayırmak yerine çapraz doğrulama artı ayrı tutulmuş bir test bölmesi daha güvenilir sonuç verir.
Zaman serisinde rastgele bölme neden yanlış?
Rastgele bölme, geleceğe ait satırları eğitime karıştırır; model üretimde asla sahip olmayacağı bilgiyle öğrenir. Etkisi iki yönlü: aynı döneme ait komşu satırlar hem eğitimde hem testte bulunur ve modele o dönemin genel eğilimi doğrudan verilmiş olur. Doğrusu bir kesim tarihi seçmek, eğitimi kesimden önceye, testi kesimden sonraya almak ve ikisinin arasına etiketin olgunlaşma süresi kadar bir bekleme aralığı koymaktır.
Veri sızıntısı olduğunu nasıl anlarım?
Kesin bir test yok; üç işaret birlikte görüldüğünde neredeyse hep sızıntı vardır: sonuç alan uzmanının beklentisini aşar, özellik önemi tek bir sütunda toplanır ve eğitim ile test skoru arasındaki fark beklenmedik biçimde kapanır. Doğrulama yolu şüpheli sütunu çıkarıp yeniden eğitmek; skor sert düşüyorsa o sütunun tahmin anında dolu olup olmadığını yazan sisteme sorun.
Aynı kişiden birden çok kayıt varsa nasıl bölerim?
Gruba göre bölersiniz: o kişinin tüm satırları tek bir bölmede kalır. Kütüphanelerin gruplu bölme fonksiyonları bunu yapar, ama asıl iş grup kimliğini doğru tanımlamaktır — aynı kişi iki farklı müşteri numarasıyla kayıtlıysa grup kimliği kişiyi değil numarayı temsil eder ve sızıntı sürer. Bölme sonrası kesişim testini otomatik testlere ekleyin; elle yapılan tek seferlik kontrol yeni veri geldiğinde tekrarlanmaz.
Kaynaklar
- 01Makine öğrenmesi kütüphanelerinin bölme ve çapraz doğrulama dokümantasyonları — Açık kaynak kütüphane projeleri · Dokümantasyon
- 02Veri kümesi künyesi (datasheet) ve veri kartı uygulamaları — Araştırma topluluğu · Makale
- 03Sinaptik Research — veri hattı denetim notları — Sinaptik Lab · Teknik rapor
BUILD
Bu rehberi kurumunuzda uygulayalım mı?
Aynı mimariyi kendi verinizle kurmak için discovery oturumundan üretime kadar birlikte ilerliyoruz.
