Aykırı değer tespiti
Önkoşul:Eksik veri stratejileri
Kanca
206 siparişlik bir veri setinde IQR yöntemi 7 aykırı değer buluyor, z-skoru yöntemi ise 6. Aynı veri, iki farklı sayı. Hangi yönteme güveneceksin, ve bir değeri “aykırı” ilan ettikten sonra onunla ne yapacaksın — silecek misin, tutacak mısın?
Sezgi
- derste IQR’ı (çeyrekler açıklığı) tanımıştık — aykırı değer tespiti onun en yaygın kullanım alanıdır. IQR yöntemi, medyan etrafındaki “tipik” bölgenin (Q1-Q3) 1.5 katı dışına düşen değerleri aykırı sayar. z-skoru yöntemi ise ortalamadan kaç standart sapma uzakta olduğuna bakar (genelde |z| > 3 eşiği kullanılır).
İki yöntem de aynı soruyu farklı referans noktalarından sorar — IQR medyan ve çeyreklere (aykırı değerlere dayanıklı), z-skoru ortalama ve standart sapmaya (aykırı değerlerden etkilenen) dayanır. Bu yüzden ikisi tam olarak aynı sonucu vermeyebilir — z-skoru yöntemi, hesapladığı ortalama ve std’nin kendisi aykırı değerlerden şişmiş olduğu için bazen daha az duyarlı çıkar.
Mekanizma
200 normal sipariş + 6 gerçek kurumsal (büyük) sipariş içeren bir veri kuralım:
Veri (6 gerçek aykırı değerle)
# 200 normal sipariş + 6 gerçek aykırı değer (kurumsal toplu siparişler, çok büyük tutarlar).
normal_siparisler = rng.normal(180, 40, size=200).round(2)
kurumsal_siparisler = rng.uniform(1200, 2000, size=6).round(2)
tutarlar = np.concatenate([normal_siparisler, kurumsal_siparisler])
rng.shuffle(tutarlar)
siparisler = pd.Series(tutarlar, name="tutar")
print(f"Toplam sipariş: {len(siparisler)}")
print(f"Ortalama: {siparisler.mean():.2f} TL, Medyan: {siparisler.median():.2f} TL")Toplam sipariş: 206
Ortalama: 215.06 TL, Medyan: 179.56 TLOrtalama (215.06) ile medyan (179.56) arasındaki fark, aykırı değerlerin varlığının ilk işaretidir. IQR yöntemini uygulayalım:
IQR yöntemi
# IQR yöntemi (1. derste gördük): Q1 - 1.5*IQR ile Q3 + 1.5*IQR dışındakiler aykırı sayılır.
q1, q3 = siparisler.quantile(0.25), siparisler.quantile(0.75)
iqr = q3 - q1
alt_sinir = q1 - 1.5 * iqr
ust_sinir = q3 + 1.5 * iqr
iqr_aykiri = siparisler[(siparisler < alt_sinir) | (siparisler > ust_sinir)]
print(f"\nQ1={q1:.2f} Q3={q3:.2f} IQR={iqr:.2f}")
print(f"Sınırlar: [{alt_sinir:.2f}, {ust_sinir:.2f}]")
print(f"IQR yöntemiyle bulunan aykırı değer sayısı: {len(iqr_aykiri)}")
Q1=154.42 Q3=205.19 IQR=50.78
Sınırlar: [78.25, 281.36]
IQR yöntemiyle bulunan aykırı değer sayısı: 77 aykırı değer bulundu. Şimdi z-skoru yöntemini deneyelim:
z-skoru yöntemi
# z-skoru yöntemi: ortalamadan kaç standart sapma uzakta olduğuna bakılır. |z| > 3 genelde eşiktir.
z_skorlari = (siparisler - siparisler.mean()) / siparisler.std()
z_aykiri = siparisler[z_skorlari.abs() > 3]
print(f"\nz-skoru yöntemiyle bulunan aykırı değer sayısı: {len(z_aykiri)}")
print(f"En yüksek 3 z-skoru: {z_skorlari.abs().nlargest(3).round(2).tolist()}")
z-skoru yöntemiyle bulunan aykırı değer sayısı: 6
En yüksek 3 z-skoru: [7.1, 6.46, 5.43]6 aykırı değer bulundu — IQR’dan bir eksik. Çoğu kişi “iki yöntem de aynı şeyi ölçüyor, aynı sonucu vermeli” sanır. Değil, çünkü z-skoru hesaplanırken kullanılan ortalama ve standart sapmanın KENDİSİ, aykırı değerlerden etkilenip şişer — bu da eşiğin biraz kaymasına yol açar. IQR, medyan ve çeyrekleri kullandığı için bu “kendi kendini bozma” etkisine karşı daha dayanıklıdır.
Matematik
İki yöntemin formülleri
| Yöntem | Referans noktası | Aykırı değerlere karşı |
|---|---|---|
| IQR | Medyan, Q1, Q3 | Dayanıklı — çeyrekler aykırı değerlerden az etkilenir |
| z-skoru | Ortalama, standart sapma | Hassas — hem ortalama hem std aykırı değerlerden şişer |
Bu yüzden çoğu pratik durumda IQR yöntemi tercih edilir — özellikle veri Normal dağılıma tam uymuyorsa (6. derste gördüğümüz Log-normal veya Pareto gibi çarpık dağılımlarda), z-skoru yöntemi yanıltıcı olabilir.
Kod
Aykırı değerleri bulduktan sonra asıl soru: ne yapmalı?
Aykırı değerlerle ne yapmalı?
# Aykırı değerleri çıkarınca ortalama nasıl değişiyor?
temiz = siparisler[~siparisler.index.isin(iqr_aykiri.index)]
print(f"\nAykırı değerlerle ortalama: {siparisler.mean():.2f} TL")
print(f"Aykırı değersiz ortalama: {temiz.mean():.2f} TL")
print(f"Medyan (aykırıyla da hemen hemen aynı): {siparisler.median():.2f} TL")
print("\nKarar burada VERİYE bağlı: bu 6 sipariş gerçek kurumsal alımsa SİLİNMEMELİ,")
print("veri girişi hatasıysa (örn. fazladan sıfır eklenmiş) düzeltilmeli veya silinmeli.")
Aykırı değerlerle ortalama: 215.06 TL
Aykırı değersiz ortalama: 178.19 TL
Medyan (aykırıyla da hemen hemen aynı): 179.56 TL
Karar burada VERİYE bağlı: bu 6 sipariş gerçek kurumsal alımsa SİLİNMEMELİ,
veri girişi hatasıysa (örn. fazladan sıfır eklenmiş) düzeltilmeli veya silinmeli.Nerede işe yarar
Aykırı değer tespiti, veri temizliğinin ve veri kalitesi kontrolünün merkezinde durur:
- Veri girişi hataları. Fazladan sıfır eklenmiş bir tutar (1500 yerine 15000), aykırı değer tespitiyle yakalanır.
- Gerçek ama nadir olaylar. Kurumsal toplu siparişler, VIP müşteriler — bunlar “hata” değil, gerçek ve önemli veri noktalarıdır.
- Model kalitesi. Makine öğrenmesi modelleri (özellikle doğrusal regresyon gibi ortalamaya dayalı olanlar) aykırı değerlerden aşırı etkilenebilir — bu yüzden tespit, modellemeden önceki kritik bir adımdır.
Bu 3 hatayı yaparsın:
- Her aykırı değeri otomatik olarak “hata” sayıp silmek — bazıları gerçek ve değerli bilgi taşır (bkz. 9. dersteki Pareto/80-20 mantığı).
- Çarpık dağılımlı veride z-skoru yöntemini sorgusuz kullanmak.
- Aykırı değerleri sildikten sonra NEDEN sildiğini not almamak — bu karar, analizin şeffaflığı için kritik bir belgedir.
Kendini test et
1. IQR yöntemi ile z-skoru yöntemi neden aynı veride farklı sayıda aykırı değer bulabilir?
- Biri her zaman hatalıdır
- z-skoru, hesaplamada kullanılan ortalama ve std'nin kendisi aykırı değerlerden etkilendiği için IQR'a göre farklı davranabilir (doğru cevap)
- IQR sadece küçük veri setlerinde çalışır
- İkisi arasında hiçbir fark olamaz
Neden: IQR medyan ve çeyrekleri kullanır (aykırı değerlere dayanıklı); z-skoru ortalama ve std kullanır, bu ikisi aykırı değerlerden etkilenip eşiği kaydırabilir.
2. Bir aykırı değer tespit edildiğinde otomatik olarak yapılması gereken şey nedir?
- Her zaman hemen silmek
- Her zaman görmezden gelmek
- Değerin gerçek mi yoksa hata mı olduğunu araştırmak, sonra karar vermek (doğru cevap)
- Veri setinin tamamını atmak
Neden: Aykırı değer, veri girişi hatası da olabilir gerçek ve önemli bir gözlem de (VIP müşteri, kurumsal sipariş) — otomatik silme yerine önce araştırmak gerekir.
3. Çarpık dağılımlı (Log-normal, Pareto gibi) veride z-skoru yöntemi neden dikkatli kullanılmalıdır?
- z-skoru sadece kesikli verilerde çalışır
- z-skoru Normal dağılım varsayımına daha yakın davranır; çarpık dağılımda ortalama ve std zaten temsil edici değildir (doğru cevap)
- Çarpık veride hesaplama hatası oluşur
- Hiçbir fark yaratmaz
Neden: z-skoru yöntemi ortalama merkezli bir simetri varsayar; çarpık dağılımlarda ortalama zaten 'tipik' değeri iyi temsil etmez, bu da z-skoru eşiğini güvenilmez kılar.
Özet
Özet
- IQR yöntemi, Q1-1.5×IQR ile Q3+1.5×IQR dışındaki değerleri aykırı sayar — medyan tabanlı, dayanıklı.
- z-skoru yöntemi, ortalamadan 3 standart sapmadan uzak değerleri aykırı sayar — ortalama tabanlı, daha hassas.
- İki yöntem farklı referans noktaları kullandığı için aynı veride farklı sonuç verebilir.
- Çarpık dağılımlı veride IQR genelde z-skorundan daha güvenilirdir.
- Bir aykırı değer bulmak son adım değildir — gerçek mi hata mı olduğunu araştırmak, silme kararından önce gelir.