ანალიტიკოსები ხშირად აწყდებიან მონაცემებს მათი მუშაობის დროს, მაგალითად, AB ტესტის ანალიზის დროს, პროგნოზირებადი მოდელების შექმნისას ან ტენდენციების თვალყურის დევნებისას. გადაწყვეტილებები, როგორც წესი, ეფუძნება საშუალების შერჩევისას, რომელიც ძალიან მგრძნობიარეა გარედან და შეუძლია მკვეთრად შეცვალოს მნიშვნელობა. ასე რომ, გადამწყვეტი მნიშვნელობა ენიჭება გარე ფაქტორების მართვას სწორი გადაწყვეტილების მისაღებად.
განვიხილოთ რამდენიმე მარტივი და სწრაფი მიდგომა უჩვეულო მნიშვნელობებთან მუშაობისთვის.
წარმოიდგინეთ, რომ თქვენ უნდა ჩაატაროთ ექსპერიმენტის ანალიზი საშუალო შეკვეთის მნიშვნელობის გამოყენებით, როგორც პირველადი მეტრიკა. ვთქვათ, რომ ჩვენს მეტრიკას ჩვეულებრივ აქვს ნორმალური განაწილება. ასევე, ჩვენ ვიცით, რომ სატესტო ჯგუფში მეტრიკული განაწილება განსხვავდება კონტროლისგან. სხვა სიტყვებით რომ ვთქვათ, კონტროლში განაწილების საშუალო არის 10, ტესტში კი 12. სტანდარტული გადახრა ორივე ჯგუფში არის 3.
თუმცა, ორივე ნიმუშს აქვს ამომწურავი ნიშნები, რომლებიც ახდენენ ნიმუშის საშუალებებს და ნიმუშის სტანდარტულ გადახრას.
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))
გაითვალისწინეთ , რომ მეტრიკის გათვალისწინება შეიძლება ჰქონდეს გამოკვეთილები ორივე მხრიდან. თუ თქვენს მეტრულს მხოლოდ ერთი მხრიდან შეიძლება ჰქონდეთ გამოკვეთილები, ამ მიზნით მეთოდები ადვილად გარდაიქმნება.
უმარტივესი მეთოდია ყველა დაკვირვების შეწყვეტა 5% პროცენტულამდე და 95% პროცენტის შემდეგ . ამ შემთხვევაში, ჩვენ დავკარგეთ ინფორმაციის 10% როგორც condi. თუმცა, განაწილებები გამოიყურება უფრო ჩამოყალიბებული და ნიმუშის მომენტები უფრო ახლოს არის განაწილების მომენტებთან.
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]
კიდევ ერთი გზა არის დაკვირვების გამორიცხვა კონკრეტული დიაპაზონის მიღმა . დაბალი დიაპაზონი უდრის 25% ცენტილის მინუს კვარტლთაშორისი დიაპაზონის ნახევარს, ხოლო მაღალი დიაპაზონი უდრის 75% პროცენტს პლუს ნახევარს. აქ ჩვენ დავკარგავთ ინფორმაციის მხოლოდ 0,7%-ს. დისტრიბუცია გამოიყურება უფრო ჩამოყალიბებული, ვიდრე საწყისი. ნიმუშის მომენტები კიდევ უფრო ტოლია განაწილების მომენტებთან.
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]
მეორე მეთოდი, რომელიც აქ განვიხილეთ, არის ჩამტვირთავი. ამ მიდგომით, საშუალო აგებულია როგორც ქვენიმუშების საშუალო. ჩვენს მაგალითში საკონტროლო ჯგუფში საშუალო უდრის 10.35, ხოლო ტესტის ჯგუფს 11.78. ეს მაინც უკეთესი შედეგია მონაცემთა დამატებით დამუშავებასთან შედარებით.
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())
გარე ამოცნობა და დამუშავება მნიშვნელოვანია სწორი გადაწყვეტილების მისაღებად. ახლა, მინიმუმ სამი სწრაფი და პირდაპირი მიდგომა დაგეხმარებათ შეამოწმოთ მონაცემები ანალიზამდე.
თუმცა, მნიშვნელოვანია გვახსოვდეს, რომ აღმოჩენილი შორს შეიძლება იყოს უჩვეულო მნიშვნელობები და სიახლის ეფექტის მახასიათებელი. მაგრამ ეს სხვა ამბავია :)