![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Wachanganuzi mara nyingi hukutana na watoa huduma za nje katika data wakati wa kazi zao, kama vile wakati wa uchanganuzi wa jaribio la AB, kuunda miundo ya kubashiri au kufuatilia mitindo. Maamuzi kwa kawaida hutegemea sampuli ya wastani, ambayo ni nyeti sana kwa wauzaji wa nje na inaweza kubadilisha thamani kwa kiasi kikubwa. Kwa hivyo, ni muhimu kudhibiti wauzaji ili kufanya uamuzi sahihi.
Hebu fikiria mbinu kadhaa rahisi na za haraka za kufanya kazi na maadili yasiyo ya kawaida.
Fikiria kuwa unahitaji kufanya uchanganuzi wa majaribio kwa kutumia thamani ya wastani ya agizo kama kipimo msingi. Wacha tuseme kwamba metriki yetu kawaida huwa na usambazaji wa kawaida. Pia, tunajua kuwa usambazaji wa metri katika kikundi cha majaribio ni tofauti na ule wa udhibiti. Kwa maneno mengine, maana ya usambazaji katika udhibiti ni 10, na katika mtihani ni 12. Kupotoka kwa kawaida katika vikundi vyote viwili ni 3.
Hata hivyo, sampuli zote mbili zina viambajengo vinavyopotosha njia za sampuli na mkengeuko wa kawaida wa sampuli.
import numpy as np N = 1000 mean_1 = 10 std_1 = 3 mean_2 = 12 std_2 = 3 x1 = np.concatenate((np.random.normal(mean_1, std_1, N), 10 * np.random.random_sample(50) + 20)) x2 = np.concatenate((np.random.normal(mean_2, std_2, N), 4 * np.random.random_sample(50) + 1))
NB kwamba kuzingatia kipimo kunaweza kuwa na viambajengo kutoka pande zote mbili. Ikiwa kipimo chako kinaweza kuwa na wauzaji kutoka upande mmoja tu, njia zinaweza kubadilishwa kwa sababu hiyo kwa urahisi.
Njia rahisi ni kukata uchunguzi wote kabla ya asilimia 5 na baada ya 95% . Katika kesi hii, tulipoteza 10% ya habari kama mdanganyifu. Walakini, usambazaji unaonekana kuunda zaidi, na nyakati za sampuli ziko karibu na nyakati za usambazaji.
import numpy as np x1_5pct = np.percentile(x1, 5) x1_95pct = np.percentile(x1, 95) x1_cutted = [i for i in x1 if i > x1_5pct and i < x1_95pct] x2_5pct = np.percentile(x2, 5) x2_95pct = np.percentile(x2, 95) x2_cutted = [i for i in x2 if i > x2_5pct and i < x2_95pct]
Njia nyingine ni kuwatenga uchunguzi nje ya masafa mahususi . Ukanda wa chini ni sawa na asilimia 25% toa nusu moja ya safu ya pembetatu, na bendi ya juu ni sawa na asilimia 75% pamoja na nusu. Hapa, tutapoteza 0.7% tu ya habari. Ugawaji unaonekana kuunda zaidi kuliko ile ya awali. Muda wa sampuli ni sawa zaidi na nyakati za usambazaji.
import numpy as np low_band_1 = np.percentile(x1, 25) - 1.5 * np.std(x1) high_band_1 = np.percentile(x1, 75) + 1.5 * np.std(x1) x1_cutted = [i for i in x1 if i > low_band_1 and i < high_band_1] low_band_2 = np.percentile(x2, 25) - 1.5 * np.std(x2) high_band_2 = np.percentile(x2, 75) + 1.5 * np.std(x2) x2_cutted = [i for i in x2 if i > low_band_2 and i < high_band_2]
Njia ya pili tuliyozingatia hapa ni bootstrap. Katika mbinu hii, maana inaundwa kama maana ya sampuli ndogo. Katika mfano wetu, wastani katika kikundi cha udhibiti ni sawa na 10.35, na kikundi cha mtihani ni 11.78. Bado ni matokeo bora ikilinganishwa na usindikaji wa ziada wa data.
import pandas as pd def create_bootstrap_samples( sample_list: np.array, sample_size: int, n_samples: int ): # create a list for sample means sample_means = [] # loop n_samples times for i in range(n_samples): # create a bootstrap sample of sample_size with replacement bootstrap_sample = pd.Series(sample_list).sample(n = sample_size, replace = True) # calculate the bootstrap sample mean sample_mean = bootstrap_sample.mean() # add this sample mean to the sample means list sample_means.append(sample_mean) return pd.Series(sample_means) (create_bootstrap_samples(x1, len(x1), 1000).mean(), create_bootstrap_samples(x2, len(x2), 1000).mean())
Utambuzi na usindikaji wa nje ni muhimu kwa kufanya uamuzi sahihi. Sasa, angalau mbinu tatu za haraka na za moja kwa moja zinaweza kukusaidia kuangalia data kabla ya uchanganuzi.
Hata hivyo, ni muhimu kukumbuka kuwa bidhaa za nje zilizogunduliwa zinaweza kuwa thamani zisizo za kawaida na kipengele cha athari mpya. Lakini ni hadithi nyingine :)