Коэффициент корреляции Спирмана
Инструмент, который помогает оценить монотонную зависимость между двумя признаками
Коэффициент ранговой корреляции Спирмана (Корреляция Спирмана, rho, ρ) — инструмент, который помогает оценить монотонную зависимость между двумя признаками. В отличие от классической корреляции Пирсона, корреляция Спирмана не предполагает линейность и не требует нормальности данных, что делает её особенно ценной в анализе реальных, «грязных» данных.
Коэффициент показывает, насколько хорошо связь между двумя переменными описывается монотонной функцией. При этом сами данные предварительно заменяются на ранги — порядковые номера.
Идея:
- Преобразовать оба признака в ранги.
- Посчитать корреляцию Пирсона между рангами.
Значения ρ лежат в диапазоне [-1, 1]:
— +1: идеальная возрастающая монотонная зависимость
— –1: идеальная убывающая монотонная зависимость
— 0: — монотонной зависимости нет
Когда ранги уникальны, используют формулу:
[
\rho = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)}
]
где
- ( d_i ) — разность рангов пары наблюдений,
- ( n ) — количество наблюдений.
При наличии одинаковых значений (ties) — применяется более общий вариант (реализован в SciPy).
Ниже — практический пример с визуализацией и расчётом коэффициента.
import numpy as np
import pandas as pd
from scipy.stats import spearmanr
import matplotlib.pyplot as plt
# Создадим пример данных: монотонная, но нелинейная зависимость
np.random.seed(42)
x = np.linspace(0, 10, 100)
y = np.log(x + 1) * 5 + np.random.normal(0, 0.3, 100)
df = pd.DataFrame({"x": x, "y": y})
# Рассчитаем коэффициент Спирмана
corr, p_value = spearmanr(df["x"], df["y"])
print(f"Spearman correlation: {corr:.4f}")
print(f"P-value: {p_value:.4f}")
# Визуализация
plt.scatter(df["x"], df["y"])
plt.title("Пример нелинейной монотонной зависимости")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
— Данные зависимы монотонно, но не линейно
— Коэффициент Спирмана будет близок к 1, а вот Пирсон дал бы меньшую величину.
— p-value покажет значимость зависимости.
Как интерпретировать результат?
Ориентировочная шкала:
| ρ | |
|---|---|
| Очень сильная зависимость | 0.8 – 1.0 |
| Сильная | 0.6 – 0.8 |
| Средняя | 0.4 – 0.6 |
| Слабая | 0.2 – 0.4 |
| Очень слабая | 0 – 0.2 |