Брайан Раш, старший инженер-программист, Capax Global

Этот рассказ призван дать краткую справку о том, что такое Microsoft Azure Machine Learning Studio (AMLS), и, что более важно, с точки зрения разработчика. В этой статье я собираюсь показать, как разработчики могут подключиться к AMLS из приложений, используя успехи, достигнутые в области машинного обучения, и применяя эти методы непосредственно в приложениях. Важный отказ от ответственности: эта статья никоим образом не касается науки о данных. Эта тема сама по себе представляет собой целую дисциплину. В этой статье рассказывается, как мы можем использовать модели науки о данных в наших приложениях.

Вы часто слышите термин демократизация машинного обучения. AMLS - один из примеров этого. AMLS предлагает доступ ко многим сложным моделям машинного обучения через простой графический пользовательский интерфейс (в моей голове у меня есть вольная аналогия - SSIS). Для этого не требуется докторская степень. в статистике, чтобы использовать некоторые очень сложные алгоритмы машинного обучения. Конечно, необходимо понимание того, какие алгоритмы использовать и когда их использовать, но мы не пишем код, скажем, для анализа линейной регрессии.

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

Что такое Студия машинного обучения Azure

AMLS - это облачный инструмент для совместной работы с перетаскиванием, который можно использовать для создания, тестирования и развертывания решений для прогнозной аналитики данных. Одним из аспектов, который становится непосредственно полезным для наших приложений, является то, что AMLS может публиковать модели машинного обучения в виде веб-сервисов, которые мы затем можем использовать из наших пользовательских приложений или инструментов бизнес-аналитики, таких как Excel, Power BI, или любого пользовательского приложения.

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

Как начать?

Microsoft предлагает бесплатное рабочее пространство AMLS. Отличное место для разработчиков, где можно надеть шляпу специалиста по данным и попробовать что-нибудь.

Зарегистрируйте здесь бесплатную учетную запись.

Я настоятельно рекомендую подписаться на бесплатное рабочее место и повозиться. Это дивный новый мир!

Что я могу делать в Студии машинного обучения Azure

Благодаря AMLS вы получаете визуальное рабочее пространство, в котором вы можете создавать, тестировать и повторять модели машинного обучения. Вы можете перетаскивать наборы данных и включать проверенные, готовые к использованию аналитические модули (подумайте об известных алгоритмах, таких как линейная регрессия ) на интерактивный холст. Объединяйте данные и алгоритмы в рабочий процесс, чтобы проводить эксперименты с машинным обучением. Вы используете AMLS для проведения экспериментов, просмотра результатов, оценки результатов и итераций. Когда вы будете удовлетворены своим экспериментом с машинным обучением, вы можете опубликовать его в веб-службе, которая, в свою очередь, сделает его полезным для потребителей - точно так же, как приложения. На следующей диаграмме показан тип рабочего процесса в рамках AMLS.

Какие бизнес-проблемы можно решить с помощью Студии машинного обучения Azure?

В наш век больших данных, как мы можем использовать эти данные для принятия важных бизнес-решений? Наличие данных в сочетании с применением методов и алгоритмов машинного обучения на основе этих данных может привести к важным бизнес-решениям. Вот типы вопросов и ответов, на которые может помочь AMLS:

  1. Я хочу кое-что предсказать. Примеры включают такие вещи, как желание спрогнозировать спрос на продукт, будущий рост продаж или необходимость обслуживания оборудования. Все они относятся к категории предсказаний с помощью машинного обучения с помощью алгоритмов регрессии.
  2. Я хочу находить необычные вещи. Примеры включают прогнозирование дефолта по кредитам, выявление мошенничества с кредитными картами или обнаружение сбоев оборудования. Все эти примеры относятся к категории машинного обучения с помощью алгоритмов обнаружения аномалий.
  3. Я хочу найти структуру. Примеры включают сегментацию клиентов, сегментацию голосующих, прогнозирование предпочтений клиентов или прогнозирование того, какие продукты и кем обычно покупаются вместе. Все они попадают в категорию машинного обучения с помощью алгоритмов кластеризации.
  4. Я хочу делать прогнозы между двумя вещами. Примеры: положительный ли этот твит? Это письмо положительное? Какие купоны приносят больше всего продаж? Все они попадают в категорию двух алгоритмов классификации классов.
  5. Я хочу делать прогнозы между многими вещами. Примеры включают в себя настроение этого твита, какую услугу, скорее всего, выберет покупатель, или какие рекламные акции привлекают больше всего клиентов. Они попадают в категорию машинного обучения с помощью алгоритмов классификации.

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

Какие инструменты предоставляет Студия машинного обучения Azure

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

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

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

  • Наборы данных - данные загружаются или извлекаются в наших экспериментах и ​​включаются в наши модели машинного обучения.
  • Модули - набор кода, который может выполняться независимо и выполнять задачу машинного обучения с учетом необходимых входных данных. Модуль может содержать конкретный алгоритм или выполнять важную для машинного обучения задачу, например замену отсутствующих значений или статистический анализ. Сюда входят известные алгоритмы и языки программирования, такие как R и Python. "Более подробную информацию можно найти здесь."
  • Потоки данных. Это наглядное представление того, как протекают наши эксперименты. Думайте об этом как о пакете SSIS, в котором у нас есть поток данных через процесс ETL. Точно так же есть процесс машинного обучения.

Веб-службы. С точки зрения разработчика, это наиболее полезно для нас. Здесь мы развертываем наши эксперименты с веб-службами, чтобы они могли использоваться нашими приложениями.

Блокноты - созданные вами блокноты Jupyter, которые можно использовать в наших экспериментах.

Наборы данных - используемые в наших экспериментах наборы данных, которые вы загрузили в AMLS.

Обученные модели - модели, которые вы обучили в экспериментах и ​​сохранили в Studio.

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

«Это все здорово, но покажите мне, насколько все это действительно имеет значение для меня как разработчика и приложений, которые я создаю…»

Не утомляйте нас, переходите к припеву ...

Я полностью согласен с этим мнением. Вся приведенная выше информация предназначена только для ознакомления и краткого понимания того, что такое AMLS. Мы должны с чего-то начать, правда?…

Давайте поговорим о конкретном примере того, как все это можно включить в приложение.

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

Что, если бы мы могли знать прямо здесь, во время заполнения заявки, такие вещи, как:

A) Является ли этот заявитель высоким кредитным риском

Б) Этот кандидат, вероятно, имеет низкий кредитный риск, поэтому давайте предварительно утвердим его

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

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

Машинное обучение в действии

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

  • Создание рабочего пространства Студии машинного обучения
  • Загрузка и использование существующих данных в эксперименте с машинным обучением
  • Обучение эксперименту с машинным обучением

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

Публикация машинного обучения в веб-сервисах

Итак, теперь мы говорим на языке разработчиков. В постоянно распространенной микросервисе - экосистеме API - мы добавляем в эту экосистему веб-сервисы, использующие машинное обучение. Давайте углубимся в это немного подробнее.

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

Кредитный эксперимент должен выглядеть примерно так в AMLS перед публикацией в веб-сервисе:

Следующий шаг внутри AMLS - настроить этот эксперимент как прогнозирующую веб-службу. Мы делаем это, выбирая пункт меню Setup Web Service:

После публикации веб-службы вы увидите в AMLS что-то вроде следующего:

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

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

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

Другая важная информация от AMLS - это ключ API. Это дает нам информацию, необходимую для подключения и использования этой прогнозирующей веб-службы, скажем, из какого-нибудь веб-приложения C #. В нашем случае это веб-сайт приложения кредитной карты. После публикации веб-службы внутри AMLS мы увидим запись с подробным описанием нашей новой службы:

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

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

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

Используйте прогнозирующую веб-службу

В этом последнем разделе подробно описано, как мы можем закодировать наши приложения C # для использования веб-сервисов, опубликованных через AMLS. Ключевым моментом здесь является то, что эта веб-служба прогнозирования кредитного риска ничем не отличается от любой другой службы REST API, с которой мы все знакомы. В нашем примере процесса подачи заявки на кредитную карту во время сохранения приложения мы можем создать запрос API к веб-службе кредитного риска, получить ответ и действовать соответствующим образом. В этом конкретном примере мы можем получить вероятность кредитного риска на основе входных параметров.

Ниже приведен пример запроса C # к службе:

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace CallRequestResponseService
{
    class Program
    {
        static void Main(string[] args)
        {
            InvokeRequestResponseService().Wait();
        }

        static async Task InvokeRequestResponseService()
        {
            using (var client = new HttpClient())
            {
/*
Here we are setting up all the required input parameters for the predictive webservice 
*/
                var scoreRequest = new
                {
                    Inputs = new Dictionary<string, List<Dictionary<string, string>>> () {
                        {
                            "input1",
                            // Replace columns labels with those used in your dataset
                            new List<Dictionary<string, string>>(){new Dictionary<string, string>(){
                                    {
                                        "column1", "value1"
                                    },
                                    {
                                        "column2", "value2"
                                    },
                                    {
                                        "column3", "value3"
                                    }
                                }
                            }
                        },
                    },
                    GlobalParameters = new Dictionary<string, string>() {}
                };

                // Replace these values with your API key and URI found on https://services.azureml.net/
                const string apiKey = "<your-api-key>"; 
                const string apiUri = "<your-api-uri>";

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Bearer", apiKey);
                client.BaseAddress = new Uri(apiUri);

                // WARNING: The 'await' statement below can result in a deadlock
                // if you are calling this code from the UI thread of an ASP.Net application.
                // One way to address this would be to call ConfigureAwait(false)
                // so that the execution does not attempt to resume on the original context.
                // For instance, replace code such as:
                //      result = await DoSomeTask()
                // with the following:
                //      result = await DoSomeTask().ConfigureAwait(false)

                HttpResponseMessage response = await client.PostAsJsonAsync("", scoreRequest);

                if (response.IsSuccessStatusCode)
                {
                    string result = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("Result: {0}", result);
                }
                else
                {
                    Console.WriteLine(string.Format("The request failed with status code: {0}", response.StatusCode));

                    // Print the headers - they include the request ID and the timestamp,
                    // which are useful for debugging the failure
                    Console.WriteLine(response.Headers.ToString());

                    string responseContent = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseContent);
                }
            }
        }
    }
}

А вот пример JavaScript для клиентской версии взаимодействия с нашей прогнозирующей веб-службой:

let req = require("request");

const uri = "<your-api-uri>";
const apiKey = "<your-api-key>";

let data = {
    "Inputs": {
        "input1":
        [
            {
                'column1': "value1",
                'column2': "value2",
                'column3': "value3"
            }
        ],
    },
    "GlobalParameters": {}
}

const options = {
    uri: uri,
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + apiKey,
    },
    body: JSON.stringify(data)
}

req(options, (err, res, body) => {
    if (!err && res.statusCode == 200) {
        console.log(body);
    } else {
        console.log("The request failed with status code: " + res.statusCode);
    }
});

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

В целом AMLS кажется действительно мощным. Интерфейс, похоже, использует концепции, аналогичные другим инструментам, таким как SSIS, фабрика данных Azure и даже Visual Studio. Я уверен, что специалисты по чистым данным могут сказать, что AMLS не обладает всеми необходимыми функциями, которые они обычно используют в своей повседневной работе. Это может быть справедливым аргументом. Поскольку я не специалист по данным, я не могу полностью прокомментировать это мнение. При этом функции добавляются часто, и я уверен, что со временем это будет полноценный набор технологий машинного обучения. Недавние опросы, проведенные с использованием R, Python и Jupyter Notebook, показывают, что на первый план выходит обслуживание специалистов по анализу данных. Подобно Visual Studio, AMLS со временем будет развиваться и развиваться. Мне он уже кажется чрезвычайно надежным. Приглашаю вас узнать больше о AMLS здесь.