paint-brush
Chiqib ketishni aniqlash: nimani bilishingiz keraktomonidan@nataliaogneva
54,575 o'qishlar
54,575 o'qishlar

Chiqib ketishni aniqlash: nimani bilishingiz kerak

tomonidan Natalia Ogneva4m2024/04/23
Read on Terminal Reader
Read this story w/o Javascript

Juda uzoq; O'qish

Tahlilchilar ko'pincha o'z ishlari davomida ma'lumotlarda o'zgarib turadigan narsalarga duch kelishadi. Qarorlar, odatda, o'rtacha o'rtacha qiymatga asoslanadi, bu esa o'ta sezgir emas. To'g'ri qaror qabul qilish uchun tashqi ko'rsatkichlarni boshqarish juda muhimdir. Keling, noodatiy qiymatlar bilan ishlash uchun bir nechta oddiy va tezkor yondashuvlarni ko'rib chiqaylik.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Chiqib ketishni aniqlash: nimani bilishingiz kerak
Natalia Ogneva HackerNoon profile picture

Tahlilchilar ko'pincha o'z ishlari davomida ma'lumotlarda, masalan, AB testini tahlil qilish, bashoratli modellarni yaratish yoki tendentsiyalarni kuzatish paytida duch kelishadi. Qarorlar, odatda, o'rtacha namunaviy qiymatga asoslanadi, u chetga chiqishga juda sezgir va qiymatni keskin o'zgartirishi mumkin. Shunday qilib, to'g'ri qaror qabul qilish uchun tashqi ko'rsatkichlarni boshqarish juda muhimdir.


Keling, noodatiy qiymatlar bilan ishlash uchun bir nechta oddiy va tezkor yondashuvlarni ko'rib chiqaylik.

Muammoni shakllantirish

Tasavvur qiling-a, siz asosiy ko'rsatkich sifatida o'rtacha buyurtma qiymatidan foydalangan holda tajriba tahlilini o'tkazishingiz kerak. Aytaylik, bizning metrikamiz odatda normal taqsimotga ega. Bundan tashqari, biz bilamizki, test guruhidagi metrik taqsimot nazoratdagidan farq qiladi. Boshqacha aytganda, nazoratdagi taqsimotning o'rtacha qiymati 10 ga, testda esa 12 ga teng. Ikkala guruhdagi standart og'ish 3 ga teng.


Shu bilan birga, ikkala namunada ham namunaviy vositalarni va namunaviy standart og'ishlarni chalg'itadigan chegaralar mavjud.

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

Shuni ta'kidlash kerakki , metrikani hisobga olgan holda har ikki tomondan ham chetga chiqishlar bo'lishi mumkin. Agar sizning ko'rsatkichingiz faqat bir tomondan chetga chiqadigan bo'lsa, usullar bu maqsad uchun osongina o'zgartirilishi mumkin.

Quyruqlarni kesib oling

Eng oson usul - 5% foizdan oldin va 95% foizdan keyin barcha kuzatuvlarni kesib tashlash. Bunday holda, biz ma'lumotning 10% ni con sifatida yo'qotdik. Biroq, taqsimotlar yanada shakllangan ko'rinadi va namunaviy momentlar tarqatish momentlariga yaqinroqdir.

 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]


Yana bir yo'l , muayyan diapazondan tashqarida kuzatuvlarni istisno qilishdir. Past diapazon 25% protsentil minus kvartal oralig'ining yarmiga, yuqori diapazon esa 75% foizga va bir yarimga teng. Bu erda biz faqat 0,7% ma'lumotni yo'qotamiz. Tarqatishlar boshlang'ichdan ko'ra ko'proq shakllangan ko'rinadi. Namuna momentlari taqsimlanish momentlariga ham teng.

 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

Bu erda biz ko'rib chiqqan ikkinchi usul bootstrap. Ushbu yondashuvda o'rtacha kichik namunalar o'rtachasi kabi tuziladi. Bizning misolimizda nazorat guruhidagi o'rtacha 10,35 ga, test guruhi esa 11,78 ga teng. Qo'shimcha ma'lumotlarni qayta ishlash bilan solishtirganda, bu hali ham yaxshi natija.

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

Xulosa

Chetni aniqlash va qayta ishlash to'g'ri qaror qabul qilish uchun muhimdir. Endi kamida uchta tez va sodda yondashuvlar tahlildan oldin ma'lumotlarni tekshirishga yordam beradi.


Biroq, aniqlangan chegaralar noodatiy qiymatlar va yangilik effekti xususiyati bo'lishi mumkinligini yodda tutish kerak. Lekin bu boshqa hikoya :)