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

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

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

Эта запись в блоге поможет вам начать свое путешествие по причинно-следственным выводам сегодня вечером.

Давайте начнем!

[Ссылки на блокнот и файл среды conda находятся ниже]

Причинный вывод 101

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

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

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

Смешение и Ко.

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

Распутывание

Чтобы получить объективную оценку причинно-следственной связи, нам нужно избавиться от смешения. В то же время мы должны быть осторожны, чтобы не ввести себя в заблуждение! Обычно это сводится к контролю правильного подмножества переменных в вашем анализе. Не слишком маленький, не слишком большой. Искусство и наука выбора правильных элементов управления — отдельная тема.

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

Заинтересованы в причинно-следственных связях и причинно-следственном машинном обучении в Python?

Подпишитесь на рассылку, чтобы получать эксклюзивный бесплатный контент о причинно-следственных связях и обновления моей книги о причинно-следственных связях: https://causalpython.io

Три всадника

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

  1. Скрытый критерий
  2. Первичный критерий
  3. Инструментальные переменные (IV)

Первые два метода могут быть получены из более общего набора правил идентификации, называемого do-исчисление, которое было сформулировано Judea Pearl и его коллегами (например, Pearl, 2009 ).

Последний (IV) представляет собой семейство методов, очень популярных в эконометрике. По словам Скотта Каннингема (Cunningham, 2021) инструментальная оценка переменных была впервые введена еще в 1928 году Филипом Райтом (Wright, 1928). Если вам интересно, какие ресурсы выбрать, чтобы узнать больше о IV и других критериях, проверьте этот пост.

Предположения

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

Причинно-следственная диаграмма

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

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

Как найти причинно-следственную диаграмму, если я ее не знаю?



Скрытый критерий

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

Первичный критерий

Входной критерий допускает скрытое смешивание между лечением и результатом, но требует, чтобы влияние лечения на результат было полностью опосредовано другой переменной, на которую не влияет скрытый смешивающий фактор. Это глоток! Не стесняйтесь взглянуть на Рисунок 1(B) ниже, чтобы получить визуальное представление.

Инструментальные переменные

Инструментальные переменные также допускают скрытое смешение между лечением и результатом, однако они требуют наличия другой переменной, связанной с лечением, но не связанной с результатом (ни напрямую, ни через общую причину; Эрнан и Роббинс, 2020 г.).

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

Сила DoWhy

DoWhy (Sharma & Kiciman, 2020) — это библиотека причинно-следственных связей, которая начиналась как проект Microsoft с открытым исходным кодом и недавно была перенесена в новый проект под названием py-why. Он разработан командой опытных исследователей и разработчиков и предлагает наиболее полный набор функций среди всех каузальных библиотек Python.

DoWhy имеет несколько разных API, включая основной объектно-ориентированный CausalModel API, высокоуровневый API Pandas и новый экспериментальный API GCM. Мы будем использовать первый в этом посте.

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

Ищете рекомендации по книгам о причинно-следственных связях для чтения?



Давайте получим данные

Ради этого поста мы создадим три простых синтетических набора данных. Почему синтетические данные? Чтобы вам было предельно ясно, что происходит.

На каждом этапе вы сможете вернуться к процессу генерации данных и сами увидеть, какова истинная структура набора данных.

Давай сделаем это!

Сначала мы импортируем numpy и pandas. DoWhy изначально работает с фреймами данных Pandas, что удобно, поскольку позволяет легко идентифицировать ваши переменные при построении модели и анализе результатов.

Далее мы генерируем три разных набора данных. Обратите внимание, что структурно эти наборы данных следуют своим аналогам на рисунке 1.важно отметить, что в случае наборов данных 2 и 3 (соответствующие им аналоги на рис. 1 — B и C) мы не включили переменную U во фреймы данных, хотя она использовалась в процессе генерации данных. Это сделано специально, поскольку мы имитируем сценарии, в которых U не наблюдается.

4 шага причинно-следственной связи

Основной API DoWhy предлагает отличный и интуитивно понятный способ сделать вывод о причинно-следственных связях.

Он состоит из четырех шагов:

  1. Смоделируйте проблему
  2. Найдите оценку
  3. Оцените эффект
  4. Опровергнуть модель

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

Причинность, вот и мы!

Давайте начнем с необходимого импорта, а затем перейдем к первому набору данных.

Набор данных 1 — Критерий бэкдора

Начнем с набора данных 1.

Шаг 1. Смоделируйте проблему

Шаг 1 состоит из двух подэтапов:

  • Создание графика в формате, который может прочитать DoWhy
  • Создание объекта CausalModel

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

Синтаксис GML довольно прост (по крайней мере, для простых графов). Если вы хотите узнать больше о GML, вы можете сделать это здесь.

Теперь давайте создадим экземпляр нашего объекта модели.

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

Давайте визуализируем модель, чтобы проверить, соответствует ли график тому, что мы ожидаем. Вы можете сделать это, используя model_1.view_model().

График выглядит хорошо! На Рисунке 2 у нас точно такой же набор узлов и ребер, что и на Рисунке 1A.

Шаг 2. Найдите оценку

Оценка – количество, которое мы хотим оценить, и оно не совпадает с оценкой. Вы можете думать о причинно-следственных оценках как о скорректированных формулах, которые содержат только те переменные, которые мы хотим контролировать, чтобы получить несмещенные причинно-следственные оценки. Оценка — это не стоимость и не метод оценки, это количество, которое нужно оценить.

Обратите внимание, что DoWhy нашел только одну оценку для набора данных 1 — черный ход. Это имеет смысл, потому что у нас нет скрытых искажений в данных, и эффект лечения не опосредован.

Давайте оценим причинно-следственный эффект и проверим, является ли он таким, каким мы его ожидаем.

Шаг 3. Оцените эффект

Мы вызвали метод .estimate_effect() для объекта модели и передали оценку из предыдущего шага в качестве аргумента вместе с именем метода оценки, который мы хотим использовать. DoWhy предлагает множество различных оценщиков. Для наших целей линейной регрессии достаточно.

Как результат? Оценка очень близка к реальной. Как видно из блока кода 1, истинный коэффициент для X равен 0,87, а модель вернула >~0,88¹.

Шаг 4. Опровержение

Тесты опровержения — это способ реализации логики фальсифицируемости Карла Поппера (Popper 1935; 1959) в процессе каузального вывода. Этот шаг выходит за рамки данной статьи. Если вы хотите быстро увидеть его в действии, вы загляните в эту блокнот, чтобы получить актуальный список тестов опровержения, доступных в DoWhy, проверьте эту страницу.

Набор данных 2 — Входной критерий

Давайте повторим весь процесс с набором данных 2.

Шаг 1. Смоделируйте проблему

Создание графиков GML вручную может быть сложной задачей. Давайте сделаем это проще. Мы определим список узлов и список ребер и позволим двум циклам for сделать всю работу за нас.

Красивый. Давайте создадим экземпляр модели.

Я рекомендую вам проверить, соответствует ли ваш график ожидаемому, используя model_2.view_model(). Вы можете увидеть его в действии в блокноте, сопровождающем эту статью (ссылка ниже).

Шаг 2. Найдите оценку

Теперь мы готовы найти оценку.

Единственная оценка, найденная DoWhy, - парадная. Это ожидаемо для графика, который мы предоставили. Проверим предполагаемый эффект.

Шаг 3. Оцените эффект

Процесс практически идентичен тому, что мы видели раньше. Обратите внимание, что мы изменили method_name на frontdoor.two_stage_regression.

Мы видим, что расчетный эффект составляет ~0,66. Каков ожидаемый истинный эффект? Мы можем вычислить его благодаря Сьюэллу Райту, сыну Филипа Райта (sic!), которого мы упоминали ранее в контексте инструментальных переменных. По словам Джуди Перл (Pearl, 2019), Сьюэлл Райт был первым, кто ввел анализ путей — метод оценки силы причинно-следственной связи в линейных системах (Wright, 1920). . Чтобы получить истинный причинный коэффициент, нам нужно перемножить все коэффициенты на пути между лечением и результатом.

В нашем случае причинное влияние выглядит следующим образом: X → Z → Y. Берем коэффициент при X в формуле для Z и коэффициент при Z в формуле для Y и перемножьте их вместе. Таким образом, истинный причинно-следственный эффект составляет 0,78 x 0,87 = 0,6786. DoWhy проделал довольно хорошую работу²!

Набор данных 3 – инструментальная переменная

Уже почти пора прощаться. Прежде чем мы это сделаем, давайте в последний раз пройдем весь четырехэтапный процесс и увидим технику инструментальной переменной в действии!

Шаг 1. Смоделируйте проблему

На этот раз мы также будем использовать циклы for для автоматизации создания определения графа GML.

Давайте создадим экземпляр объекта CausalModel.

Опять же, я рекомендую вам использовать model_3.view_model(). Иногда очень легко сделать ошибку в вашем графике, и последствия обычно будут пагубными для вашей оценки.

Шаг 2. Найдите оценку

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

Шаг 3. Оцените эффект

Расчетный эффект составляет ~0,90. Истинное значение равно 0,87. Это довольно близко!

Если вы хотите понять, как работают инструментальные переменные и какие факторы влияют на ошибку оценки, вы можете проверить Lousdal (2018), Cunningham (2021) или дайте мне знать в комментариях ниже, если вы хотите, чтобы я написал пост на эту тему.

Завершение!

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

Если вы любитель Python, интересующийся причинно-следственными связями, расширяйте свои знания, подписавшись на мою рассылку здесь: https://causalpython.io

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

Код и среда

блокнот и файл среды для этой статьи находятся здесь:



Сноски

¹ Обратите внимание, что мы не заморозили случайное начальное число, поэтому ваши числа могут немного отличаться.

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

Рекомендации

Каннингем, С. (2021). Причинный вывод: микстейп. Издательство Йельского университета.

Эрнан М.А., Робинс Дж. М. (2020). Причинно-следственный вывод: что, если. Бока-Ратон: Чепмен и Холл/CRC.

Лусдал, М.Л. (2018). Введение в инструментальные переменные предположения, проверку и оценку. Новые темы в эпидемиологии 15(1).

Жемчуг, Дж. (2009). Причинно-следственная связь. Издательство Кембриджского университета.

Жемчуг, Дж. (2019). Книга почему. Пенгиун.

Поппер, К. (1935). Logik der Forschung. Springer.

Поппер, К. (1959). Логика научных открытий. Основные книги.

Шарма, А., и Кициман, Э. (2020). DoWhy: сквозная библиотека для причинно-следственных связей. препринт arXiv. Архив: 2011.04216.

Райт, П. (1928). Тариф на животные и растительные масла. Макмиллиан.

Райт, С. (1920). Относительная важность наследственности и окружающей среды в определении пегого рисунка морских свинок. Proceedings of the National Academy of Sciences, 6, 320–333.

________________

❤️ Хотите получать больше подобного контента? Присоединяйтесь по этой ссылке:



Некоторые ссылки на книги в этом посте являются партнерскими ссылками Amazon, покупая по этим ссылкам, вы поддерживаете авторов (или их семьи) и мое письмо (я буду получать небольшую плату с каждой вашей покупки). Спасибо!