paint-brush
გარე ამოცნობა: რა უნდა იცოდეთმიერ@nataliaogneva
54,619 საკითხავი
54,619 საკითხავი

გარე ამოცნობა: რა უნდა იცოდეთ

მიერ Natalia Ogneva4m2024/04/23
Read on Terminal Reader
Read this story w/o Javascript

Ძალიან გრძელი; Წაკითხვა

ანალიტიკოსები ხშირად აწყდებიან მონაცემებს მათი მუშაობის დროს. გადაწყვეტილებები, როგორც წესი, ეფუძნება შერჩევის საშუალოს, რომელიც ძალიან მგრძნობიარეა გარედან. სწორი გადაწყვეტილების მისაღებად გადამწყვეტი მნიშვნელობა აქვს ამომწურავ ფაქტორების მართვას. განვიხილოთ რამდენიმე მარტივი და სწრაფი მიდგომა უჩვეულო მნიშვნელობებთან მუშაობისთვის.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - გარე ამოცნობა: რა უნდა იცოდეთ
Natalia Ogneva HackerNoon profile picture

ანალიტიკოსები ხშირად აწყდებიან მონაცემებს მათი მუშაობის დროს, მაგალითად, 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())

დასკვნა

გარე ამოცნობა და დამუშავება მნიშვნელოვანია სწორი გადაწყვეტილების მისაღებად. ახლა, მინიმუმ სამი სწრაფი და პირდაპირი მიდგომა დაგეხმარებათ შეამოწმოთ მონაცემები ანალიზამდე.


თუმცა, მნიშვნელოვანია გვახსოვდეს, რომ აღმოჩენილი შორს შეიძლება იყოს უჩვეულო მნიშვნელობები და სიახლის ეფექტის მახასიათებელი. მაგრამ ეს სხვა ამბავია :)