Короткий ответ
Нужно показывать точечные оценки вместе с доверительным интервалом (или хотя бы размером выборки и значимостью), а не голые столбцы без неопределённости — бары без интервала визуально преувеличивают достоверность небольшой разницы.
Как это работает подробнее
Столбчатая диаграмма двух показателей конверсии без error bars визуально подразумевает, что разница безусловна; добавление доверительного интервала позволяет зрителю оценить, может ли наблюдаемый разрыв быть шумом.
Пример кода
ab_test_ci.py
import numpy as np
count = np.array([120, 150])
nobs = np.array([2000, 2000])
p_control, p_test = count[0] / nobs[0], count[1] / nobs[1]
diff = p_test - p_control
se = np.sqrt(p_control * (1 - p_control) / nobs[0] + p_test * (1 - p_test) / nobs[1])
ci = (diff - 1.96 * se, diff + 1.96 * se)
print(p_control, p_test, diff, ci)Что использовать на практике
- Применение. Показывайте размеры выборок, ширину интервала и длительность теста рядом с графиком; избегайте показа ежедневного кумулятивного графика как окончательного результата до достижения заранее определённого размера выборки/длительности; показывайте не только относительный прирост в %, но и абсолютные числа с интервалом.
- Проверка. если 0 входит в доверительный интервал разности
ci, визуализация должна явно показывать, что различие статистически не доказано, несмотря на то что столбец теста выше.
Подводные камни
- Частые ошибки. Остановка теста раньше срока, потому что кумулятивный график «выглядит» как победа (проблема peeking, раздувает долю ложных срабатываний); демонстрация относительного прироста без абсолютных чисел или интервала, что преувеличивает эффект на малой базе; игнорирование проверки Sample Ratio Mismatch (SRM) перед тем, как доверять визуализации результатов.