Корреляция - это процесс количественной оценки взаимосвязи между двумя наборами значений, и в этом посте я напишу код на Python для вычисления, возможно, самого известного типа корреляции - коэффициента корреляции Пирсона.

Обзор корреляции

Рассмотрим следующие три набора данных и их графики или, точнее, точечные диаграммы. Ось X представляет независимую переменную, а ось Y представляет зависимую переменную, т. Е. тот, который, по нашему мнению, может измениться в результате изменений независимой переменной.

Набор данных 1

В этом наборе данных все точки расположены на прямой линии - между ними явно существует связь.

Набор данных 2

Здесь данные немного более разбросаны, но все же существует четкая взаимосвязь с некоторыми незначительными колебаниями.

Набор данных 3

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

Количественная оценка отношений

Связи в двумерных данных, таких как приведенные выше примеры, могут быть точно определены количественно путем вычисления коэффициента корреляции Пирсона, обычно обозначаемого как ρ, греческая буква rho . Это дает нам число от -1 до 1, -1 - это идеальная отрицательная корреляция (т. Е. По мере увеличения независимой переменной зависимая переменная уменьшается, поэтому линия идет от верхнего левого угла к нижнему правому), а 1 - идеальная положительная корреляция ( т.е. обе переменные увеличиваются, и линия идет от нижнего левого угла до верхнего правого). Значения между ними представляют различные степени несовершенной корреляции, где 0 означает отсутствие корреляции.

По приблизительным оценкам, в наборе данных 1 мы ожидаем ρ равным 1, в наборе данных 2 мы ожидаем ρ будет около 0,9, а в наборе данных 3 ρ будет близко к 0.

Полная информация о коэффициенте корреляции Пирсона находится в Википедии. Вкратце формула:

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

Предостережение

В статистике есть известная фраза: «корреляция не предполагает причинной связи». Сильная корреляция между двумя переменными может быть случайной, даже если здравый смысл может заставить вас поверить, что эта связь может быть подлинной. Сильная корреляция должна использоваться только в качестве основы для дальнейших исследований, особенно в наш век обработки больших данных, когда кажущиеся несвязанными наборы данных можно сравнивать быстро и дешево.

Есть много примеров наборов данных, которые демонстрируют сильную, но явно случайную корреляцию. Многие из них легкомысленны или юмористичны, и хорошо известно, что это корреляция между появлением аистов и количеством детей, «родившихся» в одном из городов Германии. Теперь вы знаете, почему я выбрал это изображение для заголовка!

Кодирование

Этот проект состоит из этих файлов…

  • pearsoncorrelation.py
  • data.py
  • main.py

… Которые вы можете клонировать или скачать с Github.

Это первый файл.

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

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

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

Легкий способ запомнить, как рассчитать дисперсию, - это среднее квадратов минус квадрат среднего. Среднее квадратов достаточно просто, просто возведите все значения в квадрат и вычислите их среднее; а квадрат среднего не требует пояснений. После вычисления дисперсии не забудьте вычислить квадратный корень, чтобы получить стандартное отклонение.

Методы вычисления дисперсии и ковариации схожи: если вы решили запомнить мои фразы, не путайте их! Вот они снова:

ковариация: среднее значение произведений минус произведение средних

дисперсия: среднее квадратов минус квадрат среднего.

Вычислив все промежуточные значения, мы можем затем использовать их для реализации формулы сверху:

Следующие три частные функции вычисляют среднее арифметическое, среднее значение продуктов и стандартное отклонение. Они имеют широкое применение, помимо корреляции Пирсона, и в качестве альтернативы могут быть реализованы как часть статистической библиотеки общего назначения.

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

Теперь мы можем перейти к нашей main функции.

Сначала мы создаем пару списков, а затем перебираем три доступных набора данных, заполняя списки и вычисляя коэффициент корреляции. Наконец, данные и корреляция распечатываются.

Мы закончили писать код, поэтому можем запустить его с помощью следующей команды:

python3.8 main.py

Ранее я дал приблизительные оценки ρ для трех наборов данных как 1, 0,9 и 0. Как вы можете видеть, на самом деле они равны 1,0, 0,96 и 0,21 до 2dp. При желании вы можете изменить точность печати.

Корреляция в «реальном мире»

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

Если вам действительно нужно рассчитать корреляцию в Python, вы почти наверняка воспользуетесь функцией Numpy corrcoef, но я надеюсь, что, прочитав эту статью, вы получите более глубокое понимание того, как вычисляется корреляция, и ее значение .

Следующий шаг: регресс

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