Представьте: аналитик заметил, что в месяцы с высокими продажами мороженого растёт и число людей, которые посещают пляжи. Корреляция сильная.
Можно ли сделать вывод, что мороженое заставляет людей идти на пляж? Конечно, нет. Скорее всего, на оба показателя влияет третий фактор — тёплая солнечная погода.
Это один из главных принципов работы с данными: корреляция показывает связь, но не доказывает причину.
Если два события происходят одновременно, это ещё не значит, что одно событие вызвало другое.
Что такое корреляция
Корреляция — это статистическая мера связи между двумя числовыми величинами. Она показывает, как показатели изменяются относительно друг друга.
Чаще всего используют коэффициент корреляции Пирсона. Его значение находится в диапазоне от -1 до 1.
| Значение | Что это означает |
|---|---|
| 1 | Идеальная положительная связь: один показатель растёт — второй тоже растёт |
| 0 | Линейной связи практически нет |
| -1 | Идеальная отрицательная связь: один показатель растёт — второй падает |
Например, количество часов подготовки к экзамену и итоговый балл часто имеют положительную корреляцию. А цена товара и количество покупок — отрицательную: при повышении цены спрос обычно снижается.
Но даже сильная корреляция не отвечает на вопрос: почему именно показатели связаны?
Три причины, почему показатели могут коррелировать
1. Один показатель действительно влияет на другой
Это самый очевидный случай. Например, увеличение рекламного бюджета может привести к росту числа переходов на сайт. Рост температуры воздуха может увеличить продажи холодных напитков.
Здесь есть причинная цепочка:
Но в реальных данных даже такая очевидная связь требует проверки. Возможно, рекламный бюджет увеличили именно потому, что ожидался сезонный рост спроса.
2. На оба показателя влияет третий фактор
Это наиболее частая причина ошибочных выводов. Два показателя изменяются одновременно не потому, что влияют друг на друга, а потому что оба зависят от внешнего фактора.
Например, летом обычно растут:
- продажи мороженого;
- посещаемость пляжей;
- продажи солнцезащитных средств;
- потребление прохладительных напитков.
У этих метрик может быть высокая взаимная корреляция. Но первопричина — не мороженое и не пляж, а сезонность и температура.
Температура воздуха → Посещаемость пляжей
3. Связь возникла случайно
Если проверить достаточно много показателей, между некоторыми из них обязательно найдётся статистическая связь — просто по случайности.
Например, можно обнаружить корреляцию между количеством выпущенных фильмов в определённом жанре и продажами бытовой техники. Это не повод менять маркетинговую стратегию магазина после премьеры нового фильма.
Чем больше гипотез проверяет аналитик, тем выше вероятность случайной «находки». Поэтому результаты важно подтверждать дополнительными данными, экспериментами или исследованиями.
Классический пример: мороженое и утопления
В жаркие месяцы часто одновременно увеличиваются продажи мороженого и число несчастных случаев на воде. Между этими величинами можно обнаружить положительную корреляцию.
Неправильный вывод будет звучать так:
Продажа мороженого приводит к несчастным случаям на воде.
Более вероятное объяснение: летом больше людей покупают мороженое и больше людей проводят время у воды. Общий фактор — высокая температура и сезон отпусков.
Это не означает, что корреляция бесполезна. Она помогла заметить связь, которую стоит изучить. Ошибка начинается в момент, когда наблюдение превращают в уверенный вывод о причине.
Пример на Python
Создадим условный набор данных по месяцам. В нём температура влияет и на продажи мороженого, и на количество посетителей пляжа.
Скачать Jupyter Notebook Открыть в Google Colab
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({
'month': [
'Янв', 'Фев', 'Мар', 'Апр',
'Май', 'Июн', 'Июл', 'Авг',
'Сен', 'Окт', 'Ноя', 'Дек'
],
'temperature': [-5, -2, 4, 11, 17, 22, 26, 24, 17, 9, 3, -2],
'ice_cream_sales': [120, 130, 180, 280, 430, 680, 920, 870, 490, 260, 160, 125],
'beach_visitors': [20, 25, 40, 110, 340, 760, 1250, 1180, 410, 130, 45, 20]
})
data
| month | temperature | ice_cream_sales | beach_visitors | |
|---|---|---|---|---|
| 0 | Янв | -5 | 120 | 20 |
| 1 | Фев | -2 | 130 | 25 |
| 2 | Мар | 4 | 180 | 40 |
| 3 | Апр | 11 | 280 | 110 |
| 4 | Май | 17 | 430 | 340 |
| 5 | Июн | 22 | 680 | 760 |
| 6 | Июл | 26 | 920 | 1250 |
| 7 | Авг | 24 | 870 | 1180 |
| 8 | Сен | 17 | 490 | 410 |
| 9 | Окт | 9 | 260 | 130 |
| 10 | Ноя | 3 | 160 | 45 |
| 11 | Дек | -2 | 125 | 20 |
Посчитаем корреляцию между продажами мороженого и количеством посетителей пляжа:
correlation = data[
['ice_cream_sales', 'beach_visitors']
].corr()
correlation
| ice_cream_sales | beach_visitors | |
|---|---|---|
| ice_cream_sales | 1.000000 | 0.987935 |
| beach_visitors | 0.987935 | 1.000000 |
Коэффициент 0.985 — очень сильная положительная корреляция. Но она не доказывает, что мороженое приводит людей на пляж или наоборот.
Проверим, как оба показателя связаны с температурой:
correlations = data[
['temperature', 'ice_cream_sales', 'beach_visitors']
].corr()
correlations
| temperature | ice_cream_sales | beach_visitors | |
|---|---|---|---|
| temperature | 1.000000 | 0.942339 | 0.883225 |
| ice_cream_sales | 0.942339 | 1.000000 | 0.987935 |
| beach_visitors | 0.883225 | 0.987935 | 1.000000 |
Температура сильно связана с обеими метриками. Именно она выглядит более правдоподобным объяснением их совместного роста.
Как визуализировать корреляцию
Диаграмма рассеяния помогает увидеть связь между двумя величинами. Каждая точка на графике — одно наблюдение, например, один месяц.
plt.figure(figsize=(9, 5))
sns.set_theme(style='whitegrid')
sns.regplot(
data=data,
x='ice_cream_sales',
y='beach_visitors',
scatter_kws={'s': 70, 'color': '#4C78A8'},
line_kws={'color': '#E45756'}
)
plt.title('Продажи мороженого и посещаемость пляжа')
plt.xlabel('Продажи мороженого')
plt.ylabel('Посетители пляжа')
plt.tight_layout()
plt.show()
Такой график показывает наличие связи, но не раскрывает её механизм. Чтобы понять причину, нужно учитывать контекст, сезонность, сегменты и возможные внешние факторы.
Почему это опасно в бизнес-аналитике
Ошибки с причинностью встречаются не только в учебных примерах. Они могут привести к дорогим и неверным решениям.
Пример: рост рекламных расходов и выручки
Компания увеличила расходы на рекламу в ноябре. В том же месяце выросла выручка. Кажется логичным объявить рекламную кампанию успешной.
Но ноябрь может включать сезон распродаж, предпраздничный спрос, изменение ассортимента или запуск промокодов. Выручка могла бы вырасти и без рекламы.
Чтобы оценить реальный эффект, полезно сравнить:
- регионы, в которых реклама запускалась, и контрольные регионы;
- аудиторию, видевшую рекламу, и похожую аудиторию без показа;
- результаты до и после кампании с учётом сезонности;
- изменение метрик в рамках A/B-теста.
Пример: новая функция и удержание пользователей
После запуска новой функции retention вырос с 30% до 35%. Это хорошая новость, но не окончательное доказательство пользы функции.
Возможно, в этот период пришла более качественная аудитория, изменился канал привлечения или закончилась техническая проблема в продукте. Без контрольной группы нельзя уверенно сказать, что именно новая функция стала причиной роста.
Сезонность — частая ловушка
Особенно осторожно нужно работать с данными, которые меняются во времени. Временные ряды часто имеют общий тренд или сезонность.
Например, одновременно могут расти:
- количество зарегистрированных пользователей;
- объём базы данных;
- число обращений в поддержку;
- расходы на инфраструктуру.
Между этими метриками будет корреляция, потому что продукт растёт. Но это не значит, что увеличение базы данных вызывает обращения в поддержку или что рост инфраструктурных расходов приводит к новым регистрациям.
Для временных данных полезно сравнивать не только абсолютные значения, но и:
- изменения относительно прошлого периода;
- год к году, если есть сезонность;
- значения внутри одинаковых сегментов;
- периоды до и после изменения;
- контрольные группы.
Как приблизиться к выводу о причинности
Корреляция — хорошая отправная точка для гипотезы. Но чтобы говорить о причинном эффекте, нужны дополнительные проверки.
1. Использовать эксперимент
Самый надёжный способ — провести контролируемый эксперимент, например A/B-тест. Пользователей случайно делят на группы: одна видит изменение, другая — нет.
Если группы сопоставимы, а различается только тестируемый фактор, изменение результата можно с большей уверенностью связать именно с этим фактором.
2. Искать и учитывать скрытые факторы
Стоит спросить: какие переменные могут влиять сразу на оба показателя? Для продаж это могут быть сезон, цена, скидки, рекламные активности, ассортимент, регион, канал привлечения и тип клиента.
3. Проверять логику причинной цепочки
Причинность должна быть объяснима. Если гипотеза звучит как «показатель A влияет на B», важно понять механизм: как именно это происходит, в какой последовательности и почему.
4. Смотреть на данные по сегментам
Общая корреляция может исчезнуть или измениться, если разделить данные по регионам, типам клиентов, устройствам, каналам или периодам. Это часто указывает на скрытый фактор.
Практический чек-лист
Если вы нашли сильную корреляцию, не спешите принимать решение. Проверьте результат по следующему списку:
- Не перепутаны ли причина и следствие?
- Есть ли третий фактор, который влияет на оба показателя?
- Не объясняется ли связь сезонностью или общим трендом?
- Достаточно ли наблюдений для вывода?
- Проверяли ли вы много гипотез одновременно?
- Сохраняется ли связь в разных сегментах?
- Можно ли провести A/B-тест или использовать контрольную группу?
- Есть ли понятный бизнес-механизм, объясняющий предполагаемую причинность?
Вывод
Корреляция — полезный инструмент аналитика. Она помогает замечать связи, находить аномалии и формулировать гипотезы. Но сама по себе она не отвечает на вопрос, что стало причиной изменения метрики.
Сильная связь между показателями может быть результатом прямого влияния, общего скрытого фактора, сезонности или простой случайности.
Корреляция — это повод задать вопрос «почему?», а не повод сразу отвечать «потому что».