Spearman vs Pearson: разница
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это знать
На собеседовании часто: «какую корреляцию использовать?». Junior скажет corr(). Middle знает, что есть Pearson (линейная) и Spearman (ранговая), и что выбор зависит от типа связи и distribution.
Пропустить это отличие → получить ложную корреляцию 0, когда связь сильная но нелинейная. Не дольше минутной разбор, но большая разница в правильности анализа.
В статье:
- Короткий ответ
- Pearson — линейная связь
- Spearman — монотонная связь
- Когда какую
- В Python / pandas
- Kendall tau как альтернатива
Короткий ответ
- Pearson: линейная связь между числовыми переменными
- Spearman: монотонная связь (не обязательно линейная), работает с рангами
Если связь сильно нелинейная — Pearson пропустит, Spearman найдёт.
Pearson
Standard correlation. Измеряет линейную зависимость.
r = Σ(x - x̄)(y - ȳ) / sqrt(Σ(x - x̄)² × Σ(y - ȳ)²)Диапазон: [-1, 1].
Assumptions
- Числовые переменные (оба)
- Linear relationship
- Approximately normal distribution (для inference)
Пример
Height vs weight у людей — линейная связь. Pearson подходит.
Spearman
Измеряет монотонную связь через ранги.
Алгоритм:
- Преобразовать X в ранги (r_x)
- Преобразовать Y в ранги (r_y)
- Считать Pearson correlation на рангах
Assumptions
- Порядковые или числовые
- Монотонная связь (может быть нелинейной)
Пример
Y = X² для positive X — монотонная, но не linear. Pearson даст низкое значение, Spearman — высокое.
Сравнение
| Pearson | Spearman | |
|---|---|---|
| Связь | линейная | монотонная |
| Данные | числовые | порядковые / числовые |
| Outliers | чувствителен | устойчив |
| Ranges | [-1, 1] | [-1, 1] |
| Интерпретация | направление + сила linear | направление + сила монотон |
Когда Pearson
- Числовые continuous данные
- Ожидаете linear relationship
- Normal distribution
- Data clean от outliers
Когда Spearman
- Ordinal данные (rankings)
- Non-normal distribution
- Есть outliers
- Ожидаете монотонную, но не линейную
- Скошенные distributions (чек, время)
Пример когда разные
Данные: age vs engagement score.
- Молодые (18-30): engagement 80
- Средние (30-50): engagement 90
- Старые (50+): engagement 60
Нелинейная связь (пик в середине). Pearson ≈ 0 (линейного нет). Spearman ≈ 0 (тоже не монотонная).
Если изменим:
- Молодые: 60
- Средние: 80
- Старые: 90
Монотонная, но не linear. Pearson может быть 0.7. Spearman = 1.
В Python
import pandas as pd
from scipy.stats import pearsonr, spearmanr
# pandas
df.corr() # Pearson default
df.corr(method='spearman')
# scipy (с p-value)
r, p = pearsonr(x, y)
rho, p = spearmanr(x, y)Kendall's tau
Третья опция. Похож на Spearman, но использует concordant / discordant pairs.
- Более устойчив к outliers
- Slower на больших данных
- Часто используется в research
from scipy.stats import kendalltau
tau, p = kendalltau(x, y)Визуально проверьте
import matplotlib.pyplot as plt
plt.scatter(df['x'], df['y'])Если прямая линия — Pearson. Монотонная кривая — Spearman. Сложная форма (U-shape) — ни один, надо декомпозировать.
В SQL
Pearson
SELECT CORR(x, y) FROM data; -- Postgres, SQL ServerSpearman
Нет встроенной. Ручной расчёт через ранги:
WITH ranked AS (
SELECT
RANK() OVER (ORDER BY x) AS rank_x,
RANK() OVER (ORDER BY y) AS rank_y
FROM data
)
SELECT CORR(rank_x, rank_y) AS spearman FROM ranked;На собесе
«Разница?» Pearson — линейная связь. Spearman — монотонная через ранги.
«Когда Spearman?» Non-normal, outliers, non-linear монотонные связи.
«Scatter plot показывает кривую — какую?» Если монотонная — Spearman. Если U-shape — ни одна не сработает.
«Pearson на outliers?» Чувствителен. Spearman устойчивее.
Частые ошибки
1. Pearson по default на всё
Для скошенных распределений Spearman часто точнее.
2. Игнорировать scatter plot
Correlation — просто число. Визуализация показывает форму.
3. Correlation = causation
Ни Pearson, ни Spearman не доказывают причинность.
4. Low correlation = no связь
Может быть nonlinear, которую оба не поймают.
Связанные темы
- Корреляция простыми словами
- Корреляция vs ковариация
- Корреляция vs причинность
- Как посчитать корреляцию в SQL
FAQ
Pearson или Spearman чаще?
Pearson дефолт. Spearman когда данные не соответствуют assumptions.
Значения сильно различаются — что делать?
Скорее всего nonlinear monotonic. Или outliers. Смотрите scatter.
Для categorical — какую?
Ни одну. Для two nominal — Cramér's V. Для ordinal — Spearman.
Kendall vs Spearman?
Kendall более robust, но медленнее. Spearman — default для non-normal.
Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.