Kazanimlar:
- Eksik değerlerin nedenini (rastgele, sistematik, anlamlı) ayırt edip uygun stratejiyi seçebilme ve doldurma değerini yalnızca eğitimden hesaplayabilme
- Aykırı değerleri silmeden önce inceleyip veri hatası ile gerçek nadir olayı ayırt edebilme
- Tip ve biçim tutarsızlıklarını standarda çekerken her adımın satır/boş sayısına etkisini izleyip sessiz kaybı önleyebilme
Bir veri bilimcinin zamanının yaklaşık yüzde 60-80'i temizlemeye gider; sektörde buna yarı şaka "veri hamallığı" (İngilizcesiyle data wrangling ya da data cleaning) denir. Çünkü gerçek dünya verisi hemen hiçbir zaman analize hazır gelmez: tarihler karışık biçimlerdedir, sayılar metin olarak saklanmıştır, bazı hücreler boştur, bir müşteri aynı tabloda iki farklı yazımla üç kez geçer. Bu ünitede temizlemenin üç temel cephesini ele alacağız: eksik değerler, aykırı değerler ve tip/biçim dönüşümü. Yapay zeka bu işte olağanüstü hızlı bir yardımcıdır; ama neyi nasıl temizleyeceğinize karar veren, çünkü her temizleme seçimi analizi değiştirir, sizsiniz.
Temizlemenin altın kuralı: her değişiklik bir karardır
Bir hücreyi silmek, bir eksik değeri ortalamayla doldurmak, bir aykırı değeri kırpmak — bunların hiçbiri "tarafsız" işlem değildir. Her biri veriyi değiştirir ve sonucu etkiler. Bu yüzden temizlemenin altın kuralı: her değişikliği koda yaz, gerekçesini not et, orijinal veriyi asla üzerine yazma. YZ size hızlı temizleme kodu verir ama o kodun ne yaptığını anlamak sizin sorumluluğunuzdur; "boş satırları sil" dediğinizde kaç satırın gittiğini görmeden çalıştırmayın.
Dikkat: Orijinal ham veriyi asla değiştirmeyin. Temizlenmiş sürümü ayrı bir dosyaya/tabloya yazın. Böylece bir hata fark ederseniz başa dönebilir ve yeniden üretilebilirliği korursunuz.
Eksik değerler: neden boş, ne yapmalı
Eksik değer (İngilizcesiyle missing value, pandas'ta genellikle NaN — "Not a Number" — olarak görünür), bir hücrenin boş olmasıdır. Ama boşluğun nedeni çözümü belirler. Üç tipik durum vardır. Rastgele eksik: sensör bir an çalışmadı; doldurmak makul olabilir. Sistematik eksik: bir form alanı yalnızca belli müşterilere soruluyor; buradaki boşluk aslında bilgidir. Anlamlı eksik: "iade tarihi" boşsa müşteri iade etmemiştir; bu boşluk 0 veya "yok" anlamına gelir, doldurulmaz.
Başlıca stratejiler:
Strateji
Ne zaman uygun
Riski
Satırı silme
Eksik oranı çok düşük (<%5) ve rastgele
Veri ve temsil kaybı
Sütunu silme
Sütunun çoğu boş (>%60)
Bilgi kaybı
Ortalama/medyan doldurma
Sayısal, rastgele eksik
Varyansı düşürür, dağılımı bozar
Kategoride "bilinmiyor"
Kategorik, sistematik eksik
Ek kategori üretir
Model ile tahmin
Karmaşık, değerli sütun
Sızıntı riski, karmaşıklık
Kritik nokta: doldurma (imputation) değeri, yalnızca eğitim verisinden hesaplanmalı ve aynı değer test verisine uygulanmalıdır. Test verisinin ortalamasını da işin içine katarsanız sızıntı yaratırsınız (Ünite 10). Medyan (sıralı verinin ortadaki değeri), aykırı değerlere ortalamadan daha dayanıklı olduğu için çoğu zaman ortalamaya tercih edilir.
Aykırı değerler: hata mı, gerçek mi
Aykırı değer (İngilizcesiyle outlier — diğerlerinden belirgin biçimde uzak, sıra dışı bir gözlem) iki şeyden biri olabilir: bir veri hatası (yaş sütununda 999) ya da gerçek ama nadir bir olay (bir müşterinin 2 milyon TL'lik siparişi). İkisini karıştırmak felakettir: gerçek bir aykırıyı silerseniz önemli bilgiyi atarsınız; bir hatayı bırakırsanız ortalamalarınız bozulur. Bu yüzden aykırı değeri otomatik silmek değil, önce incelemek gerekir.
Yaygın tespit yöntemleri: IQR yöntemi (çeyrekler arası açıklık; verinin %25 ve %75'lik dilimleri arasındaki farkın 1,5 katından uzak değerler aykırı sayılır) ve z-skoru (bir değerin ortalamadan kaç standart sapma uzak olduğu; genellikle 3'ten büyükse aykırı). YZ bu hesapların kodunu saniyede yazar; ama "sil" demeden önce o değerlerin ne olduğuna siz bakın.
Tip ve biçim dönüşümü: sessiz hata kaynağı
En çok baş ağrıtan sorunlardan biri veri tipi karışıklığıdır. Bir "tutar" sütunu metin olarak saklanmışsa toplama yapamazsınız; "1.250,50" gibi Türkçe biçimli bir sayıyı program "bin iki yüz elli" değil hatalı okur. Tarihler ("01/03/2024" gün-ay mı ay-gün mü?), kategoriler ("Erkek"/"erkek"/"E" aynı şey mi?) ve birimler (TL mi kuruş mu?) sessizce yanlış sonuç üretir. Temizlemenin büyük kısmı bu tutarsızlıkları standarda çekmektir: tarihleri tek biçime, kategorileri tek yazıma, sayıları tek birime.
Üç mini vaka
Vaka 1 — Ortalama tuzağı. Bir ekip, gelir sütunundaki 320 eksik değeri ortalamayla (48.500 TL) doldurdu. Ama eksikler sistematikti: bunlar geliri hiç beyan etmemiş, düşük gelirli segmentti. Ortalamayla doldurmak bu grubu yapay olarak zenginleştirdi ve kredi modeli yanıldı. Ders: doldurmadan önce "neden boş" sorusunu sorun.
Vaka 2 — Silinmemesi gereken aykırı. Bir perakende analisti, satış verisindeki 4 devasa siparişi (her biri 1,8 milyon TL) "hata" sanıp sildi. Oysa bunlar gerçek kurumsal siparişlerdi ve toplam cironun %22'siydi. Silme sonrası tahmin modeli kurumsal talebi tümüyle ıskaladı. Ders: aykırıyı silmeden önce incele.
Vaka 3 — Tarih biçimi felaketi. Bir CSV'de tarihler hem "2024-03-01" hem "01.03.2024" biçiminde karışıktı. YZ'nin yazdığı kod ilk biçime göre ayrıştırınca 6.400 satır "geçersiz tarih" olarak NaT oldu ve sessizce analiz dışı kaldı. Analist bunu ancak satır sayısı düşünce fark etti. Ders: dönüşüm sonrası satır ve boş sayısını daima kontrol edin.
Dört kopyalanabilir şablon
1) Eksik değer haritası:
pandas df'im var. Her sütun için eksik (NaN) sayısını ve yüzdesinigösteren bir tablo üreten kod yaz. Ardından, eksik oranı %40'ı geçensütunları ve %5'in altındakileri ayrı listele. Hangi stratejiyiönerdiğini değil, sadece bu tanı kodunu üret; kararı ben vereceğim.
2) Aykırı değer inceleme (silme değil):
"tutar" sütunum için IQR yöntemiyle aykırı değerleri TESPİT eden(silmeyen!) kodu yaz. Aykırı satırları ayrı bir df'e koy ki ben elleinceleyeyim. Aykırıların sayısını ve toplam içindeki payını da yazdır.
3) Tip/biçim standardizasyonu:
Şu sütunları standardize eden kod yaz:- "tarih": karışık biçimler ("2024-03-01" ve "01.03.2024") olabilir; hepsini datetime'a çevir, çevrilemeyeni say ve raporla (sessizce atma).- "cinsiyet": "Erkek"/"erkek"/"E" -> "E", "Kadın"/"kadın"/"K" -> "K".- "tutar": Türkçe biçimli metin ("1.250,50") -> ondalık sayı.Her dönüşüm sonrası kaç satırın etkilendiğini yazdır.
4) Temizleme öncesi/sonrası kontrol:
Bir temizleme adımından önce ve sonra df.shape, eksik sayısı veseçili sütunların özet istatistiğini (mean, median, min, max)karşılaştıran kod yaz. Amaç: temizlemenin ne değiştirdiğini görmek.
Zayıf prompt / Güçlü prompt
Zayıf prompt:
Bu veriyi temizle.
"Temizle" belirsizdir; YZ ne eksikleri silmeli, ne dolduracağını, hangi sütunu nasıl işleyeceğini bilemez. Sonuç: körlemesine, geri alınamaz değişiklikler.
Güçlü prompt:
Rolün: veri temizleme asistanı. df sütunları: musteri_id (int),kayit_tarihi (karışık biçimli metin), gelir_tl (metin, "1.200,00"),sehir (metin, tutarsız yazım). Kurallar:- Orijinal df'i değiştirme; df_temiz adında kopya üzerinde çalış.- gelir_tl'yi sayıya çevir, çevrilemeyeni say.- kayit_tarihi'ni datetime yap, hatalıyı raporla.- Hiçbir satırı benim onayım olmadan silme; adayları ayrı göster.Her adımdan sonra df_temiz.shape ve eksik sayısını yazdır.
Burada kaynak korunur, her dönüşüm sayılır, silme insana bırakılır.
Sık yapılan hatalar
- Eksikleri "neden boş" sormadan doldurmak. Sistematik/anlamlı eksiği ortalamayla doldurmak veriyi çarpıtır.
- Aykırıyı incelemeden silmek. Gerçek ama nadir olayları atmak önemli bilgiyi yok eder.
- Doldurma değerini tüm veriden hesaplamak. Test verisini dâhil etmek sızıntı yaratır; sadece eğitimden hesaplayın.
- Dönüşüm sonrası satır/boş sayısını kontrol etmemek. Sessizce NaT/NaN olan satırlar analiz dışı kalır.
- Orijinal veriyi üzerine yazmak. Geri dönüş ve yeniden üretilebilirlik kaybolur.
İpucu: Temizlemeyi "önce-sonra" karşılaştırmasıyla yürütün. Her adımdan sonra df.shape, eksik sayısı ve kritik sütunların özet istatistiğini yazdırın. Böylece bir adımın beklenmedik biçimde 6.000 satırı yok ettiğini anında görürsünüz.
Özetle
Temizleme, veri biliminin en çok zaman alan ve en çok karar gerektiren aşamasıdır. Her değişiklik veriyi değiştirir, dolayısıyla her biri bilinçli bir karardır. Eksik değerlerde "neden boş" sorusunu sorun; aykırılarda silmeden önce inceleyin; tip ve biçimi standarda çekin. Doldurma değerini yalnızca eğitim verisinden hesaplayın, orijinali koruyun ve her adımın etkisini sayarak izleyin. YZ bu işte muazzam bir hızlandırıcıdır ama neyi neden temizlediğinize insan karar verir.
Uygulama görevi
Küçük bir tablo alın (veya oluşturun) ve içine kasıtlı olarak üç sorun ekleyin: bir eksik değer öbeği, bir aykırı değer, bir karışık tarih biçimi. Yukarıdaki şablonlarla YZ'den tanı ve standardizasyon kodu isteyin; her adımdan önce/sonra satır ve boş sayısını karşılaştırın. En az bir "sessiz kayıp" yakalamaya çalışın ve nasıl fark ettiğinizi not edin.
Kontrol listesi
- [ ] Orijinal ham veriyi koruyup kopya üzerinde mi çalıştım?
- [ ] Her eksik sütun için "neden boş" sorusunu sordum mu?
- [ ] Aykırı değerleri silmeden önce inceledim mi?
- [ ] Doldurma değerini yalnızca eğitim verisinden mi hesapladım?
- [ ] Her adımdan sonra satır/boş sayısını kontrol edip sessiz kaybı elediğim mi?