Причинно-следственное открытие: вызывает ли кукареканье петушка восход солнца?

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

Фото Егор Мызник on Unsplash

Целью моего недавнего исследования было причинный вывод Это обусловлено растущими запросами, которые я получаю от клиентов, выйти за рамки прогнозов машинного обучения и перейти к ответу на вопрос «а что, если?» введите вопросы, чтобы добиться воздействия и результатов.

Одна из вещей, которая меня изначально заинтриговала, была: «Как строятся причинно-следственные диаграммы?». Во многих онлайн-примерах они, кажется, оживают полностью сформированными, без объяснения того, как были идентифицированы узлы и связи.

Это побудило меня прочитать «Книгу «Почему»» Джуди Перл и Даны Маккензи (несколько раз!), и одна из высказанных мнений заключалась в том, что невозможно перепроектировать причинную диаграмму, также известную как направленный ациклический граф (DAG), на основе данных. один.

Данные могут выявить корреляцию, но не причинно-следственную связь, так как же можно «обнаружить» причинно-следственную связь?

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

Прежде чем мы углубимся в причинно-следственные связи, пожалуйста, подумайте…

Присоединение к Medium по моей реферальной ссылке (Я получу часть комиссии, если вы зарегистрируетесь по этой ссылке).

Подписка на бесплатную электронную рассылку всякий раз, когда я публикую новую историю..

Беглый взгляд на мои предыдущие статьи.

Загрузка моей бесплатной системы принятия стратегических решений на основе данных.

Посещение моего веб-сайта по науке о данных — Блог данных.

Рассмотрим подсчеты значений из следующего набора двоичных данных…

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

Изображение по автору

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

Количество случаев, когда петушок кукарекает, когда солнце не восходит, или когда солнце восходит, но петушок молчит, практически одинаково (50,000 47,500 против XNUMX XNUMX), поэтому причинно-следственный ответ невозможно найти путем сравнения относительных объемов данных.

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

Ответ — обратиться к экспертам в предметной области. Если бы мы могли собрать команду из астролога, физика и птицевода, они бы пришли к выводу, что солнце заставляет петушка кукарекать, а не наоборот!

Фото Федерико Респини on Unsplash

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

Существует алгоритм под названием «NOTEARS», который утверждает, что способен реализовать причинно-следственную связь, поэтому давайте попробуем и посмотрим, на что он способен…

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

Изображение по автору

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

[('Реакция?', 'Вакцинация?'),
(«Оспа?», «Реакция?»),
(«Смерть?», «Реакция?»),
(«Смерть?», «Оспа?»)]

Если бы мы визуализировали результаты, полученные с помощью NOTARS, это выглядело бы так…

Изображение по автору

Выглядит не очень хорошо, не так ли? Согласно NOTEARS, смерть вызывает оспу. Временной аспект говорит нам, что на первом месте стоит оспа, поэтому она не может быть вызвана смертью. Оспа также не может вызвать реакцию (вакцина вызывает реакцию), и реакция, конечно, не может вызвать вакцинацию.

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

Изображение по автору

Итак, мы установили, что даже в очень простой причинно-следственной модели алгоритм обнаружения причинно-следственных связей NOTEARS не дает правильных результатов. Кроме того, читатель одной из моих предыдущих статей отметил, что NOTEARS не работает в Python 3.9, и поскольку я собираюсь обновить его, это еще одна большая проблема.

Если вы хотите узнать больше о непригодности НОТААРОВ для причинности, вот отличная научная статья — https://arxiv.org/pdf/2104.05441.pdf (Маркус Кайзер и Максим Сипос).

Прежде чем отказаться от полностью автоматизированного обнаружения причинно-следственных связей, давайте взглянем на альтернативу NOTEARS — алгоритм «Лассо» —

Примечание. Набор данных о доходах / доходах выпускников лицензирован для публичного использования. Полный источник и справочную информацию см. в разделе «Ссылки» в конце статьи.

Изображение по автору
Изображение по автору

О боже, Лассо — это катастрофа! Он предсказал, что все является причиной всего остального и что узлы также являются причиной самих себя!

Мои последние попытки заключались в том, чтобы попробовать алгоритмы GES, GIES и LINGAM, но для всех них требуются библиотеки R. Я не использую R, и даже если бы мне удалось правильно настроить конфигурацию, я бы никогда не смог создать переносимый код, который могли бы использовать другие специалисты по данным.

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

Этот вывод привел меня к разработке собственного подхода…

Фото Аманда Джонс on Unsplash

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

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

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

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

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

Следующим моим шагом была разработка рекурсивного алгоритма, который можно визуализировать следующим образом…

Изображение по автору

Дубликаты и двунаправленные ссылки должны быть принудительно исключены. Я также хотел иметь возможность явно включать или исключать соединения (ребра) и явно исключать элементы (узлы).

Это 10 строк рекурсивного кода Python, которые я придумал для реализации причинно-следственной связи.

Чтобы показать, как работает решение, я выбрал некоторые данные об отмене бронирования отелей.

Давайте начнем с чтения данных и рассмотрения корреляций…

Примечание. Набор данных о бронировании отелей лицензирован для публичного использования. Полный источник и справочную информацию см. в разделе «Ссылки» в конце статьи.

Изображение по автору

Первый запуск алгоритма обнаружения предполагает сокращение количества итераций до 1, поэтому мы просто смотрим на корреляции (которые должны быть причинно-следственными) с «эффектом», то есть будет ли отменено бронирование отеля или нет…

Изображение по автору

Хорошо, это неплохое начало, давайте увеличим количество итераций/рекурсий/слоев до 3, немного подправим порог корреляции и посмотрим, что получим…

Изображение по автору

Хорошо, это тоже не так уж и плохо, но он немного «занят», поэтому следующим шагом будет исключение некоторых узлов, которые, как мы подозреваем, могут вызывать некоторый шум (примечание: в реальном бизнес-кейсе мы бы разговаривали с наши эксперты в данной области на данном этапе).

Изображение по автору

Это начинает выглядеть лучше. Помните, что мой алгоритм уверен, что ссылки на «IsCancelled» являются причинно-следственными, поскольку это «следствие», поэтому после него ничего не происходит.

Однако остальные слои дерева просто коррелятивны: направление стрелок было добавлено просто в зависимости от порядка, в котором алгоритм их нашел.

Работая с экспертами в предметной области (или, в данном случае, со своим собственным опытом бронирования отелей!), я заметил следующее:

  • Ссылка от «DifferentRoomAssigned» к «LeadTime» находится в неправильном направлении, поскольку длительное время выполнения бронирования увеличивает вероятность того, что бронирование номера изменится, а не наоборот.
  • Корреляция между «BookingChanges» и «DifferentRoomAssigned» ниже порогового значения, но может иметь значительную причинно-следственную связь, поэтому ее необходимо включить.

Следующая попытка дает указание алгоритму внести эти исправления:

Изображение по автору

«Ненаблюдаемый искажающий фактор» — это фактор, который, по нашему мнению, влияет на нашу причинно-следственную модель, обеспечивая связь между некоторыми узлами, но который не был измерен и, следовательно, не включен в диаграмму.

Мой опыт посещения отелей и знание набора данных об отелях заставили меня заподозрить, что на данные об отелях влияет «ненаблюдаемый фактор».

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

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

Более того, я выдвинул гипотезу, что эти две группы имеют разное поведение и что это является «ненаблюдаемым искажающим фактором» (ненаблюдаемым, поскольку данные не отражают «причину пребывания»).

NOTEARS и другие подобные алгоритмы не могут учитывать «ненаблюдаемые искажающие факторы», но алгоритм, который я разработал, может учитывать их, включив их явно следующим образом…

Изображение по автору

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

  • Существует «ненаблюдаемый фактор», который является основной причиной пребывания (отпуск или деловая поездка/выезд в город).
  • «Страна» оказывает причинно-следственное влияние на ненаблюдаемый фактор — те, кто путешествует из некоторых стран, с большей вероятностью будут в отпуске.
  • То же самое относится и к «TotalGuests». Большие компании чаще отправляются в отпуск, одиночки – в командировки, а вдвоем – на отдых в город.
  • Ненаблюдаемая «причина пребывания» оказывает причинное влияние на «LeadTime», «HotelType» и «DepositType».
  • «Время выполнения», «DifferentRoomAssigned», «HotelType», «DepositType» и «Причина пребывания» (U) оказывают причинное влияние на «IsCanceled».

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

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

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

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

Если вам понравилась эта статья, пожалуйста, задумайтесь…

Присоединение к Medium по моей реферальной ссылке (Я получу часть комиссии, если вы зарегистрируетесь по этой ссылке).

Подписка на бесплатную электронную рассылку всякий раз, когда я публикую новую историю..

Беглый взгляд на мои предыдущие статьи.

Загрузка моей бесплатной системы принятия стратегических решений на основе данных.

Посещение моего веб-сайта по науке о данных — Блог данных.

Данные о восходе солнца и крике петушка

Данные по оспе

Данные о доходах выпускников / переписи населения

Данные о бронировании отелей

Причинно-следственное открытие: вызывает ли кукареканье петушка восход солнца? Опубликовано из источника https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 через https://towardsdatascience. ком/канал

<!–

->

Отметка времени:

Больше от Блокчейн-консультанты