Statistics lover
Аналитиктер көбүнчө AB-тест анализи, болжолдуу моделдерди түзүү же тенденцияларга көз салуу сыяктуу иш учурунда маалыматтардын чегинен чыгуучу көрсөткүчтөргө туш болушат. Чечимдер, адатта, үлгүдөгү орточо көрсөткүчкө негизделет, ал четтөөлөргө өтө сезгич жана маанини кескин өзгөртө алат. Ошентип, туура чечим кабыл алуу үчүн четтөөлөрдү башкаруу абдан маанилүү.
Келгиле, адаттан тыш баалуулуктар менен иштөө үчүн бир нече жөнөкөй жана тез ыкмаларды карап көрөлү.
Негизги метрика катары орточо буйрутма маанисин колдонуу менен эксперимент талдоо жүргүзүү керек деп элестетиңиз. Биздин метрика адатта нормалдуу бөлүштүрүүгө ээ деп айталы. Ошондой эле, биз тест тобундагы метрикалык бөлүштүрүү башкаруудагыдан башкача экенин билебиз. Башкача айтканда, башкаруудагы бөлүштүрүүнүн орточо мааниси 10, ал эми тестте 12. Эки топто тең стандарттык четтөө 3кө барабар.
Бирок, эки үлгү тең үлгүнүн каражатын жана үлгүнүн стандарттык четтөөсүн кыйшайткан чектерге ээ.
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))
Эскертүү: метриканы эске алуу эки тараптан тең четтөөлөргө ээ болушу мүмкүн. Эгерде сиздин метрикаңызда бир тараптан гана четтөөлөр болушу мүмкүн болсо, методдор бул максат үчүн оңой эле өзгөртүлүшү мүмкүн.
Эң оңой ыкма - 5% пайыздык чекке чейин жана 95% пайыздык көрсөткүчтөн кийин бардык байкоолорду кесип салуу. Бул учурда биз маалыматтын 10% ын доомат катары жоготтук. Бирок, бөлүштүрүү көбүрөөк калыптанган көрүнөт, ал эми үлгү учурлары бөлүштүрүү моменттерине жакыныраак.
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]
Дагы бир жолу - белгилүү диапазондон тышкары байкоолорду алып салуу. Төмөн тилке 25% пайыздык минус квартал аралык диапазонун жарымына, ал эми жогорку тилке 75% пайыздык плюс жарымга барабар. Бул жерде биз маалыматтын 0,7% гана жоготобуз. Бөлүштүрүүлөр баштапкыга караганда көбүрөөк калыптанган көрүнөт. Үлгү моменттери бөлүштүрүү моменттерине көбүрөөк барабар.
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]
Бул жерде биз карап чыккан экинчи ыкма - жүктөө. Бул ыкмада орточо маани чакан үлгүлөрдүн орточосу сыяктуу түзүлөт. Биздин мисалда, башкаруу тобунун орточо көрсөткүчү 10,35ке барабар, ал эми тест тобу 11,78. Бул дагы эле кошумча маалыматтарды иштетүү менен салыштырганда жакшы натыйжа болуп саналат.
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())
Чектөөлөрдү аныктоо жана иштетүү туура чечим кабыл алуу үчүн маанилүү. Эми, жок эле дегенде, үч тез жана жөнөкөй ыкмалар анализден мурун маалыматтарды текшерүүгө жардам берет.
Бирок, аныкталган чектен чыгуулар адаттан тыш баалуулуктар жана жаңылык эффектиси үчүн өзгөчөлүк болушу мүмкүн экенин эстен чыгарбоо керек. Бирок бул башка окуя :)