Всем привет,

Добро пожаловать в серию блогов о службах машинного обучения (ML) в Azure. Большую часть времени мы знаем о возможностях AI/ML, используя когнитивные службы Azure и самые современные модели, которые у нас есть сегодня. Но сегодня я хотел бы создать серию блогов, чтобы изучить возможности машинного обучения в различных службах Azure Data и AI. Поэтому я расскажу, как мы используем ML в предложениях Azure PaaS (платформа как услуга), включая Управляемый экземпляр Azure SQL и Azure SQL DB. Не ограничиваясь этим, мы также узнаем о методах машинного обучения, таких как обнаружение аномалий и прогнозирование, с помощью нашего обозревателя данных Azure в наших будущих блогах.

Итак, не тратя на это много времени, я начну.

Введение в службы машинного обучения в Azure SQL — управляемый экземпляр

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

  1. Используйте существующий в организации инструмент ERP, выполняйте ручное задание каждый день и экспортируйте данные в определенную папку с файловым форматом XLSX/CSV/JSON.
  2. Затем выполните аналитику Excel для этих файлов CSV/XLSX (размером > 2 ГБ), используя набор инструментов для анализа данных, функции Excel, такие как ВПР, ГПР, сводные сводные данные, макс.-мин. и т. д. Наконец, создайте панель мониторинга с графиками и аналитическими данными и экспортировать его в презентацию PowerPoint.

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

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

Этот процесс автоматизирован следующим образом:

  1. Написал скрипт (хранимую процедуру), который планировал задание ERP в инструменте каждый день в 17:00 и, таким образом, экспортировал его в иерархическую папку (день, дата, время) файлов CSV/XLSX. Здесь иерархическая папка на локальном компьютере относится к своего рода иерархическому пространству имен учетных записей хранилища Azure.
  2. Затем я написал задание Python на локальном компьютере примерно через час после автоматического завершения описанного выше процесса экспорта в CSV. Это задание завершится ошибкой, скажем, если не удастся выполнить шаг 1. Но поскольку шаг 1 редко терпел неудачу, это задание Python выполнялось автоматически и открывало экспортированные файлы CSV/XLSX.
  3. Затем, как только файлы открываются с помощью вышеуказанного задания, был активирован сценарий Visual Basic (VB) для автоматического запуска макросов в файле и выполнения всего анализа с помощью заданий макросов.
  4. Наконец, когда макросы были успешно запущены, запускался еще один визуальный базовый скрипт для экспорта графиков, сгенерированных в CSV, посредством анализа задания макросов в мастерскую презентацию PowerPoint, таким образом, готовая панель мониторинга.

Фу! Наконец, эти информационные панели передавались руководству по почте каждую неделю в виде отчета. К сожалению, я не автоматизировал отправку им этого письма 🙂

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

Теперь, почему я объясняю все это выше?

Таким образом, тогда (~ 2011/2012) большая часть анализа (особенно операции, цепочка поставок, команды логистики и т. д.) выполнялась на локальных машинах с сильным преобладанием аналитики Excel. Точно так же, если бы мы хранили данные в базах данных, аналитик данных использовал большой объем SQL в сочетании с аналитикой Excel для запуска некоторых возможностей машинного обучения, таких как построение регрессионных моделей в Excel и создание нескольких отличных информационных панелей, таким образом получая информацию. Я должен сказать, что это был один из интересных уроков для меня, поскольку это заставило меня осознать боль времени оборота (TAT) в следующих областях:

  1. Ожидание экспорта данных в виде больших файлов CSV/XLSX (иногда >5 ГБ)
  2. Файлы Excel несколько раз аварийно завершают работу с размытым белым экраном на заднем плане (ожидая, что многие из них могли столкнуться с этим)
  3. В случае, если SQL-запрос, который выполнил тяжелые операции, например: объединение 4 таблиц для получения результатов, не может предоставить соответствующие данные, TAT для повторного выполнения запроса и повторного ожидания экспорта файлов в CSV/XLSX было слишком много боли я бы сказал

Было несколько вещей, с которыми я столкнулся, чтобы получить желаемые результаты. Однако это заставило меня осознать потребность во встроенных в базу данных службах машинного обучения, где я мог бы выполнять SQL-запросы, создавать сценарии R или Python в редакторе запросов к базе данных, получать результаты, а затем экспортировать меньший файл результатов в CSV или любой другой формат. другой инструмент визуализации и создавать интригующие графики.

Тогда я почувствовал потребность; однако я был беспомощен, поскольку ни один такой инструмент не предлагал такого рода предложения. Наконец, с Hadoop — аналитикой Hive, HBase, Spark и т. д. все стало намного проще для последующей аналитики. Я бы не стал вдаваться в это, так как это заслуживает отдельного рассказа. Hadoop сыграл значительную роль в моем путешествии 😊

Быстрая перемотка; Я видел одно предложение в 2016 году, когда службы машинного обучения были представлены в SQL Server 2016 (локально) как службы R. Извините, что отклоняюсь, но именно тогда мы представили службы машинного обучения в базе данных. Рисунок ниже взят из нашей документации Microsoft, опубликованной Ви Хёном. Спасибо ему за точное объяснение

Перенесемся к нашей теме. Машинное обучение теперь доступно в Azure SQL — управляемый экземпляр (SQL MI). Эта служба в SQL MI позволяет запускать сценарии R и Python в базе данных для выполнения методов машинного обучения, таких как прогнозирование, прогнозная аналитика и многое другое. Преимущество, как вы все знаете из приведенной выше истории, заключалось в том, что данные хранятся в управляемом экземпляре, а не извлекаются из другого источника через сеть или экспортируются в удаленный источник для аналитики. Таким образом, устраняем вышеуказанные болевые точки 1 и 2. Давайте запачкаем руки на одной из формулировок проблемы, где мы запускаем модели машинного обучения в Azure SQL MI.

Постановка задачи

Рассмотрим модель прогнозной аналитики в автомобильной области. Вас попросили создать модель машинного обучения для прогнозирования оставшегося срока службы двигателя (RUL). Зависимая переменная — это числовая переменная с именем RUL. Следовательно, это проблема регрессии. Далее у нас есть показания 21 датчика s1–s21 двигателя (данные IoT) и различные режимы, в которых работает транспортное средство, как переменные (ecoMode, cityMode, sportsMode). У нас есть 24 независимые переменные с идентификаторами транспортных средств для каждого транспортного средства.

В контексте изучения сервисов машинного обучения в SQL MI я исключаю очистку данных, предварительную обработку, разработку функций и т. д. Мы используем пакеты Python/R для выполнения этих шагов. Обратите внимание, что запуск любых R-скриптов со всеми пакетами, такими как ddplyr, Caret, ggplot2 и другими, — это хорошо.

Шаг 1:

Импортируйте данные датчика в таблицу BreakdownPrediction в управляемой базе данных demosqlmi. Далее мы будем использовать таблицу BreakdownPrediction для обучения модели машинного обучения. В демонстрационных целях я буду использовать показания четырех датчиков, режимы с зависимой переменной RUL.

Шаг 2:

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

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

Шаг 3:

Если шаг 2 выполнен успешно, данные начнут копироваться в вашу таблицу с сообщением об успешном выполнении после завершения. Теперь откройте новое окно запроса в SQL Server Management Studio (SSMS) и подключитесь к базе данных demosqlmi. Запросите таблицу ниже:

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

Шаг 4:

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

ВЫПОЛНИТЬ sp_execute_external_script

@language =N’R’,

@script=N'print("Привет, мир")’;

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

Шаг 5:

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

Выполните следующий запрос, чтобы создать процедуру с именем create_linear_model для построения модели линейной регрессии:

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

sp_execute_external_script выполняет сценарий R для данных из таблицы BreakdownPrediction.

Переменная @script содержит сценарий R, использующий функцию rxLinMod. Первый аргумент rxLinMod — это формула, определяющая RUL как зависящую от независимых переменных (s1, s2 и т. д.). Вторая переменная определяет набор данных.

@input_data_1 – это SQL-запрос, который устанавливает обучающие данные для обучения модели.

@input_data_1_name – это имя, присвоенное данным, возвращаемым запросом в @input_data_1. Имя набора данных используется в качестве второго аргумента функции rxLinMod.

@output_data_1_name — это имя выходного набора данных. Процедура возвращает модель в типе данных VARBINARY. Этот файл модели пригодится позже во время вывода модели.

Шаг-6

Как только процедура будет создана, мы вызовем ее, выполнив create_linear_model и сохранив нашу модель в таблице.

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

Шаг-7

Следующим шагом является проверка модели на наших тестовых данных. У нас есть несколько вариантов. Загрузите данные тестирования из файла .dat и снова используйте команду bcp, чтобы загрузить данные в таблицу и спрогнозировать с помощью сценария на шаге 8. Поскольку мы хотим протестировать образцы данных, давайте узнаем, как вставлять новые данные в существующие table и предсказать RUL для этих записей.

Шаг-8

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

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

Переменная @breakdownmodel выше содержит модель, которую мы создали на шаге 6 и сохранили модель в таблице BreakdownPrediction_model.

Функция rxPredict принимает два аргумента: модель и новые данные. Первый аргумент, current_model, представляет собой несериализованную форму @breakdownmodel. Второй аргумент, new, — это данные из запроса T-SQL, указанные в параметре @input_data_1.

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

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

Основные выводы:

  1. В этом блоге мы узнали, как запускать службы машинного обучения в Azure SQL — управляемый экземпляр. Мы реализовали модель линейной регрессии, используя некоторые встроенные функции R. Мы можем использовать несколько пакетов помимо R в службах в базе данных.
  2. Microsoft выпустила такие пакеты, как RevoScaleR и MicrosoftML для R, позволяющие нам создавать несколько моделей.
  3. Мы также можем установить несколько пакетов и фреймворков с открытым исходным кодом, таких как PyTorch, TensorFlow, Theano, Scikit-learn и Caffe2. Обратите внимание, что мы можем аналогичным образом использовать Python в качестве языка сценариев внутри хранимых процедур, подобно сценариям R, которые мы видели в этом блоге.
  4. В этом блоге мы в основном сосредоточились на построении моделей. Мы можем выполнять несколько других действий, таких как очистка данных, предварительная обработка (с использованием pandas, NumPy и т. д.), настройка гиперпараметров, оценка модели и вывод. Это точно так же, как мы используем Jupyter Notebooks/colab для создания наших моделей.

Полезные ссылки:

Дополнительная литература о внедрении служб машинного обучения в SQL Server. Особая благодарность команде сообщества Майкрософт и Ви Хёну за эту статью.

https://learn.microsoft.com/en-us/archive/msdn-magazine/2017/july/machine-learning-doing-data-science-and-ai-with-sql-server

Одна из лучших книг для понимания семейства Azure SQL и его новейших функций. Особая благодарность Шашиканту Шакья и Ахмаду Осаме за эту книгу.

«Купите профессиональное администрирование управляемой базы данных Azure SQL: эффективно управляйте и модернизируйте данные в облаке с помощью Azure SQL, 3-е издание. Книга онлайн по низким ценам в Индии | Профессиональное администрирование управляемой базы данных Azure SQL: эффективное управление и модернизация данных в облаке с помощью Azure SQL, отзывы и рейтинги 3-го издания — Amazon. в"

Вот несколько дополнительных ссылок о том, как развернуть модель линейной регрессии, разработанную на Python, в базу данных SQL Server с помощью служб машинного обучения.

https://learn.microsoft.com/bs-latn-ba/sql/machine-learning/tutorials/python-ski-rental-linear-regression-deploy-model?view=sql-server-ver15

Изучение того, как построить модель прогнозирования оттока в MS SQL Server. Это дает вам практический опыт построения модели Random Forest с нуля.

Спасибо всем за ваше время! Надеюсь, вам всем понравилось, и следите за обновлениями моих следующих блогов о машинном обучении в Azure.

Первоначально опубликовано на https://www.linkedin.com.