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

Прежде чем мы погрузимся в DiCE, давайте создадим интуитивное понимание того, что такое контрфактуалы.

Counterfactuals — один из наиболее широко используемых инструментов в мире объяснимого ИИ или XAI.

Контрфактическое объяснение описывает причинно-следственную ситуацию в форме: Если бы X не произошло, Y не произошло бы. Например: Если бы я не сделал глоток этого горячего кофе, я бы не обжег себе язык. Событие Y состоит в том, что я обжег себе язык; причина Х в том, что я выпил горячий кофе - Сюзанна Дандл и Кристоф Молнар

Давайте разберем это в контексте машинного обучения.

Предположим, вы хорошо разбираетесь в данных, инвестируете в недвижимость и заинтересованы в поиске таких характеристик квартир в регионе, которые могут максимизировать доход от аренды. Для этого вы построили модель, которая с учетом набора атрибутов (признаков) квартиры сможет прогнозировать ежемесячный доход от аренды с достаточно высокой точностью. В этой гипотетической ситуации предположим, что вы нашли недвижимость, в которой есть 3 спальни, кабинет и балкон на восточной стороне без кондиционера. Когда вы включили эти функции в свою модель, ваш ежемесячный доход составил 1500 долларов, что не идеально, поскольку вы ожидали не менее 2000 долларов. Именно здесь вступают в игру контрфакты, используя контрфактическое объяснение, вы можете создать новый набор экземпляров, которые начнут изменять функции с целью получения ежемесячной арендной платы в размере 2000 долларов. Допустим, ваше контрфактическое объяснение говорит вам, что квартира с 3 спальнями, кабинетом и балконом на северной стороне с кондиционером принесет доход от аренды в размере 2000 долларов. Подобные действенные идеи полезны, потому что теперь вы, как инвестор, можете искать недвижимость, которая соответствует этим критериям. Использование контрфактуалов не ограничивается только этим вариантом использования и широко применимо в ряде секторов.

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

Недостатком контрфактуалов является то, что они страдают от эффекта Расёмона. Другими словами, у нас может быть несколько контрфактических объяснений. Например, в приведенном выше случае у нас может быть случай, когда 5 спален, без кабинета, без балкона с кондиционером также приносят доход от аренды в размере 2000 долларов. Но есть несколько практических инструментов, которые вы можете использовать для решения этой проблемы, о которых я упоминаю в конце этой статьи.

Основываясь на этом высоком уровне понимания контрфактуалов, мы можем теперь перейти к его реализации. Однако, если вас интересует математика, стоящая за этим, вы можете найти ее краткое изложение здесь [1] и более подробное объяснение в этих статьях [2,3].

Разнообразные контрфактические объяснения (DiCE)

DiCE — это библиотека Python, реализованная Mothilal et al [4], которую можно использовать для создания контрфактических объяснений.

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

О наборе данных

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

  • Pclass (категориальная переменная) - класс билета, который принимает значение 1, 2 или 3
  • Пол (категориальная переменная) - мужчина или женщина
  • Возраст (числовая переменная) - непрерывная переменная
  • SibSp (категориальная переменная) — количество братьев и сестер или супругов на борту
  • Parch (категориальная переменная) - количество родителей или детей на борту
  • Стоимость проезда (числовая переменная) - непрерывная переменная
  • Выжил (категориальная переменная) - не выжил или выжил, принимает значение 0 или 1

Построение модели

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

Контрфактические расчеты

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

Как только мы инициализируем наш экземпляр DiCE, мы можем запускать запросы для генерации контрфактических данных. Давайте посмотрим на наш первый набор контрфактуалов. Здесь мы запрашиваем 5 контрфактических объяснений для первой записи в нашем тестовом наборе данных, и мы заинтересованы в понимании изменений в значениях признаков, которые приводят к классификации выбранного экземпляра, как если бы он принадлежал к противоположному классу. Наши контрфакты будут отображать только изменяемые объекты, поскольку мы оставили для параметра show_only_changes значение True.

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

Что, если мы заинтересованы только в том, чтобы увидеть эффект возмущения только одной функции, скажем, «Возраст». Мы можем реализовать это так.

Мы начинаем замечать тенденцию с Возрастом здесь. Может быть, уровень выживаемости среди пожилых людей низкий? Это не является окончательным, поскольку мы рассматриваем здесь только одну точку данных. Но Вы получаете идею.

В наших первых контрфактических объяснениях мы видим, что «Fare» встречается повсюду. Что, если мы хотим ограничить «Тариф», то есть что, если мы хотим изменить «Тариф» только в диапазоне от 10 до 50. У DiCE есть инструмент для этого.

Как видите, теперь у нас нет значений «Fare» выше 50. Здесь это может быть неочевидно, но это может быть очень удобно. Предположим, вы обрабатываете набор данных прогнозирования цен на жилье с количеством спален в качестве одной из функций. В этом случае вы не хотите генерировать контрфактические объяснения, которые нереалистичны для такого дома с более чем 100 спальнями. Этот пример является крайним случаем, но суть в том, что вы, как эксперт в предметной области, можете использовать эту функцию, чтобы ограничить контрфактические объяснения и получить реалистичные решения.

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

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

  1. Молнар, К. Интерпретируемое машинное обучение. Доступно по адресу: https://christophm.github.io/interpretable-ml-book/counterfactual.html.
  2. Вахтер, С., Миттельштадт, Б. и Рассел, К. Контрфактические объяснения без открытия черного ящика: автоматизированные решения и GDPR. Харв. JL и тех. 31, 841 (2017).
  3. Дандл, С., Молнар, К., Биндер, М. и Бишль, Б. на Международной конференции по параллельному решению проблем с помощью природы. 448–469 (Спрингер).
  4. Мотилал Р.К., Шарма А. и Тан К. в материалах конференции 2020 г. по вопросам справедливости, подотчетности и прозрачности. 607–617.