Ünite 2 / 11

Veri Hattı: Toplama, Temizleme, Etiketleme ve Versiyonlama

Kazanimlar:

  • Bir veri hattını (toplama, doğrulama, temizleme, dönüştürme, bölme, versiyonlama) kurabilme ve şema doğrulamasını hattın en başına yerleştirebilme
  • Eksik değer ve etiketleme kararlarını alan anlamına göre verebilme ve veri sızıntısını (grup ve zamansal) önleyen bölme yapabilme
  • Veri sürümü ve rastgelelik tohumunu sabitleyerek yeniden üretilebilir bir veri temeli oluşturabilme

Her makine öğrenmesi sisteminin gerçek gücü modelde değil, veride saklıdır. Deneyimli mühendisler şunu bilir: "Çöp girer, çöp çıkar" (garbage in, garbage out) — kötü veriyle beslenen en gelişmiş model bile kötü sonuç verir. Bu ünitede veri hattını (data pipeline: ham veriyi model eğitimine hazır hâle getiren adımlar zinciri) uçtan uca kuruyor ve yapay zekayı bu hattın hangi adımında güvenle kullanacağımızı öğreniyoruz.

Veri hattının adımları

Bir veri hattı tipik olarak şu duraklardan geçer:

  1. Toplama (ingestion): Veriyi kaynaklardan (veritabanı, API, log dosyaları, olay akışları) çekmek.
  2. Doğrulama (validation): Verinin beklenen şemaya, tiplere ve aralıklara uyup uymadığını kontrol etmek.
  3. Temizleme (cleaning): Eksik değer, yinelenen kayıt, aykırı değer ve tutarsızlıkları ele almak.
  4. Dönüştürme (transformation): Ham veriyi öznitelik (feature) hâline getirmek — kategorik değişkeni sayıya çevirmek, tarihten "haftanın günü" üretmek gibi.
  5. Bölme (splitting): Eğitim, doğrulama (validation) ve test kümelerine ayırmak.
  6. Versiyonlama (versioning): Hangi veriyle hangi modelin eğitildiğini kaydetmek.

Yapay zeka özellikle 2, 3 ve 4. adımlarda kod taslağı ve fikir üreterek zaman kazandırır. Ama hangi kaydın atılacağı, hangi eksik değerin nasıl doldurulacağı gibi kararlar veriyi tanıyan mühendise aittir; çünkü yanlış temizleme, modele gizli bir yanlılık (bias) enjekte edebilir.

Veri doğrulama: hattın erken savunması

En pahalı hatalar üretimde değil, doğrulama adımının atlandığı yerlerde başlar. Şema doğrulaması (schema validation), gelen her veri partisinin beklenen yapıya uyup uymadığını otomatik denetler. Örneğin age sütunu 0-120 arasında mı, email alanı boş mu, sütun sayısı değişmiş mi?

Ipucu: Doğrulamayı hattın en başına koyun. Bozuk veri ne kadar erken yakalanırsa, düzeltme o kadar ucuzdur. Üretimde yakalanan bir şema hatası, eğitim aşamasında yakalanandan katbekat pahalıdır.

Aşağıdaki veri şeması için pandera (veya Great Expectations) ile bir doğrulama şeması yaz.Sütunlar ve kurallar:- user_id: tamsayı, boş olamaz, benzersiz- age: tamsayı, 0-120 arası- signup_date: tarih, gelecekte olamaz- country: kategorik, {TR, DE, US, UK} kümesinden- balance: ondalık, negatif olamazHer kural ihlali için anlamlı bir hata mesajı üret. Kod sonunda örnek bir bozuk satırla testi göster.

Temizleme: karar veren insandır

Eksik değerler (missing values) her veri setinin gerçeğidir. Ele alma yolları:

  • Silme: Eksik oranı çok yüksek satır/sütunu atmak. Ama bilgi kaybı ve yanlılık riski.
  • Doldurma (imputation): Ortalama, medyan, en sık değer veya model tabanlı tahmin ile doldurmak.
  • İşaretleme: "Eksikti" bilgisini ayrı bir bayrak sütunuyla saklamak — bazen eksikliğin kendisi sinyaldir.

Hangisinin doğru olduğu probleme bağlıdır. Bir tıbbi veri setinde "kan değeri ölçülmemiş" bilgisi silinmek yerine korunmalıdır; çünkü doktorun ölçüm istememesi bile bir sinyaldir. Yapay zeka size seçenekleri ve kodu verebilir; hangisinin alan gerçeğine uyduğunu siz seçersiniz.

Zayıf prompt / Güçlü prompt

Zayıf prompt: "Eksik değerleri doldur."

Güçlü prompt: "Şu sütunlarda eksik değer var: income (%12 eksik, sağa çarpık dağılım), last_login (%30 eksik). income için medyan ile doldurma öner ama neden ortalama değil medyan olduğunu açıkla. last_login için eksikliğin anlamlı olabileceğini varsay (kullanıcı hiç giriş yapmamış olabilir); silme yerine bir never_logged_in bayrağı üretmeyi değerlendir. Her iki yaklaşımın modele katacağı yanlılığı da yaz."

Fark: güçlü prompt, dağılım bilgisini ve alan anlamını verir; yapay zeka mekanik doldurma yerine karar destek üretir.

Etiketleme: kalite ölçülür

Denetimli öğrenmede (supervised learning: örneklerin doğru cevaplarıyla birlikte verildiği öğrenme) modelin öğrendiği şey etiketlerdir (labels: her örneğin doğru cevabı). Etiket kalitesi tavan belirler — insanlar tutarsız etiketlerse model de tutarsız öğrenir.

Etiketleyiciler arası uyum (inter-annotator agreement), farklı kişilerin aynı örneğe aynı etiketi verme oranını ölçer; Cohen's Kappa gibi bir katsayıyla ifade edilir. Düşük uyum, ya görevin belirsiz ya da yönergenin zayıf olduğunu gösterir.

Yapay zeka etiketlemede iki şekilde yardımcı olur: (1) etiketleme yönergesi (annotation guideline) taslağı yazmak, (2) ön-etiketleme (pre-labeling) yapıp insanın yalnızca düzeltmesini sağlamak. Ama LLM ile ön-etiketlemenin bir tuzağı vardır: modelin sistematik hatası tüm etiket setine sızabilir. Bu yüzden LLM etiketlerinin bir bölümünü mutlaka insan denetler.

Dikkat: LLM ile üretilen etiketleri "gerçek" (ground truth) saymayın. Bir örneklemi insanla kontrol edin ve LLM-insan uyumunu ölçün. Uyum düşükse ön-etiketleme fayda değil zarar getirir.

Veri bölme: sızıntıyı önlemek

Veriyi eğitim/doğrulama/test olarak bölerken en tehlikeli hata veri sızıntısıdır (data leakage): test bilgisinin eğitime karışması. Örnekler:

  • Aynı kullanıcının kayıtlarının hem eğitim hem teste düşmesi (grup sızıntısı).
  • Zaman serisinde geleceği eğitimde, geçmişi testte kullanmak (zamansal sızıntı).
  • Ölçekleme (normalization) parametrelerini tüm veriden hesaplayıp sonra bölmek.

Zaman içeren problemlerde zamansal bölme (temporal split) şarttır: geçmişle eğit, gelecekte test et. Rastgele bölme, üretimde asla olmayacak bir "geleceği görme" avantajı verir ve metrikleri şişirir.

Veri versiyonlama ve reproducibility

"Bu modeli hangi veriyle eğitmiştik?" sorusuna aylar sonra yanıt verebilmek, ciddi ML mühendisliğinin ayırt edici işaretidir. Veri versiyonlama (data versioning), her veri anlık görüntüsünü (snapshot) bir kimlikle (hash veya sürüm etiketi) saklar. DVC (Data Version Control) gibi araçlar veriyi kod gibi sürümler.

Bir modelin sonucunu yeniden üretebilmek için üç şey sabitlenmelidir: veri sürümü, kod sürümü ve rastgelelik tohumu (random seed). Bu üçlü olmadan "aynı sonucu aldım" demek mümkün değildir. Reproducibility'yi 11. ünitede derinleştireceğiz; ama tohumu veri hattında sabitlemek buradan başlar.

Üç mini vaka

Vaka 1 - Şema doğrulamanın kurtardığı gün. Bir ekip, yukarı akıştaki (upstream) bir sistem price alanını kuruştan liraya çevirince tüm fiyatlar 100 kat düştü. Şema doğrulaması "price aralık dışı" diye partiyi reddetti ve model bozuk veriyle eğitilmedi. Doğrulama olmasaydı hata ancak üretimde, yanlış tahminlerle fark edilecekti.

Vaka 2 - Yanlış doldurmanın yanlılığı. Bir kredi modelinde eksik gelir değerleri ortalama ile dolduruldu. Ama eksik gelirler ağırlıkla düşük gelirli gruptaydı; ortalama ile doldurma bu grubu yapay olarak "zenginleştirdi" ve model onlara haksız yüksek limit önerdi. Medyan + eksiklik bayrağı ile sorun düzeldi.

Vaka 3 - Zamansal sızıntı. Bir talep tahmin modeli test setinde muhteşem görünüyordu (%95 doğruluk) ama üretimde çöktü. Neden: rastgele bölme yüzünden model geleceği görmüştü. Zamansal bölmeye geçince test doğruluğu %78'e düştü — ama bu gerçek performanstı ve üretimde tuttu.

Kopyalanabilir şablonlar

Şu veri setini üç kümeye böl: eğitim/doğrulama/test.Kısıt: Bu bir zaman serisidir; ZAMANSAL bölme kullan (geçmişle eğit, gelecekte test et).Grup sızıntısını önle: aynı `customer_id` yalnızca tek kümede olsun.Ölçekleme parametrelerini SADECE eğitim kümesinden hesapla, sonra hepsine uygula.Kodda her adımda kaç satır kaldığını yazdır ve sızıntı olmadığını kontrol eden bir assert ekle.

Bu etiketleme görevi için bir yönerge (annotation guideline) taslağı yaz.Görev: [ör. müşteri yorumunu olumlu/olumsuz/nötr etiketle]Sınır durumları netleştir: alay, karışık duygu, ürünle ilgisiz yorum nasıl etiketlenir?Etiketleyiciler arası tutarlılığı artıracak 5 örnek ve 3 zor kenar durumu ver.

Bu veri hattı için bir reproducibility kontrol listesi üret:- Veri sürümü nasıl sabitlenmeli?- Hangi rastgelelik tohumları nerede ayarlanmalı?- Hangi meta veri (veri hash'i, satır sayısı, tarih) loglanmalı?Kod tabanım: [dil/kütüphane]

Bu temizleme kodunu veri sızıntısı açısından denetle.Özellikle şuna bak: ölçekleme/kodlama parametreleri bölmeden ÖNCE mi hesaplanmış?Herhangi bir istatistik tüm veriden mi yoksa sadece eğitimden mi hesaplanıyor?Kod: [kod]

Karar tablosu: eksik değer stratejisi

Durum

Önerilen yaklaşım

Neden

Sayısal, çarpık dağılım

Medyan ile doldur

Ortalama aykırılardan etkilenir

Sayısal, simetrik

Ortalama ile doldur

Bilgiyi korur

Eksiklik anlamlı olabilir

Bayrak sütunu + doldur

Eksiklik sinyaldir

Eksik oranı > %60

Sütunu değerlendir/at

Gürültü fazla

Kategorik

"Bilinmiyor" kategorisi

Yapay çoğunluk yaratmaz

Sık yapılan hatalar

  • Doğrulamayı atlamak. Şema kontrolü olmadan bozuk veri sessizce içeri sızar.
  • Bölmeden önce ölçeklemek. Test istatistiğini eğitime sızdırır.
  • Rastgele bölmeyi zaman serisinde kullanmak. Sahte yüksek metrik üretir.
  • LLM etiketlerine körü körüne güvenmek. Sistematik hata tüm veriye yayılır.
  • Veri sürümünü kaydetmemek. Sonucu yeniden üretemezsiniz.
  • Ortalama ile mekanik doldurma. Alan anlamını görmezden gelir, yanlılık ekler.

Ozetle

Veri hattı, ML sisteminin temelidir ve modelden daha çok emek hak eder. Doğrulamayı en başa koyun; temizleme ve etiketleme kararlarını alan bilgisiyle verin; bölmede sızıntıyı (grup ve zamansal) önleyin; veri sürümünü ve tohumu sabitleyin. Yapay zeka bu hatta kod ve fikir üretir, ama hangi verinin nasıl işleneceği kararı sizindir — çünkü buradaki her yanlış karar modele gizli bir kusur olarak geçer.

Uygulama gorevi

Kendi veri setinde bir doğrulama şeması (pandera/Great Expectations) yaz ve kasten bir bozuk satır ekleyip yakalandığını göster. Ardından veriyi zamansal veya gruplu böl, ölçekleme parametrelerini yalnızca eğitimden hesapla ve bir assert ile sızıntı olmadığını doğrula. Veri sürümünü ve satır sayısını bir meta veri dosyasına yaz.

Kontrol listesi

  • [ ] Şema doğrulaması hattın en başında çalışıyor.
  • [ ] Eksik değer stratejisini alan anlamına göre seçtim, mekanik doldurmadım.
  • [ ] Etiket kalitesini (uyum) ölçtüm; LLM etiketlerini insanla denetledim.
  • [ ] Bölmede grup ve zamansal sızıntıyı engelledim.
  • [ ] Ölçekleme/kodlama yalnızca eğitim kümesinden hesaplandı.
  • [ ] Veri sürümü, satır sayısı ve tohum kaydedildi.