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

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

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

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

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

Важные библиотеки для интерпретируемости машинного обучения

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

ЭЛИ5

Объясни, как будто мне 5 лет. Звучит интересно, правда? Эта библиотека дает вам представление о важности и весе, который ваша модель придает различным функциям в вашем наборе данных. Он имеет разные функции/методы для разных типов алгоритмов машинного обучения — с учителем или без учителя. Например, если обучаемой моделью является RandomForestRegressor, ваш код для интерпретируемости может выглядеть следующим образом.

# explain tree regressor feature importance
# show predictions
eli5.show_prediction(model, X_test.iloc[10], show_feature_values=True)
eli5.sklearn.explain_prediction.explain_prediction_tree_regressor(model, doc=X_train.values[randint(0, 100)], feature_names=X_train.columns.tolist()))

Здесь «модель» — это обученная и подобранная модель любого типа, X_test.iloc[10] — любая строка в тестовом наборе. Интуиция, стоящая за этим кодом, заключается в том, что вы можете получить представление о прогнозе для любой конкретной записи набора тестов и выяснить, какие функции важны для этого прогноза для обученной модели.

Подробные фрагменты кода см. в документации: https://eli5.readthedocs.io/en/latest/

PDPBox

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

pdp_goals = pdp.pdp_isolate(model=self.model, dataset=self.X_train, model_features=self.base_features,
feature=b_feature)
pdp.pdp_plot(pdp_goals, b_feature)

Здесь b_feature — это любая функция из списка всех базовых/зависимых/нецелевых функций.

Вы можете обратиться к документации по инструменту здесь — https://pdpbox.readthedocs.io/en/latest/

ШАП

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

Каждый из этих графиков имеет значение в процессе интерпретации модели. См. https://shap.readthedocs.io/en/latest/index.html для получения подробной документации.

Желтый кирпич

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

Почему интерпретируемость является и должна быть важной частью процесса?

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

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

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

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

Поставьте палец вверх, если вы нашли это полезным. Предложения приветствуются.

Подробные коды из моего проекта см. в моем профиле на Github: https://github.com/attharva-j/MachineLearningInterpretability.

Найдите меня в LinkedIn здесь: https://www.linkedin.com/in/attharvaj3147/