Untitled
unknown
plain_text
3 years ago
2.7 kB
18
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...