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

Что такое корреляция и причинно-следственная связь? Почему их нельзя путать?

1.2 Junior🔥 251 комментариев
#Статистика и теория вероятностей

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

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

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

Корреляция vs Причинно-следственная связь

Корреляция — это статистическая зависимость (две переменные меняются вместе). Причинно-следственная связь (каузальность) — это когда одна переменная ПРИЧИНА, другая СЛЕДСТВИЕ. Это фундаментальное различие, которое часто путают, приводя к неверным выводам.

Определение корреляции

Корреляция измеряет, как две переменные двигаются вместе:

import numpy as np
import pandas as pd
from scipy.stats import pearsonr

# Пример: ледяное мороженое и утопления
ice_cream_sales = [100, 120, 150, 180, 200, 210, 190, 160, 130, 110]
drowing_deaths = [10, 12, 15, 18, 20, 21, 19, 16, 13, 11]

# Коэффициент корреляции Пирсона
corr, p_value = pearsonr(ice_cream_sales, drowning_deaths)

print(f"Корреляция: {corr:.3f}")  # 0.998 (очень сильная!)
print(f"P-value: {p_value:.6f}")  # < 0.001 (статистически значима)

# Вывод: ледяное мороженое и утопления сильно коррелируют!

Но это НЕ означает, что мороженое вызывает утопления!

Типы корреляции

Положительная корреляция:

# Обе переменные растут вместе
# Пример: опыт работы и зарплата
experience = [0, 1, 2, 3, 4, 5]
salary = [30000, 35000, 40000, 48000, 55000, 65000]

corr = np.corrcoef(experience, salary)[0, 1]  # 0.99 (сильная положительная)
print(f"Корреляция: {corr:.3f}")

Отрицательная корреляция:

# Когда одна растёт, другая падает
# Пример: цена товара и количество продаж
price = [100, 120, 140, 160, 180]
quantity_sold = [1000, 800, 600, 400, 200]

corr = np.corrcoef(price, quantity_sold)[0, 1]  # -0.99 (сильная отрицательная)
print(f"Корреляция: {corr:.3f}")

Нулевая корреляция:

# Переменные не связаны
# Пример: номер месяца и случайное число
month = [1, 2, 3, 4, 5, 6]
random_num = [42, 7, 81, 15, 99, 3]

corr = np.corrcoef(month, random_num)[0, 1]  # ~0 (нет связи)
print(f"Корреляция: {corr:.3f}")

Причинно-следственная связь

Причинно-следственная связь означает, что изменение X ВЫЗЫВАЕТ изменение Y:

Причина (X) → Следствие (Y)

Примеры:
- Больше учёбы → Выше оценки
- Больше удобрений → Больше урожая
- Более высокая температура → Больше пота

Но корреляция ≠ каузальность!

Основные ошибки: три сценария корреляции БЕЗ каузальности

Сценарий 1: Скрытая переменная (Confounding variable)

Оба явления вызваны третьей переменной:

ЛЕДЯНОЕ МОРОЖЕНОЕ → УТОПЛЕНИЯ ✗ (корреляция, но нет причины)
      ↓          ↓
      └─ ЛЕТО ─┘ (скрытая причина!)

Летом:
- Люди едят больше мороженого (потому что жарко)
- Люди плавают больше (потому что жарко)
- Поэтому больше утоплений

Лед ≠ причина утоплений!

Сценарий 2: Обратная причинность (Reverse causality)

Мы думаем: A → B
Но на самом деле: B → A

Пример: Люди с высокой зарплатой покупают дорогие машины
Мы думаем: Дорогая машина → Высокая зарплата ✗
На самом деле: Высокая зарплата → Дорогая машина ✓

Корреляция есть, но направление другое!

Сценарий 3: Чистая случайность

Полная независимость, но случайное совпадение

Пример: Количество буквы "К" в заголовках газет
         vs Цена акций

Нет причинно-следственной связи, просто случайность.
Если проверить 1000 пар переменных, некоторые будут коррелировать
полностью случайно (p-hacking).

Практические примеры из реальной жизни

Пример 1: Обучение и спорт

# Данные: часов учёбы vs результаты по математике
study_hours = [1, 2, 3, 4, 5]
math_score = [50, 60, 70, 80, 90]

corr = np.corrcoef(study_hours, math_score)[0, 1]  # 1.0 (идеальная корреляция)

# Вывод: "Больше учёбы → Выше оценки" ✓ (разумная причина-следствие)

Пример 2: Количество пожарных и ущерб от пожара

# Корреляция между числом пожарных и ущербом: очень высокая (0.95)
fire_fighters = [5, 10, 20, 50, 100]
fire_damage = [10000, 20000, 50000, 150000, 300000]

# Наивный вывод: "Больше пожарных → Больше ущерба" ✗
# Правильное объяснение: Больше пожарных отправляют на БОЛЬШИЕ пожары
#                        Скрытая переменная: размер пожара

Пример 3: Социальная сеть и депрессия

# Исследование: коррелирует ли время в TikTok с депрессией? Да!
# correlation = 0.45

# Но почему?
# Вариант 1: TikTok вызывает депрессию (наивный взгляд)
# Вариант 2: Люди с депрессией больше сидят в TikTok (обратная причина)
# Вариант 3: Низкая самооценка → Больше TikTok И депрессия (скрытая переменная)
# Вариант 4: Осведомлённость о проблемах → Больше TikTok контента о депрессии

# Корреляция найдена, но причина неясна!

Как доказать причинно-следственную связь?

Рандомизированный контролируемый эксперимент (RCT)

# Пример: проверить, повышает ли новая программа обучения оценки

# Контрольная группа: старая программа
control_group = [70, 72, 68, 71, 69]  # mean = 70

# Экспериментальная группа: новая программа (случайно выбраны)
treatment_group = [85, 88, 82, 87, 86]  # mean = 85.6

# T-тест
t_stat, p_value = stats.ttest_ind(control_group, treatment_group)

if p_value < 0.05:
    print("Новая программа статистически значимо повышает оценки!")
    print("И это ДА является причинно-следственной связью!")
    print("Потому что группы случайно выбраны (контролируем смешанные переменные)")

Почему это работает:

  • Случайное назначение → избегаем смешанных переменных
  • Контрольная группа → сравниваем с baseline
  • Изолированное вмешательство → меняем только одно

Критерии для установления причинно-следственности (Hill's Criteria)

То, что нужно проверить для более надёжного вывода:

  1. Сила связи — насколько сильна корреляция?
  2. Консистентность — повторяется ли результат в разных исследованиях?
  3. Специфичность — А вызывает именно В (не что-то другое)?
  4. Временность — причина идёт ДО следствия (X → Y, а не Y → X)?
  5. Биологический механизм — есть ли логический механизм?
  6. Dose-response — больше X → больше Y?
  7. Экспериментальное свидетельство — подтверждается экспериментом?
# Пример проверки временности:

# ✗ Неправильно: зарплата в 2024 и опыт в 2025
# Зарплата не может быть следствием будущего опыта!

# ✓ Правильно: опыт в 2024 и зарплата в 2025
# Логичный порядок: опыт → потом зарплата

Инструменты для анализа

1. Корреляционная матрица (сначала смотрим)

import pandas as pd

df = pd.DataFrame({
    'age': [25, 30, 35, 40, 45],
    'salary': [50000, 60000, 70000, 80000, 90000],
    'years_exp': [2, 5, 8, 11, 14]
})

print(df.corr())
#           age   salary  years_exp
# age      1.000   0.999     0.998  ← Все коррелируют!
# salary   0.999   1.000     0.998
# years_exp 0.998  0.998     1.000

2. Диаграмма разброса (scatter plot)

import matplotlib.pyplot as plt

plt.scatter(age, salary)
plt.title('Зарплата vs Возраст')
plt.show()

# Смотрим паттерн:
# - Линейный тренд → скорее всего есть связь
# - Облако точек → скорее всего нет связи
# - Несколько изолированных точек → выбросы

3. Регрессионный анализ

from sklearn.linear_model import LinearRegression

X = df[['age']].values
y = df['salary'].values

model = LinearRegression()
model.fit(X, y)

print(f"Коэффициент: {model.coef_[0]:.2f}")
# Интерпретация: за каждый год возраста
# зарплата растёт на X долларов

# Но это может быть из-за опыта (скрытая переменная)!

Практический чеклист при анализе

  • Вычислил корреляцию
  • Проверил статистическую значимость (p-value)
  • Посмотрел диаграмму разброса
  • Подумал о скрытых переменных
  • Проверил направление причины (временность)
  • Не путаю корреляцию с причинностью в выводах
  • Документирую, что это корреляция, а не причина

Итог

Корреляция:

  • Две переменные меняются вместе
  • Может быть найдена через статистику
  • НЕ означает причину

Причинно-следственная связь:

  • Одна переменная ВЫЗЫВАЕТ другую
  • Требует экспериментального доказательства
  • Или очень сильной логики и исключения альтернатив

Золотое правило: Корреляция — это гипотеза для дальнейшего изучения, а не вывод. Всегда спрашивай себя: "А может ли быть третья переменная?" и "А может быть обратная причина?"