Парадокс Симпсона простыми словами

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

Наверх смотрите агрегаты — группа A лучше B. Разбиваете на сегменты — в каждом сегменте B лучше A. Это парадокс Симпсона, один из главных источников ошибок в аналитике. Если не умеете его распознавать — легко сделать неправильный вывод.

На собесах SQL / статистика / продуктовая аналитика парадокс Симпсона встречается регулярно. Пропустить — минус балл.

Короткое объяснение

Тренд в подгруппах может быть противоположным общему тренду.

A лучше B в каждой подгруппе → в агрегате B лучше A

Это не ошибка в расчётах — это реальный парадокс.

Классический пример: UC Berkeley admissions

1973: Berkeley обвинили в гендерной discrimination. Agregated data:

  • Мужчины: 44% приём
  • Женщины: 35% приём

Разница 9 п.п. — дискриминация?

Разбили по департаментам: в большинстве департаментов женщины принимались с выше % чем мужчины.

Почему разница? Женщины подавали в более конкурентные департаменты (низкий overall acceptance), мужчины — в менее конкурентные (высокий overall acceptance).

Когда учли этот confounder — дискриминации не было.

Второй пример: медицина

Drug А лучше drug B в overall.

Разбили по severity:

  • Mild patients: B лучше
  • Severe patients: B лучше

Почему А выигрывает в agregated? А получали больше mild patients (лучше outcomes overall), B — severe (хуже overall).

В A/B-тестах

Group A vs Group B, CR:

  • Overall: A > B

Смотрим по platforms:

  • iOS: B > A
  • Android: B > A

Проблема: A больше iOS (где baseline CR выше). Unbalanced assignment.

Решение: stratified randomization или post-stratification.

SQL пример

-- Overall
SELECT GROUP, AVG(converted) FROM ab_test GROUP BY GROUP;
-- A: 10%, B: 8% → A better

-- By platform
SELECT GROUP, platform, AVG(converted) FROM ab_test
GROUP BY GROUP, platform;
-- iOS: A=5%, B=7% → B better
-- Android: A=15%, B=17% → B better

Как распознать

1. Смотрите sub-segments

Всегда anti-segment analysis: по platform, гео, user tenure, premium.

2. Проверьте balance

Если treatment и control имеют разный composition по важным segments — риск Simpson.

3. Sanity check

Знаете, что B должен быть хуже, но данные показывают A → ищите confounder.

Почему возникает

Confounding — есть скрытая переменная, коррелирующая и с group, и с outcome.

Без контроля на confounder — agregate вводит в заблуждение.

Fix

Stratification

Разделить по confounder, посчитать weighted average:

CR_fair = Σ (CR_segment × weight_segment)

Regression

Добавить confounder в модель:

Y ~ treatment + confounder

Coefficient на treatment — controlled effect.

Propensity score

Match units с similar propensity → balance groups.

Реальные кейсы

Google Flu Trends

Agregated search data vs flu incidence показывала correlation, но skewed by region.

Mortality rates

По странам А выше, чем В. Разбили по age — в каждой возрастной группе B выше. Дело в возрастном составе.

На собесе

«Что такое парадокс Симпсона?» Когда тренд в агрегате противоположен трендам в подгруппах.

«Как распознать?» Segment analysis, balance check, sanity check.

«Как fix?» Stratification, regression, propensity score matching.

«Классический пример?» Berkeley admissions, medical treatment.

Частые ошибки

Доверять агрегатам

Always segment. Especially when stakes высоки.

Random assignment = not a cure

Random assignment в большой выборке обычно балансирует, но на малой — не гарантирует.

Ignore domain knowledge

Если результат странный — ищите confounder, не принимайте сразу.

Связанные темы

FAQ

Все agregated data плохие?

Нет. Но segment analysis — best practice.

Simpson vs confounding?

Simpson — manifestation confounding.

Только в stats?

Везде где aggregation: политика, медицина, бизнес.


Тренируйте аналитику — откройте тренажёр с 1500+ вопросами для собесов.