paint-brush
Откривање на оддалеченост: Што треба да знаетеод страна на@nataliaogneva
54,626 читања
54,626 читања

Откривање на оддалеченост: Што треба да знаете

од страна на 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% од информациите како измама. Сепак, распределбите изгледаат повеќе формирани, а моментите на примерокот се поблиску до моментите на дистрибуција.

 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

Вториот метод што го разгледавме овде е 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())

Заклучок

Откривањето и обработката на надворешноста се значајни за донесување правилна одлука. Сега, најмалку три брзи и едноставни пристапи би можеле да ви помогнат да ги проверите податоците пред анализата.


Сепак, од суштинско значење е да се запамети дека откриените оддалечени би можеле да бидат невообичаени вредности и карактеристика за ефектот на новина. Но тоа е друга приказна :)