Введение

Машинное обучение (ML) стало фундаментальной опорой во многих секторах цифровой экономики. Однако разработка моделей машинного обучения — это лишь часть задачи. Управление этими моделями, включая их разработку, развертывание и мониторинг, одинаково важно, но часто упускается из виду. Здесь пригодятся такие инструменты, как MLflow.

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

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

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

Первым шагом в любой задаче машинного обучения является подготовка данных. В нашем случае мы используем набор данных creditcard.csv, который доступен для загрузки с Kaggle по этому URL-адресу: https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud. Этот набор данных содержит транзакции, совершенные с помощью кредитных карт, где у нас есть 492 случая мошенничества из 284 807 транзакций. Набор данных сильно несбалансирован, на положительный класс (мошенничество) приходится 0,172% всех транзакций.

Начнем с загрузки наших данных:

import pandas as pd

data_path = "creditcard.csv"
df = pd.read_csv(data_path)

Набор данных содержит столбец Time, который нам не нужен для нашей модели, поэтому мы его удалим:

df = df.drop("Time", axis=1)

Затем мы отделяем функции от целевой переменной. Нашей целевой переменной является столбец «Класс», который указывает, является ли транзакция мошеннической (1) или нет (0):

X = df.iloc[:, :-1]  # all features
y = df['Class']  # target variable

Затем данные разбиваются на наборы для обучения и тестирования, при этом 70% данных используются для обучения модели, а 30% зарезервированы для тестирования:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Создание и регистрация модели

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

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

import mlflow

mlflow.set_experiment('fraud_detection_experiment')

Затем мы начинаем новый запуск этого эксперимента. Прогон — это однократное выполнение кода и обучение модели:

with mlflow.start_run():

Внутри прогона мы определяем нашу модель и обучаем ее:

from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(max_iter=5000, random_state=42)
clf.fit(X_train, y_train)

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

predictions = clf.predict(X_test)

mlflow.sklearn.log_model(clf, "model")
mlflow.log_metric("accuracy", accuracy_score(y_test, predictions))

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

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score# Continue from the previous message

print("Model accuracy: ", accuracy_score(y_test, predictions))
print("Confusion Matrix: \n", confusion_matrix(y_test, predictions))
print("Classification Report: \n", classification_report(y_test, predictions))

Использование модели для прогнозирования

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

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

  1. Откройте веб-браузер и перейдите к http://127.0.0.1:5001. Этот адрес приведет вас к пользовательскому интерфейсу отслеживания MLflow. MLflow работает на своем порту по умолчанию, который равен 5000, если вы не хотите запускать какой-либо конкретный порт.
  2. После загрузки страницы вы увидите список всех запусков MLflow.
  3. Нажмите на название любого запуска в списке. Откроется страница с подробной информацией об этом конкретном запуске.

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

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

run_id = "221f510410c94fda9b1631860a95450f"
model_uri = f"runs:/{run_id}/model"
model = mlflow.pyfunc.load_model(model_uri)

Метод mlflow.pyfunc.load_model рассматривает модель как общую функцию Python. Это означает, что объект model — это функция, которая принимает кадр данных pandas в качестве входных данных и выдает предсказания модели в качестве выходных данных.

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

predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

Заключение

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

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

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

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .