Untitled
unknown
plain_text
a year ago
2.2 kB
4
Indexable
Never
def z_test(group1, group2, alpha): event_list = event_funnel_by_group['event_name'].unique() for event in event_list: successes1 = event_funnel_by_group.loc[event_funnel_by_group['event_name'] == event, group1].values[0] successes2 = event_funnel_by_group.loc[event_funnel_by_group['event_name'] == event, group2].values[0] trials1 = event_funnel_by_group.loc[event_funnel_by_group['event_name'] == event, group1].values[0] + event_funnel_by_group.loc[event_funnel_by_group['event_name'] == event, group2].values[0] trials2 = event_funnel_by_group.loc[event_funnel_by_group['event_name'] == event, group1].values[0] + event_funnel_by_group.loc[event_funnel_by_group['event_name'] == event, group2].values[0] # пропорция успехов в первой группе: p1 = successes1 / trials1 # пропорция успехов во второй группе: p2 = successes2 / trials2 # пропорция успехов в комбинированном датасете: p_combined = (successes1 + successes2) / (trials1 + trials2) # разница пропорций в датасетах difference = p1 - p2 # считаем статистику в ст.отклонениях стандартного нормального распределения z_value = difference / mth.sqrt(p_combined * (1 - p_combined) * (1/trials1 + 1/trials2)) # задаем стандартное нормальное распределение (среднее 0, ст.отклонение 1) distr = st.norm(0, 1) p_value = (1 - distr.cdf(abs(z_value))) * 2 print(f"Событие {event}: p-value {p_value:.3f}") if p_value < alpha: print('Отвергаем нулевую гипотезу: между долями есть значимая разница') else: print('Не получилось отвергнуть нулевую гипотезу, нет оснований считать доли разными') print()