Короткий ответ
Пирсон измеряет силу линейной связи между количественными переменными и чувствителен к выбросам; Спирмен считает корреляцию по рангам значений, измеряя силу монотонной (не обязательно линейной) связи, и устойчивее к выбросам и нелинейности.
Как это работает подробнее
коэффициент Спирмена фактически равен коэффициенту Пирсона, посчитанному не по самим значениям, а по их рангам — это убирает влияние масштаба и формы распределения, оставляя только информацию об относительном порядке.
Пример кода
Пример на Python
import pandas as pd
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9,10])
y = np.exp(x) # явно нелинейная, но монотонная зависимость
print(pd.Series(x).corr(pd.Series(y), method='pearson')) # заметно ниже 1
print(pd.Series(x).corr(pd.Series(y), method='spearman')) # равен 1.0Что использовать на практике
- На практике. Спирмена стоит предпочесть, когда связь между переменными явно нелинейная, но монотонная (например, логарифмическая зависимость выручки от числа показов рекламы), когда в данных есть выбросы, или когда переменные порядковые, а не честно количественные (например, рейтинг удовлетворённости по шкале 1–5). Пирсон предпочтителен, когда интересует именно линейная зависимость и важна её сила в терминах исходных единиц (для последующего построения линейной регрессии). На практике полезно считать оба коэффициента одновременно и сравнивать их — большая разница между ними сама по себе сигнализирует о нелинейности связи и поводе посмотреть на scatter plot внимательнее.
- Пример. Sanity check: для строго монотонной, но нелинейной зависимости корреляция Спирмена должна быть равна (или близка к) 1, а Пирсона — заметно ниже, что наглядно показывает разницу между измеряемыми типами связи.
Подводные камни
- Частые ошибки. использовать только Пирсона «по умолчанию» для всех пар переменных без проверки формы связи на scatter plot; интерпретировать высокую корреляцию Спирмена как «линейную связь» — она говорит именно о монотонности, не о линейности; делать причинные выводы на основе любого из коэффициентов без дополнительного анализа. Ещё одна ошибка — применять корреляцию Спирмена к данным с большим числом повторяющихся значений (связок рангов) без проверки, что используемая реализация корректно обрабатывает такие связки.