Интерпретация и объяснение прогнозов, сделанных моделями машинного обучения с использованием 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
Используется вычисленная статистика, полученная из обучающих данных.
- Чтобы создать возмущенные примеры экземпляров, которые представляют собой интерпретируемый набор данных представления.
- Чтобы масштабировать данные для вычисления расстояний для показателей сходства, когда атрибуты находятся в разных масштабах.
Создать пояснения к прогнозу
Теперь вы можете сгенерировать объяснение для конкретного наблюдения, передав наблюдение функции 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 обеспечивает локальную интерпретацию наблюдения. Лучше всего он работает с табличными данными, изображениями и текстом.
Использованная литература:
Почему я должен тебе доверять? Объяснение предсказаний любого классификатора