Аналитичарите честопати наидуваат на оддалеченост во податоците за време на нивната работа, како на пример за време на 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())
Откривањето и обработката на надворешноста се значајни за донесување правилна одлука. Сега, најмалку три брзи и едноставни пристапи би можеле да ви помогнат да ги проверите податоците пред анализата.
Сепак, од суштинско значење е да се запамети дека откриените оддалечени би можеле да бидат невообичаени вредности и карактеристика за ефектот на новина. Но тоа е друга приказна :)