Условие
Аналитик считает корреляцию между «количеством походов в спортзал в месяц» и «доходом» на выборке 5000 человек — r = 0.42. Делает вывод: «спорт повышает доход». В чём ошибка? Какие возможны альтернативные объяснения? Как корректно проверить гипотезу?
Решение
Правило: «correlation ≠ causation»
Корреляция между X и Y может объясняться:
- X → Y — причина в X.
- Y → X — обратная причинность (reverse causation).
- Z → X, Z → Y — общая причина (confounder).
- Selection bias — отбор в выборку зависит и от X, и от Y.
- Случайность — на больших выборках любой
rбудет значим.
Альтернативы для «спорт vs доход»
- Reverse: высокий доход → есть время и деньги на абонемент → больше походов.
- Confounder — возраст: 35-45 лет = пик дохода и пик заботы о здоровье.
- Confounder — район: жить в дорогом районе = и доход, и спортзал рядом.
- Confounder — образование: высшее → выше доход, и более забота о ЗОЖ.
- Self-selection: в выборке могут быть пользователи приложения, отобранные по интересу к здоровью.
Корректная проверка
Идеал — рандомизированный эксперимент: случайно выдать половине бесплатные абонементы, через год сравнить доходы. Возможно для научной работы; в продукте — почти нет.
Реальные методы:
-
Регрессия с контрольными переменными:
import statsmodels.formula.api as smf model = smf.ols('income ~ gym_visits + age + education + city', data=df).fit() print(model.summary())Коэффициент при
gym_visitsпосле контроля над confounders — менее смещён, но всё ещё уязвим к ненаблюдаемым переменным. -
Propensity Score Matching: для каждого «спортсмена» подобрать пару «не-спортсмена» с похожими наблюдаемыми характеристиками; сравнить доходы.
-
Instrumental Variable (IV): переменная, связанная с X, но не с Y напрямую (например, расстояние до ближайшего спортзала).
-
Difference-in-Differences (если есть time-series): группа, начавшая ходить в спорт vs не начавшая, разница в динамике дохода.
-
Natural experiment: правительство открыло бесплатные спортзалы в одном районе → quasi-random.
Pearson vs Spearman vs Kendall
- Pearson r: линейная связь, чувствителен к выбросам, нужна нормальность для тестов значимости.
- Spearman ρ: ранговая корреляция, любая монотонная связь.
- Kendall τ: ранговая, более робастна на малых выборках.
from scipy import stats
stats.pearsonr(df.gym, df.income) # (0.42, p)
stats.spearmanr(df.gym, df.income) # часто чуть меньшеЗнаменитые «фейковые» корреляции
- Потребление маргарина в США vs разводы в штате Мэн (r=0.99).
- Количество фильмов с Николасом Кейджем vs утопления в бассейнах.
Подбор пар по тысячам метрик гарантирует «значимые» корреляции — это multiple testing, не реальная связь.
Подводные камни
- «r = 0.42 → большой эффект»: всё зависит от области. В социалке r=0.3 уже сильно, в физике r=0.99 слабовато.
- Pearson на нелинейной связи даёт низкий r, хотя связь сильная (квадратичная).
- Выбросы ломают Pearson: одна точка может дать r=0.7 или r=-0.1.
- Конфаундеры: контроль над наблюдаемыми не решает проблему ненаблюдаемых. IV / RCT — единственный выход.
- Стат. значимость r ≠ важность r: при n=10⁶ даже r=0.01 имеет p<0.001.
- Гранулярность: r на агрегатах (по городам) часто больше, чем по индивидуумам (Simpson paradox).
- «Регрессия → причинность» — нет. Регрессия — это условное среднее с допущениями. Без random assignment / IV — это всё ещё корреляция, просто частная.
Эталонный ответ
Ошибка — вывод о причинности из корреляции. Альтернативы:
- Обратная связь (доход → спорт);
- Confounders (возраст, образование, район);
- Selection bias.
Корректная проверка: RCT (если возможно), регрессия с контролем confounders, propensity score matching, IV, diff-in-diff, natural experiment.
Pearson r=0.42 говорит только о линейной связи; для каузального вывода нужен дизайн, который исключает альтернативы.