Корреляция в Pandas
Корреляция измеряет силу линейной связи между двумя числовыми столбцами.
Значение варьируется от -1 (обратная) до +1 (прямая), 0 — независимы. В Pandas
есть два метода: Series.corr(other) для пары и DataFrame.corr() для всех
пар сразу.
Когда использовать
Связаны ли температура и обороты двигателя.
Какие фичи в датасете «дублируют» друг друга.
Подбор признаков перед регрессией.
Пример 1. Корреляция двух Series
import pandas as pd
temp = pd.Series([20, 22, 25, 28, 30])
speed = pd.Series([100, 110, 130, 150, 160])
print(round(temp.corr(speed), 3))
Output:
0.992
Сильная прямая связь.
Пример 2. Матрица корреляций
import pandas as pd
df = pd.DataFrame({
"temp": [20, 22, 25, 28, 30],
"hum": [60, 58, 55, 50, 48],
"speed": [100, 110, 130, 150, 160],
})
print(df.corr().round(2))
Output:
temp hum speed
temp 1.00 -0.99 0.99
hum -0.99 1.00 -0.99
speed 0.99 -0.99 1.00
Пример 3. Метод Spearman
import pandas as pd
a = pd.Series([1, 2, 3, 4, 5])
b = pd.Series([1, 4, 9, 16, 25])
print("pearson:", round(a.corr(b), 3))
print("spearman:", round(a.corr(b, method="spearman"), 3))
Output:
pearson: 0.987
spearman: 1.0
Спирман учитывает любую монотонную (не только линейную) связь.
Пример 4. Корреляция с одним столбцом
import pandas as pd
df = pd.DataFrame({
"temp": [20, 22, 25, 28, 30],
"hum": [60, 58, 55, 50, 48],
"speed": [100, 110, 130, 150, 160],
})
print(df.corr()["speed"].round(2))
Output:
temp 0.99
hum -0.99
speed 1.00
Name: speed, dtype: float64
Пример 5. Игнорирование пропусков
import pandas as pd
import numpy as np
a = pd.Series([1, 2, np.nan, 4, 5])
b = pd.Series([2, 4, 6, 8, 10])
print(round(a.corr(b), 3))
Output:
1.0
corr сама выкидывает пары с NaN.
Пример 6. Только сильные пары
import pandas as pd
df = pd.DataFrame({
"a": [1, 2, 3, 4],
"b": [4, 3, 2, 1],
"c": [1, 4, 2, 3],
})
m = df.corr().abs()
print(m[(m > 0.7) & (m < 1.0)].stack())
Output:
a b 1.0
b a 1.0
dtype: float64
Пример 7. Корреляция с lag (сдвиг)
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5, 6])
print(round(s.corr(s.shift(1)), 3))
Output:
1.0
Автокорреляция первого порядка — единица для линейного ряда.
Подводные камни
Высокая корреляция ≠ причинно-следственная связь.
Pearson очень чувствителен к выбросам — один «дребезг» меняет коэффициент.
Для бинарных и категориальных данных используйте другие метрики (Cramér’s V, point-biserial).
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.