paint-brush
Выяўленне выкідаў: што вам трэба ведацьпа@nataliaogneva
54,619 чытанні
54,619 чытанні

Выяўленне выкідаў: што вам трэба ведаць

па 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]

Бутстрап

Другі метад, які мы разглядалі тут, - гэта загрузка. Пры такім падыходзе сярэдняе будуецца як сярэдняе падвыбаркі. У нашым прыкладзе сярэдняе значэнне ў кантрольнай групе роўна 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())

Заключэнне

Выяўленне выкідаў і апрацоўка важныя для прыняцця правільнага рашэння. Цяпер як мінімум тры хуткія і простыя падыходы могуць дапамагчы вам праверыць дадзеныя перад аналізам.


Аднак важна памятаць, што выяўленыя выкіды могуць быць незвычайнымі значэннямі і прыкметай эфекту навізны. Але гэта іншая гісторыя :)