paint-brush
Օտարության հայտնաբերում. այն, ինչ դուք պետք է իմանաքկողմից@nataliaogneva
54,602 ընթերցումներ
54,602 ընթերցումներ

Օտարության հայտնաբերում. այն, ինչ դուք պետք է իմանաք

կողմից 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())

Եզրակացություն

Անցյալի հայտնաբերումը և մշակումը կարևոր նշանակություն ունեն ճիշտ որոշում կայացնելու համար: Այժմ առնվազն երեք արագ և պարզ մոտեցումներ կարող են օգնել ձեզ ստուգել տվյալները վերլուծությունից առաջ:


Այնուամենայնիվ, էական է հիշել, որ հայտնաբերված արտանետումները կարող են լինել անսովոր արժեքներ և նորության էֆեկտի հատկանիշ: Բայց դա այլ պատմություն է :)