Автор оригинала: 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. Обе эти меры могут быть очень полезны при определении отношений между двумя переменными.