paint-brush
Kənarların aşkarlanması: Nəyi bilməlisiniztərəfindən@nataliaogneva
54,619 oxunuşlar
54,619 oxunuşlar

Kənarların aşkarlanması: Nəyi bilməlisiniz

tərəfindən Natalia Ogneva4m2024/04/23
Read on Terminal Reader
Read this story w/o Javascript

Çox uzun; Oxumaq

Analitiklər iş zamanı məlumatlarda tez-tez kənar göstəricilərlə qarşılaşırlar. Qərarlar adətən kənar göstəricilərə çox həssas olan nümunə ortasına əsaslanır. 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.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Kənarların aşkarlanması: Nəyi bilməlisiniz
Natalia Ogneva HackerNoon profile picture

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.

Problemin Tərkibi

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.

Quyruqları kəsin

Ən asan üsul 5% faizdən əvvəl95% 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]

Bootstrap

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())

Nəticə

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ə :)