Bir veri bilimi projesi üzerinde çalışırken araştırdığımız şey nedir? Keşifsel veri analizi aşamasında en önemli bölüm hangisidir? Bu aşamada yapılmadığı takdirde ilerleyen aşamalarda makine öğrenme modellerini etkileyebilecek belirli bazı şeyler vardır. Bunlardan birisi aykırı değerlerin tespitidir. Verinin tanımlayıcı ölçülerini yanıltırlar.

Şimdi, ilk olarak aykırı değerlerin tespitinden başlayalım.

Bu çalışmamızda “kaggle” da bulunan “video game sales” veri kümesini kullanacağız.

1. Aykırı Değerlerin Görselleştirilmesi

Verilerdeki aykırı değerleri görselleştirmemize yardımcı olan bazı yararlı grafikler vardır. En çok bilinen grafik ise kutu grafiğidir.

Görselleştirme için kullanılan bir başka grafik ise histogramdır. Yukarıda gördüğünüz grafikler “Python” ın “seaborn” kütüphanesi kullanılarak çizdirilmiştir. “NA_Sales” sütununda çok fazla aykırı değer bulunmaktadır. Kutu grafinde, max. nokta üzerinde bulunan noktalar aykırı değerleri göstermektedir.

İlk olarak histogram grafiğine baktığımızda “dirsek” oluşumunu görebilmekteyiz. Başka bir deyişle, parabolik bir azalma yakaladığımızı söylüyoruz. Böyle durumlarda, “ok” un sağ tarafını kesebiliriz. Bu değerleri aykırı değerler olarak kabul edebiliriz.

ax['whiskers'][1].get_ydata()
array([0.8725, 1.68 ])

Y ekseni üzerinde ki bu değerler üst bıyığa ait başlangıç ve bitiş noktalarıdır. İkinci değer kutu grafiğinin maksimum noktasıdır. Aşağıda maksimum noktadan sonraki değerlerin dağılımını detaylı bir şekilde görebilmekteyiz. Bir noktadan sonra seyreklikler başlamaktadır.

df.NA_Sales.hist(range = (1.68,5))
plt.xlabel('NA_Sales',color='b')
plt.show()

İkinci olarak, eğer histoğramda bir azalma göremezsek ve dirsek oluşumunu yakalayamazsak, aykırı değerlerin tespitinde aşağıda görüldüğü üzere üç sigma kuralını kullanırız.

m=df.NA_Sales.mean()
std=df.NA_Sales.std()
plt.hist(df.NA_Sales)
plt.axvline(x=m+3*std,color='red')
plt.axvline(x=m-3*std,color='red')
plt.xlabel('NA_Sales',color='b')
plt.show()

Kırmızı çizgilerin sağındaki ve solundaki değerleri, aykırı değerler olarak değerlendiririz. Bu kırmızı çizgiler üç sigma kuralına göre çizdirilmiştir.

2. Aykırı Değerlerin Tespitinde Kullanılan İstatistiksel Yöntemler

2.1. Z-score

Bir değişkende aykırı değerleri saptama yöntemlerinden birisi “z-score” dur. Z-score ilk önce verileri ölçeklendirir, böylece ortalaması 0 ve standart sapması 1 olur ve daha sonra bir değerin ortalamanın ne kadar uzağında olduğunu ölçer. Bununla birlikte, bir değerin aykırı olduğunu söylemek için, z-score için bir eşik belirlememiz gerekir, bu sayede bu eşiğin üzerindeki skorların aykırı olduğu söylenir. Çoğu durumda 3 veya -3 sigma eşiği kullanılır. Z-score değeri sırasıyla 3 veya -3'ten büyük veya küçükse, bu veri noktası aykırı değer olarak belirlenecektir.

from scipy.stats import zscorez_scores = zscore(df['NA_Sales'])
for threshold in range(1,4):
print('Threshold value: {}'.format(threshold))
print('Number of outliers: {}'.format(len((np.where(z_scores > threshold)[0]))))
print('-----------')

Görüldüğü üzere eşik değeri artarken, aykırı değerler azalmaktadır.

2.2. Tukey’s Yöntemi

Bu yöntem Çeyrekler Arası Aralık (ÇAA) yöntemi olarak da bilinir. Daha önce gösterdiğimiz gibi, ÇAA birinci ve üçüncü çeyrekler arasındaki aralıktır. Bu yöntem ÇAA’ nın 1.5 katı dışında olan tüm değerleri aykırı değerler olarak değerlendirir. Ancak, aralığı değiştirebiliriz ve 1.5 yerine başka bir eşik değeri ayarlayabiliriz.

q75, q25 = np.percentile(df.NA_Sales, [75 ,25])
IQR = q75 - q25
threshold_values=pd.DataFrame(columns={'threshold','outliers_number'})
for threshold in np.arange(1,4,0.5):
min_value = q25 - (IQR*threshold)
max_value = q75 + (IQR*threshold)
outliers_number = len((np.where((df.NA_Sales > max_value)| (df.NA_Sales < min_value))[0]))
threshold_values = threshold_values.append({'threshold': threshold,
'outliers_number': outliers_number},ignore_index=True)
threshold_values

3. Aykırı Değerlerin Düzeltilmesi

Aykırı değerleri tespit ettikten sonra, analizimizin güvenilirliğini etkilememeleri için bunları ele almamız gerekir.

  • Aykırı değerleri veri kümemizden çıkarabiliriz.
  • Aykırı değerlere yeni değerler atayarak sınırlayabiliriz.
  • Onları analizimiz için zararsız bir değere dönüştürürüz.

3.1. Aykırı Değerlerin Sınırlandırılması

Aykırı değerlerin temel sorunu büyüklükleridir. Aykırı değerleri sınırlandırabilirsek, analizimiz üzerindeki etkileri sınırlı olacaktır. Aykırı değerleri sınırlandırmanın yaygın bir yoluna “winsorization” denir.

from scipy.stats.mstats import winsorize
winsorize_NA_Sales = winsorize(df.NA_Sales,(0,0.1))
plt.boxplot(winsorize_NA_Sales)
plt.xlabel('Winsorize_NA_Sales',color='b')
plt.show()

“Winsorization” u uygularken alt ve üst limitleri kendimiz belirleyebiliriz. Herhangi bir pratik yöntemi yoktur. Değerleri çok fazla kırpmak iyi değildir, fazla bilgi kaybına sebep olabilir. “Winsorization” ı % 5 civarında tutmalıyız çünkü bu oranı çok arttırırsak bazı yan etkilere neden olabilir ve bu bizi yanlış sonuçlara götürebilir. Ama belirli bir limit de bulunmamaktadır. Biz burada üst sınırdan %10 oranında keserek değerleri maksimum noktaya sınırladık.

plt.hist(winsorize_NA_Sales)
plt.axvline(x=winsorize_NA_Sales.mean()+3*winsorize_NA_Sales.std(),color='red')
plt.axvline(x=winsorize_NA_Sales.mean()-3*winsorize_NA_Sales.std(),color='red')
plt.xlabel('Winsorize_NA_Sales',color='b')
plt.tight_layout
plt.show()

Yukarıda gördüğünüz üzere artık grafiklerimizde aykırı değerler bulunmamaktadır.

3.2. Aykırı Değerleri Dönüştürme

Aykırı değerlerle başa çıkmanın başka bir yaygın yolu da değerlerin dönüşümüdür. Dönüşüm, yalnızca aykırı değerlerde değil, aynı zamanda normal olmayan veya normale yakın olmayan dağılımlarda da bize yardımcı olur.

plt.hist(np.log(df.NA_Sales+0.1))
plt.axvline(x=np.log(df.NA_Sales+0.1).mean()+3*np.log(df.NA_Sales+0.1).std(),color='red')
plt.axvline(x=np.log(df.NA_Sales+0.1).mean()-3*np.log(df.NA_Sales+0.1).std(),color='red')
plt.xlabel('Log_NA_Sales',color='b')
plt.tight_layout
plt.show()

Gördüğümüz gibi, “np.log” dönüşümü değişkeni, normal bir dağılıma daha yakın bir şekilde dağıldı ve bu, gelecekte bazı istatistiksel teknikleri uygulamada bize yardımcı olacak.

4. Sonuç

Bu çalışma boyunca, veri analizi aşamasında, bazı olağan dışı verilerle, yani aykırı değerlerle nasıl karşılaşılabileceğini gördük. Bu aykırı değerleri tespit etmek ve kaldırmak için kullanılabilecek teknikleri öğrendik.


Yorum Bırak

E-posta hesabınız yayımlanmayacak.

Yorum

Ad- Soyad

E-posta

Url