![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Сарапшылар 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]
Мұнда біз қарастырған екінші әдіс - жүктеу белгішесі. Бұл тәсілде орташа мән ішкі үлгілердің ортасы сияқты құрастырылады. Біздің мысалда бақылау тобындағы орташа мән 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())
Шектеулерді анықтау және өңдеу дұрыс шешім қабылдау үшін маңызды. Енді кем дегенде үш жылдам және қарапайым тәсіл талдау алдында деректерді тексеруге көмектеседі.
Дегенмен, анықталған шектен тыс мәндер әдеттен тыс мәндер және жаңалық әсерінің ерекшелігі болуы мүмкін екенін есте ұстаған жөн. Бірақ бұл басқа әңгіме :)