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

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

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

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

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

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

Подготовка данных

Мы будем использовать Aethos, чтобы быстро подготовить данные. Для получения дополнительной информации о том, как анализировать и преобразовывать ваши наборы данных с помощью Aethos, ознакомьтесь с моим предыдущим сообщением в блоге здесь. Загрузите данные тренировки Титаника из репозитория Aethos.

import aethos as at
import pandas as pd
data = pd.read_csv('https://raw.githubusercontent.com/Ashton-Sidhu/aethos/develop/examples/data/train.csv')

Передайте данные в Aethos.

df = at.Data(data, target_field='Survived')

Основное внимание в этой статье уделяется моделированию, поэтому давайте быстро обработаем данные. Мы собираемся использовать функции Survived, Pclass, Sex, Age, Fare и Embarked. вставить сюда

df.drop(keep=['Survived', 'Pclass', 'Sex', 'Age', 'Fare', 'Embarked'])
df.standardize_column_names()

Замените отсутствующие значения в столбцах «Возраст» и «Вступил».

df.replace_missing_median('age')
df.replace_missing_mostcommon('embarked')

Нормализуйте значения в столбцах Age и Fare и One Hot Encode для функций Sex, Pclass и Embarked.

df.onehot_encode('sex', 'pclass', 'embarked', keep_col=False)
df.normalize_numeric('fare', 'age')

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

Моделирование

Чтобы обучить модели Sklearn, XGBoost, LightGBM и т. Д. С помощью Aethos, сначала перейдите от объекта обработки данных к объекту Model.

model = at.Model(df)

Объект модели ведет себя так же, как объект Data, поэтому, если у вас есть данные, которые уже были обработаны, вы можете инициировать объект Model так же, как объект Data.

Затем мы собираемся включить отслеживание экспериментов с помощью MLFlow.

at.options.track_experiments = True

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

lr = model.LogisticRegression(C=0.1)

Чтобы обучить модель с оптимальными параметрами с помощью Gridsearch, укажите параметр gridsearch при инициализации модели.

lr = model.LogisticRegression(gridsearch={'C': [0.01, 0.1]}, tol=0.001)

Это вернет модель с оптимальными параметрами, определенными вашим методом оценки Gridsearch.

Наконец, если вы хотите провести перекрестную проверку своих моделей, есть несколько вариантов:

lr = model.LogisticRegression(cv=5, C=0.001)

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

Вы также можете использовать его с Gridsearch:

lr = model.LogisticRegression(cv=5, gridsearch={'C': [0.01, 0.1]}, tol=0.001)

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

Чтобы обучить несколько моделей одновременно (последовательно или параллельно), укажите параметр run при определении вашей модели.

lr = model.LogisticRegression(cv=5, gridsearch={'C': [0.01, 0.1]}, tol=0.001, run=False)

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

model.DecisionTreeClassification(run=False)
model.RandomForestClassification(run=False)
model.LightGBMClassification(run=False)

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

model.list_models()

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

dt, rf, lgbm = model.run_models()

Теперь вы можете пойти выпить кофе или перекусить, пока все ваши модели тренируются одновременно!

Анализ моделей

У каждой модели, которую вы тренируете, по умолчанию есть имя. Это позволяет вам обучать несколько версий одной и той же модели с одним и тем же объектом модели и API, сохраняя при этом доступ к результатам каждой отдельной модели. Вы можете увидеть название каждой модели по умолчанию в заголовке функции, нажав Shift + Tab в Jupyter Notebook.

Вы также можете изменить имя модели, указав имя по вашему выбору при инициализации функции.

Во-первых, давайте сравним все модели, которые мы обучили друг другу:

model.compare_models()

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

at.options.project_metrics = ['Accuracy', 'Balanced Accuracy', 'Zero One Loss']

Теперь при сравнении моделей вы увидите только метрики проекта.

model.compare_models()

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

dt.metrics() # Shows metrics for the Decision Tree model
rf.metrics() # Shows metrics for the Random Forest model
lgbm.metrics() # Shows metrics for the LightGBM model

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

dt.confusion_matrix(output_file='confusion_matrix.png') # Confusion matrix for the Decision Tree model

rf.confusion_matrix(output_file='confusion_matrix.png') # Confusion matrix for the random forest model

Интерпретация моделей

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

Указав параметр output_file, Aethos знает, что нужно сохранять и отслеживать этот артефакт для конкретной модели.

lgbm.decision_plot(output_file='decision_plot.png')

lgbm.force_plot(output_file='force_plot.png')

lgbm.shap_get_misclassified_index()
# [2, 10, 21, 38, 43, 57, 62, 69, 70, 85, 89, 91, 96, 98, 108, 117, 128, 129, 139, 141, 146, 156, 165, 167, 169]
lgbm.force_plot(2, output_file='force_plot_2.png')

lgbm.summary_plot(output_file='summary_plot.png')

lgbm.dependence_plot('fare', output_file='dep_plot.png')

Для более автоматизированной работы запустите:

lgbm.interpret_model()

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

Просмотр моделей в MLFlow

Когда мы тренировали модели и просматривали результаты, наши эксперименты отслеживались автоматически. Если вы запустите aethos mlflow-ui из командной строки, будет запущен локальный экземпляр MLFlow для просмотра результатов и артефактов ваших экспериментов. Перейдите к localhost: 10000.

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

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

Примечание. Кривые обучения с перекрестной проверкой и графики среднего балла всегда сохраняются как артефакты.

Чтобы изменить имя эксперимента (по умолчанию это мой эксперимент), укажите имя при запуске объекта Модель (exp_name), в противном случае каждая модель будет добавлена ​​в мой эксперимент.

Обслуживающие модели

После того, как вы выбрали модель, которую хотите использовать для прогнозов, вы можете легко сгенерировать необходимые файлы для обслуживания модели с помощью RESTful API, используя FastAPI и Gunicorn.

dt.to_service('titanic')

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

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

docker build -t titanic:1.0.0 ./
docker run -d --name titanic -p 1234:80 titanic:1.0.0

Теперь перейдите к localhost: 1234 / docs, чтобы протестировать свой API. Теперь вы можете выполнять прогнозы, отправляя запросы POST на адрес 127.0.0.1:1234/predict.

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

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

Что еще ты можешь сделать?

Хотя этот пост представляет собой частично исчерпывающее руководство по моделированию с помощью Aethos, вы также можете запускать статистические тесты, такие как T-Test, Anovas, использовать предварительно обученные модели, такие как BERT и XLNet, для анализа настроений и ответов на вопросы, выполнять извлекающее суммирование с помощью TextRank, обучать модель Gensim LDA, а также модели кластеризации, обнаружения аномалий и регрессии.

Полный пример можно увидеть здесь!

Обратная связь

Я приветствую все отзывы об этом посте или об Aethos. Вы можете написать мне в twitter или написать на [email protected].

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