Корреляция, причинность и доверительные интервалы
Два вопроса, которые задают почти всем: «корреляция и причинность — в чём разница» и «объясните доверительный интервал так, чтобы понял продакт».
Корреляция измеряет силу и направление линейной связи двух величин числом от −1 до +1. Она ничего не говорит о том, что чему причина.
Вопрос 1. Почему корреляция не означает причинность?
Что проверяет интервьюер. Не знание фразы — её слышали все. Проверяют, назовёте ли вы механизмы, из-за которых связь есть, а причинности нет, и предложите ли способ проверить причинность.
import math
ice_cream = [10, 12, 15, 20, 25, 30, 28, 22] # продажи мороженого, тыс. порций
drownings = [2, 3, 4, 6, 8, 10, 9, 7] # число утоплений
def corr(x, y):
n = len(x)
mx, my = sum(x) / n, sum(y) / n
cov = sum((a - mx) * (b - my) for a, b in zip(x, y))
sx = math.sqrt(sum((a - mx) ** 2 for a in x))
sy = math.sqrt(sum((b - my) ** 2 for b in y))
return cov / (sx * sy)
print("Корреляция:", round(corr(ice_cream, drownings), 4))
Вывод:
Корреляция: 0.9992
Связь почти идеальная, но мороженое никого не топит. Обе величины растут от третьей — жары. Это конфаундер (смешивающий фактор), и он же самая частая причина ложных выводов в продуктовой аналитике.
Полный список механизмов, которые стоит назвать:
- Конфаундер — третья переменная влияет на обе. «Пользователи приложения платят больше» — потому что приложение ставят самые лояльные, а не потому, что приложение делает лояльным.
- Обратная причинность — B влияет на A, а не наоборот. «Компании с большим отделом поддержки имеют больше жалоб» — поддержку наняли из-за жалоб.
- Ошибка выжившего — смотрим только на дошедших. «Все успешные проекты используют X» — потому что неуспешные с X мы не видим.
- Систематическая ошибка отбора — выборка не случайна. Опрос по email пропускает тех, кто перестал открывать письма.
- Случайность — при переборе сотен пар какие-то коррелируют просто так. Именно так рождаются «корреляции» между потреблением сыра и числом инженерных диссертаций.
И два технических ограничения самого коэффициента. Корреляция Пирсона ловит только линейную связь: у идеальной параболы y = x² на симметричном интервале коэффициент будет около нуля при полной детерминированности. И она чувствительна к выбросам — один выброс способен и создать корреляцию, и уничтожить её. Для монотонных, но нелинейных связей берут корреляцию Спирмена (по рангам).
Как проверять причинность: рандомизированный эксперимент (A/B-тест) — золотой стандарт; если эксперимент невозможен — квазиэкспериментальные методы: difference-in-differences, регрессия с контролем конфаундеров, инструментальные переменные, метод разрывной регрессии.
Вопрос 2. Объясните доверительный интервал простыми словами
Мы почти никогда не измеряем всех пользователей — мы берём выборку. Значит, любая посчитанная цифра содержит случайную погрешность. Доверительный интервал — это диапазон, который эту погрешность показывает вместо того, чтобы прятать её за одним «точным» числом.
Формально: если повторить эксперимент много раз и каждый раз строить 95%-й интервал, примерно 95% построенных интервалов накроют истинное значение. Строго говоря, нельзя сказать «с вероятностью 95% истина внутри этого интервала» — истина не случайна, случаен интервал. На собеседовании это различие спрашивают и ценят, но объяснять его продакту не надо: для практики достаточно понимания «наша оценка не точка, а вилка».
import math
def ci_prop(k, n, z=1.96):
p = k / n
se = math.sqrt(p * (1 - p) / n)
return round(100 * (p - z * se), 2), round(100 * (p + z * se), 2)
for n in (200, 1000, 10000, 100000):
lo, hi = ci_prop(int(0.10 * n), n)
print(f"n = {n:>6}: конверсия 10.0%, 95% ДИ [{lo}%, {hi}%], ширина {round(hi - lo, 2)} п.п.")
Вывод:
n = 200: конверсия 10.0%, 95% ДИ [5.84%, 14.16%], ширина 8.32 п.п.
n = 1000: конверсия 10.0%, 95% ДИ [8.14%, 11.86%], ширина 3.72 п.п.
n = 10000: конверсия 10.0%, 95% ДИ [9.41%, 10.59%], ширина 1.18 п.п.
n = 100000: конверсия 10.0%, 95% ДИ [9.81%, 10.19%], ширина 0.38 п.п.
Три практических вывода, которые надо озвучить:
- Точность растёт как корень из n. Чтобы сузить интервал вдвое, выборку нужно увеличить вчетверо. Это же объясняет, почему A/B-тесты требуют десятков тысяч пользователей.
- На 200 наблюдениях «конверсия 10%» означает «где-то между 6% и 14%» — и решение о запуске на таких данных принимать нельзя.
- Если интервалы двух вариантов сильно перекрываются, разница не доказана, каким бы убедительным ни выглядел столбик на графике.
Типичные ошибки кандидатов
- Произносят «корреляция не равна причинности» и замолкают, не назвав ни одного механизма.
- Не знают, что корреляция Пирсона ловит только линейную связь.
- Говорят «с вероятностью 95% истинное значение внутри интервала» — и не могут поправиться, когда переспрашивают.
- Считают, что ширина интервала зависит от доли выборки в генеральной совокупности, а не от абсолютного размера выборки.
- Показывают бизнесу голую цифру конверсии без интервала и делают выводы по разнице в 0.2 п.п. на тысяче пользователей.
Как ответить кратко
«Корреляция — мера линейной связи от −1 до 1. Связь без причинности бывает по нескольким причинам: конфаундер, влияющий на обе величины (мороженое и утопления — жара), обратная причинность, ошибка выжившего, смещение отбора и просто случайность при переборе многих пар. Проверить причинность можно рандомизированным экспериментом, а если он невозможен — difference-in-differences или регрессией с контролем конфаундеров. Доверительный интервал — это вилка вокруг оценки, показывающая случайную погрешность выборки: при повторении эксперимента 95% таких интервалов накроют истину. Ширина падает как корень из размера выборки, поэтому для сужения вдвое данных нужно вчетверо больше».