អ្នកវិភាគតែងតែជួបប្រទះនឹងការហួសប្រមាណនៅក្នុងទិន្នន័យក្នុងអំឡុងពេលការងាររបស់ពួកគេ ដូចជាអំឡុងពេលការវិភាគ AB-test ការបង្កើតគំរូព្យាករណ៍ ឬតាមដាននិន្នាការ។ ការសម្រេចចិត្តជាធម្មតាផ្អែកលើមធ្យមគំរូ ដែលមានភាពរសើបខ្លាំងចំពោះអ្នកខាងក្រៅ ហើយអាចផ្លាស់ប្តូរតម្លៃយ៉ាងខ្លាំង។ ដូច្នេះ វាមានសារៈសំខាន់ណាស់ក្នុងការគ្រប់គ្រងអ្នកខាងក្រៅដើម្បីធ្វើការសម្រេចចិត្តត្រឹមត្រូវ។
ចូរយើងពិចារណាវិធីសាស្រ្តសាមញ្ញ និងរហ័សមួយចំនួនសម្រាប់ធ្វើការជាមួយតម្លៃមិនធម្មតា។
ស្រមៃថាអ្នកត្រូវធ្វើការវិភាគពិសោធន៍ដោយប្រើតម្លៃលំដាប់មធ្យមជាម៉ែត្របឋម។ ចូរនិយាយថាម៉ែត្ររបស់យើងជាធម្មតាមានការចែកចាយធម្មតា។ ដូចគ្នានេះផងដែរយើងដឹងថាការចែកចាយម៉ែត្រនៅក្នុងក្រុមសាកល្បងគឺខុសពីអ្វីដែលនៅក្នុងវត្ថុបញ្ជា។ ម្យ៉ាងវិញទៀត មធ្យមនៃការបែងចែកក្នុងការគ្រប់គ្រងគឺ 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))
NB ដែលពិចារណាលើម៉ែត្រអាចមានគម្លាតពីភាគីទាំងពីរ។ ប្រសិនបើម៉ែត្ររបស់អ្នកអាចមានគម្លាតពីម្ខាងប៉ុណ្ណោះ នោះវិធីសាស្ត្រអាចត្រូវបានបំប្លែងយ៉ាងងាយក្នុងគោលបំណងនោះ។
វិធីសាស្រ្តងាយស្រួលបំផុតគឺកាត់ផ្តាច់ការសង្កេតទាំងអស់ មុនភាគរយ 5% និង បន្ទាប់ពី 95% ភាគរយ ។ ក្នុងករណីនេះ យើងបានបាត់បង់ 10% នៃព័ត៌មានដែលជា con មួយ។ ទោះជាយ៉ាងណាក៏ដោយ ការចែកចាយមើលទៅកាន់តែបង្កើត ហើយពេលវេលាគំរូគឺជិតដល់ពេលចែកចាយ។
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% ភាគរយដកមួយពាក់កណ្តាលនៃជួរ interquartile ហើយក្រុមតន្រ្តីខ្ពស់ស្មើនឹង 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())
ការរកឃើញ និងការដំណើរការខាងក្រៅគឺមានសារៈសំខាន់សម្រាប់ការសម្រេចចិត្តត្រឹមត្រូវ។ ឥឡូវនេះ យ៉ាងហោចណាស់វិធីសាស្រ្តលឿន និងត្រង់ចំនួនបីអាចជួយអ្នកពិនិត្យមើលទិន្នន័យមុនពេលវិភាគ។
ទោះជាយ៉ាងណាក៏ដោយ វាចាំបាច់ណាស់ក្នុងការចងចាំថា ធាតុខាងក្រៅដែលបានរកឃើញអាចជាតម្លៃមិនធម្មតា និងជាលក្ខណៈពិសេសសម្រាប់ឥទ្ធិពលភាពថ្មីថ្មោង។ ប៉ុន្តែវាជារឿងមួយទៀត :)