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)
Ç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'])
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')
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
An Approach to Outlier Detection and Smoothing Applied to a Trajectography Radar Data
What are Isolation Forests? How to use them for Anomaly Detection?
-
Previous
Dünya p'den Büyüktür! -
Next
PCA(Principal Component Analysis) ile Boyutların Üstesinden Gelmek