Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Veri Temizleme Pipeline'ı Yaptım, Outlier Temizlerken En Kritik Verileri de Silmişim!

stackor

Üye
Katılım
14 Mart 2026
Mesajlar
16
🔥 "Bu Veriler Çok Temiz" Dedirten Hatam

Dün gece sabaha kadar bir veri temizleme pipeline'ı yazıyordum. Amacım güzel, temiz, pırıl pırıl bir DataFrame elde etmek. Pandas ve NumPy ile outlier'ları (uç değerleri) tespit edip, güzelce temizleyecek bir fonksiyon yazdım. Klasik yöntem, IQR (Interquartile Range) kullanarak, üst ve alt sınırları belirleyip, o sınırların dışında kalan her şeyi drop() ile silmek.

Python:
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1
alt_sinir = Q1 - 1.5  IQR
ust_sinir = Q3 + 1.5  IQR
temiz_df = df[(df['column'] >= alt_sinir) & (df['column'] <= ust_sinir)]

Kod çalıştı, temiz_df oluştu. "Helal olsun bana, ne güzel temizledim" diye düşünüyorum. Veri setinin boyutu da ciddi anlamda küçüldü, demek ki çok aykırı değer varmış. İşin şakası, meğer ben kendi mezarımı kazıyormuşum.

🤯 Farkına Vardığım Anda Gece Rüyama Girdi

Bugün, makine öğrenimi modelimi eğitmeye koyuldum. Modelin performansı berbattı. "Bu kadar temiz veriyle nasıl olur?" diye eski veri setime döndüm. Biraz inceleyince, yüreğim ağzıma geldi. O "aykırı değer" diye sildiğim satırlar, aslında sistemdeki en nadir, en ilginç, en öğretici olaylardı! Mesela, bir dolandırıcılık tespiti veri setinde, sildiğim şeyler gerçek dolandırıcılık vakalarıydı. Kafayı yiyecektim.

Meğerse benim sütunum, power-law dağılımı gibi bir şeymiş. Yani değerlerin çoğu küçük bir aralıkta toplanmış, ama birkaç tane de devasa, kritik öneme sahip büyük değerler varmış. Benim saf IQR yöntemim, o devasa ve değerli "outlier"ları, otomatikman "anormal" ilan edip çöpe atmış. Şaka gibi ama, veri setimin kalbini söküp atmışım.

💡 Outlier Silmek mi, İşlemek mi? (Aldığım Ders)

Bu faciadan sonra kendime geldim ve şunu öğrendim: Her aykırı değer, çöp değildir. Önce "Bu aykırı değer neden aykırı?" diye sormak lazım. Şimdi pipeline'ımı baştan yazıyorum. Artık direkt silmek yerine:
1. Önce bu değerleri ayrı bir log dosyasına kaydediyorum (logging kütüphanesi hayat kurtarıcı).
2. Onları baskılamak (capping) veya dönüştürmek (log transformation) gibi yöntemlere bakıyorum.
3. En önemlisi, domain bilgisi olan birine "Abi, bu değerler normal mi?" diye soruyorum.

Python:
# Artık böyle saçma sapan silmiyorum.
# Onun yerine log atıyorum ve incelemeye alıyorum.
import logging
logging.basicConfig(filename='outliers.log', level=logging.WARNING)
if value > ust_sinir:
    logging.warning(f"Yüksek outlier tespit edildi: Index {index}, Değer {value}")

Sonuç olarak, körü körüne istatistik kurallarına güvenmemek gerekiyormuş. Verinin hikayesini anlamadan, klavyeye saldırmak böyle sonuçlar doğuruyor işte.

Siz de benim gibi "temizlik" yaparken, verinizin özünü sildiğiniz oldu mu? Outlier'ları nasıl yönetiyorsunuz, daha akıllıca bir yönteminiz var mı?
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri