Автор оригинала: Sathiya Sarathi Gunasekaran.
Вступление
Работа с переменными в анализе данных всегда приводит к вопросу: как переменные зависят, связаны и изменяются друг от друга? Ковариация и корреляционная мера сказались при установлении этого.
Ковариация приводит к вариации между переменными. Мы используем ковариацию, чтобы измерить, насколько две переменные меняются друг с другом. Корреляция показывает связь между переменными. Мы используем корреляцию, чтобы определить, насколько сильно связаны две переменные друг с другом.
В этой статье мы узнаем, как вычислить ковариацию и корреляцию в Python.
Ковариация и корреляция – В Простых Терминах
И ковариация, и корреляция связаны с отношениями между переменными. Ковариация определяет направленную ассоциацию между переменными. Значения ковариации варьируются от -inf до +inf , где положительное значение означает, что обе переменные движутся в одном направлении, а отрицательное значение означает, что обе переменные движутся в противоположных направлениях.
Корреляция-это стандартизированная статистическая мера, которая выражает степень линейной связи двух переменных (имеется в виду, насколько они изменяются вместе с постоянной скоростью). Сила и направленность связи между двумя переменными определяются корреляцией, и она колеблется от -1 до +1. Подобно ковариации, положительное значение означает, что обе переменные движутся в одном направлении, тогда как отрицательное значение говорит нам, что они движутся в противоположных направлениях.
Как ковариация, так и корреляция являются жизненно важными инструментами, используемыми при исследовании данных для выбора признаков и многомерного анализа. Например, инвестор, стремящийся распределить риск портфеля, может искать акции с высокой ковариацией, поскольку это предполагает, что их цены движутся вверх одновременно. Однако одного подобного движения недостаточно. Затем инвестор использует корреляционную метрику, чтобы определить, насколько сильно эти цены акций связаны друг с другом.
Настройка для кода Python – Извлечение образцов данных
С основами, изученными в предыдущем разделе, давайте перейдем к вычислению ковариации в python. Для этого примера мы будем работать с хорошо известным набором данных Iris . Мы работаем только с видами setosa , чтобы быть конкретными, поэтому это будет просто образец набора данных о некоторых прекрасных фиолетовых цветах !
Давайте взглянем на набор данных, на котором мы будем проводить анализ:
Мы собираемся выбрать два столбца для нашего анализа – sepal_length и sepal_width .
В новом файле Python (вы можете назвать его covariance_correlation.py ), давайте начнем с создания двух списков со значениями для свойств sepal_length и sepal_width цветка:
with open('iris_setosa.csv','r') as f:
g=f.readlines()
# Each line is split based on commas, and the list of floats are formed
sep_length = [float(x.split(',')[0]) for x in g[1:]]
sep_width = [float(x.split(',')[1]) for x in g[1:]]
В науке о данных всегда помогает визуализировать данные, над которыми вы работаете. Вот график регрессии Seaborn ( Scatter Plot + linear regression fit) этих свойств setosa на разных осях:
Визуально точки данных, по-видимому, имеют высокую корреляцию, близкую к линии регрессии. Давайте посмотрим, соответствуют ли наши наблюдения их ковариационным и корреляционным значениям.
Вычисление ковариации в Python
Следующая формула вычисляет ковариацию:
В приведенной выше формуле,
- x i , y i – это отдельные элементы рядов x и y
- x, y – математические средства рядов x и y
- N – это число элементов в ряду
Знаменатель равен N для всего набора данных и N - 1 в случае выборки. Поскольку наш набор данных представляет собой небольшую выборку всего набора данных Iris, мы используем N - 1 .
Используя математическую формулу, упомянутую выше в качестве нашей ссылки, давайте создадим эту функцию в чистом Python:
def covariance(x, y):
# Finding the mean of the series x and y
mean_x = sum(x)/float(len(x))
mean_y = sum(y)/float(len(y))
# Subtracting mean from the individual elements
sub_x = [i - mean_x for i in x]
sub_y = [i - mean_y for i in y]
numerator = sum([sub_x[i]*sub_y[i] for i in range(len(sub_x))])
denominator = len(x)-1
cov = numerator/denominator
return cov
with open('iris_setosa.csv', 'r') as f:
...
cov_func = covariance(sep_length, sep_width)
print("Covariance from the custom function:", cov_func)
Сначала мы находим средние значения наших наборов данных. Затем мы используем понимание списка, чтобы перебрать каждый элемент в наших двух сериях данных и вычесть их значения из среднего. Цикл for можно было бы использовать хорошо, если это ваше предпочтение.
Затем мы используем эти промежуточные значения двух рядов и умножаем их друг на друга в другом понимании списка. Мы суммируем результат этого списка и сохраняем его как числитель . Знаменатель вычислить намного проще, обязательно уменьшите его на 1, когда будете находить ковариацию для выборочных данных!
Затем мы возвращаем значение , когда числитель делится на его знаменатель , что приводит к ковариации.
Запуск нашего скрипта дал бы нам этот результат:
Covariance from the custom function: 0.09921632653061219
Положительное значение означает, что обе переменные движутся в одном направлении.
Вычисление корреляции в Python
Наиболее широко используемой формулой для вычисления коэффициента корреляции является ” r ” Пирсона:
В приведенной выше формуле,
- x i , y i – это отдельные элементы рядов x и y
- Числитель соответствует ковариации
- Знаменатели соответствуют индивидуальным стандартным отклонениям x и y
Похоже, мы обсудили все, что нам нужно, чтобы получить корреляцию в этой серии статей !
Давайте теперь вычислим корреляцию:
def correlation(x, y):
# Finding the mean of the series x and y
mean_x = sum(x)/float(len(x))
mean_y = sum(y)/float(len(y))
# Subtracting mean from the individual elements
sub_x = [i-mean_x for i in x]
sub_y = [i-mean_y for i in y]
# covariance for x and y
numerator = sum([sub_x[i]*sub_y[i] for i in range(len(sub_x))])
# Standard Deviation of x and y
std_deviation_x = sum([sub_x[i]**2.0 for i in range(len(sub_x))])
std_deviation_y = sum([sub_y[i]**2.0 for i in range(len(sub_y))])
# squaring by 0.5 to find the square root
denominator = (std_deviation_x*std_deviation_y)**0.5 # short but equivalent to (std_deviation_x**0.5) * (std_deviation_y**0.5)
cor = numerator/denominator
return cor
with open('iris_setosa.csv', 'r') as f:
...
cor_func = correlation(sep_length, sep_width)
print("Correlation from the custom function:", cor_func)
Поскольку это значение нуждается в ковариации двух переменных, наша функция в значительной степени снова вычисляет это значение. Как только ковариация вычислена, мы затем вычисляем стандартное отклонение для каждой переменной. Отсюда корреляция-это просто деление ковариации на умножение квадратов стандартного отклонения.
Запустив этот код, мы получим следующий вывод, подтверждающий, что эти свойства имеют положительную (знак значения либо+, -, либо нет, если 0) и сильную (значение близко к 1) связь:
Correlation from the custom function: 0.7425466856651597
Вывод
В этой статье мы подробно изучили два статистических инструмента: ковариацию и корреляцию. Мы узнали, что их значения означают для наших данных, как они представлены в математике и как реализовать их в Python. Обе эти меры могут быть очень полезны при определении отношений между двумя переменными.