Учебное пособие по концепции LIME и тому, как начать с ней работать.

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

Пример проблемы справедливости машинного обучения

Я хотел бы начать этот блог с упоминания проекта, в котором я участвовал, когда учился на бакалавриате в Калифорнийском университете в Сан-Диего с профессором Берком Устуном.

В своей статье Actionable Recourse in Linear Classification в 2018 году он упомянул проблему справедливости машинного обучения в контексте Recourse. Регресс определяется как способность человека получить желаемый результат с помощью фиксированной модели. Например, в случае с моделью одобрения ссуды, если модель обеспечивает обращение к кому-то, кому отказано в ссуде, то этот человек может изменить свои входные переменные таким образом, чтобы гарантировать одобрение. В документе утверждается, что модель должна обеспечивать обращение к субъектам принятия решений в таких приложениях, как кредитование, найм, страхование или распределение общественных услуг. Отсутствие автономии воспринимается как источник несправедливости при принятии алгоритмических решений, и следует рассматривать обращение за помощью всякий раз, когда люди зависят от прогнозов модели машинного обучения. Авторы представляют инструменты для оценки обращения к линейным моделям классификации, таким как модели логистической регрессии, линейные SVM и линеаризуемые модели на основе правил, и демонстрируют, как их инструменты могут информировать заинтересованные стороны посредством экспериментов по задачам кредитного скоринга.

Автор, профессор Утун, сообщил мне, что помимо предложения нового метода для объяснения моделей на основе логистической регрессии существуют существующие библиотеки, которые мы можем использовать для задач машинного обучения, такие как SHAP и LIME. В этом посте я кратко расскажу о LIME и о том, как начать работу с такими задачами, как рекомендации фильмов.

Введение в ИЗВЕСТЬ

Концепция

Local Interpretable Model-Agnostic Explanations (LIME) — это библиотека, предназначенная для предоставления объяснений отдельных прогнозов, сделанных моделями черного ящика. LIME основан на статье 2016 года Почему я должен вам доверять?: объяснение предсказаний любого классификатора». Если вам интересна оригинальная статья, вы можете посмотреть соответствующее видео ниже, предложенное авторами пакета LIME.

Создатели LIME стремятся включить дополнительные программные компоненты, которые позволяют людям понимать и более эффективно использовать машинное обучение. LIME может прояснить любую непрозрачную модель классификации, которая имеет две или более категории. Единственным предварительным условием является наличие в модели функции, которая принимает необработанный текст или массив NumPy и возвращает оценку вероятности для каждой категории. Для классификаторов Scikit-learn предоставляется встроенная помощь.

Сценарий использования LIME

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

Фоновый контекст

Для тех, кто не знает о системе рекомендаций, вот некоторый контекст, предоставленный в классе «Введение в машинное обучение» Университета Карнеги-Меллона. Системы рекомендаций – это тип программного обеспечения, которое предлагает товары или товары пользователям на основе их предпочтений или поведения. Существует два основных типа рекомендательных систем: контентная фильтрация и совместная фильтрация.

  1. Системы фильтрации контента, такие как проект Music Genome от Pandora.com, рекомендуют элементы на основе свойств или атрибутов самих элементов. Например, в случае музыкальных рекомендаций система будет смотреть на жанр, темп и другие характеристики песни, чтобы предложить похожую музыку. Преимущество фильтрации содержимого заключается в том, что она может хорошо работать с новыми элементами, если известны их атрибуты. Однако недостатком является то, что он требует доступа к дополнительной информации об элементах.
  2. Системы совместной фильтрации, такие как рекомендации фильмов Netflix, рекомендуют элементы на основе поведения других пользователей со схожими предпочтениями. Например, если пользователь с такими же привычками просмотра, как и вы, посмотрел определенный фильм и поставил ему высокую оценку, система порекомендует его вам. Совместная фильтрация не требует доступа к дополнительной информации об элементах, но она плохо работает для новых элементов, которые еще не оценены.

Людям, изучающим ИИ-инженерию или машинное обучение в производстве, или людям, которые обычно хотят лучше познакомиться с созданием рекомендательных систем, им, возможно, придется выполнить побочный проект по рекомендации фильмов, например: Проект рекомендации фильмов CMU 11695. Проект включает в себя внедрение, оценку, эксплуатацию, мониторинг и развитие службы рекомендаций для сценария службы потоковой передачи фильмов. Данные включают в себя поток событий журналов сервера, включая информацию о том, какой пользователь смотрел какое видео и рейтинги этих фильмов, а также API для запроса информации о пользователях и фильмах. Задача состоит в том, чтобы определить соответствующие данные и спланировать сбор и очистку данных.

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

Пример набора данных

Давайте рассмотрим извлечение признаков и LIME на реальном наборе данных фильмов.



Во-первых, давайте загрузим набор данных из Kaggle. Согласно описанию этого набора данных на Kaggle, «это набор данных для 10 000 популярных фильмов, основанный на рейтингах TMDB». Атрибуты охватывают широкий спектр информации, такой как название, дата выпуска, жанр, время выполнения, доход и популярность продукции. Кроме того, есть некоторые числовые значения, такие как среднее количество голосов и количество голосов. Оригинальный язык постановки и обзор сюжета также входят в список атрибутов. Эти функции можно использовать для различных анализов, таких как создание системы рекомендаций или прогнозирование дохода от фильма. Кроме того, год выпуска и количество жанров могут быть полезны для понимания тенденций и закономерностей с течением времени и в разных жанрах.

Во-первых, предположим, что мы используем Python3. (и если вы не знакомы с Python или одной из сред, в которых работает Python3, посмотрите python или anaconda).

Пакет лайма находится на PyPI. Просто запустите:

pip install lime

Или клонируйте лаймовый репозиторий и запустите:

pip install .

Подготовка данных

В первой ячейке нового блокнота Jupyter импортируйте пакеты и загрузите набор данных, выполнив следующий код:

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import lime
import lime.lime_tabular
import warnings
warnings.filterwarnings('ignore')

df = pd.read_csv("Top_10000_Movies.csv", engine='python')

Проверьте набор данных:

df.head()

df.info()

# drop NA values
df = df.dropna()

# convert release date into Year integer
df["release_year"] = pd.to_datetime(df["release_date"], format="%Y-%m-%d").dt.year

# create new feature num_genre on number of genre items in the list
df['num_genre'] = df['genre'].apply(lambda x: len(eval(x)))

Чтобы подготовить набор данных фильма для машинного обучения, нам нужно убедиться, что нет пропущенных значений с df = df.dropna().датой выпуска в формате даты, который не очень полезен для целей машинного обучения. Поэтому мы конвертируем его в более удобный формат, извлекая год из даты. Наконец, столбец genre содержит список жанров для каждого фильма, разделенных запятыми. Мы создали новую функцию num_genre для представления количества жанров в списке в виде нового столбца с именем num_genre. Эта новая функция может быть полезна для прогнозирования успеха фильма, поскольку фильмы с большим количеством жанров могут понравиться более широкой аудитории. Поскольку это игрушечный пример, процесс извлечения признаков довольно прост. На практике извлечение признаков может быть сложной задачей и может включать в себя такие методы, как обработка естественного языка в задачах обзора.

Затем мы выбираем подмножество столбцов из исходного DataFrame df и назначаем его новой переменной с именем X. Выбранные столбцы включают 'popularity', 'vote_count', 'revenue', 'runtime', 'release_year' и 'num_genre'. В этих столбцах представлены различные характеристики фильмов, которые могут быть важны для прогнозирования того, будет ли фильм иметь высокий рейтинг или нет. Эта метка создается с помощью оператора сравнения в столбце 'vote_average' исходного фрейма данных путем проверки того, превышает ли каждое значение 'vote_average' значение 5. Таким образом, мы создали задачу бинарной классификации, цель которой состоит в том, чтобы предсказать, будет ли фильм иметь высокий рейтинг (True) или нет (False) на основе выбранных функций в X.

# create labels
y = df['vote_average'] > 5

# create features
X = df[['popularity', 'vote_count', 'revenue', 'runtime', 
'release_year', 'num_genre']]

# Split dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

# Train a logistic regression classifier
clf = LogisticRegression()
clf.fit(X_train, y_train)

Используйте LIME для этой модели машинного обучения

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

# Use LIME to explain the variables
explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values, feature_names=X_train.columns.tolist(), class_names=['not_target', 'target'], mode='classification')
exp = explainer.explain_instance(X_test.values[0], clf.predict_proba, num_features=len(X_train.columns))

# Print the explanation
exp.show_in_notebook()

Этот выходной график LIME показывает имеющуюся у нас модель бинарной классификации, которая предсказывает, будет ли фильм иметь высокий рейтинг или низкий рейтинг с вероятностью 0,10 для класса с низким рейтингом и вероятностью 0,90 для класса с высоким рейтингом. Стоит отметить, что предоставленные выходные данные LIME относятся только к первой точке данных тестирования, а не ко всему набору тестов. Выходные данные объясняют, как модель пришла к своему прогнозу для этого конкретного экземпляра, принимая во внимание конкретные значения функций для этой точки данных.

На графике справа LIME показывает значение каждой функции для предоставленной нами точки данных с подсчетом голосов 159, доходом 12 800 000, временем выполнения 149,00, годом выпуска 1959, количеством жанров 2 и популярностью. 9.46. Выходные данные также показывают пороговые значения для каждой функции, которые модель использовала для своего прогноза, например пороговое значение подсчета голосов 253,75, пороговое значение дохода от 0,00 до 14 и пороговое значение времени выполнения 115,00. Вы можете задаться вопросом, почему наши входные данные имеют числовые характеристики, и это потому, что «LIME дискретизировала функции в объяснении. Это потому, что мы разрешаем в конструкторе discretize_continuous=True (это значение по умолчанию). По словам разработчиков, дискретизированные функции делают объяснения более интуитивными, поэтому такая настройка является преднамеренной.

Тогда как нам объяснить сюжет в середине? Что ж, согласно распределению вероятностей, модель ML считает, что существует вероятность 0,1, что эта точка данных принадлежит к классу с низким рейтингом. Средний график показывает, что без «количества голосов ≤ 253,75» вероятность того, что эта точка данных относится к классу с низким рейтингом, будет 0,1–0,03 = 0,07, поскольку числовые значения, прикрепленные к каждому признаку, показывают вклад вероятности в прогноз. и распределение вероятностей, показанное слева.

Улучшение справедливости модели в нашем примере

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

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

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

Справедливость машинного обучения с LIME

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

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

Ссылка на блокнот: https://drive.google.com/file/d/1JUDdxmki4JZHy4TYQKaUDIOapIF6zrYu/view?usp=share_link

Другие варианты использования LIME

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

Согласно пояснению разработчиков, слова синего цвета в анализе обозначают отрицательные слова, связанные с атеизмом, а слова оранжевого цвета — положительные слова, связанные с христианством. Чтобы понять значение этих слов, мы можем применить их вес к вероятности предсказания. Например, если мы удалим из документа слова «Хост» и «NNTP», ожидается, что классификатор предскажет атеизм с вероятностью 0,31. Эта вероятность получается путем вычитания взвешенных значений «Хост» и «NNTP» (0,14 и 0,11 соответственно) из исходной вероятности прогноза 0,58 для атеизма.

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

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

Дополнительные руководства по использованию LIME можно найти на их официальном сайте https://github.com/marcotcr/lime.

Сила и ограничение

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

Однако у LIME есть некоторые ограничения, когда речь идет о его применимости к определенным моделям и задачам машинного обучения. Например, LIME не может обрабатывать сложные модели, такие как XGBoost, которые часто используются в реальных приложениях. Об этом упоминает Джош Подуска, главный специалист по полевым данным Domino Data Lab, в своем сообщении в блоге. Кроме того, хотя LIME может выделить наиболее важные особенности конкретного прогноза, он не дает указаний о том, как изменить прогноз, что может ограничить его полезность в определенных ситуациях. В другом сообщении на Medium упоминается, что объяснители машинного обучения должны быть надежными, но на LIME могут повлиять изменения в небольших входных функциях. Они считали, что для того, чтобы сделать LIME более эффективным и надежным, одним из решений является вычисление фактической важности функций как среднего значения важности LIME, полученного с использованием другого набора гиперпараметров и слегка измененного входного вектора функций.

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

Использованная литература:

Полезный ресурс по линейной классификации Берк Устун, Александр Шпангер, Ян Лю: https://arxiv.org/abs/1809.06514;

Lime Github Repository: https://github.com/marcotcr/lime, со всеми изображениями, скопированными и вставленными;

CMU Introduction to Machine Learning: http://www.cs.cmu.edu/~mgormley/courses/10601-f22//slides/lecture25-ensemble-mf.pdf;

Учебник LIME: https://marcotcr.github.io/lime/tutorials/Tutorial%20-%20continuous%20and%20categorical%20features.html

Учебник LIME: https://marcotcr.github.io/lime/tutorials/Lime%20-%20basic%20usage%2C%20two%20class%20case.html

Ограничение LIME: https://towardsdatascience.com/whats-wrong-with-lime-86b335f34612

Пример обработки данных: https://www.kaggle.com/code/emrearslan123/eda-top-10000-movies-dataset

В фильме рекомендуется набор данных, предоставленный Kaggle.

Машинное обучение CMU в производстве 11–695.

Кредит изображения:

https://i0.wp.com/sitn.hms.harvard.edu/wp-content/uploads/2020/01/image001-2.png?resize=1200%2C768&ssl=1

https://algotech.netlify.com/img/2019/12/lime.png

https://editor.analyticsvidhya.com/uploads/76889recommender-system-for-movie-recommendation.jpg

Подтверждение:

Я использовал генеративные инструменты, такие как ChatGPT https://chat.openai.com/chat, чтобы улучшить свой язык и создать текстовые и перефразированные справочные документы, чтобы лучше объяснить этот продукт в этом сообщении в блоге.