![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Ny fanandramana rehetra dia misy fifampiraharahana eo amin'ny vokatra haingana sy ny fahatsapana metrika. Raha midadasika amin'ny lafin'ny fahasamihafana ny metrika voafidy dia tsy maintsy miandry ela isika mba hahazoana antoka fa marina ny valin'ny fanandramana. Andeha isika handinika fomba iray hanampiana ireo mpandinika hanatsara ny andrana ataony nefa tsy mandany fotoana be loatra na fahatsapan-tena.
Eritrereto hoe manao andrana manara-penitra isika mba hitsapana algorithm filaharana vaovao, miaraka amin'ny halavan'ny fivoriana ho metrika voalohany. Fanampin'izany, hevero fa azo sokajiana ho vondrona telo ny mpihaino anay: zatovo 1 tapitrisa, mpampiasa 2 tapitrisa 18-45 taona ary mpampiasa 3 tapitrisa 45 taona no ho miakatra. Ny valin'ny algorithm filaharana vaovao dia mety hiovaova be amin'ireo vondrona mpihaino ireo. Ity fiovaovana midadasika ity dia mampihena ny fahatsapan'ny metrika.
Raha lazaina amin'ny teny hafa, ny mponina dia azo zaraina ho strata telo, voalaza amin'ireto manaraka ireto:
Andeha hatao hoe manana fizarana ara-dalàna ny singa tsirairay. Avy eo, ny metrika lehibe ho an'ny mponina dia manana fizarana ara-dalàna ihany koa.
Zarainay kisendrasendra ny mpampiasa rehetra amin'ny mponina amin'ny endrika andrana mahazatra tsy misy fiheverana ny fahasamihafana misy eo amin'ireo mpampiasa anay. Noho izany dia dinihintsika ny santionany miaraka amin'ny sanda andrasana sy ny fahasamihafana manaraka.
Ny fomba iray hafa dia ny fizarana kisendrasendra ao anatin'ny strat tsirairay araka ny lanjan'ny strat amin'ny mponina amin'ny ankapobeny.
Amin'ity tranga ity, ny sanda andrasana sy ny fahasamihafana dia ireto manaraka ireto.
Ny sanda andrasana dia mitovy amin'ny safidy voalohany. Na izany aza, kely kokoa ny fahasamihafana, izay miantoka ny fahatsapan'ny metrika ambony kokoa.
Ankehitriny, andeha hodinihintsika ny fomba nataon'i Neyman . Manoro hevitra izy ireo ny hizara ny mpampiasa an-tsokosoko ao anatin'ny strat tsirairay miaraka amin'ny lanja manokana.
Noho izany, ny sanda andrasana sy ny variana dia mitovy amin'ireto manaraka ireto amin'ity tranga ity.
Ny sanda andrasana dia mitovy amin'ny sanda andrasana amin'ny tranga voalohany asymptotically. Na izany aza, ny variance dia kely kokoa.
Noporofoinay ara-teorika ny fahombiazan'ity fomba ity. Andao hanao simulate santionany ary hizaha toetra ny fomba fanasokajiana ara-pitsipika.
Andeha isika handinika tranga telo:
Hampihatra ireo fomba telo ireo isika amin'ny tranga rehetra ary mamolavola histograma sy boxplot mba hampitahana azy ireo.
Voalohany, andao hamorona kilasy iray amin'ny Python izay manahaka ny mponina amin'ny ankapobeny misy strats telo.
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]
Avy eo, andao ampiana asa ho an'ireo fomba telo fanaovana santionany voalaza ao amin'ny ampahany teorika.
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
Ary koa, ho an'ny ampahany empirical, mila fiasa foana isika amin'ny fanaovana simulation ny fizotran'ny fanandramana.
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
Raha mijery ny mponina amin'ny ankapobeny isika, izay misy ny soatoavina sy ny fiovaovan'ny strats rehetra misy antsika, ny vokatry ny fomba telo dia heverina ho mitovy na latsaka.
Nahazo vokatra mampientanentana kokoa ny fomba samy hafa sy ny tsy fitoviana mitovy. Ny fampiasana stratification dia mampihena be ny fahasamihafana.
Amin'ny tranga misy fomba mitovy sy tsy mitovy, dia mahita fihenam-bidy amin'ny fomban'i Neyman isika.
Ankehitriny, azonao atao ny mampihatra ny fomba fanaovana stratification mba hampihenana ny fiovaovan'ny metrika ary hanamafisana ny fanandramana raha manangona ny mpihaino anao ianao ary mizara azy ireo amin'ny fomba ara-teknika ao anatin'ny cluster tsirairay miaraka amin'ny lanjany manokana!