Doğrulamayı üretimin kopyası olarak tasarlamak
Rastgele katlamanın, grup katlamasının ve zaman ayrımının hangi veri yapısında geçerli olduğunu; model seçiminin doğrulama skorunu neden iyimserleştirdiğini ve kırık bir ayrımın nasıl teşhis edileceğini öğretir.
Önkoşul: Machine Learning, MLOps
BU DERSİN SONUNDA
- Veri yapısına uygun doğrulama şemasını seçmek
- Grup ve zaman kaynaklı ayrım sızıntısını önlemek
- Model seçiminin ürettiği iyimserliği ayrı bir kümeyle sınırlamak
- Kırık bir ayrımı skor örüntüsünden teşhis etmek
- 1
Teori
Kavramın çalışma mantığı
- 2
Örnek
Gerçek bir senaryo üzerinde gösterim
- 3
Lab
Uygulamalı alıştırma
- 4
Test
Kısa ölçüm
- 5
Proje
Rotadaki projeye katkı
Kısa cevap
Doğrulama tasarımı, üretimdeki tahmin durumunun küçük bir kopyasını kurmaktır. Üretimde model geçmişe bakıp geleceği tahmin ediyorsa doğrulama da öyle olmalıdır; üretimde daha önce hiç görülmemiş müşterileri puanlıyorsa aynı müşterinin kayıtları doğrulamada iki tarafa dağılmamalıdır. Ayrım yanlışsa ölçülen her sayı yanlıştır ve model seçimi de hiperparametre araması da o yanlış sayının üzerine kurulur.
Teori: ayrım bir varsayımdır#
Rastgele k-katlamalı doğrulama, satırların birbirinden bağımsız ve aynı dağılımdan geldiğini varsayar. Gerçek veri bu varsayımı çoğu zaman karşılamaz: aynı müşteriye ait onlarca kayıt vardır, kayıtlar zamana göre sıralıdır, aynı cihazdan ya da aynı şubeden gelen satırlar birbirine benzer. Bu bağımlılıklar rastgele bölmede eğitim ile doğrulama arasında köprü kurar; model ezberlediğini genelleme sanır.
Zaman boyutu iki ayrı sorun üretir. Birincisi bilgi yönü: geleceğe ait satırlarla eğitip geçmişi tahmin etmek üretimde asla olmayacak bir durumdur. İkincisi kayma: hedefin dağılımı ve değişkenlerin anlamı zamanla değişir. Zaman ayrımı ikisini birden ölçer; rastgele ayrım ikisini de gizler ve gerçekte olmayan bir kararlılık raporlar.
Üçüncü katman doğrulama kümesinin kendisinin aşınmasıdır. Aynı küme üzerinde çok sayıda ayar denendiğinde en iyi görünen ayar bir miktar gürültüye uymuş olur; raporlanan skor iyimserdir. Bu yüzden seçim yapılan küme ile son skorun okunduğu küme ayrılır: seçim doğrulama katlamalarında yapılır, tek seferlik okuma hiç dokunulmamış bir test diliminde yapılır.
Örnek: yapıya göre şema#
| Veri yapısı | Doğru şema | Rastgele ayrım yapılırsa |
|---|---|---|
| Bağımsız kayıtlar, zaman etkisi yok | Katmanlı k-katlama | Genellikle sorun çıkmaz |
| Aynı varlığa ait çok sayıda kayıt | Gruba göre katlama | Model varlığı ezberler, skor şişer |
| Zamana bağlı, ileriye tahmin | Kayan başlangıçlı zaman ayrımı | Gelecekten geçmişe bilgi sızar |
| Hem zamana bağlı hem gruplu | Zaman ayrımı içinde grup bütünlüğü | İki sızıntı birden oluşur |
| Nadir sınıf, az sayıda pozitif | Katmanlı ve tekrarlı katlama | Katlamalar arası skor sıçrar, karar güvenilmez olur |
| Şube ya da coğrafya bazlı yayılım | Şubeye göre katlama | Aynı şubenin kayıtları iki tarafta kalır, genelleme ölçülemez |
Zaman ayrımı ve boşluk#
Zaman ayrımında iki ayar belirleyicidir. Birincisi kayan başlangıç: eğitim penceresi ileri doğru kaydırılarak birden çok kat üretilir, çünkü tek bir kesme noktası o noktanın tesadüfi özelliklerine bağımlı bir sonuç verir. İkincisi boşluk: eğitim sonu ile doğrulama başlangıcı arasında, etiketin olgunlaşma süresi kadar bir aralık bırakılır. Etiket iki ay sonra kesinleşiyorsa eğitim penceresinin son iki ayı henüz güvenilir etiket taşımaz.
from datetime import timedelta
def kayan_baslangic_katlari(tarihler, kat_sayisi, dogrulama_gun, bosluk_gun):
"""Zaman sıralı veride eğitim/doğrulama indeks çiftleri üretir.
tarihler: her satırın tahmin anı
kat_sayisi: üretilecek katlama sayısı
dogrulama_gun: her katın doğrulama penceresi uzunluğu
bosluk_gun: etiketin olgunlaşma süresi kadar bırakılan aralık
"""
# Üst sınır dışlayıcı olduğu için bir gün eklenir; aksi halde en son
# tarihli kayıtlar hiçbir doğrulama penceresine düşmez.
son = max(tarihler) + timedelta(days=1)
pencere = timedelta(days=dogrulama_gun)
bosluk = timedelta(days=bosluk_gun)
for i in range(kat_sayisi, 0, -1):
bitis = son - (i - 1) * pencere
baslangic = bitis - pencere
egitim_bitis = baslangic - bosluk
egitim = [j for j, t in enumerate(tarihler) if t < egitim_bitis]
dogrulama = [
j for j, t in enumerate(tarihler) if baslangic <= t < bitis
]
if egitim and dogrulama:
yield egitim, dogrulamaKarar: şema nasıl kurulur#
- 1Üretim durumunu yaz
Model üretimde neyi ilk kez görüyor: yeni bir zaman dilimini mi, yeni bir müşteriyi mi, yeni bir şubeyi mi?
- 2Ayrım eksenini seç
Yeniliğin geldiği eksen ayrım eksenidir: zaman, grup ya da ikisi birden.
- 3Boşluğu ve pencereyi belirle
Etiketin olgunlaşma süresi kadar boşluk; iş döngüsünün en az bir turunu kapsayan uzunlukta doğrulama penceresi.
- 4Seçim ve ölçüm kümelerini ayır
Hiperparametre ve özellik seçimi katlamaların içinde kalsın; son okuma hiç dokunulmamış dilimde yapılsın.
- 5Şemayı dondur
Ayrımı bir kez yazıp sabitleyin; skor beklenenden düşük çıktığında ayrımı değil hipotezi değiştirin.
Sık yapılan hata#
En sık hata, doğrulama şemasını sonuca göre seçmektir. Zaman ayrımında skor düşük çıkınca rastgele katlamaya dönmek ölçümü değil yalnızca raporu düzeltir. İkinci hata, iç içe seçimi atlamaktır: hiperparametre araması doğrulama katlamalarında yapılıp aynı katlamaların en iyi skoru nihai sonuç olarak raporlandığında, raporlanan sayı seçim sürecinin iyimserliğini taşır. Üçüncüsü, ön işlemeyi ayrımdan önce çalıştırmaktır; doldurma ve ölçekleme istatistikleri her katlamada yeniden hesaplanmalıdır.
- Katlamalar arası skor farkı, modeller arası skor farkından büyük.
- Gruba göre katlamaya geçildiğinde skor belirgin biçimde düşüyor; rastgele bölme aynı varlığı iki tarafa dağıtıyordu.
- Yeni bir zaman dilimi eklendiğinde skor sistematik olarak düşüyor.
- Test dilimindeki skor, seçimin yapıldığı katlamaların ortalamasından sistematik olarak düşük.
- Ön işleme hattı ayrımdan önce tek seferde çalıştırılmış.
LAB · UYGULAMALI ALIŞTIRMA
Üç şemayı yan yana koyun
- 1Verinizde tahmin anı ve varlık kimliği kolonlarını belirleyip her satırın hangi gruba ve hangi zaman dilimine düştüğünü işaretleyin.
- 2Aynı model ve aynı hat ile iki doğrulama koşusu yapın: rastgele k-katlama ve kayan başlangıçlı zaman ayrımı.
- 3İki şemanın metrik ortalamasını ve katlamalar arası yayılımını karşılaştırıp farkı not edin.
- 4Gruba göre katlama ekleyip aynı varlığın kayıtlarının iki tarafa düşmesini engelleyin ve skorun nasıl değiştiğini kaydedin.
- 5Zaman ayrımına etiketin olgunlaşma süresi kadar boşluk koyup koşuyu tekrarlayın.
- 6Üç şemadan hangisinin üretim durumunu temsil ettiğini bir paragrafla gerekçelendirip şemayı dondurun.
Beklenen çıktı
Rastgele, gruplu ve zamanlı doğrulama şemalarının aynı model üzerindeki skor farkını gösteren karşılaştırma ve gerekçesi yazılmış, dondurulmuş bir doğrulama tasarımı.
Sık sorulan sorular
Kaç katlama kullanmalıyım?
Katlama sayısı bir ödünleşimdir: fazla katlama her eğitim kümesini büyütüp yanlılığı azaltır ama maliyeti ve katlamalar arası örtüşmeyi artırır. Zaman ayrımında sayı veri uzunluğuyla sınırlıdır ve her katın doğrulama penceresi iş döngüsünün en az bir turunu kapsamalıdır. Skor yayılımı karar verdiremeyecek kadar genişse katlama sayısını değil doğrulama penceresini büyütmek daha çok işe yarar.
Test kümesine hiç bakmamak gerçekçi mi?
Bir kez bakmak ve ondan sonra karar değiştirmemek gerçekçidir. Test skoruna bakıp modeli değiştirdiğinizde o küme artık doğrulama kümesine dönüşmüştür; bunu bilerek yapıyorsanız sorun değil, bilmeden raporluyorsanız sorundur. Üretime alınacak sürüm için yeni ve dokunulmamış bir dilim ayırın.
Zaman ayrımında eğitim penceresi genişlemeli mi, kaymalı mı?
Genişleyen pencere tüm geçmişi tutar; veri azsa ve ilişki kararlıysa avantajlıdır. Kayan pencere yalnızca son dönemi tutar; davranış hızla değişiyorsa eski veriyi dışarıda bırakmak yararlıdır. İkisini aynı şema içinde koşturup karşılaştırmak, kayma hızını ölçmenin pratik bir yoludur.
LEARN
Machine Learning Engineer rotasına devam et
Dersler tek başına da okunabilir, ama sıralı ilerlemek önkoşul boşluklarını kapatır.
