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

Объяснимая машина повышения

Так же точен, как повышение градиента, так же интерпретируется как линейная регрессия.

Компромисс между интерпретируемостью и точностью

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

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

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

Но что вообще такое интерпретируемость? Для этого нет четкого математического определения. Некоторые авторы, например в [1] и [2], определяют интерпретируемость как свойство, которое человек может понять и / или предсказать результат модели. Это немного бессмысленно, но мы все же можем классифицировать модели машинного обучения в соответствии с этим.

Почему линейную регрессию y = ax + b + ɛ можно интерпретировать? Потому что вы можете сказать что-то вроде «увеличение x на единицу увеличивает результат на a». Модель не дает неожиданного результата. Чем больше x, тем больше y. Чем меньше x, тем меньше y. Нет входов x, которые позволили бы y странным образом покачиваться.

Почему нейронные сети не интерпретируемы? Что ж, попробуйте угадать результат 128-слойной нейронной сети, фактически не реализуя ее и не используя ручку и бумагу. Конечно, результат такой, какой он есть в соответствии с какой-то большой формулой, но даже если я сказал вам, что для x = 1 результат будет y = 10, а для x = 3 вывод y = 12, вы не сможете угадать вывод x = 2. Может быть 11, может быть -420.

Точность

Это то, что вам удобно - необработанные числа. Для регрессии среднеквадратичная ошибка, средняя абсолютная ошибка, средняя абсолютная процентная ошибка, вы называете это. Что касается классификации, F1, точности, отзыва и, конечно же, самого старого доброго King Accuracy.

Вернемся к картинке. Хотя я согласен с этим как есть, я хочу подчеркнуть следующее:

Нет никакого внутреннего компромисса между интерпретируемостью и точностью. Есть модели, которые интерпретируемы и точны.

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

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

Прочитав эту статью, вы сможете

  • понять, почему интерпретируемость важна,
  • объяснять недостатки объяснений черного ящика, таких как значения LIME и Шепли, и
  • понимать и использовать обучающийся Explainable Boosting Machine

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

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

Улучшение модели

Представим, что вы хотите построить модель для прогнозирования стоимости дома. Креатив, правда? Одной из вводимых функций, помимо прочего, является количество комнат. Другие особенности включают размер, год постройки и некоторую оценку качества района. После нормализации функций вы решили использовать линейную регрессию. Значок r ² на тестовом наборе хорош, и вы развертываете модель. Позже появляются новые данные о доме, и вы замечаете, что ваша модель совершенно не работает. Что пошло не так?

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

Для этого могло быть много причин. Может быть, ваш поезд и набор тестов были предвзяты: если в доме было больше комнат, то он, как правило, был старше. А если дом старше, он, как правило, дешевле.

Это то, что вы смогли заметить только потому, что вы могли взглянуть на то, как модель работает внутри. И вы можете не только обнаружить это, но и исправить: вы можете установить коэффициент «количества комнат» равным нулю, или вы также можете переобучить модель и сделать коэффициент «количества комнат» положительным. Это то, что вы можете сделать с помощью scikit-Learns LinearRegression, установив ключевое слово positive=True.

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

Деловые или нормативные требования

Часто заинтересованные стороны хотят иметь хоть какое-то интуитивное представление о том, почему что-то работает, и вы должны быть в состоянии им это объяснить. Хотя даже самые нетехнические люди могут согласиться с тем, что «я складываю кучу чисел» (линейная регрессия) или «я иду по дорожке и иду влево или вправо в зависимости от некоторого простого условия» (деревья решений), это гораздо больше. сложно для нейронных сетей или ансамблевых методов. То, что фермер не знает, он не ест. И это понятно, потому что часто этим заинтересованным сторонам приходится отчитываться перед другими людьми, которые, в свою очередь, также нуждаются в объяснении того, как все работает. Удачи в объяснении повышения градиента вашему боссу таким образом, чтобы он или она могли передать знания вышестоящему инстансу, не совершая серьезных ошибок.

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

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

Интерпретации моделей черного ящика

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

Известными примерами таких объяснений являются локальные интерпретируемые независимые от модели объяснения (LIME) [3] и значения Шепли [4]. Давайте быстро прольем свет на недостатки обоих этих методов.

Недостатки LIME

В LIME вы пытаетесь объяснить по одному прогнозу вашей модели за раз. Учитывая образец x, почему метка y? Предполагается, что вы можете аппроксимировать сложную модель черного ящика интерпретируемой моделью в близкой области около x. Эта модель называется суррогатной моделью, и часто для этого выбираются линейные / логистические регрессии или деревья решений. Однако, если приближение плохое, чего вы можете не заметить, объяснения вводят в заблуждение.

Это все еще сладкая библиотека, о которой вам следует знать.

Ценности Шепли

С помощью значений Шепли каждый прогноз можно разбить на отдельные вклады для каждой функции. Например, если ваша модель выдает 50, со значениями Шепли вы можете сказать, что функция 1 внесла 10, функция 2 внесла 60, функция 3 внесла -20. Сумма этих трех значений Шепли составляет 10 + 60–20 = 50, результат вашей модели. Это здорово, но, к сожалению, эти значения чрезвычайно сложно рассчитать.

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

Тем не менее, есть отличная библиотека shap для Python, которая может вычислять значения Шепли, и вам обязательно стоит попробовать!

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

Объяснимая бустерная машина

В фундаментальной идее объяснимого бустинга нет ничего нового. Все началось с аддитивных моделей, впервые предложенных Джеромом Фридманом и Вернером Штютцле еще в 1981 году. Такие модели имеют следующий вид:

где y - прогноз, а x ₁,…, xₖ - входные характеристики.

Старый друг

Я утверждаю, что все вы уже сталкивались с такой моделью. Скажем это вслух:

Линейная регрессия!

Линейная регрессия - это не что иное, как особый вид аддитивной модели. Здесь все функции fᵢ - это просто идентичность, то есть . f ᵢ (xᵢ) = xᵢ. Легко, правда? Но вы также знаете, что линейная регрессия может быть не лучшим вариантом с точки зрения точности, если нарушаются ее допущения, особенно допущение линейности.

Нам нужны более общие функции, которые могут фиксировать более сложные корреляции между входными и выходными переменными. Интересный пример того, как проектировать такие функции, был представлен некоторыми людьми в Microsoft [5]. Еще лучше: вокруг этой идеи создали удобный пакет для Python и даже R.

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

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

Вы могли бы сказать:

С этими функциями f это выглядит сложнее, чем линейная регрессия. Как это легче интерпретировать?

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

Вы можете подключить (16, 2) к модели и получить на выходе 5 + 12–16 = 1. И это уже разбитый результат 1: имеется базовый показатель, равный 5, затем функция 1 предоставляет дополнительные 12, а функция 3 предоставляет дополнительные -16.

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

Давайте теперь посмотрим, как работает эта модель.

Идея

Авторы используют маленькие деревья способом, напоминающим усиление градиента. Если вы не знаете, как работает усиление градиента, посмотрите это замечательное видео.

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

Здесь вы можете увидеть следующее:

  • Каждый T представляет собой дерево с небольшой глубиной.
  • Для каждой из функций k обучаются деревья r. Таким образом, вы можете увидеть k * r различных деревьев в уравнении.
  • Для каждой функции сумма всех ее деревьев равна вышеупомянутому f.

Это означает, что функции f состоят из сумм небольших деревьев. Поскольку деревья довольно универсальны, многие сложные функции можно смоделировать довольно точно.

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

Хорошо, мы видели, как это работает, и что вы можете легко интерпретировать результаты объяснимых повышающих машин. Но хороши ли эти модели? В их статье [5] говорится следующее:

Мне нравится! Конечно, я также протестировал этот алгоритм, и он также оказался эффективным на моих наборах данных. Говоря о тестировании, давайте посмотрим, как на самом деле использовать объяснимое усиление в Python.

Использование объяснимого повышения в Python

Пакет интерпретации от Microsoft упрощает использование объяснимого ускорения, так как он использует API scikit-learn. Вот небольшой пример:

from interpret.glassbox import ExplainableBoostingRegressor
from sklearn.datasets import load_boston
X, y = load_boston(return_X_y=True)
ebm = ExplainableBoostingRegressor()
ebm.fit(X, y)

Ничего удивительного здесь нет. Но пакет интерпретации может предложить гораздо больше. Особенно мне нравятся инструменты визуализации.

from interpret import show
show(ebm.explain_global())

Помимо прочего, метод show позволяет даже проверять функции f. Вот один для характеристики 4 (NOX; концентрация оксидов азота) набора данных о жилищном строительстве Бостона.

Здесь вы можете видеть, что примерно до 0,58 NOX не влияет на цену дома. Начиная с 0,58, влияние становится слегка положительным, а значения NOX около 0,62 имеют наибольшее положительное влияние на цену дома. Затем он снова падает до тех пор, пока влияние не станет отрицательным для значений NOX, превышающих 0,66.

Заключение

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

Затем мы представили объяснимую машину повышения, которая имеет точность, сопоставимую с алгоритмами повышения градиента, такими как XGBoost и LightGBM, но также интерпретируема. Это показывает, что точность и интерпретируемость не исключают друг друга.

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

Небольшие возможности для улучшения

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

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

Посмотреть обсуждение можно здесь.

использованная литература

[1] Миллер Т. (2019). Объяснение в искусственном интеллекте: выводы из социальных наук. Искусственный интеллект, 267, 1–38.

[2] Ким Б., Койеджо О. и Ханна Р. (2016 г., декабрь). Примеров мало, научись критиковать! Критика интерпретируемости . В НИПС (стр. 2280–2288).

[3] Рибейро, М. Т., Сингх, С., и Гестрин, К. (2016, август). « Почему я должен тебе доверять? Объясняем прогнозы любого классификатора ». В Материалы 22-й международной конференции ACM SIGKDD по открытию знаний и интеллектуальному анализу данных (стр. 1135–1144).

[4] Лундберг, С., и Ли, С. И. (2017). Единый подход к интерпретации прогнозов модели. Препринт arXiv arXiv: 1705.07874.

[5] Нори, Х., Дженкинс, С., Кох, П., и Каруана, Р. (2019). Interpretml: единый фреймворк для интерпретируемости машинного обучения. Препринт arXiv arXiv: 1909.09223.

Спасибо Патрику Борману за полезные замечания!

Надеюсь, что сегодня вы узнали что-то новое, интересное и полезное. Спасибо за прочтение!

В качестве последнего пункта, если вы

  1. хотите помочь мне написать больше о машинном обучении и
  2. все равно планируете получить подписку Medium

почему бы не сделать это по этой ссылке? Это мне очень поможет! 😊

Чтобы быть прозрачным, цена для вас не меняется, но около половины стоимости подписки идет непосредственно мне.

Большое спасибо, если вы думаете поддержать меня!

Если возникнут вопросы, напишите мне в LinkedIn!