Veri analizinde, bilinmeyen ve beklenmedik değerler, analiz sonuçlarını büyük ölçüde etkileyebilen önemli bir sorundur. Bu değerler, outlier veya anomali olarak adlandırılır ve genellikle veri setinin genel dağılımından önemli ölçüde sapma gösterir. Bu blog yazısında, outlier’ları tespit etmenin önemi, farklı outlier türleri, kontrol yöntemleri ve bu konuda dikkat edilmesi gereken stratejileri keşfedeceğiz.
Outlier Türleri
- Noktasal Anomaliler: Genellikle diğer değerlerden önemli ölçüde farklı olan tek bir veri noktası.
- Grup Anomalileri: Belirli bir bölgesinde yoğunlaşmış birden fazla anormal değer içeren grup.
- Bağlamsal Anomaliler: Belirli bir bağlam içinde anormal kabul edilen veri noktaları.
Outlier Kontrol Yöntemleri
- İstatistiksel Yöntemler:
- Z-skoru ve IQR gibi istatistiksel metotlar kullanılarak outlier’lar tespit edilebilir.
- Görselleştirme Yöntemleri:
- Kutu çizimi (Boxplot) ve histogram analizi gibi görsel yöntemlerle outlier’lar gözlemlenebilir.
- Makine Öğrenmesi Yöntemleri:
- K-Means gibi algoritmalar kullanılarak veri setindeki kümeleme yapılarından yola çıkarak outlier’lar belirlenebilir.
Outlierlarla Mücadele Yöntemleri
- Silme:
- Yöntem: En basit yöntemlerden biri, belirli bir eşik değeri üzerinde veya altında kalan outlier’ları veri setinden silmektir.
- Avantajlar: Hızlı ve basit bir çözümdür.
- Dezavantajlar: Veri kaybına neden olabilir ve analiz sonuçlarını etkileyebilir. Ayrıca, outlier’ların silinmesi, outlier’ların nedenlerini anlamak için bilgi kaybına yol açabilir.
- Düzeltme:
- Yöntem: Outlier değerlerini, genellikle ortalama veya medyan gibi daha tipik değerlere yakın bir değerle değiştirmektir.
- Avantajlar: Veri kaybını önler ve orijinal veri setini daha az etkiler.
- Dezavantajlar: Outlier’lar gerçekten anormal durumları yansıtıyorsa, bu yöntem gerçek durumu çarpıtabilir. Ayrıca, ortalama ve medyan gibi istatistiksel ölçüler, dağılımın doğasını yansıtmayabilir.
- Etiketleme:
- Yöntem: Outlier’ları özel bir etiketle işaretlemek, analiz sürecinde bu noktaların özel bir şekilde ele alınmasını sağlamak anlamına gelir.
- Avantajlar: Outlier’ları belirgin bir şekilde tanımlar ve analistlere dikkat etmeleri için bir uyarı sağlar.
- Dezavantajlar: Outlier’ların sayısı fazlaysa bu yöntem yönetimi karmaşık hale getirebilir.
- Transformasyonlar:
- Yöntem: Veri setine belirli bir dönüşüm uygulayarak, outlier’ların etkisini azaltmak veya onları daha belirgin hale getirmek mümkündür.
- Avantajlar: Outlier’ların etkisini azaltabilir ve daha normal bir dağılım elde etmeye yardımcı olabilir.
- Dezavantajlar: Hangi dönüşümün kullanılacağı, veri setinin özelliklerine bağlı olarak değişebilir.
- İstatistiksel Yöntemler:
- Yöntem: Z-skoru, IQR (interquartile range) gibi istatistiksel yöntemler kullanılarak outlier’lar tespit edilebilir.
- Avantajlar: İstatistiksel olarak sağlam bir temele dayanır.
- Dezavantajlar: Eşik değeri seçimi önemli olabilir ve bazı durumlarda outlier’ları belirleme konusunda öznellik içerebilir.
- Makine Öğrenmesi:
- Yöntem: K-Means gibi kümeleme algoritmaları veya belirli bir modeli kullanarak outlier’ları belirlemek mümkündür.
- Avantajlar: Veri setinin karmaşıklığına daha iyi uyabilir.
- Dezavantajlar: Eğitim gerektirebilir ve bazı durumlarda yavaş olabilir.
Outlier Kontrolü ile İlgili Dikkat Edilmesi Gerekenler
- Etki Analizi:
- Outlier’ların veri setine etkisi değerlendirilmelidir.
- Çoklu Yöntem Kullanımı:
- Farklı yöntemlerin kullanılması ve sonuçların karşılaştırılması, daha güvenilir sonuçlar elde etmeye yardımcı olabilir.
- Veri Kaynaklarına Dikkat:
- Outlier’ları silmeden önce, bu noktaların hatalı veri girişi veya toplama hatası gibi bir kaynaktan kaynaklanmadığından emin olunmalıdır.
Outlier Kontrolü Örnek
Outlier’ları belirlemek için istatistiksel bir yöntem olan IQR (interquartile range) yöntemini kullanabiliriz. İşte bu işlemi gerçekleştiren kod:
# IQR yöntemi ile outlier'ları belirleme
Q1 = df['sepal_length'].quantile(0.25)
Q3 = df['sepal_length'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['sepal_length'] < lower_bound) | (df['sepal_length'] > upper_bound)]
print("Outlier Noktalar:")
print(outliers)
Aşağıdaki örnekte, Isolation Forest algoritması kullanılarak outlier’lar tespit edilmeye çalışılıyor. Bu algoritma, normal gözlemlerin yoğun bir bölgede bulunması ve outlier’ların bu yoğun bölgeden uzaklaşması prensibine dayanır.
Ancak, Machine Learning algoritmalarını kullanırken dikkate almanız gereken birkaç önemli nokta vardır:
- Veri Standardizasyonu: Machine Learning algoritmaları genellikle standartlaştırılmış veri üzerinde daha iyi performans gösterir. Bu nedenle, veri setinizi ölçeklendirmeyi unutmayın.
- Model Parametreleri: Algoritmanın parametreleri, outlier tespit performansını etkileyebilir. Bu parametreleri dikkatlice ayarlamak önemlidir.
- Doğrulama: Model performansını değerlendirmek için doğrulama yapmak, modelin gerçek dünya verilerine ne kadar iyi uyarlandığını anlamanıza yardımcı olacaktır.
import pandas as pd
from sklearn.ensemble import IsolationForest
import seaborn as sns
import matplotlib.pyplot as plt
def outlier_detection(data, feature, contamination=0.1):
"""
Verilen bir veri setindeki outlier'ları tespit eder.
Parameters:
- data: DataFrame, veri seti
- feature: str, outlier tespiti yapılacak özellik
- contamination: float, outlier oranı, varsayılan: 0.1
Returns:
- DataFrame, outlier'ları içeren veri seti
"""
# Modeli oluşturma
model = IsolationForest(contamination=contamination)
# Modeli eğitme
model.fit(data[[feature]])
# Her bir gözlemin outlier olup olmadığını tahmin etme
data['outlier'] = model.predict(data[[feature]])
# Outlier'ları görselleştirme
sns.scatterplot(data=data, x=feature, y='outlier', hue='outlier', marker='x')
plt.title(f'{feature} Outlier Tespiti')
plt.show()
# Outlier'ları görüntüleme
outliers = data[data['outlier'] == -1]
print("Outlier Noktalar:")
print(outliers[[feature, 'outlier']])
return outliers
# Iris veri setini yükleme
df = sns.load_dataset("iris")
# Outlier tespiti yapma
outliers = outlier_detection(df, 'sepal_length', contamination=0.1)
PYOD ile Outlier tespiti:
import pandas as pd
from sklearn.preprocessing import StandardScaler
from pyod.models.auto_encoder import AutoEncoder
def summarize_outliers(data, features, threshold=2.5):
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data[features])
model = AutoEncoder(hidden_neurons=[len(features), 2, len(features)])
model.fit(data_scaled)
# Tam veri setini kullanarak outlier skorlarını hesapla
data['outlier_score'] = model.decision_function(data_scaled)
# Eşik değeri üzerindeki outlier'ları seç
outliers = data[data['outlier_score'] > threshold]
# Özetleme
num_outliers = len(outliers)
outlier_percentage = (num_outliers / len(data)) * 100
summary = {
'Toplam Veri Sayısı': len(data),
'Outlier Sayısı': num_outliers,
'Outlier Oranı': f'{outlier_percentage:.2f}%',
'Eşik Değeri': threshold
}
return summary
# Kendi örnek veri setini oluştur
np.random.seed(42)
sample_data = {
'feature1': np.random.normal(0, 1, 100),
'feature2': np.random.normal(0, 1, 100),
'feature3': np.random.normal(0, 1, 100),
}
sample_df = pd.DataFrame(sample_data)
# Eksik değerleri ortalama ile doldur
sample_df.fillna(sample_df.mean(), inplace=True)
# Özetleme fonksiyonunu kullanarak outlier'ları tespit et ve özetle
features_to_check = ['feature1', 'feature2', 'feature3']
summary_result = summarize_outliers(sample_df, features_to_check, threshold=2.5)
# Sonucu göster
print("\nOutlier Tespiti Özeti:")
print(summary_result)
Outlier Tespiti Özeti: {‘Toplam Veri Sayısı’: 100, ‘Outlier Sayısı’: 13, ‘Outlier Oranı’: ‘13.00%’, ‘Eşik Değeri’: 2.5}