Как каждая функция влияет на прогнозы моей модели

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

Интерпретируемость можно разделить на две категории: глобальная интерпретируемость, которая дает объяснения поведения модели для всей популяции, и локальная интерпретируемость, которая дает объяснение относительно конкретного прогноза.

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

Анализ чувствительности

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

Формально, имея набор тестов X, мы хотели бы измерить чувствительность функции i. Мы создаем новый набор X *, в котором применяем преобразование T к объекту i. Мы выполняем прогноз по X и обозначаем вектор прогноза как Y. Мы выполняем прогноз по X * и обозначаем вектор прогноза как Y *. Чтобы измерить изменение результата, мы используем нашу метрику оценки, используя Y в качестве истинного значения y. Мы позволяем S быть исходной оценкой - это оценка модели по X (например, для точности это будет 1) и S * - новая оценка, оценка после изменения значения функции. Тогда чувствительность для функции i будет S-S *.

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

Какое преобразование T мне следует использовать?

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

Равномерное распределение - замените значение признака другим из возможных значений признака с равномерной вероятностью. Обратите внимание, что в этом случае на меру чувствительности в равной степени влияют все возможные значения характеристик. Давайте посмотрим на этот пример, чтобы проиллюстрировать проблему, которую следует учитывать при использовании этого преобразования: у нас есть числовая характеристика, возраст, где значения варьируются от 0 до 120, но большая часть данных состоит из подростков в возрасте от 16 до 18, и изменение функции в этом диапазоне не влияет на прогноз, но изменение его за пределами этого диапазона влияет на прогноз. Если мы будем использовать равномерное распределение, мы получим высокую чувствительность для этой функции, хотя в большинстве случаев эта функция не влияет на прогноз.

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

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

Производственные соображения

Анализ чувствительности функций требует расчета множества прогнозов. Чтобы быть точным, n_samples x n_features прогнозов, было n_samples - это количество образцов в нашем тестовом наборе, а n_features - это количество функций. Мы можем использовать пакеты, чтобы уменьшить это число, но еще предстоит вычислить много прогнозов, и многие алгоритмы, такие как случайный лес, требуют много времени для выполнения прогнозирования. Есть несколько способов решить эту проблему:

  1. Субдискретизация - использование пары тысяч выборок при использовании простой стратегии разделения, поскольку в большинстве случаев будет достаточно стратифицированного разделения.
  2. Распараллеливание - мы можем выполнять прогнозы одновременно, чтобы использовать многопроцессорность для увеличения скорости прогнозирования. В производстве мы часто ограничены объемом оперативной памяти, который можно использовать. В таких случаях бывает сложно определить максимальное количество # процессов, которые можно использовать. Сначала мы можем выполнить несколько пакетных прогнозов последовательно. Их можно использовать для приближения объема памяти, необходимой для прогнозирования, а затем использовать как можно больше потоков (без нарушения нашего ограничения памяти).
  3. Несколько этапов - наконец, если у нас много функций, мы можем еще больше уменьшить количество прогнозов, дважды рассчитав чувствительность функций. Первое время мы используем небольшое количество образцов (до пары сотен). Это дает нам меру чувствительности для всех функций, но это относительно неточно, потому что мы используем только несколько образцов. Затем мы фильтруем лучшие функции и пересчитываем анализ чувствительности для них по всему набору тестов (или набору подвыборки). Таким образом, мы получаем надежную меру чувствительности для наиболее важных функций, которая нам и нужна.

Пример из реального мира

Я работаю специалистом по данным в Firefly.ai, где мы автоматически строим модели, которые могут состоять из ансамбля моделей, каждая со своим собственным конвейером вменения, проектирования признаков, выбора и оценки, которые выбираются из сотен алгоритмов. Я столкнулся с конкурсом Прогноз уровня бедности домохозяйств в Коста-Рике от kaggle, где мы хотели бы спрогнозировать доход домохозяйств в Коста-Рике. Я провожу это соревнование, используя нашу автоматическую систему, и получил оценку макроса запоминания 0,9. Чтобы понять, чему научилась модель, давайте взглянем на график анализа чувствительности (созданный с использованием перестановочного преобразования) 10 основных функций. Значения чувствительности нормализованы до суммы 100. График показывает, что двумя наиболее важными характеристиками модели были SQBdependency (население трудоспособного возраста) и meaneduc (среднее количество лет образование для взрослых). Важность этих функций имеет смысл, но степень важности по сравнению с другими функциями, такими как количество комнат, очень удивительна.

Теперь я могу использовать выводы анализа, чтобы получить еще лучшую модель. Например, я могу удалить элементы, которые очень мало влияют на модель, или я могу удалить элементы, которые влияют на модель и, как мне кажется, могут привести к переобучению. Если есть утечка, она будет показана на графике как важная, поэтому я сразу ее увижу. Кроме того, я могу больше исследовать наблюдаемые мной закономерности, например, как SQBdependency влияет на модель, то есть каковы диапазоны населения трудоспособного возраста, для которых модель предсказывает высокий доход и т. Д.

Последние слова

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

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