"Машинное обучение"

Шапаш: сделать модели машинного обучения понятными для всех

В этой статье мы представим Shapash, библиотеку Python с открытым исходным кодом, которая помогает специалистам по данным сделать свои модели машинного обучения более прозрачными и понятными для всех!

Shapash от MAIF - это набор инструментов Python, который облегчает понимание моделей машинного обучения специалистам по данным. Это упрощает обмен и обсуждение интерпретируемости модели со специалистами, не связанными с данными: бизнес-аналитиками, менеджерами, конечными пользователями…

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

В этом посте мы расскажем об основных возможностях Шапаша и о том, как он работает. Мы проиллюстрируем реализацию библиотеки на конкретном примере использования.

Элементы контекста:

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

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

Однако это еще не все:

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

В частности, в наших проектах Data Science, в которых участвуют неспециалисты, есть два этапа:

  • Шаг исследования и подгонка модели:

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

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

  • Развертывание модели в производственной среде

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

  • Прозрачность приносит доверие: он будет доверять моделям, если понимает их.
  • Все под контролем: ни одна модель не может быть надежной на 100%. Когда они смогут понять результаты работы алгоритма, пользователи могут отменить предложения алгоритма, если они сочтут, что они основаны на неверных данных.

Shapash был разработан, чтобы помочь специалистам по обработке данных удовлетворить эти потребности.

Ключевые особенности Shapash:

  • Легко читаемые визуализации для всех.
  • Веб-приложение: чтобы понять, как работает модель, вы должны посмотреть на несколько графиков, определить важность функций и глобальный вклад функции в модель. Веб-приложение - полезный инструмент для этого.
  • Несколько методов для отображения результатов с соответствующими формулировками (обратная предварительная обработка, постобработка). Вы можете легко добавить свои словари данных, объект category-encoders или sklearn ColumnTransformer для более точного вывода.
  • Функции для простого сохранения файлов Pickle и экспорта результатов в таблицы.
  • Краткое объяснение: сводку можно настроить в соответствии с вашими потребностями и сосредоточить внимание на том, что имеет значение для локальной объяснимости.
  • Возможность простого развертывания в производственной среде и завершения каждого прогноза / рекомендации с локальной сводкой объяснимости для каждого рабочего приложения (пакетного или API)
  • Шапаш открыт для нескольких способов действия: его можно использовать для быстрого доступа к результатам или для работы над улучшением формулировок. Для отображения результатов требуется очень мало аргументов. Но чем больше вы работаете с очисткой и документированием набора данных, тем яснее будут результаты для конечного пользователя.

Shapash работает для задач регрессии, двоичной классификации или мультикласса.
Он совместим со многими моделями: Catboost, Xgboost, LightGBM, Sklearn Ensemble, Линейные модели, SVM.

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

Установка

Вы можете установить пакет через pip:

$pip install shapash

Шапаш Демонстрация

Давайте воспользуемся Shapash на конкретном наборе данных. В оставшейся части этой статьи мы покажем вам, как Шапаш может исследовать модели.

Мы будем использовать знаменитый набор данных Цены на жилье из Kaggle, чтобы подобрать регрессор… и спрогнозировать цены на жилье! Начнем с загрузки набора данных:

import pandas as pd
from shapash.data.data_loader import data_loading
house_df, house_dict = data_loading('house_prices')
y_df=house_df['SalePrice'].to_frame()
X_df=house_df[house_df.columns.difference(['SalePrice'])]
house_df.head(3)

Закодируйте категориальные признаки:

from category_encoders import OrdinalEncoder

categorical_features = [col for col in X_df.columns if X_df[col].dtype == 'object']
encoder = OrdinalEncoder(cols=categorical_features).fit(X_df)
X_df=encoder.transform(X_df)

Обучите, протестируйте разделение и подгоните модель.

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

Xtrain, Xtest, ytrain, ytest = train_test_split(X_df, y_df, train_size=0.75)
reg = RandomForestRegressor(n_estimators=200, min_samples_leaf=2).fit(Xtrain,ytrain)

И спрогнозировать тестовые данные…

y_pred = pd.DataFrame(reg.predict(Xtest), columns=['pred'], index=Xtest.index)

Давайте откроем для себя и воспользуемся Shapash SmartExplainer.

Шаг 1. Импорт

from shapash.explainer.smart_explainer import SmartExplainer

Шаг 2. Инициализируйте объект SmartExplainer

xpl = SmartExplainer(features_dict=house_dict) # Optional parameter 
  • features_dict: dict, который определяет значение каждого имени столбца x pd.DataFrame.

Шаг 3. Компиляция

xpl.compile(
    x=Xtest,
    model=regressor,
    preprocessing=encoder,# Optional: use inverse_transform method
    y_pred=y_pred # Optional
)

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

Теперь мы можем отобразить результаты и понять, как работает регрессионная модель!

Шаг 4. Запуск веб-приложения

app = xpl.run_app()

Ссылка на веб-приложение появляется в выводе Jupyter (доступ к демонстрации здесь).

Это веб-приложение состоит из четырех частей:

Каждый из них взаимодействует, чтобы облегчить изучение модели.

Важность функций: вы можете нажимать на каждую функцию, чтобы обновить график вклада ниже.

График влияния: Как функция влияет на прогноз? Отобразите скрипку или диаграмму рассеяния каждого локального вклада функции.

Местный участок:

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

Таблица выбора. Она позволяет пользователю веб-приложения выбирать:

  • Подмножество, чтобы сосредоточить исследование на этом подмножестве
  • Одна строка для отображения соответствующего местного объяснения

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

  • = Значение, ›Значение,‹ Значение
  • Если вы хотите выделить каждую строку, содержащую определенное слово, просто введите это слово без «=»

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

Чтобы убить приложение:

app.kill()

Шаг 5. Графики

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

Важность функции

Этот параметр позволяет сравнивать важность признаков подмножества. Полезно обнаруживать конкретное поведение в подмножестве.

subset = [ 168, 54, 995, 799, 310, 322, 1374,
          1106, 232, 645, 1170, 1229, 703, 66,  
          886, 160, 191, 1183, 1037, 991, 482,  
          725, 410, 59, 28, 719, 337, 36 ]
xpl.plot.features_importance(selection=subset)

График влияния

Графики вклада используются для ответа на такие вопросы, как:

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

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

xpl.plot.contribution_plot("OverallQual")

График влияния, примененный к непрерывному объекту.

Случай классификации: классификатор «Титаник» - график влияния, примененный к категориальному объекту.

Местный участок

Вы можете использовать локальные графики для локальной объяснимости моделей.

Методы filter () и local_plot () позволяют протестировать и выбрать лучший способ обобщить сигнал, который уловила модель. Вы можете использовать его на этапе исследования. Затем вы можете развернуть это резюме в производственной среде, чтобы конечный пользователь за несколько секунд понял, какие критерии являются наиболее важными для каждой рекомендации.

Мы опубликуем вторую статью, чтобы объяснить, как использовать локальную объяснимость в продакшене.

Комбинируйте фильтр и метод local_plot

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

  • max_contrib: максимальное количество критериев для отображения
  • порог: минимальное значение вклада (в абсолютном значении), необходимое для отображения критерия
  • положительный: отображать только положительный вклад? Отрицательный? (по умолчанию нет)
  • features_to_hide: список функций, которые вы не хотите отображать

После определения этих параметров мы можем отобразить результаты с помощью метода local_plot () или экспортировать их с помощью to_pandas ().

xpl.filter(max_contrib=8,threshold=100)
xpl.plot.local_plot(index=560)

Export to pandas DataFrame:

xpl.filter(max_contrib=3,threshold=1000)
summary_df = xpl.to_pandas()
summary_df.head()

Сравнить график

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

xpl.plot.compare_plot(row_num=[0, 1, 2, 3, 4], max_features=8)

Мы надеемся, что Шапаш будет полезен в укреплении доверия к ИИ. Заранее благодарим всех, кто поделится с нами своими отзывами, идеями… Shapash с открытым исходным кодом! Не стесняйтесь вносить свой вклад, комментируя этот пост или непосредственно в обсуждениях GitHub.