Интерпретируемость модели

Интерпретируемость модели - признание модели: важность характеристик

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

Для получения информации о других методах интерпретируемости см .: Интерпретируемость модели - Заставить вашу модель признаться: ценности Шепли

Важность функции: мотивация

Один из самых простых вопросов, который мы можем задать о модели, - какие функции имеют наибольшее влияние на прогнозы. Эта концепция называется важностью функции и основана на идее, что более важные функции имеют большее влияние. Однако как мы можем определить влияние функции на прогноз? Чтобы ответить на этот вопрос, мы должны взглянуть на проблему с другой точки зрения: «если функция важна, то при ее отсутствии точность модели снизится». Этот метод также называется средней точностью уменьшения (MDA, Breiman (2001)).

Важность функции «перестановка»

До сих пор у нас есть способ узнать, важна ли функция, посмотрев на ошибку, которая появляется в модели, когда функция отсутствует. Однако как мы можем оценить модель без некоторых функций? Большинство моделей не могут изначально обрабатывать отсутствующие данные - они имеют дело с числами с плавающей запятой и не могут работать с буквальными значениями NULL. Именно здесь слово «перестановка» входит в «Важность функции перестановки». Характеристика важна, если перестановка ее значений увеличивает ошибку модели, потому что модель полагалась на эту функцию для прогноза. Точно так же функция становится неважной, если перестановка ее значений сохраняет ошибку модели неизменной - потому что модель проигнорировала эту функцию для прогноза.

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

Базовый алгоритм важности функции перестановки:

Для каждого столбца в наборе данных:

  1. Перемешайте значения в столбце.
  2. Делайте прогнозы, используя полученный набор данных.
  3. Используйте эти прогнозы и истинные целевые значения, чтобы вычислить, насколько функция потерь пострадала от перетасовки. Это снижение производительности измеряет важность переменной, которую вы только что перемешали.
  4. Отмените перемешивание и верните данные в исходный порядок.

Интерпретация

Интерпретация довольно проста. Характеристики с высоким расчетным значением являются наиболее важными. Он показывает, насколько снизилась производительность модели при случайном перемешивании (в случае использования «точности» в качестве показателя производительности). Интересно, что иногда вы можете увидеть отрицательные значения важности. В этих случаях прогнозы по перетасованным (или зашумленным) данным оказались более точными, чем реальные данные. Это происходит, когда функция не имеет значения и должна иметь значение, близкое к 0, но случайный случай привел к тому, что прогнозы по перетасованным данным стали более точными.

Давайте посмотрим на пример

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

Важность функции перестановки в Python реализована в нескольких пакетах, включая eli5 и sklearn. В этом случае я буду использовать eli5:

import eli5
from eli5.sklearn import PermutationImportance
# We are computing the importance using the test set. In this case
# X_test contains all the features for the test set and y_test
# contains the target column 'tense'
features = X_test.columns.tolist()
# rf is the model that was fitted. In this case, it is 
# RandomForestClassifier
perm = PermutationImportance(rf, random_state=123)
				.fit(X_test, y_test)
eli5.show_weights(perm, feature_names = features)

Сгенерированный вывод выглядит следующим образом:

В предыдущей таблице показана важность функции каждого столбца. Столбец веса представляет важность характеристики, измеряемой как MDA. Знак +/- представляет стандартное отклонение рассчитанной ранее важности. Это значение пытается измерить степень случайности в нашем расчете важности перестановки, повторяя процесс с множественным перемешиванием. веса затем представляет собой среднее значение ошибки, накопленной в нескольких перетасовках, а не в одном испытании.

Мы также можем получить те же данные в формате фрейма данных следующим образом:

importances = eli5.explain_weights_df(perm, feature_names=features)

Посмотрим данные на графике:

import seaborn as sns
import matplotlib.pyplot as plt
plt.errorbar(x=importances['feature'],
	y=importances['weight'],
	yerr=importances['std'],
	ecolor='r', capsize=8, fmt='none',)
sns.pointplot(x='feature', 
	y='weight', 
	data=importances, 
	dodge=True, join=False, ci='none')

Этот график показывает нам важность каждой из характеристик при классификации чего-либо как настоящего или прошлого. Согласно ему, main_v,, который кодирует главный глагол предложения, является наиболее важным признаком. Если вы помните, когда мы использовали значения Шепли, самая важная особенность была другой. Итак, речь идет о характеристиках и допущениях каждого метода.

Давайте посмотрим на них:

Преимущества:

  • Важность очень легко понять, поскольку она напрямую связана с количеством ошибок, вызванных отсутствием внимания к этой функции.
  • Автоматически учитывает все взаимодействия с другими функциями, поскольку перестановки также разрушают эффект взаимодействия. Однако это также будет означать, что снижение производительности из-за потери такого взаимодействия будет учитываться несколько раз (один раз для каждой функции. Если A коррелирует с B, то важность будет измеряться как в A, так и в B - не обязательно проблема. ).

Недостатки:

  • Рассчитанная важность признака привязана к ошибке самой модели. Это не совсем плохо, если ваша модель не показывает признаков переобучения, поскольку дисперсия модели и важность функции будут хорошо коррелировать. Однако расчетные веса могут начать расходиться, когда ваша модель будет развиваться или переобучаться.
  • Вам нужен доступ к фактическому целевому результату. Если кто-то дает вам только модель и немаркированные данные, а не основную истину, вы не сможете вычислить важность перестановки признаков.
  • Мера важности перестановочного признака зависит от перемешивания признака, что добавляет случайности, и, когда признаки коррелированы, мера важности перестановочного признака может быть искажена нереалистичными экземплярами данных.
  • Средние значения в мере важности может быть непросто интерпретировать: если функция имеет среднюю важность перестановки, это может означать, что она имеет большой эффект для нескольких прогнозов, но не влияет в целом, или средний эффект для всех прогнозов.

Важность примесей

Важность перестановки объясняется тем, что случайная перестановка должна имитировать отсутствие функции в модели
. Такой метод основан на средней точности уменьшения (MDA). Альтернативная мера важности - это та, которая используется в случайных лесах, важность примесей, которая основана на принципе уменьшения примесей или среднего уменьшения примеси (MDI), который используется в большинстве традиционных алгоритмов дерева классификации. Преимущество этого метода в том, что он не требует некоррелированных предикторов.

Однако при таком подходе есть несколько проблем:

  • Важность на основе примесей смещена в сторону характеристик с высокой мощностью (Strobl C. et al (2007), Bias in Random Forest Variable Value Measures)
  • Это применимо только к древовидным алгоритмам.

Важность примесей реализована в пакете sklearn. На их сайте есть пример.

Важность функции условной перестановки

Важность функции условной перестановки пытается объединить лучшее из двух предыдущих методов: обеспечить надежную меру важности переменных, не предполагая некоррелированных предикторов. Для достижения этой цели Strobl et al. (2008) предлагают схему условной перестановки, где каждый признак переставляется только в группах наблюдений, где остальные признаки (обусловленные) имеют аналогичные значения, чтобы сохранить структуру корреляции между признаком и другими предикторами.

Несмотря на то, что кондиционирование несложно, когда обусловливаемые переменные являются категориальными, кондиционирование непрерывных переменных является сложной задачей, поскольку вам необходимо создавать диапазоны значений разумного размера. Непрерывные переменные необходимо дискретизировать. Случайный лес предоставляет способ добиться этого, поскольку они имитируют это поведение при построении деревьев. Однако (всегда есть) этот метод требует больших вычислительных ресурсов из-за количества деревьев, которые вам нужно вырастить.

Важность условной перестановки реализована в R в пакете party и permimp (я не смог найти реализации в Python - если вы знаете, дайте мне знать!).