Untitled
unknown
plain_text
2 years ago
6.6 kB
17
Indexable
def experiment_simulation_plot(alpha, aa_control_group_means, aa_test_group_means, aa_means_diffs_list, aa_stat_list, aa_p_val_list, ab_control_group_means, ab_test_group_means, ab_means_diffs_list, ab_stat_list, ab_p_val_list):
'''
aa_control_group_means - средние полученные по симуляциям в контрольной группе в AA-варианте симуляции
aa_test_group_means - средние полученные по симуляциям в тестовой группе в AA-варианте симуляции
aa_means_diffs_list - разница средних в AA-варианте симуляции
aa_stat_list - значение критерия полученного по симуляциям в AA-варианте симуляции
aa_p_val_list - p-value полученные по симуляциям в AA-варианте симуляции
ab_control_group_means - средние полученные по симуляциям в контрольной группе в AB-варианте симуляции
ab_test_group_means - средние полученные по симуляциям в тестовой группе в AB-варианте симуляции
ab_means_diffs_list - разница средних в AB-варианте симуляции
ab_stat_list - значение критерия полученного по симуляциям в AB-варианте симуляции
ab_p_val_list - p-value полученные по симуляциям в AB-варианте симуляции
'''
# рассчитываем 95% доверительные интервалы для полученных численно alpha и beta
alpha_ci = proportion_confint(np.sum(np.array(aa_p_val_list) < alpha), n_iter, alpha=0.05)
beta_ci = proportion_confint(np.sum(np.array(ab_p_val_list) < alpha), n_iter, alpha=0.05)
# PLOT
fig, axes = plt.subplots(2, 4, figsize=(15,10))
### AA subplots
### Первый ряд графиков посвящен АА-симуляциям.
# График распределения средних в первой и второй выборках. Иллюстрирует тоже самое о чем говорит ЦПТ.
sns.kdeplot(ax=axes[0,0], data = aa_control_group_means, color = 'blue')
sns.kdeplot(ax=axes[0,0], data = aa_test_group_means, color = 'red')
axes[0,0].set_title('AA: A|B group mean distribution')
axes[0,0].axvline(x=np.quantile(aa_control_group_means, 0.5), linestyle = '--', color = 'blue', label = 'control mean')
axes[0,0].axvline(x=np.quantile(aa_test_group_means, 0.5), linestyle = '--', color = 'red', label = 'test mean')
axes[0,0].legend(loc='lower right')
# График распределения разницы между средними
sns.kdeplot(ax=axes[0,1], data = aa_means_diffs_list)
axes[0,1].axvline(x=0, linestyle = '--', color = 'red', label = 'zero difference')
axes[0,1].axvline(x=np.quantile(aa_means_diffs_list, alpha/2), linestyle = '--', color = 'grey', label = '95% conf interval for diff')
axes[0,1].axvline(x=np.quantile(aa_means_diffs_list, 1-alpha/2), linestyle = '--', color = 'grey')
axes[0,1].set_title('AA: Means diffs distribution')
axes[0,1].legend(loc='lower right')
# график распределения значения стат критерия. t-статистика для t-теста
sns.kdeplot(ax=axes[0,2], data = aa_stat_list)
axes[0,2].set_title('AA: stats distribution')
# график распределения p-value
sns.kdeplot(ax=axes[0,3], data = aa_p_val_list)
axes[0,3].set_title('AA: p-values distribution')
axes[0,3].axvline(x=alpha, linestyle = '--', color = 'red', label = 'alpha')
axes[0,3].axvline(x=np.quantile(aa_p_val_list, 0.8), linestyle = '--', color = 'blue', label = '80% quantile for p-value')
axes[0,3].legend(loc='lower right')
### AB subplots
### второй ряд графиков посвящен АБ-симуляциям
# график распределения средних в первой и второй выборках. Иллюстрирует тоже самое о чем говорит ЦПТ
sns.kdeplot(ax=axes[1,0], data = ab_control_group_means, color = 'blue')
sns.kdeplot(ax=axes[1,0], data = ab_test_group_means, color = 'red')
axes[1,0].set_title('AB: A|B group mean distribution')
axes[1,0].axvline(x=np.quantile(ab_control_group_means, 0.5), linestyle = '--', color = 'blue', label = 'control mean')
axes[1,0].axvline(x=np.quantile(ab_test_group_means, 0.5), linestyle = '--', color = 'red', label = 'test mean')
axes[1,0].legend(loc='lower right')
# график распределения разницы между средними
sns.kdeplot(ax=axes[1,1], data = ab_means_diffs_list)
axes[1,1].axvline(x=0, linestyle = '--', color = 'red', label = 'zero difference')
axes[1,1].axvline(x=np.quantile(ab_means_diffs_list, alpha/2), linestyle = '--', color = 'grey', label = '95% conf interval for diff')
axes[1,1].axvline(x=np.quantile(ab_means_diffs_list, 1-alpha/2), linestyle = '--', color = 'grey')
axes[1,1].set_title('AB: Means diffs distribution')
axes[1,1].legend(loc='lower right')
# график распределения значения стат критерия. t-статистика для t-теста
sns.kdeplot(ax=axes[1,2], data = ab_stat_list)
axes[1,2].set_title('AB: stats distribution')
# график распределения p-value
sns.kdeplot(ax=axes[1,3], data = ab_p_val_list)
axes[1,3].set_title('AB: p-values distribution')
axes[1,3].axvline(x=alpha, linestyle = '--', color = 'red', label = 'alpha')
axes[1,3].axvline(x=np.quantile(ab_p_val_list, 0.8), linestyle = '--', color = 'blue', label = '80% quantile for p-value')
axes[1,3].legend(loc='lower right')
# принтуем ключевые метрики
print('Median means lift for AA simulation = ', np.median(aa_means_diffs_list))
print('Alpha(FPR) = ', np.sum(np.array(aa_p_val_list) < alpha) / n_iter)
print('Alpha 95% CI:', alpha_ci)
print('Median means lift for AB simulation = ', np.median(ab_means_diffs_list))
print('Power(TPR) = ', np.sum(np.array(ab_p_val_list) < alpha) / n_iter)
print('Beta 95% CI:', beta_ci)Editor is loading...