paint-brush
ដោយប្រើវិធីសាស្រ្ត stratification សម្រាប់ការវិភាគពិសោធន៍ដោយ@nataliaogneva
33,155 ការអាន
33,155 ការអាន

ដោយប្រើវិធីសាស្រ្ត stratification សម្រាប់ការវិភាគពិសោធន៍

ដោយ Natalia Ogneva8m2024/04/19
Read on Terminal Reader
Read this story w/o Javascript

យូរ​ពេក; អាន

ការ​យក​គំរូ​តាម​កម្រិត​គឺ​ជា​បច្ចេកទេស​ដ៏​មាន​ឥទ្ធិពល​មួយ​ដើម្បី​បង្កើន​ប្រសិទ្ធភាព​ការ​ពិសោធន៍​និង​ភាព​ប្រែប្រួល​ម៉ែត្រ​ក្នុង​ការ​វិភាគ​ទិន្នន័យ។ តាមរយៈការដាក់ក្រុមទស្សនិកជនរបស់អ្នក និងបែងចែកពួកវាជាមួយនឹងទម្ងន់ជាក់លាក់ អ្នកអាចបង្កើនប្រសិទ្ធភាពការពិសោធន៍ កាត់បន្ថយភាពខុសគ្នា និងបង្កើនភាពជឿជាក់នៃលទ្ធផល។

Company Mentioned

Mention Thumbnail
featured image - ដោយប្រើវិធីសាស្រ្ត stratification សម្រាប់ការវិភាគពិសោធន៍
Natalia Ogneva HackerNoon profile picture
0-item


ការពិសោធន៍ណាមួយពាក់ព័ន្ធនឹងការដោះដូររវាងលទ្ធផលលឿន និងភាពប្រែប្រួលនៃម៉ែត្រ។ ប្រសិនបើ​ម៉ែត្រ​ដែល​បាន​ជ្រើសរើស​មាន​លក្ខណៈ​ទូលំទូលាយ​ក្នុង​លក្ខខណ្ឌ​នៃ​ភាព​ខុស​គ្នា យើង​ត្រូវ​រង់ចាំ​យូរ​ដើម្បី​ធានា​ថា​លទ្ធផល​នៃ​ការ​ពិសោធន៍​មាន​ភាពត្រឹមត្រូវ។ សូមពិចារណាវិធីសាស្រ្តមួយដើម្បីជួយអ្នកវិភាគបង្កើនការពិសោធន៍របស់ពួកគេដោយមិនបាត់បង់ពេលវេលាច្រើនពេក ឬភាពប្រែប្រួលនៃម៉ែត្រ។


ការបង្កើតបញ្ហា

ឧបមាថាយើងធ្វើការពិសោធន៍ស្ដង់ដារដើម្បីសាកល្បងក្បួនដោះស្រាយចំណាត់ថ្នាក់ថ្មី ដោយមានប្រវែងវគ្គជាម៉ែត្របឋម។ លើសពីនេះទៀត សូមពិចារណាថាទស្សនិកជនរបស់យើងអាចបែងចែកជាបីក្រុម៖ ក្មេងជំទង់ 1 លាននាក់ អ្នកប្រើប្រាស់ 2 លាននាក់ដែលមានអាយុពី 18-45 ឆ្នាំ និងអ្នកប្រើប្រាស់ 3 លាននាក់ដែលមានអាយុចាប់ពី 45 ឆ្នាំឡើងទៅ។ ការឆ្លើយតបទៅនឹងក្បួនដោះស្រាយចំណាត់ថ្នាក់ថ្មីនឹងមានភាពខុសប្លែកគ្នាយ៉ាងខ្លាំងក្នុងចំណោមក្រុមទស្សនិកជនទាំងនេះ។ បំរែបំរួលដ៏ធំទូលាយនេះកាត់បន្ថយភាពប្រែប្រួលនៃម៉ែត្រ។


ម៉្យាងវិញទៀត ប្រជាជនអាចបែងចែកជាបីស្រទាប់ ដែលពិពណ៌នាដូចខាងក្រោម៖


ចូរនិយាយថាសមាសធាតុនីមួយៗមានការចែកចាយធម្មតា។ បន្ទាប់មកម៉ែត្រមេសម្រាប់ប្រជាជនក៏មានការបែងចែកធម្មតាដែរ។

វិធីសាស្រ្ត stratification

យើង បែងចែកអ្នកប្រើប្រាស់ទាំងអស់ដោយចៃដន្យ ពីចំនួនប្រជាជននៅក្នុងការរចនាពិសោធន៍បុរាណដោយមិនគិតពីភាពខុសគ្នារវាងអ្នកប្រើប្រាស់របស់យើង។ ដូច្នេះ យើងពិចារណាគំរូជាមួយនឹងតម្លៃរំពឹងទុក និងការប្រែប្រួលដូចខាងក្រោម។


វិធីមួយទៀតគឺ ការបែងចែកដោយចៃដន្យនៅខាងក្នុងរាល់ 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។

សេចក្តីសន្និដ្ឋាន

ឥឡូវនេះ អ្នកអាចអនុវត្តវិធីសាស្ត្រដាក់កម្រិត ដើម្បីកាត់បន្ថយភាពខុសប្លែកគ្នានៃម៉ែត្រ និងជំរុញការពិសោធន៍ ប្រសិនបើអ្នកចង្កោមទស្សនិកជនរបស់អ្នក ហើយតាមបច្ចេកទេសបែងចែកពួកវាដោយចៃដន្យនៅក្នុងចង្កោមនីមួយៗជាមួយនឹងទម្ងន់ជាក់លាក់!

L O A D I N G
. . . comments & more!

About Author

Natalia Ogneva HackerNoon profile picture
Natalia Ogneva@nataliaogneva
Statistics lover

ព្យួរស្លាក

អត្ថបទនេះត្រូវបានបង្ហាញនៅក្នុង...