Untitled

 avatar
unknown
plain_text
2 years ago
2.7 kB
13
Indexable
group_test = data[data['event']!='Tutorial'].pivot_table( # составим таблицу по группам для анализа теста
    index='event', 
    columns='group',
    values='user_id',
    aggfunc='nunique').sort_values(by=246, ascending=False)
group_test = group_test.reset_index()
group_test

group_test['246_247'] = group_test[246] + group_test[247] # рассчитаем доли по группам по каждому событию
group_test['all'] = group_test['246_247'] + group_test[248] # все пользователи совершившие событие

group_test['share_246'] = (group_test[246] / gr_users[246] * 100).round(1)
group_test['share_247'] = (group_test[247] / gr_users[247] * 100).round(1)
group_test['share_248'] = (group_test[248] / gr_users[248] * 100).round(1)
group_test['share_246_247'] = ((group_test[246] + group_test[247]) / \
                                  (gr_users[246] + gr_users[247]) * 100).round(1)
group_test

def z_test(test_group1, test_group2, alpha):
    for i in group_test.index:
        # пропорция успехов в первой группе
        p1 = group_test[test_group1][i] / gr_users[test_group1]
        # пропорция успехов во второй группе:
        p2 = group_test[test_group2][i] / gr_users[test_group2]
        # пропорция успехов в комбинированном датасете:
        p_combined = ((group_test[test_group1][i] + group_test[test_group2][i]) / 
                      (gr_users[test_group1] + gr_users[test_group2]))
        # разница пропорций в датасетах
        difference = p1 - p2
        # считаем статистику в ст.отклонениях стандартного нормального распределения
        z_value = difference / mth.sqrt(p_combined * (1 - p_combined) * 
                                        (1/gr_users[test_group1] + 1/gr_users[test_group2]))
        # задаем стандартное нормальное распределение (среднее 0, ст.отклонение 1)
        distr = st.norm(0, 1) 
        p_value = (1 - distr.cdf(abs(z_value))) * 2
        print('{} p-значение: {}'.format(group_test['event'][i], p_value))
        if (p_value < alpha):
            print("Отвергаем нулевую гипотезу: между долями есть значимая разница")
        else:
            print("Не получилось отвергнуть нулевую гипотезу, нет оснований считать доли разными")
        print('')
Editor is loading...