Короткий ответ
Код считает конверсию по группам и проверяет значимость разницы долей через хи-квадрат тест на таблице сопряжённости 2x2; он корректен для данной задачи при условии, что каждый пользователь встречается в данных только один раз и его группа не меняется в течение теста.
Как это работает подробнее
Как это работает: pd.crosstab строит таблицу сопряжённости 'группа x converted' с частотами, chi2_contingency проверяет гипотезу о независимости группы и конверсии, что эквивалентно проверке равенства долей между группами.
Ожидаемый результат: таблица 2x2 с частотами и p-value теста. Проверка корректности: df.duplicated("user_id").sum() должно быть равно 0 перед запуском этого анализа, иначе нужно сначала дедуплицировать пользователей.
Пример кода
analysis.py
import pandas as pd
from scipy.stats import chi2_contingency
# df: columns user_id, group, converted (0/1), один пользователь — одна строка
table = pd.crosstab(df["group"], df["converted"])
chi2, p_value, dof, expected = chi2_contingency(table)
print(table)
print("p-value:", round(p_value, 4))Что использовать на практике
- На практике: перед использованием результата стоит убедиться, что данные агрегированы на уровне пользователя (а не событий) и что в таблице нет ячеек с ожидаемой частотой меньше 5, при которых аппроксимация хи-квадрат становится менее надёжной (в этом случае лучше точный тест Фишера).
Подводные камни
- Частые ошибки: в примере ниже используется df без проверки на дубли user_id — если один пользователь попал в датафрейм несколько раз (например, из-за повторного логирования событий), это нарушает предположение о независимости наблюдений и искажает p-value в сторону ложной значимости.