ការពិសោធន៍ណាមួយពាក់ព័ន្ធនឹងការដោះដូររវាងលទ្ធផលលឿន និងភាពប្រែប្រួលនៃម៉ែត្រ។ ប្រសិនបើម៉ែត្រដែលបានជ្រើសរើសមានលក្ខណៈទូលំទូលាយក្នុងលក្ខខណ្ឌនៃភាពខុសគ្នា យើងត្រូវរង់ចាំយូរដើម្បីធានាថាលទ្ធផលនៃការពិសោធន៍មានភាពត្រឹមត្រូវ។ សូមពិចារណាវិធីសាស្រ្តមួយដើម្បីជួយអ្នកវិភាគបង្កើនការពិសោធន៍របស់ពួកគេដោយមិនបាត់បង់ពេលវេលាច្រើនពេក ឬភាពប្រែប្រួលនៃម៉ែត្រ។
ឧបមាថាយើងធ្វើការពិសោធន៍ស្ដង់ដារដើម្បីសាកល្បងក្បួនដោះស្រាយចំណាត់ថ្នាក់ថ្មី ដោយមានប្រវែងវគ្គជាម៉ែត្របឋម។ លើសពីនេះទៀត សូមពិចារណាថាទស្សនិកជនរបស់យើងអាចបែងចែកជាបីក្រុម៖ ក្មេងជំទង់ 1 លាននាក់ អ្នកប្រើប្រាស់ 2 លាននាក់ដែលមានអាយុពី 18-45 ឆ្នាំ និងអ្នកប្រើប្រាស់ 3 លាននាក់ដែលមានអាយុចាប់ពី 45 ឆ្នាំឡើងទៅ។ ការឆ្លើយតបទៅនឹងក្បួនដោះស្រាយចំណាត់ថ្នាក់ថ្មីនឹងមានភាពខុសប្លែកគ្នាយ៉ាងខ្លាំងក្នុងចំណោមក្រុមទស្សនិកជនទាំងនេះ។ បំរែបំរួលដ៏ធំទូលាយនេះកាត់បន្ថយភាពប្រែប្រួលនៃម៉ែត្រ។
ម៉្យាងវិញទៀត ប្រជាជនអាចបែងចែកជាបីស្រទាប់ ដែលពិពណ៌នាដូចខាងក្រោម៖
ចូរនិយាយថាសមាសធាតុនីមួយៗមានការចែកចាយធម្មតា។ បន្ទាប់មកម៉ែត្រមេសម្រាប់ប្រជាជនក៏មានការបែងចែកធម្មតាដែរ។
យើង បែងចែកអ្នកប្រើប្រាស់ទាំងអស់ដោយចៃដន្យ ពីចំនួនប្រជាជននៅក្នុងការរចនាពិសោធន៍បុរាណដោយមិនគិតពីភាពខុសគ្នារវាងអ្នកប្រើប្រាស់របស់យើង។ ដូច្នេះ យើងពិចារណាគំរូជាមួយនឹងតម្លៃរំពឹងទុក និងការប្រែប្រួលដូចខាងក្រោម។
វិធីមួយទៀតគឺ ការបែងចែកដោយចៃដន្យនៅខាងក្នុងរាល់ strat យោងទៅតាមទម្ងន់ នៃ strat នៅក្នុងប្រជាជនទូទៅ។
ក្នុងករណីនេះ តម្លៃដែលរំពឹងទុក និងការប្រែប្រួលមានដូចខាងក្រោម
តម្លៃដែលរំពឹងទុកគឺដូចគ្នានឹងជម្រើសដំបូងដែរ។ ទោះជាយ៉ាងណាក៏ដោយ ភាពខុសប្លែកគ្នាគឺតិចជាង ដែលធានានូវភាពប្រែប្រួលម៉ែត្រខ្ពស់ជាង។
ឥឡូវនេះ ចូរយើងពិចារណាអំពី វិធីសាស្ត្ររបស់ Neymar ។ ពួកគេស្នើឱ្យបែងចែកអ្នកប្រើប្រាស់ដោយចៃដន្យនៅក្នុងគ្រប់ស្រទាប់ដែលមានទម្ងន់ជាក់លាក់។
ដូច្នេះ តម្លៃ និងការប្រែប្រួលដែលរំពឹងទុកគឺស្មើនឹងខាងក្រោមក្នុងករណីនេះ។
តម្លៃដែលរំពឹងទុកគឺស្មើនឹងតម្លៃរំពឹងទុកនៅក្នុងករណីទីមួយ asymptotically ។ ទោះជាយ៉ាងណាក៏ដោយភាពខុសគ្នាគឺតិចជាងច្រើន។
យើងបានបង្ហាញពីប្រសិទ្ធភាពនៃវិធីសាស្ត្រនេះតាមទ្រឹស្តី។ តោះក្លែងធ្វើគំរូ និងសាកល្បងវិធីសាស្ត្រ stratification ជាក់ស្តែង។
ចូរយើងពិចារណាករណីបី៖
យើងនឹងអនុវត្តវិធីទាំងបីក្នុងគ្រប់ករណីទាំងអស់ ហើយគូសអ៊ីស្តូក្រាម និងប្រអប់គ្រោងដើម្បីប្រៀបធៀបពួកវា។
ដំបូង យើងបង្កើតថ្នាក់មួយនៅក្នុង Python ដែលក្លែងធ្វើប្រជាជនទូទៅរបស់យើងដែលមានបី strats ។
class GeneralPopulation: def __init__(self, means: [float], stds: [float], sizes: [int], random_state: int = 15 ): """ Initializes our General Population and saves the given distributions :param means: List of expectations for normal distributions :param stds: List of standard deviations for normal distributions :param sizes: How many objects will be in each strata :param random_state: Parameter fixing randomness. Needed so that when conducting experiment repeatedly with the same input parameters, the results remained the same """ self.strats = [st.norm(mean, std) for mean, std in zip(means, stds)] self._sample(sizes) self.random_state = random_state def _sample(self, sizes): """Creates a general population sample as a mixture of strata :param sizes: List with sample sizes of the corresponding normal distributions """ self.strats_samples = [rv.rvs(size) for rv, size in zip(self.strats, sizes)] self.general_samples = np.hstack(self.strats_samples) self.N = self.general_samples.shape[0] # number of strata self.count_strats = len(sizes) # ratios for every strata in GP self.ws = [size/self.N for size in sizes] # ME and Std for GP self.m = np.mean(self.general_samples) self.sigma = np.std(self.general_samples) # ME and std for all strata self.ms = [np.mean(strat_sample) for strat_sample in self.strats_samples] self.sigmas = [np.std(strat_sample) for strat_sample in self.strats_samples]
បន្ទាប់មក ចូរយើងបន្ថែមមុខងារសម្រាប់វិធីសាស្រ្តគំរូទាំងបីដែលបានពិពណ៌នានៅក្នុងផ្នែកទ្រឹស្តី។
def random_subsampling(self, size): """Creates a random subset of the entire population :param sizes: subsample size """ rc = np.random.choice(self.general_samples, size=size) return rc def proportional_subsampling(self, size): """Creates a subsample with the number of elements, proportional shares of strata :param sizes: subsample size """ self.strats_size_proport = [int(np.floor(size*w)) for w in self.ws] rc = [] for k in range(len(self.strats_size_proport)): rc.append(np.random.choice(self.strats_samples[k], size=self.strats_size_proport[k])) return rc def optimal_subsampling(self, size): """Creates a subsample with the optimal number of elements relative to strata :param sizes: subsample size """ sum_denom = 0 for k in range(self.count_strats): sum_denom += self.ws[k] * self.sigmas[k] self.strats_size_optimal = [int(np.floor((size*w*sigma)/sum_denom)) for w, sigma in zip(self.ws, self.sigmas)] if 0 in self.strats_size_optimal: raise ValueError('Strats size is 0, please change variance of smallest strat!') rc = [] for k in range(len(self.strats_size_optimal)): rc.append(np.random.choice(self.strats_samples[k], size=self.strats_size_optimal[k])) return rc
ដូចគ្នានេះផងដែរ សម្រាប់ផ្នែកជាក់ស្តែង យើងតែងតែត្រូវការមុខងារមួយសម្រាប់ក្លែងធ្វើដំណើរការពិសោធន៍។
def run_experiments(self, n_sub, subsampling_method, n_experiments=1000): """Conducts a series of experiments and saves the results :param n_sub: size of sample :param subsampling_method: method for creating a subsample :param n_experiments: number of experiment starts """ means_s = [] if(len(self.general_samples)<100): n_sub = 20 if(subsampling_method == 'random_subsampling'): for n in range(n_experiments): rc = self.random_subsampling(n_sub) mean = rc.sum()/len(rc) means_s.append(mean) else: for n in range(n_experiments): if(subsampling_method == 'proportional_subsampling'): rc = self.proportional_subsampling(n_sub) elif(subsampling_method == 'optimal_subsampling'): rc = self.optimal_subsampling(n_sub) strats_mean = [] for k in range(len(rc)): strats_mean.append(sum(rc[k])/len(rc[k])) # Mean for a mixture means_s.append(sum([w_k*mean_k for w_k, mean_k in zip(self.ws, strats_mean)])) return means_s
ប្រសិនបើយើងក្រឡេកទៅមើលប្រជាជនទូទៅ ដែលក្រុមទាំងអស់របស់យើងមានតម្លៃដូចគ្នា និងបំរែបំរួល លទ្ធផលនៃវិធីសាស្រ្តទាំងបី ត្រូវបានគេរំពឹងថានឹងមានភាពស្មើគ្នាច្រើន ឬតិច។
មធ្យោបាយផ្សេងគ្នា និងភាពខុសគ្នាស្មើគ្នាទទួលបានលទ្ធផលគួរឱ្យរំភើបជាង។ ការប្រើប្រាស់ stratification កាត់បន្ថយភាពខុសគ្នាយ៉ាងខ្លាំង។
ក្នុងករណីដែលមានមធ្យោបាយស្មើគ្នា និងភាពខុសគ្នា យើងឃើញការកាត់បន្ថយភាពខុសគ្នាក្នុងវិធីសាស្ត្ររបស់ Neyman។
ឥឡូវនេះ អ្នកអាចអនុវត្តវិធីសាស្ត្រដាក់កម្រិត ដើម្បីកាត់បន្ថយភាពខុសប្លែកគ្នានៃម៉ែត្រ និងជំរុញការពិសោធន៍ ប្រសិនបើអ្នកចង្កោមទស្សនិកជនរបស់អ្នក ហើយតាមបច្ចេកទេសបែងចែកពួកវាដោយចៃដន្យនៅក្នុងចង្កោមនីមួយៗជាមួយនឹងទម្ងន់ជាក់លាក់!