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

Измеряет монотонную связь через ранги.

Алгоритм:

  1. Преобразовать X в ранги (r_x)
  2. Преобразовать Y в ранги (r_y)
  3. Считать 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 Server

Spearman

Нет встроенной. Ручной расчёт через ранги:

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, которую оба не поймают.

Связанные темы

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+ вопросами для собесов.