Sequential testing простыми словами
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это знать
Классика A/B: «зафиксируй выборку заранее, не подглядывай в середине». Но это медленно и неоптимально: если эффект огромный, зачем ждать ещё неделю?
Sequential testing — семейство методов, позволяющих остановить эксперимент раньше и сохранить валидность. Используется в Netflix, Google, Microsoft.
На собесах middle+ в крупных компаниях часто спрашивают: «как безопасно подглядывать?».
Короткое объяснение
В обычном A/B: проверяем p-value один раз в конце. Если проверять много раз — false positive rate растёт (p-hacking).
Sequential testing корректирует для множественных проверок → можно смотреть и останавливаться раньше.
Проблема «подглядывания»
Стандартный t-test с α = 0.05:
- 1 проверка: FPR 5%
- 5 проверок: FPR ~14%
- 10 проверок: ~19%
- Каждый день: FPR → 100% со временем
«Если подглядывать и останавливать при p < 0.05» — всегда найдёшь «значимость».
Методы sequential testing
1. Always Valid Inference (AVI)
Специальные p-values, которые всегда валидны, сколько бы раз ни проверяли.
p_AVI(t) = min(p(t), 1)Где формула учитывает «подглядывания». Реализация сложная, но есть библиотеки.
2. SPRT (Sequential Probability Ratio Test)
Log-likelihood ratio проверяется после каждого наблюдения. Остановка когда выходит за границы.
Wald предложил ещё в 1940-х.
3. Alpha spending
Разделить α на «бюджеты» для каждой проверки. Например, 5 проверок → α = 0.01 каждая (но на самом деле не делится так просто — используются Lan-DeMets).
4. mSPRT (mixture SPRT)
Универсальный байесовский approach. Оптимизирован для practical A/B.
Пример: mSPRT
# Pseudo-code (упрощённо)
from sequential_testing import mSPRT
test = mSPRT(alpha=0.05, beta=0.2)
for each_day:
new_data = fetch_yesterday()
test.update(new_data)
if test.reject_null():
print("Stop — lift detected")
break
if test.accept_null():
print("Stop — no lift")
breakTrade-offs
Плюсы
- Быстрее останавливаете очевидно плохие или очевидно хорошие тесты
- Экономия времени и ресурсов
- Меньше exposure к плохому варианту
Минусы
- Сложнее реализовать
- Требует дисциплины — нельзя «смешивать» stopping rules
- На малых эффектах всё равно долго
Когда использовать
- Много экспериментов (нужно быстрее)
- High-traffic сервис (данные копятся быстро)
- Ограниченное время на тест
Когда НЕ нужно
- Мало экспериментов (проще обычный test)
- Novelty effects (нужно дождаться стабилизации)
- Сезонные эффекты
Реализация в компаниях
Netflix — Quasi-Experimentation
Использует причинные inference + sequential methods.
Optimizely — Stats Engine
Коммерческое решение на основе AVI.
Open-source
abtest, sprtt, confseq — Python пакеты для sequential A/B.
На собесе
«Что такое sequential testing?» Методы, позволяющие безопасно останавливать A/B рано.
«Почему нельзя подглядывать в обычном тесте?» FPR растёт с каждой проверкой.
«Как корректирует?» Alpha spending, log-likelihood ratio, always-valid p-values.
«Когда использовать?» Высокий трафик + много экспериментов.
Частые ошибки
Смешивать stopping rules
Если запустили как sequential, нельзя в середине «ок, теперь буду ждать полный N».
Игнорировать novelty effect
Ранняя остановка может пропустить эффект новизны.
Мало данных
Для sequential нужно быстрое накопление — на low-traffic сервисах не работает.
Связанные темы
- A/B-тест простыми словами
- p-value простыми словами
- CUPED простыми словами
- P-hacking простыми словами
FAQ
Всегда безопаснее?
Только если правильно реализован. Неправильный sequential test хуже обычного.
Лучше Bayesian?
Bayesian A/B — другой подход, тоже позволяет подглядывать. Но требует prior.
Open source?
confseq для Python. peek_ab для R.
Тренируйте A/B — откройте тренажёр с 1500+ вопросами для собесов.