Практика
June 7, 2022

Корреляция. Часть 2

В прошлый раз мы говорили про смысл корреляции [1], теперь самое время попрактиковаться в расчётах. Мы поупражняемся с двумя коэффициентами: линейной корреляцией Пирсона [2] и кси-коэффициентом [3]. Работать будем с теми же данными.

Наша практика будет в Excel и R, а также бонусом к посту идёт дашборд Shiny. Надо сказать, что я сделал немало дашбордов в PowerBI и Tableau, даже успел немножко поработать с MicroStrategy BI, но вот, что удивительно, в Shiny это мой первый дашборд.

Excel

Почему я даю практику в Excel? Excel остаётся наиболее распространённым инструментом для работы с данными, существует множество материалов/курсов, в том числе, на русском языке. А такие надстройки как Power Query и Power Pivot дали Excel вторую жизнь в начале 2010-х годов. Моя основная мотивация в том, что многие уже знакомы с этим инструментом и дополнительно осваивать ничего не требуется. Но я призываю всех, кто хочет заниматься аналитикой всерьез, не останавливаться на этом, Excel – это только первый шаг, с которого я и сам когда-то начинал.

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

1. Запускаем Excel, на вкладке «Файл» переходим в «Параметры»

2. В открывшемся окне «Параметры» переходим на вкладку «Надстройки», выбираем «Надстройки Excel» в выпадающем списке «Управление» и нажимаем кнопку «Перейти»

3. Далее ставим галку напротив «Пакет анализа», жмём «Ок».

4. Надстройка подключена и появилась на вкладке «Данные»

После подготовительных мероприятий переходим к самой корреляции. Я напомню, что мы смотрим на данные Николас Кейдж и количество утонувших [4], несмотря на практическую бессмысленность этой корреляции, что мы обсуждали в первом посте, давайте просто научимся технике на этом примере.

1. Запускаем надстройку «Анализ данных» и выбираем «Корреляция»

2. В открывшемся окне нам нужно указать входной интервал – то есть две наших колонки между которыми мы их хотим найти корреляцию. Ставим галку «Метки в первой строке», для того чтобы названия наших колонок были доступны в итоговом отчёте, и мы понимали между чем и чем мы нашли корреляцию

3. Нажимаем «Ок» и получаем на новом листе результат. Вот так просто мы нашли корреляцию в пару кликов

Но, к сожалению, мы ничего не знаем о статистической значимости этой корреляции, а также, вы помните, что мы ещё хотим использовать кси-коэффициент для нелинейной связи зарплат клиентов супермаркета – всего этого в Excel нет и наш путь лежит в R.

R

R – это язык программирования для статистической обработки данных и работы с графикой [5]. В этот момент у многих может возникнуть состояние ужаса – язык программирования! Ты шутишь?! Но бояться ничего не надо, все можно освоить, никто не рождается со знанием языков программирования и для этого не нужно быть IT-специалистом или профессиональным программистом. Я вот психолог, по своему основному образованию и много HR-аналитиков, практиков, в России и в мире вышли из психологии/социологии. У этого есть логичное объяснение, но поговорим про это как-нибудь в другой раз.

Как поставить R на свой компьютер можно посмотреть здесь, в целом, рекомендую эту специализацию на Coursera.org для тех, кто хочет освоить аналитический фреймворк и инструменты [6].

#Загружаем данные в таблицу data
data <- read.csv('Nicolas Cage.csv', header=T, sep=';')

#Используем функция cor() для того, чтобы найти линейную корреляцию Пирсона

cor(data$Кол.во.утонувших.в.бассейнах, 
data$Кол.во.фильмов.с.Николасом.Кейджем)

#Результат
[1] 0.6660043

Вот так просто, в две строки кода, мы получили аналогичный результат, что и в Excel. Но нам этого недостаточно, в R у нас есть возможность проверить статистическую значимость этой корреляции

#Используем функцию cor.test() чтобы получить более детальную информацию
cor.test(data$Кол.во.утонувших.в.бассейснах, 
data$Кол.во.фильмов.с.Николасом.Кейджем)

# Результат
Pearson's product-moment correlation
data: data$Кол.во.утонувших.в.бассейнах and 
data$Кол.во.фильмов.с.Николасом.Кейджем

t = 2.6785, df = 9, p-value = 0.02527
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1101273 0.9045101
sample estimates:

cor 
0.6660043

Мы получили отчёт, который, среди прочего, содержит p-значение = 0.02527, что позволяет нам отклонить нулевую гипотезу, о том, что корреляции между количеством фильмом с Николасом Кейджем и количеством утонувших людей в бассейнах нет, а её сила равна ~0.67. Но незабываем, что это не имеет никакого смысла

Теперь давайте перейдём к данным [7], где мы хотим проверить нелинейную связь, напомню, что наш график выглядит вот так

Мы на графике видим, что связь, конечно, есть, но она, очевидно, нелинейная – вначале зарплата растёт до определенного возраста, а потом падает, начнём всё также с коэффициента линейной корреляции Пирсона.

#Загружаем данные в таблицу data
data <- read.csv('Mall_Customers.csv', header=T, sep=',')

#Используем функцию cor.test()
cor.test(data$Доход, data$Возраст)

#Результат
Pearson's product-moment correlation
data: data$Доход and data$Возраст
t = -0.17447, df = 198, p-value = 0.8617
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1508795 0.1265607
sample estimates:

cor 
-0.01239804

И что мы с вами видим? А мы видим, что наша корреляция почти равна нулю (-0.01239804) и она статистически незначима (p-значение = 0.8617). Но наш график говорит об обратном! Это яркий пример того, что анализ данных всегда начинается (и заканчивается) визуализацией, если бы с вами просто использовали корреляцию, не посмотрев прежде на данные, то мы бы сделали неверный вывод!

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

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

#Подключаем библиотеку с кси-коэффициентом, 
в первый раз её нужно поставить через install.packages()

library(XICOR)

#Запускаем функцию xicor()
xicor(data$Доход, data$Возраст, pvalue = T)

#Результат
$xi
[1] 0.2185063
$sd
[1] 0.02584029
$pval
[1] 0

Наш коэффициент показывает силу связи на уровне ~0.22, а p-значение меньше порога в 0.01. В реальном примере мы конечно бы строили какую-то модель, к примеру, полиномиальной регрессии, но это в будущем. Пока мы просто с вами статистически подтвердили функциональную связь между переменными.

Бонус – простенький даш в Shiny, в котором вы можете варьировать возраст и доход и смотреть как будут меняться коэффициенты корреляции.

Ссылки:

  1. https://telegra.ph/Korrelyaciya-CHast-1-02-06
  2. https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D1%8F
  3. https://win-vector.com/2021/12/29/exploring-the-xi-correlation-coefficient/?fbclid=IwAR0UWXaTugV2UipGD08RZEio9koK3gjwE8ABbhFYDcHH0WFDvasGdrOZji4
  4. https://www.tylervigen.com/view_correlation?id=359
  5. https://ru.wikipedia.org/wiki/R_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
  6. https://ru.coursera.org/lecture/znakomstvo-r-bazovaya-statistika/ustanovka-i-nastroika-r-i-rstudio-mfcyD
  7. https://www.kaggle.com/shwetabh123/mall-customers