Veri Analizindeki Sessiz Tehlike: Aykırı Değerler

Aykırı değerlerin veri analizi dünyasındaki serüvenini anlatarak, onları yakalamak ve kontrol altına almak için kullanılabilecek yöntemlerden bahsedelim.

Posted by Şuheda Karabudak on September 20, 2023

Aykırı Değer (Outlier) Nedir

Veri setindeki diğer değerlerle karşılaştırlığında veri setine uygun olmadığı tespit edilen aşırı değerlere aykırı değer (outlier) denir

Aykırı Değerlerin Kaynağı

  • Model yapısının yanlış olmasından,
  • Gerekli bazı dönüşümlerin yapılmamış olmasından,
  • Ölçüm , kaydetme hatalarından,
  • Örnekleme rasgeleliğinden,
  • Örneklemdeki bazı gözlemlerin, öteki gözlemlerden farklı etkenlerin etkisinde kalmış olmalarından,
  • Varsayım bozulumlarından kaynaklanabilir.

Aykırı Değerlerin Ortaya Çıkartılması

İstatistiksel Testler (Statistical Tests): Aykırı değerlerin tespiti için kullanılan istatistiksel testler ve yöntemler açıklanır. Bu yöntemler, veri noktalarını belirli bir istatistiksel ölçüye göre değerlendirirler.

Derinlik Tabanlı Yaklaşımlar (Depth-Based Approaches): Veri noktalarının veri kümesi içindeki derinliğine dayalı olarak aykırı değerleri tanımlayan yöntemler açıklanır. Örnek olarak, Mahalanobis derinliği gibi yöntemler burada ele alınabilir.

Sapma Tabanlı Yaklaşımlar (Deviation-Based Approaches): Veri noktalarının beklenen davranıştan sapmasına dayalı olarak aykırı değerleri tanımlama yöntemleri açıklanır. Örnek olarak, Z-skor ve IQR (Çeyrekler Arası Aralık) yöntemleri bu kategoride ele alınabilir.

Uzaklık Tabanlı Yaklaşımlar (Distance-Based Approaches): Veri noktalarının diğer veri noktalarına uzaklığına dayalı olarak aykırı değerleri tanımlama yöntemleri açıklanır. Örnek olarak, k-NN (k En Yakın Komşu) ve LOF (Local Outlier Factor) gibi yöntemler burada ele alınabilir.

Yoğunluk Tabanlı Yaklaşımlar (Density-Based Approaches): Veri noktalarının yoğunluğuna dayalı olarak aykırı değerleri tanımlama yöntemleri açıklanır. Örnek olarak, DBSCAN (Yoğunluk Tabanlı Kümeleme) gibi yöntemler bu kategoriye dahil edilebilir.

Yüksek Boyutlu Veriler İçin Yaklaşımlar (High-Dimensional Approaches): Yüksek boyutlu veri setlerinde aykırı değerlerin tespiti için özel yöntemler ve yaklaşımlar açıklanır. Çünkü yüksek boyutlu verilerde klasik aykırı değer tespiti yöntemleri etkisiz olabilir.

Aykırı Değerlerin Yönetimi

Aykırı değerler tespit edildikten sonraki adım, bu değerlerle ilgili ne yapacağı düşüncesidir.

1. Aykırı Değerlerin Silinmesi: Veri silme işlemleri, verinin değişkenliğini etkileyebilir. Bu nedenle, ilk tercih olmamalıdır ve kaçınılmalıdır.

2. Aykırı Gözlemlerin Yerine Değer Ataması (Imputation): Burada genellikle aykırı değerlerin yerine atancak değerler ortalama, mod, medyan gibi verinin istatistik değerlerinden biri yazılabilir.

3. Aykırı gözlemlerin sınırlandırılması (Winsorization): Bu teknik ile değişkenin üst kısmındaki aykırı değerler 95.kantil (Q95), alt kısmındaki aykırı değerler de 5.kantil (Q5) değeri ile değiştirilir.

4. Aykırı gözlemlerin dönüştürülmesi (Transformation): Verinin normal dağılmadığı durumlarda dağılımın normal olduğunu varsayan (parametrik) testlerin ve yöntemlerin uygulanması mümkün değildir. Aykırı değerler, bulundukları değişkenlerin dağılımını etkiler.Aykırı değerlerin verinin dağılımı üzerindeki etkisini azaltmak için veri dönüştürme işlemleri uygulanabilir. Bu dönüşümler; log,karekök gibi.

Yukarıda aykırı değer nedir, kaynağı, ortaya çıkarılması ve bu değerleri ne yapacağımızdan bahsettim.Şimdi aykırı değerlerin ortaya çıkarılmasınnda kullanılan bazı istatistiksel yöntemleri kullanarak python da örneğini yapacağım.Kaggle’dan aldığım veri seti üzerinden aykırı değerleri inceleceğim buradan veri setine ulaşabilirsiniz.

Gerekli python kütüphanelerini içe aktarıyoruz ve veri setini inceliyoruz.

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

import warnings
warnings.filterwarnings("ignore")

data=pd.read_csv("weight-height.csv")
data.head()

index Gender Height Weight
1 Male 68.7819040458903 162.3104725213
4 Male 69.8817958611153 206.349800623871
2 Male 74.1101053917849 212.7408555565
3 Male 71.7309784033377 220.042470303077
0 Male 73.847017017515 241.893563180437
1
data.describe()
index Height Weight
count 10000.0 10000.0
mean 66.36755975482124 161.44035683283076
std 3.8475281207732293 32.108439006519596
min 54.2631333250971 64.700126712753
25% 63.505620481218955 135.8180513055015
50% 66.31807008178464 161.21292769948298
75% 69.1742617268347 187.16952486868348
max 78.9987423463896 269.989698505106

Verinin betimsel istatistiklerine bakacak olursak, Height değişkinin ortanca değerin birinci çeyreklik ve üçüncü çeyreklik değerlerine yakın olduğu maximum değerin ise bu değerlerden uzak olduğu gözlenmiş diye yorum yapılabilir. Fakat direk aykırı değer(ler)dir diyemeyiz.Bunun için birinci yöntem olarak Box-plot grafiğini çizdirmemiz gerekir.

1
2
3
#Aykırı değerlerin tespiti için box-plot grafiği çizdirelim.
plt.figure(figsize = (4,8))
sns.boxplot(y = data.Height)

download

Çeyrekler Arası Aralık Yöntem Çeyrekler Arası Aralık (IQR) kavramı, kutu grafiği grafiklerini oluşturmak için kullanılır. IQR, istatistikte, veri kümesini dörtte birlere bölerek istatistiksel dağılım ve veri değişkenliğini ölçmek için kullanılan bir kavramdır.¶ Basit bir ifadeyle, herhangi bir veri kümesi veya herhangi bir gözlem kümesi, verinin değerlerine dayalı olarak tanımlanmış dört aralığa bölünür ve tüm veri kümesiyle nasıl karşılaştırıldıkları. Çeyrek, verileri üç noktaya ve dört aralığa bölen şeydir. Üçüncü çeyrek ile birinci çeyrek arasındaki farktır (IQR = Q3 -Q1). Bu durumda aykırı değerler, kutu grafiği alt çizginin altında (Q1 – 1,5x IQR) veya kutu grafiği üst çizginin üzerinde veya üstünde (Q3 1,5x IQR) veya kutu grafiği üst çizginin altında olan gözlemler olarak tanımlanır. Kutu grafiğiyle görsel olarak temsil edilebilir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def out_iqr(df , column):
    global lower,upper
    q25, q75 = np.quantile(df[column], 0.25), np.quantile(df[column], 0.75)
    #IQR
    iqr = q75 - q25
    # outlier cutoff
    cut_off = iqr * 1.5
    #Üst ve alt değer belirleme
    lower, upper = q25 - cut_off, q75 + cut_off
    print('Çeyrekler Arası Aralık (IQR) ',iqr)
    print('Altsınır değerleri', lower)
    print('Üstsınır değeri', upper)
    #alt sınır değerin altındaki ve üstündeki değerlerin sayısını hesaplayın
    df1 = df[df[column] > upper]
    df2 = df[df[column] < lower]
    return print('Aykırı değerlerin toplam sayısı:', df1.shape[0]+ df2.shape[0])

out_iqr(data,"Height")

Çeyrekler Arası Aralık (IQR) 5.668641245615746

Altsınır değerleri 55.00265861279534

Üstsınır değeri 77.67722359525831

Aykırı değerlerin toplam sayısı: 8

Box-plot grafiğinde de görüldüğü gibi aykırı değerlerin olduğu ve bunu çeyrekler arası aralık yöntemini kullanarak oluşturduğumuz fonksiyonda da göstermiş oldum.

Z-Skor Yöntemi Z-puanı, bir gözlemin veya veri noktasının değerinin, gözlemlenen veya ölçülen şeyin ortalama değerinin üzerinde olduğu standart sapmaların işaretli sayısıdır. Z-puanının ardındaki mantık, herhangi bir veri noktasını, veri noktası grubunun Standart Sapması ve Ortalamasıyla ilişkisini bularak tanımlamaktır. Z-puanı, verilerin ortalamanın 0 ve standart sapmanın 1 olduğu dağılımını yani normal dağılımı bulmaktır. Bunun aykırı değerleri belirlemede nasıl yardımcı olduğunu merak ediyor olmalısınız. Z-puanını hesaplarken verileri yeniden ölçeklendirip ortalıyoruz ve sıfırdan çok uzak veri noktalarını arıyoruz. Sıfırdan çok uzak olan bu veri noktaları aykırı değerler olarak değerlendirilecektir. Çoğu durumda 3 veya -3’lük bir eşik kullanılır; yani Z-puanı değeri sırasıyla 3 veya -3’ten büyük veya küçükse, bu veri noktası aykırı değerler olarak tanımlanacaktır. Bu teknik, verilerin Gauss dağılımını varsayar. Aykırı değerler, dağılımın kuyruklarında yer alan ve dolayısıyla ortalamadan uzak olan veri noktalarıdır. Ne kadar uzaklık, aşağıdaki formülle hesaplanan normalleştirilmiş veri noktaları zi için belirlenmiş bir zthr eşiğine bağlıdır:

Z_score= (Xi - ortalama) / standart sapma

burada Xi bir veri noktasıdır, ‘ortalama’ tüm X’in ortalamasıdır ve ‘standart sapma’ tüm X’in standart sapmasıdır. Bu durumda bir aykırı değer, Zthr’den daha büyük bir mutlak değere sahip olan normalleştirilmiş bir veri noktasıdır.

1
2
3
#Z-skor Metodu
plt.figure(figsize = (10,5))
sns.distplot(data['Height'])

download (1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def out_zscore(data):
    global outliers,zscore
    outliers = []
    zscore = []
    threshold = 3
    mean = np.mean(data)
    std = np.std(data)
    for i in data:
        z_score= (i - mean)/std
        zscore.append(z_score)
        if np.abs(z_score) > threshold:
            outliers.append(i)
    return print("Aykırı değerlerin toplam sayısı:",len(outliers))

out_zscore(data.Height)

Aykırı değerlerin toplam sayısı: 7

1
2
3
plt.figure(figsize = (10,5))
sns.distplot(zscore)
plt.axvspan(xmin = 3 ,xmax= max(zscore),alpha=0.2, color='red')

download (2)

Kırmızı bölge aykırı değerlerin bulunduğu kısımdır.

Sonuç

Bu yazıda aykırı değerlerin ne olduğu,nasıl ortaya çıkarıldığı ve bu değerlerin ne yapılacağından bahsettim.Aykırı değerlerin ortaya çıkarılmasında istatistiksel yöntemlerden box-plot grafiği ve z-skor yöntemini nasıl kullandığımızı pythonda örneğini inceledik.Diğer yöntemleri kullanarak da aykırı değerleri inceleyebilirsiniz.

Kaynakça

Aykırı Değer Yönetimi

An Approach to Outlier Detection and Smoothing Applied to a Trajectography Radar Data

What are Isolation Forests? How to use them for Anomaly Detection?

Elementary Statistics