← Назад к вопросам

Как работает delta method в A/B тестировании?

3.0 Senior🔥 171 комментариев
#A/B тестирование#Статистика и математика

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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 для финального ответа. Всегда проверяйте предположения перед применением.

Как работает delta method в A/B тестировании? | PrepBro