Введение

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

В этой статье я подробно расскажу о другой технике - ЛАЙМ.

LIME (местные интерпретируемые независимые от модели объяснения)

LIME был предложен как часть статьи «Почему я должен вам доверять?»: Объяснение прогнозов любого классификатора », опубликованной в августе 2016 года Марко Тулио Рибейро, Самиром Сингхом, Карлосом Гестрином. Python и Р.

Интуиция

Локальный: объясняет, почему отдельная точка данных была отнесена к определенному классу.

Независимость от модели: рассматривает модель как черный ящик. Не нужно знать, как он делает прогнозы

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

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

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

Как работает LIME

Для данного наблюдения :

  1. Перестановка данных -Создайте новый набор данных вокруг наблюдения путем выборки из распределения, полученного на обучающих данных (в наборе данных Perturbed для числовых характеристик выбираются на основе распределения и категориальные значения на основе вхождения)
  2. Вычислить расстояние между перестановками и исходными наблюдениями
  3. Используйте модель для прогнозирования вероятности новых точек, это наш новый y
  4. Выберите m функций, наилучшим образом описывающих результат сложной модели из переставленных данных.
  5. Подобрать линейную модель для данных в размерах m, взвешенных по сходству
  6. Веса линейной модели используются как объяснение решения.

Как использовать эту библиотеку в Python

Мы будем использовать набор банковских маркетинговых данных - ССЫЛКА. Все этапы анализа данных описаны в предыдущей статье. Используя этот набор данных, мы построим модели для линейной регрессии, дерева решений, случайного леса и легкой GBM (см. Код на GitHub).

После создания наших моделей мы начнем использовать LIME, создав экземпляр нового explainer с помощью LimeTabularExplainer. Аргументы

  • ваши тренировочные данные с категориальными значениями, преобразованными в формат LIME
  • укажите mode регрессию или классификацию
  • feature_names: список имен для ваших столбцов
  • categorical_names: наш словарь, который сопоставляет категориальные признаки с их возможными значениями.
  • categorical_features: список указателя категориальных характеристик
explainer = LimeTabularExplainer(
convert_to_lime_format(X_train,categorical_names).values,
                   mode="classification",
                   feature_names=X_train.columns,
                   categorical_names=categorical_names,
                   categorical_features=categorical_names.keys(),
                   random_state=42)

Мы выберем одну строку для интерпретации результатов

i = 4
print(X_test.iloc[i])

Теперь запустим интерпретацию этого ряда для каждой из наших 4 моделей.

explanation = explainer.explain_instance(observation, lr_predict_proba, num_features=5)
explanation.show_in_notebook(show_table=True, show_all=False)

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

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

print(explanation.local_exp)
print(explanation.intercept)
#R2 score
print(explanation.score)

Можно заметить веса, изображенные на картинке выше, как значения local_exp. Оценка R2 для модели линейной регрессии довольно низкая.

Мы также попробовали модель LightGBM, и ниже приведены результаты

Недостатки LIME

  1. Зависит от случайной выборки новых точек, поэтому может быть нестабильным
  2. Подгонка линейной модели может быть неточной
  3. Медленно обрабатывает изображения

Заключение

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

Если у вас есть какие-либо вопросы по LIME, дайте мне знать, и я буду рад помочь. Подпишитесь на меня в Medium или LinkedIn, если хотите получать обновления моих сообщений в блоге!