Таҳлилгарон дар давоми кори худ аксар вақт бо нишондиҳандаҳои берунӣ дучор меоянд, масалан ҳангоми таҳлили санҷиши 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())
Муайян кардан ва коркарди берунӣ барои қабули қарори дуруст муҳим аст. Ҳоло, ҳадди аққал се равиши зуд ва оддӣ метавонанд ба шумо пеш аз таҳлил тафтиш кардани маълумотро кӯмак кунанд.
Бо вуҷуди ин, дар хотир бояд дошт, ки нишондиҳандаҳои ошкоршуда метавонанд арзишҳои ғайриоддӣ ва хусусияти таъсири навоварӣ бошанд. Аммо ин як ҳикояи дигар аст :)