paint-brush
ການນໍາໃຊ້ວິທີການ Stratification ສໍາລັບການວິເຄາະການທົດລອງໂດຍ@nataliaogneva
33,155 ການອ່ານ
33,155 ການອ່ານ

ການນໍາໃຊ້ວິທີການ Stratification ສໍາລັບການວິເຄາະການທົດລອງ

ໂດຍ Natalia Ogneva8m2024/04/19
Read on Terminal Reader
Read this story w/o Javascript

ຍາວເກີນໄປ; ອ່ານ

ການເກັບຕົວຢ່າງແບບແບ່ງຂັ້ນແມ່ນເປັນເຕັກນິກທີ່ມີປະສິດທິພາບໃນການເພີ່ມປະສິດທິພາບການທົດລອງແລະຄວາມອ່ອນໄຫວຂອງ metric ໃນການວິເຄາະຂໍ້ມູນ. ໂດຍການຈັດກຸ່ມຜູ້ຊົມຂອງທ່ານແລະແບ່ງພວກມັນດ້ວຍນ້ໍາຫນັກສະເພາະ, ທ່ານສາມາດເພີ່ມປະສິດທິພາບການທົດລອງ, ຫຼຸດຜ່ອນຄວາມແຕກຕ່າງກັນ, ແລະເພີ່ມຄວາມຫນ້າເຊື່ອຖືຂອງຜົນໄດ້ຮັບ.

Company Mentioned

Mention Thumbnail
featured image - ການນໍາໃຊ້ວິທີການ Stratification ສໍາລັບການວິເຄາະການທົດລອງ
Natalia Ogneva HackerNoon profile picture
0-item


ການ​ທົດ​ລອງ​ໃດ​ຫນຶ່ງ​ກ່ຽວ​ຂ້ອງ​ກັບ​ການ​ແລກ​ປ່ຽນ​ລະ​ຫວ່າງ​ຜົນ​ໄດ້​ຮັບ​ໄວ​ແລະ​ຄວາມ​ອ່ອນ​ໄຫວ​ຂອງ metric. ຖ້າການວັດແທກທີ່ເລືອກມີຄວາມກວ້າງໃນແງ່ຂອງຄວາມແຕກຕ່າງ, ພວກເຮົາຕ້ອງລໍຖ້າເປັນເວລາດົນນານເພື່ອຮັບປະກັນຜົນໄດ້ຮັບຂອງການທົດລອງແມ່ນຖືກຕ້ອງ. ຂໍໃຫ້ພິຈາລະນາວິທີການຫນຶ່ງທີ່ຈະຊ່ວຍໃຫ້ນັກວິເຄາະເພີ່ມການທົດລອງຂອງເຂົາເຈົ້າໂດຍບໍ່ມີການສູນເສຍເວລາຫຼາຍເກີນໄປຫຼືຄວາມອ່ອນໄຫວຂອງ metric.


ການສ້າງບັນຫາ

ສົມມຸດວ່າພວກເຮົາດໍາເນີນການທົດລອງມາດຕະຖານເພື່ອທົດສອບລະບົບການຈັດອັນດັບໃຫມ່, ໂດຍມີຄວາມຍາວຂອງເຊດຊັນເປັນຕົວຊີ້ວັດຕົ້ນຕໍ. ນອກຈາກນັ້ນ, ໃຫ້ພິຈາລະນາວ່າຜູ້ຊົມຂອງພວກເຮົາສາມາດຈັດປະເພດໂດຍປະມານເປັນສາມກຸ່ມ: ໄວລຸ້ນ 1 ລ້ານຄົນ, ຜູ້ໃຊ້ 2 ລ້ານຄົນອາຍຸ 18-45 ປີ, ແລະ 3 ລ້ານຄົນທີ່ມີອາຍຸ 45 ປີຂຶ້ນໄປ. ການຕອບສະຫນອງຕໍ່ລະບົບການຈັດອັນດັບໃຫມ່ຈະແຕກຕ່າງກັນຢ່າງຫຼວງຫຼາຍໃນບັນດາກຸ່ມຜູ້ຊົມເຫຼົ່ານີ້. ການປ່ຽນແປງທີ່ກວ້າງຂວາງນີ້ຊ່ວຍຫຼຸດຜ່ອນຄວາມອ່ອນໄຫວຂອງ metric.


ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ປະຊາກອນສາມາດແບ່ງອອກເປັນສາມຊັ້ນ, ອະທິບາຍດັ່ງຕໍ່ໄປນີ້:


ໃຫ້ເວົ້າວ່າທຸກໆອົງປະກອບມີການແຜ່ກະຈາຍປົກກະຕິ. ຫຼັງຈາກນັ້ນ, metric ຕົ້ນຕໍສໍາລັບປະຊາກອນຍັງມີການແຈກຢາຍປົກກະຕິ.

ວິທີການ stratification

ພວກເຮົາ ແບ່ງຜູ້ໃຊ້ທັງໝົດຈາກປະຊາກອນທັງໝົດໃນແບບສຸ່ມ ໃນການອອກແບບການທົດລອງແບບຄລາສສິກ ໂດຍບໍ່ໄດ້ພິຈາລະນາຄວາມແຕກຕ່າງລະຫວ່າງຜູ້ໃຊ້ຂອງພວກເຮົາ. ດັ່ງນັ້ນ, ພວກເຮົາພິຈາລະນາຕົວຢ່າງທີ່ມີຄ່າທີ່ຄາດໄວ້ຕໍ່ໄປນີ້ແລະຄວາມແຕກຕ່າງກັນ.


ອີກວິທີໜຶ່ງແມ່ນ ການແບ່ງແບບສຸ່ມພາຍໃນແຕ່ລະສະຕຣອດຕາມນ້ຳໜັກ ຂອງສະຕຣອດໃນປະຊາກອນທົ່ວໄປ.

ໃນ​ກໍ​ລະ​ນີ​ນີ້​, ມູນ​ຄ່າ​ຄາດ​ຄະ​ເນ​ແລະ​ການ​ປ່ຽນ​ແປງ​ແມ່ນ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​.


ມູນຄ່າທີ່ຄາດໄວ້ແມ່ນຄືກັນກັບໃນການເລືອກທໍາອິດ. ຢ່າງໃດກໍຕາມ, ຄວາມແຕກຕ່າງແມ່ນຫນ້ອຍ, ເຊິ່ງຮັບປະກັນຄວາມອ່ອນໄຫວ metric ທີ່ສູງຂຶ້ນ.

ຕອນນີ້, ໃຫ້ພິຈາລະນາ ວິທີການຂອງ Neyman . ພວກເຂົາແນະນໍາການແບ່ງຜູ້ໃຊ້ແບບສຸ່ມພາຍໃນທຸກໆຊ່ອງທີ່ມີນ້ໍາຫນັກສະເພາະ.

ດັ່ງນັ້ນ, ມູນຄ່າທີ່ຄາດວ່າຈະແລະຄວາມແຕກຕ່າງກັນແມ່ນເທົ່າກັບຕໍ່ໄປນີ້ໃນກໍລະນີນີ້.

ມູນຄ່າທີ່ຄາດວ່າຈະເທົ່າກັບມູນຄ່າທີ່ຄາດໄວ້ໃນກໍລະນີທໍາອິດ asymptotically. ຢ່າງໃດກໍຕາມ, ຄວາມແຕກຕ່າງແມ່ນຫນ້ອຍລົງ.

ການ​ທົດ​ສອບ​ທາງ​ການ​

ພວກເຮົາໄດ້ພິສູດປະສິດທິພາບຂອງວິທີການນີ້ທາງທິດສະດີ. ໃຫ້ພວກເຮົາຈໍາລອງຕົວຢ່າງແລະທົດສອບວິທີການ stratification empirically.

ຂໍ​ໃຫ້​ພິຈາລະນາ​ສາມ​ກໍລະນີ:

  • ຍຸດ​ທະ​ສາດ​ທັງ​ຫມົດ​ທີ່​ມີ​ຄວາມ​ເທົ່າ​ທຽມ​ກັນ​ແລະ​ຄວາມ​ແຕກ​ຕ່າງ​ກັນ​,
  • ຍຸດທະວິທີທັງ ໝົດ ດ້ວຍວິທີທີ່ແຕກຕ່າງກັນແລະຄວາມແຕກຕ່າງກັນເທົ່າທຽມກັນ,
  • strats ທັງຫມົດທີ່ມີວິທີການເທົ່າທຽມກັນແລະຄວາມແຕກຕ່າງກັນທີ່ແຕກຕ່າງກັນ.

ພວກເຮົາຈະນໍາໃຊ້ທັງສາມວິທີການໃນທຸກກໍລະນີແລະວາງແຜນ 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 ແລະຊຸກຍູ້ການທົດລອງຖ້າທ່ານຈັດກຸ່ມຜູ້ຊົມຂອງທ່ານແລະທາງດ້ານວິຊາການແບ່ງພວກມັນແບບສຸ່ມພາຍໃນແຕ່ລະກຸ່ມທີ່ມີນ້ໍາຫນັກສະເພາະ!