Analitiklər tez-tez öz işləri zamanı, məsələn, AB-test təhlili, proqnozlaşdırıcı modellər yaratmaq və ya tendensiyaları izləmə zamanı məlumatlarda kənar göstəricilərlə qarşılaşırlar. Qərarlar adətən kənar göstəricilərə çox həssas olan və dəyəri kəskin şəkildə dəyişə bilən nümunə ortasına əsaslanır. Beləliklə, düzgün qərar vermək üçün kənarları idarə etmək çox vacibdir.
Qeyri-adi dəyərlərlə işləmək üçün bir neçə sadə və sürətli yanaşmaları nəzərdən keçirək.
Təsəvvür edin ki, əsas metrik olaraq orta sifariş dəyərindən istifadə edərək eksperiment təhlili aparmalısınız. Deyək ki, bizim metrik adətən normal paylanmaya malikdir. Həmçinin, biz bilirik ki, test qrupundakı metrik paylanma nəzarətdəkindən fərqlidir. Başqa sözlə, nəzarətdə paylanmanın ortası 10, testdə isə 12. Hər iki qrupda standart kənarlaşma 3-dür.
Bununla belə, hər iki nümunədə nümunə vasitələrini və nümunə standart kənarlaşmasını əyən kənar göstəricilər var.
import numpy as np N = 1000 mean_1 = 10 std_1 = 3 mean_2 = 12 std_2 = 3 x1 = np.concatenate((np.random.normal(mean_1, std_1, N), 10 * np.random.random_sample(50) + 20)) x2 = np.concatenate((np.random.normal(mean_2, std_2, N), 4 * np.random.random_sample(50) + 1))
Qeyd edək ki, metrik nəzərə alınmaqla hər iki tərəfdən kənar göstəricilər ola bilər. Metrikinizin yalnız bir tərəfdən kənar göstəriciləri ola bilərsə, metodlar bu məqsəd üçün asanlıqla dəyişdirilə bilər.
Ən asan üsul 5% faizdən əvvəl və 95% faizdən sonra bütün müşahidələri kəsməkdir. Bu vəziyyətdə biz məlumatın 10% -ni bir yalan kimi itirdik. Bununla belə, paylamalar daha formalaşmış görünür və nümunə anları paylama anlarına daha yaxındır.
import numpy as np x1_5pct = np.percentile(x1, 5) x1_95pct = np.percentile(x1, 95) x1_cutted = [i for i in x1 if i > x1_5pct and i < x1_95pct] x2_5pct = np.percentile(x2, 5) x2_95pct = np.percentile(x2, 95) x2_cutted = [i for i in x2 if i > x2_5pct and i < x2_95pct]
Başqa bir yol , xüsusi diapazondan kənar müşahidələri istisna etməkdir. Aşağı diapazon 25% faizlik minus kvartallararası diapazonun yarısına, yüksək diapazon isə 75% faizə üstəgəl yarıma bərabərdir. Burada məlumatın yalnız 0,7%-ni itirəcəyik. Dağıtımlar ilkindən daha formalaşmış görünür. Nümunə anları paylama anlarına daha bərabərdir.
import numpy as np low_band_1 = np.percentile(x1, 25) - 1.5 * np.std(x1) high_band_1 = np.percentile(x1, 75) + 1.5 * np.std(x1) x1_cutted = [i for i in x1 if i > low_band_1 and i < high_band_1] low_band_2 = np.percentile(x2, 25) - 1.5 * np.std(x2) high_band_2 = np.percentile(x2, 75) + 1.5 * np.std(x2) x2_cutted = [i for i in x2 if i > low_band_2 and i < high_band_2]
Burada nəzərdən keçirdiyimiz ikinci üsul bootstrapdır. Bu yanaşmada orta alt nümunələrin ortası kimi qurulur. Bizim nümunəmizdə nəzarət qrupunda orta qiymət 10,35, test qrupu isə 11,78-ə bərabərdir. Əlavə məlumat emalı ilə müqayisədə bu, hələ də daha yaxşı nəticədir.
import pandas as pd def create_bootstrap_samples( sample_list: np.array, sample_size: int, n_samples: int ): # create a list for sample means sample_means = [] # loop n_samples times for i in range(n_samples): # create a bootstrap sample of sample_size with replacement bootstrap_sample = pd.Series(sample_list).sample(n = sample_size, replace = True) # calculate the bootstrap sample mean sample_mean = bootstrap_sample.mean() # add this sample mean to the sample means list sample_means.append(sample_mean) return pd.Series(sample_means) (create_bootstrap_samples(x1, len(x1), 1000).mean(), create_bootstrap_samples(x2, len(x2), 1000).mean())
Kənarların aşkarlanması və işlənməsi düzgün qərar qəbul etmək üçün vacibdir. İndi ən azı üç sürətli və sadə yanaşma təhlildən əvvəl məlumatları yoxlamağa kömək edə bilər.
Bununla belə, aşkar edilmiş kənar göstəricilərin qeyri-adi dəyərlər və yenilik effekti üçün bir xüsusiyyət ola biləcəyini xatırlamaq vacibdir. Amma bu başqa hekayə :)