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

Я Кэмерон Тейлор, консультант по решениям в SAS в отделе анализа мошенничества и безопасности. В SAS мы понимаем, что ресурсы с открытым исходным кодом стали популярными, и поддержка использования этих ресурсов растет с каждым днем. Еще до начала своей профессиональной карьеры я регулярно использовал модели с открытым исходным кодом во время учебы в аспирантуре по бизнес-аналитике. С точки зрения бизнеса модели с открытым исходным кодом имеют практическое применение во всех сферах бизнеса.

В сфере мошенничества многие из наших клиентов предпочитают использовать инструменты SAS в сочетании с моделями машинного обучения с открытым исходным кодом, в частности с моделями Python! Один из наиболее часто задаваемых вопросов: «Можем ли мы интегрировать модели Python в платформу SAS Viya?» Ответ - да! На самом деле их объединение повысит удобство использования любых моделей Python с открытым исходным кодом.

Как SAS может помочь

Для корпоративных разработчиков, специалистов по данным и аналитиков важно иметь свободу выбора между различными языками программирования, инструментами и подходами. Возможность эффективно перемещать аналитические модели в центральный репозиторий для мониторинга и развертывания имеет первостепенное значение. С SAS Viya Platform вы можете легко интегрировать языки программирования с открытым исходным кодом, такие как R, Python и Java. SAS Viya упрощает развертывание аналитических моделей и управление ими путем регистрации и развертывания моделей с открытым исходным кодом.

Пример использования Open-Source и SAS

В этой статье я использую Jupyter Notebook для создания и обучения моделей Python с открытым исходным кодом, а затем импортирую их в общий репозиторий моделей. Этот репозиторий моделей мы называем SAS Model Manager. Мы можем сравнить эти модели Python с открытым исходным кодом с моделями, созданными с помощью инструментов SAS. Мы будем использовать пакет sasctl и модуль pzmm, которые позволяют легко помещать модели в центральный репозиторий и сохранять связанные с ними важные метаданные.

Что такое сасктл?

Пакет sasctl обеспечивает простую связь между платформой SAS Viya и Python.

Что такое пзмм?

Python Zip Model Management, или pzmm, включен в пакет sasctl. Модуль pzmm позволяет пользователям импортировать модели Python в общий репозиторий моделей.

Набор данных

Для создания наших моделей SAS и Python мы используем набор данных о мошенничестве для транзакций по кредитным картам. Набор данных содержит следующие переменные:

  1. Код категории продавца: четырехзначное число, описывающее коммерческую деятельность продавца.
  2. Имя продавца: Название бизнеса продавца
  3. Торговый город: название города, связанное с местонахождением торговца.
  4. Торговое государство: двухбуквенная аббревиатура штата, связанная с местонахождением продавца.
  5. Почтовый индекс продавца: почтовый индекс, связанный с местонахождением продавца.
  6. Код страны продавца: трехзначный номер, связанный с местонахождением продавца.
  7. Номер кредитной карты: номер кредитной карты, использованной в транзакции.
  8. Дата транзакции: дата, связанная с транзакцией по кредитной карте.
  9. Время транзакции: время, связанное с транзакцией по кредитной карте.
  10. Сумма транзакции: сумма, связанная с транзакцией по кредитной карте, зарегистрированная в долларах США.
  11. Точка продажи: режим входа для кредитной карты. Например, 81 = Интернет, 01 = Вручную (ввод с ключа)
  12. Индикатор поездки: N = владелец карты не путешествует, Y = владелец карты находится в поездке
  13. Мошенничество: 0 = не мошенничество, 1 = мошенничество

Модели Python с открытым исходным кодом

Давайте сначала посмотрим, как мы можем создать наши модели Python в Jupyter Notebook, а затем импортировать их в платформу SAS Viya. В этом примере мы создаем модели для прогнозирования мошенничества с кредитными картами. Наша целевая переменная (Fraud) — это двоичная переменная, указывающая, была ли транзакция мошеннической (1) или транзакция была законной (0). Мы хотим, чтобы наши модели предсказывали, когда Fraud = 1 или когда транзакция была мошеннической.

Загрузка набора данных и библиотек Python

Для начала мы загружаем наш набор данных и библиотеки, необходимые для построения наших моделей Python, а также те, которые необходимы для импорта моделей в SAS Model Manager.

# Dataframes for data manipulations
import pandas as pd
pd.options.mode.chained_assignment = None
# Mathematical calculations and array handling
import numpy as np

# Data partitioning for TRAIN and TEST data sets
from sklearn.model_selection import train_test_split
# Decision tree, random forest, and gradient boosting models
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
# Model assessments 
from sklearn.metrics import classification_report, confusion_matrix

# Embedded plotting
import matplotlib.pyplot as plt 
plt.rc("font", size=14)

# Pathing support
from pathlib import Path

# sasctl interface for importing models
import sasctl.pzmm as pzmm
from sasctl import Session
import swat
fraudData = pd.read_csv('data/Credit_Card_Fraud.csv',sep= ',')
fraudData.head()

Предварительная обработка данных

Перед созданием наших моделей нам необходимо предварительно обработать данные, чтобы убедиться, что мы создаем наиболее точные модели. Мы выбираем столбцы, которые хотим оценить, выполняем разделение теста поезда 70%/30% и подставляем пропущенные значения.

predictorColumns = ['Merchant Category Code', 'Merchant Name', 'Merchant City', 'Transaction Date', 
                    'Transaction Time', 'Tramsaction Amount', 'Point of Sale', 'Travel Indicator']

targetColumn = 'Fraud'
x = fraudData[predictorColumns]
y = fraudData[targetColumn]

xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size=0.3, random_state=42)

# For missing values, impute the data set's mean value
xTest.fillna(xTest.mean(), inplace=True)
xTrain.fillna(xTrain.mean(), inplace=True)

Создание, обучение и оценка моделей Python

Затем мы создаем три различных алгоритма машинного обучения для оценки наших данных и прогнозирования мошенничества: алгоритмы дерева решений, случайного леса и повышения градиента.

treeModel = DecisionTreeClassifier(random_state=42)
treeModel = treeModel.fit(xTrain, yTrain)

forestModel = RandomForestClassifier(random_state=42)
forestModel = forestModel.fit(xTrain, yTrain)

gradientModel = GradientBoostingClassifier(random_state=42)
gradientModel = gradientModel.fit(xTrain, yTrain)

Затем мы оцениваем показатели производительности для каждой из моделей Python. Пример, показанный ниже, содержит метрики, записанные для алгоритма Gradient Boosting.

yGradientPredict = gradientModel.predict(xTest)
yGradientProba = gradientModel.predict_proba(xTest)
print(confusion_matrix(yTest, yGradientPredict))
print(classification_report(yTest, yGradientPredict))
print('Gradient Boosting Model Accuracy = ' + str(np.round(gradientModel.score(xTest, yTest)*100,2)) + '%')
              precision    recall  f1-score   support

           0       0.95      0.96      0.95       274
           1       0.48      0.42      0.45        26

    accuracy                           0.91       300
   macro avg       0.71      0.69      0.70       300
weighted avg       0.91      0.91      0.91       300

Gradient Boosting Model Accuracy = 91.0%

Зарегистрируйте модели Python в SAS Model Manager

После создания моделей Python с открытым исходным кодом вы можете зарегистрировать их на платформе SAS Viya и сравнить их с моделями, созданными с помощью инструментов SAS. Для этого мы сериализуем модели в отдельные файлы рассола и генерируем файл Python с кодом оценки для оценки модели.

modelPrefix = ['Decision_Tree', 'Random_Forest', 'Gradient_Boosting']
zipFolder = [Path.cwd() / 'data/fraudModels/',
             Path.cwd() / 'data/fraudModels/',
             Path.cwd() / 'data/fraudModels/'] 
model = [treeModel, forestModel, gradientModel]

for (m, prefix, path) in zip(model, modelPrefix, zipFolder):
    pzmm.PickleModel.pickleTrainedModel(_, m, prefix, path)

Затем мы подключаемся к текущему сеансу SAS Viya и записываем свойства и статистику соответствия, связанные с нашими моделями Python, в файлы JSON.

def writeJSONFiles(data, predict, target, zipFolder, modelPrefix):
    J = pzmm.JSONFiles()
    
    # Write input variable mapping to a json file
    J.writeVarJSON(data[predict], isInput=True, jPath=zipFolder)
    
    # Set output variables and assign an event threshold, then write output variable mapping
    outputVar = pd.DataFrame(columns=['EM_EVENTPROBABILITY', 'EM_CLASSIFICATION'], data=[[0.5, 'A']])
    J.writeVarJSON(outputVar, isInput=False, jPath=zipFolder)
    
    # Write model properties to a json file
    J.writeModelPropertiesJSON(modelName=modelPrefix,
                               modelDesc='',
                               targetVariable=target,
                               modelType='',
                               modelPredictors=predict,
                               targetEvent=1,
                               numTargetCategories=1,
                               eventProbVar='EM_EVENTPROBABILITY',
                               jPath=zipFolder,
                               modeler='sasdemo')
    
    # Write model metadata to a json file
    J.writeFileMetadataJSON(modelPrefix, jPath=zipFolder)

for (prefix, path) in zip(modelPrefix, zipFolder):
    writeJSONFiles(fraudData, predictorColumns, targetColumn, path, prefix)
def writeModelStats(xTrain, yTrain, testProba, yTest, model, target, zipFolder, conn):
    J = pzmm.JSONFiles()
    
    # Calculate train predictions
    trainProba = model.predict_proba(xTrain)
    
    # Assign data to lists of actual and predicted values
    trainData = pd.concat([yTrain.reset_index(drop=True), pd.Series(data=trainProba[:,1])], axis=1)
    testData = pd.concat([yTest.reset_index(drop=True), pd.Series(data=testProba[:,1])], axis=1)
    
    # Calculate the model statistics and write to json files
    J.calculateFitStat(trainData=trainData, testData=testData, jPath=zipFolder)
    J.generateROCLiftStat(target, 1, conn, trainData=trainData, testData=testData, jPath=zipFolder)

# Connect to the SAS Viya Platform
import getpass
username = getpass.getpass("Username: ")
password = getpass.getpass("Password: ")
hostname = getpass.getpass("Hostname: ")

# Connect using a session 
sess = Session(hostname, username, password, protocol='http')
conn = sess.as_swat()

testProba = [yTreeProba, yForestProba, yGradientProba]
for (m, proba, path) in zip(model, testProba, zipFolder):
    writeModelStats(xTrain, yTrain, proba, yTest, m, targetColumn, path, conn)

Наконец, мы архивируем файлы кода pickle, JSON и Python и импортируем zip-файл в SAS Model Manager с помощью функции pzmm.ImportModel(). Мы отправляем модели Python в проект в SAS Model Manager под названием Fraud Python Models.

I = pzmm.ImportModel()
for (prefix, path) in zip(modelPrefix, zipFolder):
    I.pzmmImportModel(path, prefix, 'Fraud Python Models', x, y, '{}.predict({})', force=True)

Зайдя в SAS Model Manager, мы видим, что был создан проект под названием Fraud Python Models.

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

Модели SAS

В рамках платформы SAS Viya мы можем выбирать из множества аналитических инструментов, которые помогают нам создавать модели машинного обучения. В этом примере мы используем SAS Model Studio.

Краткое введение в SAS Model Studio

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

В SAS Model Studio модели и аналитические процессы строятся с использованием конвейеров. Эти конвейеры создаются путем перетаскивания узлов на интерфейс. Конвейеры могут состоять из функций предварительной обработки, моделей машинного обучения и узлов сравнения.

Построение конвейера

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

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

Зарегистрируйте модель чемпиона

Теперь, когда наша чемпионская модель определена, мы можем зарегистрировать эту модель Gradient Boosting в SAS Model Manager, чтобы ее можно было сравнить с нашими моделями Python с открытым исходным кодом. Используя вкладку Сравнение конвейеров, мы выбираем модель и выбираем параметр Регистрация моделей. Показанная ниже модель успешно зарегистрирована!

Объединение моделей

Мы почти на финишной прямой! Мы создали наши модели SAS, а также наши модели Python с открытым исходным кодом. Теперь нам нужно собрать их вместе в SAS Model Manager, чтобы сравнить, как работают модели.

Краткое введение в SAS Model Manager

Наш общий репозиторий моделей в SAS Viya Platform — SAS Model Manager. SAS Model Manager предоставляет пользователям возможность отслеживать производительность модели с момента ее создания до вывода из эксплуатации, независимо от того, была ли модель построена в SAS или с использованием платформ с открытым исходным кодом. SAS Model Manager будет отображать отчеты, показывающие распад модели и оценку производительности. Вы можете ввести модели в действие, запустив их в производство. Доступные направления публикации включают Azure, GCP и AWS, и это лишь некоторые из них. У вас есть возможность запускать модели в пакетном режиме или в режиме реального времени, чтобы оценивать данные и получать полезную информацию.

Сравнение моделей SAS и Python

Давайте вернемся к нашему проекту, который содержит модели Python с открытым исходным кодом, которые мы создали в Jupyter Notebook. Название этого проекта называлось Fraud Python Models.

Если вы помните, мы зарегистрировали нашу модель Gradient Boosting, созданную в SAS Model Studio. Поскольку эта модель зарегистрирована в SAS Model Manager, мы можем импортировать ее в наш проект Fraud Python Models. Для этого мы выбираем Импорт и выбираем зарегистрированную модель.

После успешного импорта модели Gradient Boosting, созданной в SAS Model Studio, теперь у нас есть все модели в одном месте! Модель Gradient Boosting, которую мы создали в SAS, выделена красным.

В SAS Model Manager вы можете оценить, сравнить и выбрать лидера проекта. Выбрав нужные модели и нажав кнопку Сравнить, мы получим параллельное сравнение. Когда мы сравниваем модели, выходные данные возвращают свойства модели и подходящие статистические данные, такие как графики подъема и ROC. С помощью этого сравнения мы снабжаем лиц, принимающих решения, необходимой информацией, необходимой им для точного выбора лучшей модели в качестве чемпиона.

В этом примере мы выбираем модель Gradient Boosting Python, созданную в Jupyter Notebook, как лучшую прогностическую модель, выбранную из нашего пула моделей-кандидатов. Мы можем установить эту модель как чемпиона для проекта Fraud Python Model.

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

Заключение

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

Хотя в приведенном нами примере используется набор данных о мошенничестве, этот процесс не должен ограничиваться мошенничеством. Его можно применить ко всем сферам бизнеса! Здравоохранение, образование, спорт… вы можете назвать отрасль, и я готов поспорить, что используются модели с открытым исходным кодом.

Спасибо за прочтение! Если у вас есть какие-либо вопросы или вы хотите увидеть продолжение этой статьи в будущем, оставьте комментарий ниже. Увидимся в следующий раз!