Шинжээчид 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% -ийг хууран мэхэлж алдсан. Гэсэн хэдий ч хуваарилалт нь илүү бүрдсэн харагдаж, түүврийн мөчүүд нь түгээлтийн мөчүүдэд ойр байдаг.
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]
Бидний энд авч үзсэн хоёр дахь арга бол bootstrap юм. Энэ аргын хувьд дундаж утгыг дэд түүврийн дундаж шиг байгуулна. Бидний жишээн дээр хяналтын бүлгийн дундаж нь 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())
Зөв шийдвэр гаргахад хэт өндөр үзүүлэлтийг илрүүлэх, боловсруулах нь чухал юм. Одоо дор хаяж гурван хурдан бөгөөд ойлгомжтой арга нь танд дүн шинжилгээ хийхээс өмнө өгөгдлийг шалгахад тусална.
Гэсэн хэдий ч, илрүүлсэн хэт их хэмжигдэхүүн нь ер бусын үнэ цэнэ, шинэлэг нөлөө үзүүлэх шинж чанар байж болохыг санах нь чухал юм. Гэхдээ энэ бол өөр түүх :)