0Pricing
Pandas & NumPy Academy · Ders

Aykırı Değerleri Belirleme ve Ele Alma

Aykırı değerleri IQR çitleri ve Z skorlarıyla belirleyin; bunları sınırlandırmaya, kaldırmaya veya işaretlemeye karar verin ve kararları belgeleyin.

Aykırı Değerleri Belirleme ve Ele Alma, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

Aykırı Değer Nedir?

Aykırı değer, veri kümesinin geri kalanından önemli ölçüde farklı olan bir veri noktasıdır. Aykırı değerler gerçek olabilir (ortalama siparişlerin 100 $ olduğu bir veri kümesinde tek bir kurumsal müşterinin 500.000 $ tutarında sipariş vermesi gibi) veya hatalı olabilir (negatif bir fiyat ya da 120 değerini 12.000'e dönüştüren bir yazım hatası gibi). Aykırı değerleri ele almanın ilk adımı, uç değerin gerçek ve anlamlı mı yoksa veri kalitesi sorunu mu olduğuna karar vermektir; bu iki durumda uygulanacak işlem büyük ölçüde farklıdır.

import pandas as pd
import numpy as np

df = pd.read_parquet('sales_clean.parquet')
print(df['revenue'].describe())

Görsel Aykırı Değer Saptama: Kutu Grafiği

Kutu grafiği, aykırı değerleri fark etmek için en hızlı görsel araçtır. Kutu, çeyrekler arası aralığı (IQR, Q1–Q3) kapsar; bıyıklar 1,5× IQR değerine kadar uzanır ve bıyıkların dışındaki noktalar şüpheli aykırı değerler olarak tek tek çizilir. Eşikleri elle hesaplamadan aykırı değerleri hemen görmek için df['revenue'].plot(kind='box') veya Seaborn'un sns.boxplot() işlevini kullanın.

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(6, 4))
df['revenue'].plot(kind='box', ax=ax)
ax.set_title('Revenue Distribution — Box Plot')
plt.tight_layout()
plt.show()

IQR Çit Yöntemi

IQR çitleri yöntemi, çeyrekler arası aralığı hesaplar ve sınırları Q1 − 1,5×IQR ile Q3 + 1,5×IQR olarak belirler. Bu sınırların dışındaki değerler aykırı değer olarak işaretlenir. 1,5 katsayısı hafif aykırı değerler için standarttır; 3,0 değerini yalnızca aşırı aykırı değerler için kullanın. Bu yöntem sağlamdır: Z-skorlarının aksine normal dağılım varsaymaz.

Q1 = df['revenue'].quantile(0.25)
Q3 = df['revenue'].quantile(0.75)
IQR = Q3 - Q1

lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR

outliers = df[(df['revenue'] < lower) | (df['revenue'] > upper)]
print(f'Q1={Q1:.0f}, Q3={Q3:.0f}, IQR={IQR:.0f}')
print(f'Bounds: [{lower:.0f}, {upper:.0f}]')
print(f'Outliers: {len(outliers)}')

Aykırı Değer Saptamada Z-Skoru Yöntemi

Z-skoru, bir değerin ortalamadan kaç standart sapma uzakta olduğunu ölçer. |Z| > 3 olan bir değer, normal dağılımlı verilerin %99,7'sini kapsayan geleneksel yaklaşıma göre aykırı kabul edilir. Ancak Z-skorları, saptamaya çalıştıkları aykırı değerlerin kendilerine duyarlıdır: uç değerler ortalamayı çeker ve standart sapmayı büyütür; bu da diğer aykırı değerlerin gözden kaçmasına neden olabilir.

mean = df['revenue'].mean()
std = df['revenue'].std()

df['revenue_z'] = (df['revenue'] - mean) / std
z_outliers = df[df['revenue_z'].abs() > 3]

print(f'Z-score outliers (|z|>3): {len(z_outliers)}')
print(z_outliers[['revenue', 'revenue_z']].head())

Aykırı Değerleri İşaretleme ve Kaldırma

Aykırı değerleri kararı belgelemeden ve gerekçelendirmeden asla kaldırmayın. Bunun yerine önce onları bir boolean sütunla (is_outlier) işaretleyin, ardından ortak bir örüntü taşıyıp taşımadıklarını inceleyin (aynı bölge, aynı ürün, aynı gün gibi). Gerçeklerse onları tutun ve modelde açıkça ele alın. Hataysa kaldırın ve kaldırılan satır sayısını pipeline denetim günlüğüne kaydedin.

df['is_revenue_outlier'] = (df['revenue'] < lower) | (df['revenue'] > upper)

print('Flagged rows:', df['is_revenue_outlier'].sum())
print(df.groupby('is_revenue_outlier')['revenue'].describe())

Aykırı Değerleri Sınırlandırma (Winsorlaştırma)

Sınırlandırma (veya Winsorlaştırma), sınırların ötesindeki değerleri satırı kaldırmak yerine doğrudan sınır değeriyle değiştirir. Bu işlem, veri kümesindeki tüm satırları korurken aykırı değerlerin doğrusal modellerde ve özet istatistiklerde neden olduğu bozulmayı azaltır. Sınırları tek bir vektörleştirilmiş işlemde uygulamak için clip(lower=, upper=) kullanın.

df['revenue_capped'] = df['revenue'].clip(lower=lower, upper=upper)

print('Original max:', df['revenue'].max())
print('Capped max:', df['revenue_capped'].max())
print('Rows changed:', (df['revenue'] != df['revenue_capped']).sum())

Sağa Çarpık Veriler için Logaritmik Dönüşüm

Gelir ve fiyat dağılımları, genellikle büyük değerlerden oluşan uzun bir kuyrukla sağa çarpıktır. np.log1p() ile logaritmik dönüşüm uygulamak (sıfırları ele almak için değer + 1'in logaritması), kuyruğu sıkıştırır ve dağılımı daha simetrik hâle getirir. Birçok istatistiksel model ve görselleştirme normallik varsaydığından, modelleme öncesinde gelir sütununa log dönüşümü uygulamak çoğu zaman sonuçları iyileştirir.

df['log_revenue'] = np.log1p(df['revenue'])

fig, axes = plt.subplots(1, 2, figsize=(12, 4))
df['revenue'].hist(bins=50, ax=axes[0])
axes[0].set_title('Original Revenue')
df['log_revenue'].hist(bins=50, ax=axes[1])
axes[1].set_title('Log Revenue')
plt.tight_layout()
plt.show()

Birden Çok Sütundaki Aykırı Değerler

Aynı anda birçok sütunu analiz ederken tüm sayısal sütunlar için IQR aykırı değer sınırlarını program aracılığıyla hesaplayın. Sayısal sütunlar üzerinde yineleyin, sınırları hesaplayın ve sonuçları bir sözlükte saklayın. Böylece IQR hesaplamasını her sütun için elle tekrarlamak yerine birkaç satırda kapsamlı bir aykırı değer raporu oluşturabilirsiniz.

numeric_cols = df.select_dtypes(include=['number']).columns

outlier_report = {}
for col in numeric_cols:
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    n_out = ((df[col] < Q1 - 1.5*IQR) | (df[col] > Q3 + 1.5*IQR)).sum()
    outlier_report[col] = n_out

print(pd.Series(outlier_report).sort_values(ascending=False))

Dağılım Grafikleriyle İki Değişkenli Aykırı Değerler

Bazı noktalar yalnızca birlikte değerlendirildiklerinde aykırı olur: 10 $ birim fiyatı normaldir, 500 miktarı alışılmadık olsa da imkânsız değildir; ancak lüks bir ürün için 10 $ birim fiyat ile 500 miktarın birlikte görülmesi şüphelidir. İki değişkenli aykırı değerler, dağılım grafiklerinde izole noktalar olarak görünür. Ana kümeden uzakta bulunan noktaları fark etmek için df.plot.scatter('quantity', 'unit_price') kullanın.

fig, ax = plt.subplots(figsize=(8, 5))
df.plot.scatter(x='quantity', y='unit_price', alpha=0.3, ax=ax)
ax.set_title('Quantity vs. Unit Price — Bivariate Outliers')
plt.tight_layout()
plt.show()

Aykırı Değer Kararlarını Belgeleme

Her aykırı değer kararı kaydedilmelidir: sütun, saptama yöntemi, kullanılan eşik, işaretlenen satır sayısı ve uygulanan işlem (tut, sınırlandır veya kaldır). Bu belge, kod incelemelerinde ve denetimlerde analisti korur. Belgeyi çıktı veri kümesinin yanında kaydedilen bir temizleme günlüğü sözlüğünde saklayın.

outlier_log = {
    'column': 'revenue',
    'method': 'IQR 1.5x',
    'lower_bound': round(lower, 2),
    'upper_bound': round(upper, 2),
    'rows_flagged': int(df['is_revenue_outlier'].sum()),
    'treatment': 'cap (winsorise)'
}
for k, v in outlier_log.items():
    print(f'{k}: {v}')

İşlenmiş Veri Kümesini Kaydetme

Aykırı değerleri işaretleyip işledikten sonra güncellenmiş DataFrame'i kaydedin. Alt akıştaki kullanıcıların belirli analizlerde işaretlenmiş satırları dışarıda bırakabilmesi için is_outlier işaret sütununu çıktıda tutun. Sınırlandırılmış sürümü, temizleme işleminin geri alınabilmesi için özgün sütunun yanında açık bir sonek (_capped) taşıyan bir sütuna kaydedin.

cols_to_save = [c for c in df.columns if c not in ['revenue_z']]
df[cols_to_save].to_parquet('sales_treated.parquet', index=False)
print('Outlier-treated dataset saved:', df.shape)

Hızlı Kontrol

Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: IQR çitleri ve Z-skorlarıyla aykırı değerleri saptamayı, aykırı değerleri işaretleme, sınırlandırma veya kaldırma kararını vermeyi ve sağa çarpık dağılımlara logaritmik dönüşüm uygulamayı. Sırada metin sütunlarındaki tutarsız kategori etiketlerini standartlaştırmayı inceleyeceğiz.

Sıkça Sorulan Sorular

“Aykırı Değerleri Belirleme ve Ele Alma” dersi ücretsiz mi?

Evet — “Aykırı Değerleri Belirleme ve Ele Alma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Aykırı Değerleri Belirleme ve Ele Alma” dersinde ne öğreneceğim?

Aykırı değerleri IQR çitleri ve Z skorlarıyla belirleyin; bunları sınırlandırmaya, kaldırmaya veya işaretlemeye karar verin ve kararları belgeleyin. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Aykırı Değerleri Belirleme ve Ele Alma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yinelenenleri Belirleme ve Kaldırma
  2. Aykırı Değerleri Belirleme ve Ele Alma
  3. Tutarsız Kategorileri Standartlaştırma
  4. Şema Doğrulama ve İddialar
← Pandas & NumPy Academy Sayfasına Dön