Ana içeriğe geç

Orta12 dk

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

  1. 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 TL

Ortalama (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ı: 7

7 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
IQR yo¨ntemi:x<Q11.5IQR veya x>Q3+1.5IQR\text{IQR yöntemi:}\quad x < Q_1 - 1.5 \cdot IQR \ \text{veya}\ x > Q_3 + 1.5 \cdot IQRz-skoru:xxˉs>3\text{z-skoru:}\quad \left|\frac{x - \bar{x}}{s}\right| > 3
YöntemReferans noktasıAykırı değerlere karşı
IQRMedyan, Q1, Q3Dayanıklı — çeyrekler aykırı değerlerden az etkilenir
z-skoruOrtalama, standart sapmaHassas — 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.
Sipariş tutarlarının kutu grafiği, IQR sınırlarının dışında kalan 7 aykırı değer turuncu noktalarla işaretli.
Kutu grafiğindeki 'bıyıkların' dışındaki her nokta, IQR yöntemine göre bir aykırı değer adayıdır.

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:

  1. 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ığı).
  2. Çarpık dağılımlı veride z-skoru yöntemini sorgusuz kullanmak.
  3. 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?
  1. Biri her zaman hatalıdır
  2. 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)
  3. IQR sadece küçük veri setlerinde çalışır
  4. İ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?
  1. Her zaman hemen silmek
  2. Her zaman görmezden gelmek
  3. Değerin gerçek mi yoksa hata mı olduğunu araştırmak, sonra karar vermek (doğru cevap)
  4. 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?
  1. z-skoru sadece kesikli verilerde çalışır
  2. 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)
  3. Çarpık veride hesaplama hatası oluşur
  4. 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.
Sonraki adım: Keşifçi veri analizi (EDA) yöntemi →