Подробное практическое руководство

Вступление:

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

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

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

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

Загрузка и проверка данных:

Сначала мы загрузим необходимые библиотеки и данные, которые мы будем использовать в этом руководстве:

После загрузки данных давайте сначала взглянем на них:

А что насчет нашей целевой функции:

target : {False: 24720, True: 7841}

Таким образом, наша цель - двоичная, со значениями True или False, True означает, что доход человека превышает 50 тысяч долларов США, а ложное среднее - меньше 50 тысяч долларов США.

А как насчет наших предикторов (характеристик)? Разберем их виды:

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

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

Кодирование категориальных функций

Итак, приступим к кодированию:

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

Теперь, когда наши данные готовы к работе, давайте перейдем к обучению нашей модели LightGBM.

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

Мы использовали функцию train_test_split из sklearn.model_selection, чтобы разделить наши данные на наборы train и val. Теперь мы можем двигаться в соответствии с нашей моделью.

Начнем с определения параметров нашей модели LightGBM:

Теперь подходят:

Оценка:

Давайте посмотрим на нашу матрицу неточностей и посмотрим, как работает наша модель:

Давайте посчитаем наши оценки валидации:

Отзыв и точность для положительного класса (более 50к $):

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

1 - Отзыв = TP / (TP + FN) = 1629 / (1629 + 680) = 0,705 (отзыв 70%)

Интерпретация: модель способна предсказать 70% людей, принадлежащих к положительному классу (›50 000 $)

2 - Точность = TP / (TP + FP) = 1629 / (1629 + 566) = 0,74 (точность 74%).

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

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

Диагностика модели

Понимание SHAP:

Прежде чем мы начнем интерпретировать нашу модель, давайте сначала объясним инструмент, который мы будем использовать в исследовании: SHAP.

Так как же работает SHAP? Позвольте мне объяснить (конечно, без усложнения):

Сначала нужно объяснить термин, который является базовым значением, так что это такое?

Базовое значение используется SHAP внутри, и это просто среднее значение предсказанных вероятностей по набору поездов:

base_value = np.mean (lgbm_model.predict_proba (поезд) [:, 1])

Теперь, когда мы знаем, каково базовое значение, давайте углубимся в SHAP:

Предположим, что модель предсказывала, что у человека будет более 50 тысяч долларов США, в размере 0,6, SHAP разлагает вероятность (0,6- базовое значение) по всем характеристикам. Точно так же мы можем визуализировать, какие функции больше всего повлияли на эту вероятность, а также иметь в виду, что в этой декомпозиции некоторые функции могут иметь положительные значения, а некоторые другие функции могут иметь отрицательные значения:

1 - Положительное значение означает, что функция увеличивает вероятность этого экземпляра в сторону положительного класса (подталкивая экземпляр к положительному).

2 - Отрицательное значение означает, что функция уменьшает вероятность этого экземпляра в сторону отрицательного класса (подталкивая экземпляр к отрицательному).

Теперь, когда мы понимаем, как работает SHAP, давайте начнем понимать, что заставляет нашу модель давать конкретный прогноз для данной точки данных, используя ее.

Интерпретация глобальной модели с помощью SHAP:

Сначала мы рассмотрим глобальную интерпретацию модели, визуализируя влияние функций на прогнозируемые вероятности, заданные SHAP для заданного количества выборок:

Примечание: не забудьте установить для параметра model_output значение «вероятность», чтобы то, что вы будете наблюдать, на самом деле было вероятностями.

Итак, как вы читаете этот график? Позволь мне объяснить :

Прежде всего имейте в виду:

›› что x представляют значения формы,

›› точки представляют 10 образцов (каждый образец выделен цветом)

Приведенный выше график можно описать так:

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

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

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

Интерпретация локальной модели с помощью SHAP:

Сделаем локальное объяснение модели, другими словами, на уровне выборки:

Что мы будем делать, так это -

  • Мы возьмем случайную выборку (человека),
  • Осмотрите это, и это настоящий класс,
  • Изучите класс, предсказанный этой моделью,
  • Визуализируйте объяснение SHAP только для этого случая,
  • Сделайте вывод, сравнив истинный класс, предсказание и то, что говорит форма.

Итак, приступим.

Возьмем, к примеру, этого человека:

Age                  32.0
Workclass             4.0
Education-Num        13.0
Marital Status        2.0
Occupation           13.0
Relationship          0.0
Race                  4.0
Sex                   1.0
Capital Gain      15024.0
Capital Loss          0.0
Hours per week       40.0
Country              39.0
Name: 2631, dtype: float64   

Наша модель предсказала, что этот человек получает доход более 50 тысяч долларов в год, что, исходя из истинного названия, является правильным прогнозом, поэтому давайте проверим, как наши особенности повлияли на этот прогноз:

Как видите, базовое значение (начальная точка модели) составляет 0,26, поэтому shap разложит 1–0,263 = 0,737 по всем элементам. Кроме того, как вы можете видеть, прирост капитала вносит наибольший вклад в эту вероятность со значением +0,49, что имеет смысл с учетом высокого прироста капитала в 15024. Также имеет смысл возраст 32 лет, а также Education-Num.

Вывод: для этого случая прогноз верен, и с учетом значений характеристик все имеет смысл, поэтому модель отлично справляется.

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

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

Теперь давайте проверим экземпляр этих экземпляров false_negative:

Напоминание: для этого человека модель предсказала класс «‹ 50 000 долларов США », но фактический класс« ›50 000 долларов США».

Хорошо, очень интересно, поэтому давайте выскажем вышеприведенный вывод:

Модель предсказала вероятность 0,36, 0,263 исходит из base_value, а в остальном - благодаря вкладу функций.

Итак, как показано на графике, семейное положение, возраст, отношения и пол положительно влияют на прогноз, что означает, что они подталкивают эту выборку в правильном направлении, что имеет вероятность ›0,5.

Напротив, прирост капитала, образование-число и род занятий делают противоположное, что дает отрицательные значения, что снижает вероятность.

Что мы можем сказать по этому поводу?

Во-первых, учитывая прирост капитала, имеет смысл подтолкнуть экземпляр к отрицательному классу, поскольку значение этой функции равно 0, и поскольку влияние невелико, я думаю, что это нормально.

Теперь для профессии, самого большого отрицательного участника, у нас есть значение 7, и, используя наш LabelEncoder, мы получаем «7 = Machine-op-inspct: Machine Operator Inspector». Судя по нашим данным по обучению, у нас есть 1387 человек с этой профессией в наших данных по обучению: 1209 из них имеют доход менее 50 000 долларов США и только 178 имеют доход более 50 000 долларов США. Следовательно, имеет смысл, что такая базовая модель без проектирования функций, чтобы создавать такое поведение и вносить отрицательный вклад (подталкивает к отрицательному классу), когда занятие принимает это значение, однако это отличное понимание, которое следует иметь в виду при улучшении модели. .

Et Voila, Как видите, именно поэтому диагностика и интерпретация модели так важны, и просто чтобы перечислить некоторые из очевидных выводов:

1. Это заставляет вас доверять модели, поскольку теперь вы проверяете ее прогнозы и дважды проверяете, имеют ли они смысл (оценки оценки явно недостаточно). То же, что и выше.

2 - Это дает вам понимание будущих улучшений, так как помогает определить, где модель работает неправильно. То же, что и выше.

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

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

Я надеюсь, что вы нашли этот учебник очень информативным и практичным, и я надеюсь, что после прочтения всех этих слов вы чувствуете себя лучше специалистом по данным.

Это код полной записной книжки Jupyter для воспроизведения вышеуказанных результатов.

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

Обо мне

Я главный специалист по данным в Clever Ecommerce Inc, мы помогаем компаниям создавать и управлять кампаниями Google Ads с помощью мощной технологии, основанной на искусственном интеллекте.

Вы можете связаться со мной через Linked In или gmail: [email protected].