paint-brush
د تجربې تحلیل لپاره د Stratification میتود کاروللخوا@nataliaogneva
33,172 لوستل
33,172 لوستل

د تجربې تحلیل لپاره د Stratification میتود کارول

لخوا Natalia Ogneva8m2024/04/19
Read on Terminal Reader
Read this story w/o Javascript

ډېر اوږد؛ لوستل

Stratified نمونه اخیستل یو پیاوړی تخنیک دی چې د تجربې موثریت او د معلوماتو تحلیل کې میټریک حساسیت ته وده ورکوي. د خپلو لیدونکو په کلستر کولو او د ځانګړو وزنونو سره ویشلو سره، تاسو کولی شئ تجربې اصلاح کړئ، توپیر کم کړئ، او د پایلو اعتبار لوړ کړئ.

Company Mentioned

Mention Thumbnail
featured image - د تجربې تحلیل لپاره د Stratification میتود کارول
Natalia Ogneva HackerNoon profile picture
0-item


هره تجربه د ګړندي پایلو او میټریک حساسیت ترمینځ تجارت لري. که چیرې غوره شوی میټریک د توپیر له مخې پراخه وي، موږ باید ډیر وخت انتظار وکړو ترڅو ډاډ ترلاسه کړو چې د تجربې پایلې سمې دي. راځئ چې یو میتود په پام کې ونیسو چې له شنونکو سره مرسته وکړي چې د دوی تجربې ته وده ورکړي پرته لدې چې ډیر وخت یا میټریک حساسیت له لاسه ورکړي.


د ستونزې جوړښت

فرض کړئ چې موږ د نوي درجه بندي الګوریتم ازموینې لپاره معیاري تجربه ترسره کوو، د لومړني میټریک په توګه د ناستې اوږدوالی سره. برسیره پردې، په پام کې ونیسئ چې زموږ لیدونکي تقریبا په دریو ډلو ویشل کیدی شي: 1 ملیون تنکي ځوانان، 2 ملیون کاروونکي چې عمرونه 18-45، او 3 ملیون کاروونکي چې عمرونه یې 45 او پورته وي. د نوي درجه بندي الګوریتم ځواب به د دې لیدونکو ډلو ترمنځ د پام وړ توپیر ولري. دا پراخه توپیر د میټریک حساسیت کموي.


په بل عبارت، نفوس په دریو برخو ویشل کیدی شي، چې په لاندې ډول تشریح شوي:


راځئ چې ووایو چې هره برخه نورمال توزیع لري. بیا، د نفوس لپاره اصلي میټریک هم یو نورمال ویش لري.

د جوړښت طریقه

موږ په تصادفي ډول د خلکو څخه ټول کارونکي د کلاسیک تجربې ډیزاین کې پرته له دې چې زموږ د کاروونکو ترمینځ توپیرونه په پام کې نیولو سره وویشو . په دې توګه، موږ نمونه د لاندې متوقع ارزښت او توپیر سره په پام کې نیسو.


بله لاره په تصادفي ډول په عمومي نفوس کې د سټراټ وزن سره سم د هر سټراټ دننه ویشل دي.

په دې حالت کې، متوقع ارزښت او توپیر په لاندې ډول دی.


متوقع ارزښت په لومړي انتخاب کې ورته دی. په هرصورت، توپیر لږ دی، کوم چې د لوړ میټریک حساسیت تضمینوي.

اوس راځئ چې د نییمان طریقه په پام کې ونیسو. دوی وړاندیز کوي چې کاروونکو ته په تصادفي ډول د هر سټراټ دننه د ځانګړي وزنونو سره تقسیم کړي.

نو، متوقع ارزښت او توپیر په دې قضیه کې د لاندې سره برابر دی.

متوقع ارزښت په لومړي حالت کې په غیر متناسب ډول د متوقع ارزښت سره مساوي دی. په هرصورت، توپیر خورا لږ دی.

تجربوي ازموینه

موږ د دې میتود موثریت په تیوریکي توګه ثابت کړی دی. راځئ چې نمونې تقلید کړو او د استخراج میتود په تجربوي ډول و ازمو.

راځئ چې درې قضیې په پام کې ونیسو:

  • ټول د مساوي وسیلو او توپیرونو سره،
  • ټول سټراټونه د مختلف وسیلو او مساوي توپیرونو سره،
  • ټول سټریټونه د مساوي وسیلو او مختلف توپیرونو سره.

موږ به په ټولو قضیو کې ټولې درې میتودونه پلي کړو او د پرتله کولو لپاره به یو هسټوګرام او بکس پلاټ جوړ کړو.

د کوډ چمتو کول

لومړی، راځئ چې په Python کې یو ټولګی جوړ کړو چې زموږ عمومي نفوس جوړ کړي چې درې سټراټونه لري.

 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


د سمولو پایلې

که موږ عمومي نفوس ته وګورو، چیرته چې زموږ ټول سټراټونه ورته ارزښتونه او توپیرونه لري، د ټولو دریو میتودونو پایلې تمه کیږي چې لږ یا لږ مساوي وي.

مختلف وسیلې او مساوي توپیرونه ډیرې په زړه پوري پایلې ترلاسه کړې. د سټراټیفیکیشن کارول په ډراماتیک ډول توپیر کموي.

په هغو قضیو کې چې د مساوي وسیلو او مختلف توپیرونو سره وي، موږ د نییمان په طریقه کې د توپیر کمښت ګورو.

پایله

اوس، تاسو کولی شئ د میټریک توپیر کمولو او تجربې ته وده ورکولو لپاره د سټراټیفیکیشن میتود پلي کړئ که تاسو خپل لیدونکي کلستر کړئ او په تخنیکي ډول یې په تصادفي ډول د هر کلستر دننه د ځانګړي وزنونو سره وویشئ!