Ковариация и корреляция в Python

Введение При работе с переменными при анализе данных всегда возникает вопрос: как переменные зависят, связаны и изменяются друг с другом? Меры ковариации и корреляции помогают в установлении этого. > Ковариация приводит к изменению переменных. Мы используем ковариацию, чтобы измерить, насколько две переменные меняются друг с другом. Корреляция показывает взаимосвязь между переменными. Мы используем корреляцию, чтобы определить, насколько сильно связаны две переменные друг с другом. В

Вступление

При работе с переменными при анализе данных всегда возникает вопрос: как переменные зависят, связаны и изменяются друг с другом? Меры ковариации и корреляции помогают в установлении этого.

Ковариация приводит к изменению переменных. Мы используем ковариацию, чтобы измерить, насколько две переменные меняются друг с другом. Корреляция показывает взаимосвязь между переменными. Мы используем корреляцию, чтобы определить, насколько сильно связаны две переменные друг с другом.

В этой статье мы узнаем, как рассчитать ковариацию и корреляцию в Python.

Ковариация и корреляция - простыми словами

И ковариация, и корреляция касаются взаимосвязи между переменными. Ковариация определяет направленную связь между переменными. Значения ковариации варьируются от -inf до + inf, где положительное значение означает, что обе переменные движутся в одном направлении, а отрицательное значение означает, что обе переменные движутся в противоположных направлениях.

Корреляция - это стандартизированная статистическая мера, которая выражает степень, в которой две переменные линейно связаны (то есть насколько они изменяются вместе с постоянной скоростью). Сила и направленность связи между двумя переменными определяются корреляцией, и она варьируется от -1 до +1. Подобно ковариации, положительное значение означает, что обе переменные движутся в одном направлении, тогда как отрицательное значение говорит нам, что они движутся в противоположных направлениях.

Как ковариация, так и корреляция являются жизненно важными инструментами, используемыми при исследовании данных для выбора признаков и многомерного анализа. Например, инвестор, стремящийся распределить риск портфеля, может искать акции с высокой ковариацией, поскольку это предполагает одновременное повышение их цен. Однако одного подобного движения недостаточно. Затем инвестор будет использовать метрику корреляции, чтобы определить, насколько сильно связаны цены этих акций друг с другом.

Настройка для кода Python - получение образцов данных

С основами, изученными в предыдущем разделе, давайте перейдем к вычислению ковариации в python. В этом примере мы будем работать с хорошо известным набором данных Iris . Мы работаем только с setosa чтобы быть конкретными, поэтому это будет всего лишь образец набора данных о некоторых прекрасных фиолетовых цветках !

Давайте посмотрим на набор данных, на котором мы будем проводить анализ:

Предварительный просмотр набора данныхIris{.ezlazyload}

Мы собираемся выбрать два столбца для нашего анализа - 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:]] 

В науке о данных всегда помогает визуализировать данные, над которыми вы работаете. Вот график регрессии Сиборна ( диаграмма рассеяния + аппроксимация линейной регрессии) этих свойств сетосы на разных осях:

Диаграмма рассеяния sepal_length иsepal_width{.ezlazyload}

Визуально кажется, что точки данных имеют высокую корреляцию рядом с линией регрессии. Посмотрим, соответствуют ли наши наблюдения их значениям ковариации и корреляции.

Вычисление ковариации в Python

Следующая формула вычисляет ковариацию:

Формула для расчетаковариации{.ezlazyload}

В приведенной выше формуле

  • 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 можно было бы использовать хорошо, если это ваше предпочтение.

Затем мы используем эти промежуточные значения двух рядов и умножаем их друг на друга в другом понимании списка. Мы суммируем результат этого списка и сохраняем его как numerator . denominator вычислить намного проще, не забудьте уменьшить его на 1, когда найдете ковариацию для выборочных данных!

Затем мы возвращаем значение, когда numerator делится на его denominator , что приводит к ковариации.

Запуск нашего скрипта даст нам такой результат:

 Covariance from the custom function: 0.09921632653061219 

Положительное значение означает, что обе переменные движутся в одном направлении.

Расчет корреляции в Python

Наиболее широко используемой формулой для вычисления коэффициента корреляции является «r» Пирсона:

Формула для расчетакорреляции{.ezlazyload}

В приведенной выше формуле

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

comments powered by Disqus

Содержание