Как работает delta method в A/B тестировании?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Delta Method в A/B тестировании: теория и практика
Delta Method (дельта-метод) — это математический приём для оценки дисперсии функции от случайной величины. В A/B тестировании это критичный инструмент для анализа ratio metrics (конверсия, ARPU, CTR), где нам нужно оценить стандартную ошибку отношения двух случайных величин.
Математическая основа
Проблема: У нас есть случайная величина X ~ N(μ_x, σ_x²) и Y ~ N(μ_y, σ_y²). Нам нужна дисперсия функции f(X,Y) = X/Y.
Решение: Delta method использует разложение Тейлора первого порядка.
Применение в A/B тестировании
Пример 1: Конверсия (Bernoulli ratio)
Конверсия = Conversions / Users
import numpy as np
from scipy import stats
conversions_a = 320
users_a = 10000
conversion_rate_a = conversions_a / users_a
se_conversion_a = np.sqrt(conversion_rate_a * (1 - conversion_rate_a) / users_a)
print(f"Conversion A: {conversion_rate_a:.4f}")
print(f"SE: {se_conversion_a:.6f}")
Когда использовать дельта-метод
✅ Использовать:
- Конверсия (Bernoulli ratio)
- CTR (Click-Through Rate)
- Простые отношения с независимыми компонентами
- Большие выборки (n > 1000)
❌ НЕ использовать:
- ARPU (revenue и users коррелированы)
- Маленькие выборки (n < 100)
- Когда дисперсия знаменателя близка к средней
Практическая реализация в SQL
WITH metrics AS (
SELECT
variant,
COUNT(*) as total_users,
COUNT(CASE WHEN converted = 1 THEN 1 END) as conversions,
COUNT(CASE WHEN converted = 1 THEN 1 END)::FLOAT / COUNT(*) as conversion_rate
FROM test_events
GROUP BY variant
)
SELECT
variant,
ROUND(100 * conversion_rate, 2) as conversion_pct,
ROUND(100 * (conversion_rate - 1.96 * SQRT(conversion_rate * (1 - conversion_rate) / total_users)), 2) as ci_lower_pct
FROM metrics;
Дельта-метод для разницы двух ratio
Чаще всего нам нужна разница между вариантами.
Δ = (X_a / Y_a) - (X_b / Y_b)
SE(Δ) = sqrt(SE_a² + SE_b²)
Сравнение с bootstrap
Delta Method:
- ✅ Быстро (O(n))
- ✅ Аналитическая формула
- ✅ Точен для Bernoulli
- ❌ Требует предположений
- ❌ Неточен для коррелированных данных
Bootstrap:
- ✅ Работает для любого распределения
- ✅ Не требует предположений
- ✅ Точен для коррелированных данных
- ❌ Медленнее (O(n*iterations))
Рекомендация: Использовать оба!
Важные ограничения
1. Не работает при μ_y ≈ 0
Если знаменатель близок к нулю, дельта-метод не применим.
2. Может дать отрицательные CI для конверсии
При низкой конверсии используйте логит-трансформацию.
3. Первый порядок разложения может быть неточным
Для высокой дисперсии используйте bootstrap.
Случай: Высокая корреляция
data = pd.DataFrame({
'revenue': np.random.normal(100, 30, 1000),
'users': np.random.normal(20, 5, 1000)
})
print(data.corr()) # 0.92
# Дельта-метод будет НЕПРАВИЛЬНЫМ
# Используйте bootstrap
Best practices
1. Используйте дельта-метод как первую аппроксимацию
quick_ci = delta_method_ci(data)
final_ci = bootstrap_ci(data)
2. Проверяйте предположения перед использованием
corr = numerator.corr(denominator)
if abs(corr) > 0.3:
print("Use bootstrap instead")
3. Используйте встроенные инструменты
Mixpanel, Amplitude, Statsig уже реализовали дельта-метод корректно.
4. Документируйте метод
"95% CI рассчитаны дельта-методом (точны при n > 1000)"
Итог
Delta Method — мощный инструмент для быстрого расчёта CI в A/B тестировании. Работает отлично для простых ratio (конверсия, CTR), но имеет ограничения для сложных метрик (ARPU). Главное: используйте дельта-метод для первого приближения, bootstrap для финального ответа. Всегда проверяйте предположения перед применением.