Полное руководство по интерпретации моделей с использованием Python

Машинное обучение с использованием больших данных - это модное направление в бизнесе. Эти фразы позволяют синергетическому офисному разговору потратить свои деньги. За этими модными словечками стоит поистине примечательная разработка методов машинного обучения и машин, реализующих их за последнее десятилетие. Возрастающая сложность моделей позволяет машинам лучше классифицировать, маркировать и прогнозировать непрерывные значения. Однако по мере того, как модели становятся более сложными, как мы можем быть уверены, что модели не используют обучающие смещения или предсказывают незначительные изменения фонового шума. Машины делают ошибки иначе, чем люди. (см. примеры здесь, здесь и здесь) Используя библиотеки Python ELI5, PDPbox, Lime и SHAP, мы можем Визуализируйте, как модель предсказывает результат, взвешивает важность функций или выделяет границы на изображении. Без лишних слов, давайте заглянем за занавес модели черного ящика, чтобы увидеть, как работают наши модели. Код и изображения находятся на GitHub.

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

При обучении модели классификации мы пытаемся свести к минимуму ошибочные классификации отдельного набора тестов. Используя набор данных по раку молочной железы в Висконсине, мы пытаемся классифицировать, является ли опухоль злокачественной или доброкачественной, на основе характеристик опухоли. Для обучения нашей модели мы будем использовать случайный лес и разделить данные 85/15. Прогнозируя на нашем тестовом наборе, мы получаем следующую матрицу путаницы:

Анализ ошибок

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

Мы могли бы также изучить этот сложный случай с Lime.

или SHAP.

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

Выбор функции

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

Функция важности перестановок ELI5 измеряет снижение точности при удалении объекта. Это удаление выполняется путем перетасовки значений функции, создавая таким образом шум.

Мое личное фаворит для изучения важности функций - это SHAP. Сводный график показан ниже.

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

Или мы можем исследовать их вместе:

SHAP также может выполнять анализ, аналогичный PDP, окрашенному значениями SHAP.

Кроме того, мы также можем выполнить выбор функций с помощью sklearn.

Анализ изображений

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

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

Помимо правильного вызова гуся и различных собак, наш алгоритм считает, что на этом изображении есть мяч для регби. Интересно, почему?

Вот и все! Обзор функций, вносимых в выбросы, визуализации важности функций и функций распознавания изображений в Python. Аплодируйте этой статье, подписывайтесь на меня и обязательно загляните в мой личный LinkedIn. Весь код и данные для этой статьи можно найти на Github. Использование этих инструментов для объяснения модели позволит вам обнаруживать предвзятость, отлаживать, направлять будущий сбор данных и укреплять доверие с большей прозрачностью.