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

Что такое Simpson"s Paradox и как он может повлиять на результаты A/B теста?

2.0 Middle🔥 111 комментариев
#A/B тестирование#Статистика и математика

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

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

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

Simpson's Paradox в A/B тестировании

Simpson's Paradox — это парадокс в статистике, когда тренд, очевидный в отдельных группах данных, исчезает или даже разворачивается в противоположную сторону при объединении этих групп. Это коварное явление, которое может привести к ошибочным выводам в A/B тестировании.

Классический пример

Представь, что ты тестируешь новый алгоритм рекомендаций. Результаты по группам пользователей:

По странам отдельно:

СтранаКонтроль КонверсияТест КонверсияВариант выигрывает
США10/100 = 10%30/300 = 10%Ничья
Европа50/500 = 10%40/400 = 10%Ничья
Азия20/200 = 10%15/150 = 10%Ничья

Общие результаты (объединено):

ВариантКонверсииПользователиКоэффициент
Контроль8080010%
Тест8585010%

Всё выглядит равным, но что если распределение пользователей разное?

Реальный пример с дисбалансом:

СтранаКонтроль (users, converts)Тест (users, converts)
США100 users, 5 converts500 users, 20 converts
Европа400 users, 80 converts100 users, 10 converts

Итого:

  • Контроль: (5 + 80) / (100 + 400) = 85 / 500 = 17%
  • Тест: (20 + 10) / (500 + 100) = 30 / 600 = 5%

Тест проиграл! Но почему? Потому что в тесте больше пользователей из США (низкая конверсия), а в контроле больше из Европы (высокая конверсия).

Почему это происходит

Simpson's Paradox возникает из-за дисбаланса в распределении подгрупп:

  1. Размеры подгрупп сильно отличаются
  2. Разные базовые коэффициенты конверсии в подгруппах
  3. Дисбаланс распределения между вариантами

Как Simpson's Paradox влияет на A/B тесты

Пример из реальной жизни: платежная способность

Твой новый паттерн повышает конверсию во всех странах, но в бедных странах конверсия в целом низче. Если в тесте случайно больше пользователей из бедных стран, общая конверсия упадет.

SQL пример для выявления:

-- Проверь распределение по страна между вариантами
SELECT 
  country,
  variant,
  COUNT(*) as user_count,
  ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY variant), 2) as pct_in_variant
FROM test_users
WHERE test_id = 'abc123'
GROUP BY country, variant
ORDER BY variant, user_count DESC;

Как защитить A/B тест от Simpson's Paradox

1. Стратификация (Stratified Randomization)

Рандомизируй пользователей внутри каждой подгруппы отдельно:

-- Убедись, что распределение по стратам одинаковое
WITH stratified_assignment AS (
  SELECT 
    user_id,
    country,
    CASE 
      WHEN ROW_NUMBER() OVER (PARTITION BY country ORDER BY RAND()) % 2 = 0 
      THEN 'control' 
      ELSE 'treatment' 
    END as variant
  FROM users
)
SELECT 
  country,
  variant,
  COUNT(*) as count
FROM stratified_assignment
GROUP BY country, variant;

2. Анализ по подгруппам (Segmented Analysis)

Всегда анализируй результаты отдельно по подгруппам:

SELECT 
  country,
  variant,
  COUNT(*) as users,
  SUM(CASE WHEN converted THEN 1 ELSE 0 END) as conversions,
  ROUND(
    SUM(CASE WHEN converted THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 
    2
  ) as conversion_rate
FROM test_events
WHERE test_id = 'abc123'
GROUP BY country, variant
ORDER BY country, variant;

3. ANCOVA (Analysis of Covariance)

Включи страну как ковариату в анализ, чтобы контролировать её влияние.

4. Проверка баланса перед запуском

Убедись, что распределение пользователей по подгруппам одинаково в обоих вариантах:

import pandas as pd
from scipy.stats import chi2_contingency

# Таблица сопряженности для проверки баланса
contingency_table = pd.crosstab(
    test_df['country'],
    test_df['variant']
)

chi2, p_value, dof, expected = chi2_contingency(contingency_table)
print(f"p-value для баланса: {p_value}")
if p_value > 0.05:
    print("Баланс хороший, нет значимых различий в распределении")
else:
    print("ВНИМАНИЕ: Дисбаланс! Нужна стратификация")

Пример из практики

Ты тестируешь новый UI для чекаута. Результаты:

Без сегментирования:

  • Контроль: 15% конверсия
  • Тест: 14% конверсия
  • Вывод: Тест хуже (НЕПРАВИЛЬНО)

Со сегментированием по устройствам:

УстройствоКонтрольТестРезультат
Desktop20%25%Тест выигрывает!
Mobile8%7%Контроль лучше

Причина: В тесте больше мобильных пользователей, которые в целом конвертируют хуже. Но для мобильных новый UI ХУЖЕ, а для десктопа ЛУЧШЕ.

Это классический Simpson's Paradox!

Чек-лист для аналитика

  1. Перед запуском теста:

    • Используй стратификацию по важным переменным
    • Проверь баланс распределения
  2. При анализе результатов:

    • Всегда смотри результаты по подгруппам
    • Проверь, нет ли дисбаланса в распределении
    • Убедись, что выводы консистентны во всех подгруппах
  3. Если нашел парадокс:

    • Документируй дисбаланс
    • Не игнорируй эффект — это реален!
    • Подумай, почему произошел дисбаланс
    • Используй ANCOVA для контроля переменной

Simpson's Paradox — это не ошибка статистики, а напоминание о важности тщательного анализа данных.

Что такое Simpson"s Paradox и как он может повлиять на результаты A/B теста? | PrepBro