ການທົດລອງໃດຫນຶ່ງກ່ຽວຂ້ອງກັບການແລກປ່ຽນລະຫວ່າງຜົນໄດ້ຮັບໄວແລະຄວາມອ່ອນໄຫວຂອງ metric. ຖ້າການວັດແທກທີ່ເລືອກມີຄວາມກວ້າງໃນແງ່ຂອງຄວາມແຕກຕ່າງ, ພວກເຮົາຕ້ອງລໍຖ້າເປັນເວລາດົນນານເພື່ອຮັບປະກັນຜົນໄດ້ຮັບຂອງການທົດລອງແມ່ນຖືກຕ້ອງ. ຂໍໃຫ້ພິຈາລະນາວິທີການຫນຶ່ງທີ່ຈະຊ່ວຍໃຫ້ນັກວິເຄາະເພີ່ມການທົດລອງຂອງເຂົາເຈົ້າໂດຍບໍ່ມີການສູນເສຍເວລາຫຼາຍເກີນໄປຫຼືຄວາມອ່ອນໄຫວຂອງ metric.
ສົມມຸດວ່າພວກເຮົາດໍາເນີນການທົດລອງມາດຕະຖານເພື່ອທົດສອບລະບົບການຈັດອັນດັບໃຫມ່, ໂດຍມີຄວາມຍາວຂອງເຊດຊັນເປັນຕົວຊີ້ວັດຕົ້ນຕໍ. ນອກຈາກນັ້ນ, ໃຫ້ພິຈາລະນາວ່າຜູ້ຊົມຂອງພວກເຮົາສາມາດຈັດປະເພດໂດຍປະມານເປັນສາມກຸ່ມ: ໄວລຸ້ນ 1 ລ້ານຄົນ, ຜູ້ໃຊ້ 2 ລ້ານຄົນອາຍຸ 18-45 ປີ, ແລະ 3 ລ້ານຄົນທີ່ມີອາຍຸ 45 ປີຂຶ້ນໄປ. ການຕອບສະຫນອງຕໍ່ລະບົບການຈັດອັນດັບໃຫມ່ຈະແຕກຕ່າງກັນຢ່າງຫຼວງຫຼາຍໃນບັນດາກຸ່ມຜູ້ຊົມເຫຼົ່ານີ້. ການປ່ຽນແປງທີ່ກວ້າງຂວາງນີ້ຊ່ວຍຫຼຸດຜ່ອນຄວາມອ່ອນໄຫວຂອງ metric.
ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ປະຊາກອນສາມາດແບ່ງອອກເປັນສາມຊັ້ນ, ອະທິບາຍດັ່ງຕໍ່ໄປນີ້:
ໃຫ້ເວົ້າວ່າທຸກໆອົງປະກອບມີການແຜ່ກະຈາຍປົກກະຕິ. ຫຼັງຈາກນັ້ນ, metric ຕົ້ນຕໍສໍາລັບປະຊາກອນຍັງມີການແຈກຢາຍປົກກະຕິ.
ພວກເຮົາ ແບ່ງຜູ້ໃຊ້ທັງໝົດຈາກປະຊາກອນທັງໝົດໃນແບບສຸ່ມ ໃນການອອກແບບການທົດລອງແບບຄລາສສິກ ໂດຍບໍ່ໄດ້ພິຈາລະນາຄວາມແຕກຕ່າງລະຫວ່າງຜູ້ໃຊ້ຂອງພວກເຮົາ. ດັ່ງນັ້ນ, ພວກເຮົາພິຈາລະນາຕົວຢ່າງທີ່ມີຄ່າທີ່ຄາດໄວ້ຕໍ່ໄປນີ້ແລະຄວາມແຕກຕ່າງກັນ.
ອີກວິທີໜຶ່ງແມ່ນ ການແບ່ງແບບສຸ່ມພາຍໃນແຕ່ລະສະຕຣອດຕາມນ້ຳໜັກ ຂອງສະຕຣອດໃນປະຊາກອນທົ່ວໄປ.
ໃນກໍລະນີນີ້, ມູນຄ່າຄາດຄະເນແລະການປ່ຽນແປງແມ່ນດັ່ງຕໍ່ໄປນີ້.
ມູນຄ່າທີ່ຄາດໄວ້ແມ່ນຄືກັນກັບໃນການເລືອກທໍາອິດ. ຢ່າງໃດກໍຕາມ, ຄວາມແຕກຕ່າງແມ່ນຫນ້ອຍ, ເຊິ່ງຮັບປະກັນຄວາມອ່ອນໄຫວ metric ທີ່ສູງຂຶ້ນ.
ຕອນນີ້, ໃຫ້ພິຈາລະນາ ວິທີການຂອງ Neyman . ພວກເຂົາແນະນໍາການແບ່ງຜູ້ໃຊ້ແບບສຸ່ມພາຍໃນທຸກໆຊ່ອງທີ່ມີນ້ໍາຫນັກສະເພາະ.
ດັ່ງນັ້ນ, ມູນຄ່າທີ່ຄາດວ່າຈະແລະຄວາມແຕກຕ່າງກັນແມ່ນເທົ່າກັບຕໍ່ໄປນີ້ໃນກໍລະນີນີ້.
ມູນຄ່າທີ່ຄາດວ່າຈະເທົ່າກັບມູນຄ່າທີ່ຄາດໄວ້ໃນກໍລະນີທໍາອິດ asymptotically. ຢ່າງໃດກໍຕາມ, ຄວາມແຕກຕ່າງແມ່ນຫນ້ອຍລົງ.
ພວກເຮົາໄດ້ພິສູດປະສິດທິພາບຂອງວິທີການນີ້ທາງທິດສະດີ. ໃຫ້ພວກເຮົາຈໍາລອງຕົວຢ່າງແລະທົດສອບວິທີການ stratification empirically.
ຂໍໃຫ້ພິຈາລະນາສາມກໍລະນີ:
ພວກເຮົາຈະນໍາໃຊ້ທັງສາມວິທີການໃນທຸກກໍລະນີແລະວາງແຜນ histogram ແລະ boxplot ເພື່ອປຽບທຽບພວກມັນ.
ທໍາອິດ, ໃຫ້ສ້າງຫ້ອງຮຽນໃນ 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
ນອກຈາກນີ້, ສໍາລັບພາກສ່ວນ empirical, ພວກເຮົາສະເຫມີຕ້ອງການຫນ້າທີ່ສໍາລັບການຈໍາລອງຂະບວນການທົດລອງ.
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
ຖ້າພວກເຮົາເບິ່ງປະຊາກອນທົ່ວໄປ, ບ່ອນທີ່ strats ຂອງພວກເຮົາທັງຫມົດມີມູນຄ່າດຽວກັນແລະຄວາມແຕກຕ່າງກັນ, ຜົນໄດ້ຮັບຂອງທັງສາມວິທີການຄາດວ່າຈະມີຄວາມເທົ່າທຽມກັນຫຼາຍຫຼືຫນ້ອຍ.
ວິທີການທີ່ແຕກຕ່າງກັນແລະຄວາມແຕກຕ່າງກັນເທົ່າທຽມກັນໄດ້ຮັບຜົນໄດ້ຮັບທີ່ຫນ້າຕື່ນເຕັ້ນຫຼາຍ. ການນໍາໃຊ້ stratification ຢ່າງຫຼວງຫຼາຍຫຼຸດຜ່ອນຄວາມແຕກຕ່າງກັນ.
ໃນກໍລະນີທີ່ມີວິທີການເທົ່າທຽມກັນແລະຄວາມແຕກຕ່າງກັນ, ພວກເຮົາເຫັນການຫຼຸດຜ່ອນຄວາມແຕກຕ່າງກັນໃນວິທີການຂອງ Neyman.
ໃນປັດຈຸບັນ, ທ່ານສາມາດນໍາໃຊ້ວິທີການ stratification ເພື່ອຫຼຸດຜ່ອນຄວາມແຕກຕ່າງກັນຂອງ metric ແລະຊຸກຍູ້ການທົດລອງຖ້າທ່ານຈັດກຸ່ມຜູ້ຊົມຂອງທ່ານແລະທາງດ້ານວິຊາການແບ່ງພວກມັນແບບສຸ່ມພາຍໃນແຕ່ລະກຸ່ມທີ່ມີນ້ໍາຫນັກສະເພາະ!