Untitled
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...