Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.8 kB
11
Indexable
Never
alpha = .05 # критический уровень статистической значимости

for i in range(event_funnel_by_group.shape[0]):
    event_name = event_funnel_by_group.loc[i, 'event_name']
    successes = np.array([event_funnel_by_group.loc[i, 246], event_funnel_by_group.loc[i, 247]])
    trials = np.array([event_funnel_by_group.loc[i-1, 246], event_funnel_by_group.loc[i-1, 247]]) if i > 0 else np.array([1, 1])

    # пропорция успехов в первой группе:
    p1 = successes[0] / trials[0]

    # пропорция успехов во второй группе:
    p2 = successes[1] / trials[1]

    # пропорция успехов в комбинированном датасете:
    p_combined = (successes[0] + successes[1]) / (trials[0] + trials[1])

    # разница пропорций в датасетах
    difference = p1 - p2

    # считаем статистику в ст.отклонениях стандартного нормального распределения
    z_value = difference / mth.sqrt(p_combined * (1 - p_combined) * (1/trials[0] + 1/trials[1]))

    # задаем стандартное нормальное распределение (среднее 0, ст.отклонение 1)
    distr = st.norm(0, 1)

    p_value = (1 - distr.cdf(abs(z_value))) * 2

    print(f"Событие {event_name}: p-значение: {p_value:.3f}")

    if p_value < alpha:
        print('Отвергаем нулевую гипотезу: между долями есть значимая разница')
    else:
        print('Не получилось отвергнуть нулевую гипотезу, нет оснований считать доли разными')
    print()