Рубрики
Без рубрики

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

Ковариация и корреляция-это метрики, которые говорят нам, как переменные связаны друг с другом. В этой статье мы узнаем, как реализовать их в Python.

Автор оригинала: Sathiya Sarathi Gunasekaran.

Вступление

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

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

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

Ковариация и корреляция – В Простых Терминах

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

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

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

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

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

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

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

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

Точечная диаграмма sepal_length и sepal_width

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

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