Первоначально опубликовано на https://iyarlin.github.io 21 января 2020 г.

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

Чтобы найти правильный набор настроек, нам нужен DAG, который представляет отношения между всеми функциями, относящимися к нашей проблеме.

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

В моем последнем сообщении в блоге мы зашли в тупик, когда оказалось, что ни один из рассмотренных алгоритмов не смог достаточно точно изучить DAG.

Хотя алгоритмы, рассмотренные в моем последнем посте, смогли сойтись на правильном скелете DAG (найти наличие ребра без его ориентации), все они не смогли правильно ориентировать ребра. Это означает, что для данной пары переменных X, Y алгоритмы могли сказать, связаны ли они причинно-следственной связью, но не могли определить, является ли X причиной Y или наоборот.

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

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

Когда и X, и Y дискретны, мы можем использовать меру корреляции расстояния (см. Liu and Chan, 2016).

Когда либо X, либо Y дискретны, а другой непрерывен, мы можем дискретизировать непрерывную переменную (используя, например, процедуру infotheo::discretize) и использовать метод для двух дискретных переменных, упомянутый выше.

Пакет orientDAG использует описанный выше подход для ориентации краев скелета DAG. Чтобы продемонстрировать, как это работает, давайте вернемся к примеру, показанному в моем последнем посте.

Мы использовали пакет simMixedDAG для моделирования наборов данных из DAG ниже:

Следуя результатам сравнительного анализа в моем последнем посте, мы ограничим наше внимание функцией bnlearn::tabu для изучения скелета DAG.

Основная функция в orientDAG называется orient_dag. Он принимает в качестве входных данных матрицу смежности, где 1 в позиции i,j обозначает стрелку от узла i к узлу j.

Ниже мы можем увидеть матрицу смежности, соответствующую DAG выше:

## age ageGroup educ educGroup gender nativeBorn vocab year 
## age 0 0 0 1 0 1 0 0 
## ageGroup 0 0 0 0 0 0 0 0 
## educ 1 0 0 0 1 0 0 1 
## educGroup 0 0 0 0 0 0 0 0 
## gender 0 0 0 0 0 0 0 0 
## nativeBorn 0 1 0 0 0 0 1 0 
## vocab 0 0 0 0 1 0 0 1 
## year 0 0 0 0 0 0 0 0

Пакет также содержит служебные функции, облегчающие преобразование DAG между различными представлениями. Таким образом, мы можем взять подогнанный объект DAG bn из функции tabu и преобразовать его в матрицу смежности с помощью функции bn_to_adjmatrix. DAG ниже показывает все преобразования, доступные в пакете:

Как и прежде, мы будем измерять точность обучения DAG с помощью Structural Intervention Distance. Для каждого размера выборки \(n\) я имитирую 100 наборов данных и измеряю SID. Ниже я сравниваю распределение SID для 3-х алгоритмов:

  1. tabu: DAG, полученные с помощью функции tabu из пакета bnlearn.
  2. tabu + orientDAG: DAG, полученные путем дальнейшей ориентации DAG из tabu с помощью пакета orientDAG.
  3. случайный: DAG, полученные случайным образом переориентировавшие DAG, полученные с помощью функции табу.

Мы видим, что производительность tabu ухудшается по мере увеличения размера выборки, в то время как tabu + orientDAG улучшается.

Из SID мы можем получить более интуитивную меру: вероятность найти правильный корректирующий набор для случайно выбранной пары переменных лечение-воздействие:

\[P(\text{правильный набор adj)} = 1 - \frac{SID}{\#\{\text{возможное лечение - пары экспозиции}\}}\]

Ниже мы можем увидеть соответствующий график:

Для \(n = 80 000\) пакет orientDAG почти удваивает производительность по сравнению с tabu.

В приведенном выше примере базовый процесс генерации данных (DGP) не соответствовал предположениям байесовской сети (BN), что может объяснить ухудшение производительности функции tabu.

Давайте посмотрим, как работают различные алгоритмы, когда базовый DGP действительно соответствует предположениям BN.

Ниже я нарисовал DAG «mehra», взятый из пакета bnlearn:

Вышеуказанный DAG содержит 24 узла, из которых 8 являются категориальными. Узлы соединены 71 стрелкой.

Ниже мы можем увидеть SID для различных алгоритмов (на этот раз выполняется только 10 симуляций на размер выборки из-за размера сети):

Теперь мы можем видеть, что, когда допущения BN верны, функция tabu работает лучше всего, как и ожидалось, в то время как tabu + orientDAG работает так же плохо, как случайное предположение, или даже хуже. Возможно, производительность tabu + orientDAG хуже, потому что в ней используются тесты, не связанные с предположениями BN, что вносит шум в края, которые уже правильно ориентированы с помощью tabu.

Мы можем смягчить такое ухудшение производительности, введя параметры регуляризации, которые заставят orient_dag переориентировать ребро только в тех случаях, когда есть убедительные доказательства данной ориентации. А именно, разница между корреляцией расстояния/обобщенной корреляцией должна превышать некоторый порог. Мы назовем этот подход табу + ориентДАГ — консервативный.

Ниже мы можем увидеть итоговые показатели производительности:

Хотя tabu + orientDAG по-прежнему работает хуже, чем tabu, он по-прежнему способен хотя бы немного превзойти случайное предположение.

Казалось бы, автоматическое обучение DAG сильно зависит от знания основных предположений DGP, а также требует очень больших размеров выборки, что делает автоматическое обучение DAG ненадежным (по крайней мере, для примеров, рассмотренных в этом посте).

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