Outlier-lərin aşkarlanması və onların silinməsi Data Cleaning-in ən vacib mərhələrindəndir. Outlier-lər müəyyən aralıqdan aşan ədədlərdir(ya çox böyük, ya çox kiçik). Bu datalar statistik təhlillərə(mean) təsir göstərə bilər və bununla səhv qərarlar alına bilər. Onları silmək heç də həmişə yaxşı yol deyil. Bu datasetin ölçüsündən asılıdır. Əgər datasetimiz böyükdürsə, outlier-ləri silə bilərik. Yox əgər kiçikdirsə, onları median və ya mode ilə əvəzləyə bilərik. Mean outlier-lərdən təsirləndiyi üçün outlier-ləri onunla əvəz etmək etmək məqsədə uyğun deyil.
Outlier-lərin olmasının səbəbləri:
Datada outlier-lərin olması üçün bir çox səbəb ola bilər. Bəzən outlier-lər məlumat daxil etmə səhvləri səbəbindən mövcud ola bilər. Onları təmizləmədən əvvəl səbəblərini araşdırmaq vacibdir.
Hər bir datasetin fərqli xüsusiyyətləri olduğuna görə ümumilikdə outlier-ləri müəyyənləşdirmək və silmək üçün dəqiq bir yol yoxdur.
Outlier-lərin müəyyənləşdirilməsinin ən yaxşı yollarından biri qrafiklərdən istifadə etməkdir. Scatter plot və box plot outlier-ləri aşkar etmək üçün ən çox seçilən vizual vasitədir.
Box plot-un whisker-lərindən kənar qiymətlər outlier-lər sayılır.
sns.boxplot(df['A'])
Şəkildə görünən qara nöqtələr outlier-lərdir.
Scatter plot daha çox multivariate analysis-də istifadə olunur. Modeli qurarkan hər hansısa bir dəyər modelə uyğun olmadıqda outlier sayılır.
Outlier-ləri müəyyənləşdirməyin ən sadə yollarından biri datanı müəyyən ardıcılıqla sıralamaqdır. Sıraladıqdan sonra,datada olan outlier-ləri asanlıqla müəyyən edə bilərik. Bu metod dataset kiçik olanda daha yaxşı işə yarayır.
Interquartile Range method-Birinci quartile datanın 25% -nin bu dəyərdən aşağı olduğunu, ikinci quartile isə datasetin median-ını, üçüncü quartile isə datanın 75%-nin bu dəyərdən aşağı olduğunu göstərir. Və bu aralığı aşan bütün dəyərlər outlier sayılır. Interquartile Range tətbiq etmək üçün addımlar:
- Birinci quartile-ı tapmaq(Q1)
- Üçüncü quartile-ı tapmaq(Q3)
- Interquartile Range tapmaq.(Bunun üçün düstur:IQR= Q3-Q1).
- Normal data aralığını müəyyən etmək.( Aşağı sərhəd Q1–1.5*IQR, yuxarı sərhəd Q3+1.5*IQR).
Bu sərhədləri keçən hər bir nöqtə outlier sayılır.
Outlier-ləri silməmişdən əvvəl datasetimiz:
df = pd.DataFrame([[1000],[2000],[3000],[4000],[5000],[6000],[7000],[8000],[9000],[20000],[30000]]
, columns=['A'])
def IQR(df):
Q1=df.quantile(0.25)
Q3=df.quantile(0.75)
IQR=Q3-Q1
df_final=df[~((df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR)))]
return df_final
IQR(df)
Z-score test-datada mean=0 və standart deviation=1 olduğu halda tətbiq etmək olur. Əgər Z skoru müvafiq olaraq 3-dən çox və ya -3-dən azdırsa, bu məlumat nöqtələri outlier sayılır. Z score hesablamaq üçün datadan mean-i çıxıb, standard deviation-a bölmək lazımdır. Formula aşağıdakı kimidir:
x= [1,1,1,1, 2, 3, -99, 4,4,4,5, 6, 7, 8, 9,10, 11, 11,11,11]
mean = np.mean(x)
sd = np.std(x)
threshold =3
outliers = []
for i in x:
z = (i-mean)/sd
if abs(z) > threshold:
outliers.append(i)
print(outliers)
Standard deviation method - nümunədəki dəyərlər normal paylanıbsa (Gaussian distribution), standart deviation metodundan istifadə edib outlier-ləri müəyyən edə bilərik.
Orta göstəricidən standart deviation: 68%
Orta göstəricidən 2 standart deviation: 95%
Orta göstəricidən 3 standart deviation: 99.7%
Bu,empirical rule(68–95–99.7 qaydası) və ya 3-sigma qaydası olaraq bilinir.
data= [10, 386, 479, 627, 20, 523, 482, 483, 542, 699, 535, 617, 577, 471, 615, 583, 441, 562, 563, 527, 453, 530, 433, 541, 585, 704, 443, 569, 430, 637, 331, 511, 552, 496, 484, 566, 554, 472, 335, 440, 579, 341, 545, 615, 548, 604, 439, 556, 442, 461, 624, 611, 444, 578, 405, 487, 490, 496, 398, 512, 422, 455, 449, 432, 607, 679, 434, 597, 639, 565, 415, 486, 668, 414, 665, 763, 557, 304, 404, 454, 689, 610, 483, 441, 657, 590, 492, 476, 437, 483, 529, 363, 711, 543]elements = np.array(data)mean = np.mean(elements)
sd = np.std(elements)final_list = [x for x in data if (x > mean - 3 * sd)]
final_list = [x for x in final_list if (x < mean + 3* sd)]
print(final_list)
Vaxt ayırıb oxuduğunuz üçün təşəkkür edirəm!!!
Github linki: https://github.com/nazrnrn/Medium-article-s-code/blob/main/Outliers.ipynb