Интерпретация и объяснение прогнозов, сделанных моделями машинного обучения с использованием LIME

Что, если я скажу вам инвестировать 100 000 долларов США в определенную акцию сегодня, поскольку моя модель машинного обучения предсказывает высокую прибыль. Вопрос, который вы мне зададите, будет заключаться в том, чтобы объяснить основу моего прогноза, так как это важное решение для вас. Вы не хотите играть в азартные игры, но хотели бы принимать обоснованные решения на основе данных.

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

  • Как модель делала прогнозы?
  • Почему модель сделала конкретный прогноз для конкретного случая?
  • Какие функции влияют на прогнозы больше всего и меньше всего с простым для понимания объяснением.
  • Объяснение модели должно представлять текстовую или визуальную качественную связь между функциями и прогнозом модели.

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

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

Что такое LIME?

LIME — это локально интерпретируемое независимое от модели объяснение модели машинного обучения, которое дает вам понимание индивидуальных прогнозов,

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

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

LIME возмущает входной набор данных, чтобы увидеть изменения в прогнозах. Эти возмущения основаны на дисперсии данных.

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

В каких моделях машинного обучения можно использовать LIME?

LIME не зависит от модели и может использоваться для

  • Проблемы классификации и регрессии.
  • Его можно использовать с текстовыми данными с помощью НЛП.
  • Может применяться к данным изображения.
  • LIME также можно применять к табличным данным, где столбцы представляют функции, а строки — отдельные экземпляры.

Как применить LIME для моделей машинного обучения на основе классификации?

Применение LIME к моделям классификации с использованием табличных данных

Используемый набор данных — Набор данных клиента кредитной карты по умолчанию.

Для проблемы классификации значение 1 означает, что клиент не выполнит платеж, а значение 0 означает, что клиент не выполнит платеж кредитной картой.

Загрузка данных и отображение имен столбцов

import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.read_csv(r'c:\data\default of credit card clients.csv')
df.columns

Создайте функции и целевую переменную

Y = df[['default payment next month']]
X =  df[['LIMIT_BAL', 'SEX', 'EDUCATION', 'MARRIAGE', 'AGE', 'PAY_0', 'PAY_2', 'PAY_3', 'PAY_4', 'PAY_5', 'PAY_6', 'BILL_AMT1', 'BILL_AMT2','BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6', 'PAY_AMT1', 'PAY_AMT2', 'PAY_AMT3', 'PAY_AMT4', 'PAY_AMT5', 'PAY_AMT6']]

Разделение набора данных на обучение и тестирование

from sklearn.model_selection import train_test_split
from sklearn import preprocessing
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.4)

Создайте классификатор RandomForest и подгоните данные поезда

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(max_depth=6, random_state=0, n_estimators=10)
model.fit(X_train, Y_train)

Важность отображаемой функции

importances = model.feature_importances_
indices = np.argsort(importances)
features = X_train.columns
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), [features[i] for i in indices])
plt.xlabel('Relative Importance')
plt.show()

Создайте табличный экземпляр LIME

Поскольку наш набор данных является табличным, мы создаем экземпляр LimeTabularExplainer(). training_data: передать набор обучающих данных,

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

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

training_labels: передать целевую переменную обучения

import lime
from lime.lime_tabular import LimeTabularExplainer
explainer= LimeTabularExplainer(training_data=np.array(X_train),
                                mode='classification', 
                                feature_names=list(X_train.columns),
                                training_labels=np.array(Y_train),
                                random_state=12

Используется вычисленная статистика, полученная из обучающих данных.

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

Создать пояснения к прогнозу

Теперь вы можете сгенерировать объяснение для конкретного наблюдения, передав наблюдение функции explain_instance().

data_row: укажите наблюдение, для которого вам нужно объяснение

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

num_features: максимальное количество функций, для которых нам нужно объяснение

exp = explainer.explain_instance(X_test.iloc[0], model.predict_proba, num_features=8)
exp.as_pyplot_figure()
from matplotlib import pyplot as plt
plt.tight_layout()

Показать объяснение HTML в блокноте Python

exp.show_in_notebook(show_table=True, show_all=True)

Как интерпретировать результаты?

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

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

Клиент не нарушил платежи за текущий месяц, 2, 3, 4, 5 и 6 месяцев назад (PAY_0, PAY_2, PAY_3, PAY_4, PAY_5 и PAY_6 равно 0). Платеж за последние три месяца меньше $1800

Давайте рассмотрим объяснение другого наблюдения.

exp = explainer.explain_instance(X_test.iloc[731], model.predict_proba)
exp.show_in_notebook(show_table=True, show_all=False)

Для наблюдения прогноз вероятности составляет 75%, что клиент не выполнит платеж по кредитной карте.

Причины отказа клиента от оплаты кредитной картой

Клиент задержал платежи на два месяца за текущий месяц, 2, 3, 4, 5 и 6 месяцев назад (PAY_0, PAY_2, PAY_3, PAY_4, PAY_5 и PAY_6 равно 2). Потребительский кредит меньше или равен 500 долларов США.

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

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

Используемый набор данных: Прогноз цен на недвижимость.

Здесь мы будем использовать RandomForestRegressor.

#Importing required libraries
import pandas as pd
import numpy as np
import plotly
np.random.seed(0)
import matplotlib.pyplot as plt
import lime
from lime.lime_tabular import LimeTabularExplainer
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.ensemble import RandomForestRegressor
#Reading the data file
df = pd.read_csv(r'c:\data\Real estate.csv')
# Creating the input features and target variable
Y = df[['Y house price of unit area']]
X =  df[[ 'X2 house age',
       'X3 distance to the nearest MRT station',
       'X4 number of convenience stores', 'X5 latitude', 'X6 longitude']]
# check for missing data
X.isnull().sum()
#Creating train and test data
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2)
#Random Forest Regressor
model = RandomForestRegressor(max_depth=50, random_state=0, n_estimators=1000, bootstrap=True)
model.fit(X_train, Y_train)
#printing feature importances
importances = model.feature_importances_
indices = np.argsort(importances)
features = X_train.columns
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), [features[i] for i in indices])
plt.xlabel('Relative Importance')
plt.show()

Создать табличный экземпляр LIME

Укажите режим как регрессия.

explainer= LimeTabularExplainer(training_data=np.array(X_train),
                                mode='regression', 
                                feature_names=list(X_train.columns),
                                class_names=['Y house price of unit area'],
                                random_state=12
                                         )

Создать пояснения к прогнозу

exp = explainer.explain_instance(X_test.iloc[0], model.predict, num_features=4)
exp.as_pyplot_figure()
from matplotlib import pyplot as plt
plt.tight_layout()

exp.show_in_notebook(show_table=True, show_all=False)

Вывод

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

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

Почему я должен тебе доверять? Объяснение предсказаний любого классификатора

https://github.com/marcotcr/лайм