Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
6.6 kB
12
Indexable
Never
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)