Azure Machine Learning для Data Scientist +20


Эта статья создана нашим другом из коммьюнити, Дмитрием Петуховым, Microsoft Certified Professional, разработчиком компании Quantum Art.
Статья — часть цикла про Fraud Detection, остальные статьи можно найти в профиле у Дмитрия.




Azure Machine Learning – облачный сервис для выполнения задач прогнозной аналитики (predictive analytics). Сервис представлен двумя компонентами: Azure ML Studio – средой разработки, доступной через web-интерфейс, и web-сервисами Azure ML.
Типичная последовательность действий data scientist'a при поиске закономерностей в наборе данных с использованием алгоритмов обучения с учителем изображена и подробно описана под хабракатом.



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

Получение данных


Элемент управления Reader позволяет загружать как структурированные, так и полуструктурированные наборы данных. Поддерживается загрузка как из реляционных СУБД (Azure SQL Database), так и данных из нереляционных источников: NoSQL (Azure Table, запросы к Hive), OData-сервисов, а также загрузка документов различных текстовых форматов из Azure Blob Storage и по URL (протокол http).

Возможен и ручной ввод данных (элемент управления Enter Data). Для целей конвертация данных различных форматов служат элементы из раздела Data Format Conversation. Доступны следующие форматы выходных данных: CSV, TSV, ARFF, SVMLight.

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


Неполнота данных / дублирующиеся данные

В общем случае исследователь имеет дело с неполными данными – обучающая выборка имеет пустые значения в данных. Элемент управления Clean Missing Data позволяет как удалить строку/столбец, содержащий пропущенные данные, так и заменить пропущенное значение на константу, среднее, медиану, моду.
Нередка ситуация, что набор содержит дублирующийся данные, которые, в свою очередь, могут заметно снизить точность предсказания будущей модели. Для удаления дублирующийся данных служит элемент управления Remove Duplicate Rows.

Исследование данных


Трансформация и очистка данных

Трансформация данных – один из этапов, требующих большого количества ручной работы, особенно, если данные для обучающей выборки берутся из различных источников: локальный CSV, распределенные файловая система (HDFS), Hive. Отсутствие инструментов, с помощью которых запросы к гетерогенным источникам можно было бы делать единообразно,  может заметно усложнить работу специалиста по анализу данных.

После загрузки данных в Azure ML исследователь не сталкивается с проблемами унифицированного доступа к гетерогенным источникам данным, а работает с данными, полученными из различных источников, единообразно. В разделе Manipulation доступны элементы управления, позволяющие делать операции inner/left/full join, проецирования, добавления и удаления столбцов, группировки данных по предикторам и даже произвольные SQL-трансформации над загруженными наборами данных (элемент управления Apply SQL Transformation).

Определение структуры (метаданных) набора данных

Элемент управления Metadata Editor позволит явно указать тип данных (string, integer, timestamp, etc.), содержащихся в определенных столбцах, отнести содержимое столбца к предикторам (feature), либо к ответам (label), а также уточнить тип шкалы предиктора: номинальная (категориальная, categorical) или абсолютная.

Наличие паттернов и аномалий

Azure ML Studio доступны многочисленные инструменты статистического анализа (раздел Statistical Functions в панели инструментов). Один из наиболее часто используемых мной — элемент управления Descriptive Statistics. С его помощью можно получить сведения о минимальном (Min) и максимальном (Max) значение, хранящемся в столбце, значение медианы (Median), арифметического среднего (Mean), значение первой (1st Quartile) и третей (3rd Quartile) квартили, стандартное отклонение (Sample Standard Deviation) и т.п.

Разбитие набора данных

При использовании алгоритмов обучения с учителем минимум один раз за эксперимент (в общем случае) придется делить набор данных на два поднабора: обучающую выборку (Training Dataset) и тестовую (Test Dataset).

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

Для задач разбития набора данных в Azure ML Studio используется элемент управления Split, которые реализует несколько стратегий разделения данных и позволяет указать пропорции данных, которые попадут в каждый из поднаборов.

Построение модели


Feature Selection

Выбор предикторов (Feature Selection) – этап, который имеет огромное влияние на точность полученной модели. Для выявления всех существенных в рамках модели предикторов и в то же время для предотвращения добавления в модель слишком большого предикторов исследователю понадобятся знания как в области математической статистики, так и в предметной области исследования.

Элемент управления Filter Based Feature Selection позволит идентифицировать предикторы в загруженном наборе данных, основываясь на корреляции Пирсона, Спирмена, Кендалла или других статистических методах. Выявление предикторов с использованием математических методов поможет на первых этапах максимально быстро создать приемлемую по модель. На заключительном же этапе уточнения модели выбор предикторов часто осуществляется на основе экспертного мнения в исследуемой области. Для явного (ручного) выделения предикторов в Azure ML используется инструмент Metadata Editor, который позволяет указать, что столбец набора данных считать предиктором.

Feature Scaling / Dimension reduction

Некоторые алгоритмы машинного обучения работают некорректно без нормализации значений предикторов (Feature Scaling). Кроме того, уменьшение количества имеющихся в модели переменных/предикторов (Dimension reduction) позволяют улучшить утилизацию ресурсов при выполнении обучающего алгоритма, избежать переобучения модели. Оба этих приема позволят уменьшить время поиска целевой функции, описывающей модель.
Элементы из этой группы функциональности находиться в разделе Scale and Reduce панели инструментов Azure ML Studio.

Применение алгоритма машинного обучения

Процесс применения алгоритма машинного обучения в Azure ML проходит следующие этапы:
инициализация модели, использующей определенный алгоритм машинного обучения (подраздел Machine Learning -> Initialize Model),
обучение модели (Machine Learning -> Train)
оценка полученной модели для обучающей и тестовой выборки (Machine Learning -> Score)
оценка полученного алгоритма (Machine Learning -> Evaluate).

В Azure ML доступны алгоритмы регрессии, классификации, кластеризации. Есть возможность настройки ключевых параметров выбранного алгоритма: так для алгоритма Multiclass Neural Network можно задать количество скрытых узлов, количества итераций обучения, начальные веса, тип нормализации и т.п. (список всех настраиваемых параметров).

Полный список алгоритмов на март 2015 года отображен на иллюстрации ниже.



Оценка модели


Как уже было упомянуто выше, для оценки модели в Azure ML Studio на панели инструментов есть подраздел Machine Learning -> Score. Причем результат оценки доступен как в виде гистограмм, так и в виде статистических показателей (минимальное, максимальное значение, медиана, среднее, математическое ожидание и т.д.).

Элемент управления Evaluate Model содержит матрицу неточностей (confusion matrix), которая содержит правильно распознанные хорошие примеры (True Positive, TP), правильно распознанные плохие примеры (True Negative, TN) и ошибки в распознании (False Positive, False Negative).

Оценка производительности модели доступна как в виде графика, так и в виде таблицы метрик: Accuracy, Precision, Recall, F1 Score.

Наибольший (но не единственный) интерес представляет показатель точности предсказания Accuracy, который рассчитывается как отношение всех успешных предсказания к полному количеству элементов в наборе: (TP + TN)/Total numbers.
Смысл, оставшихся показателей наглядно демонстрирует следующая иллюстрация:

Следующий по популярности после Accuracy показатель – AUC (Area Under Curve). AUC лежит в интервале от 0 до 1; значения близкие 0,5 говорят, что модель работает с той же эффективностью, как если бы вы подкидывали монету и на основе выпадения одной из сторон монеты делали предположение к какому классу относится событие. Тем ближе AUC к 1, тем более точна модель. Для каждого уровня Threshold свой график AUC.
Более подробно о показателях производительности алгоритмов в в Azure ML можно прочитать здесь.

Публикация модели


Модели, построенные и рассчитанные в Azure ML Studio можно развернуть в виде масштабируемого, отказоустойчивого веб-сервиса.

Сервис работает в 2-ух режимах: пакетный режим (асинхронный ответ от сервиса, SLA 99.9%) и режим Request/Response с низкой задержкой (синхронный ответ, SLA 99.95%).
Сервис получает и отправляет сообщения в формате application/json по https. Для доступа к сервису выдается API Key – ключ доступа, включаемый в header запроса.
Есть возможность добавить произвольное количество конечных точек, через которые можно получить доступ к сервису. Для каждой конечной точки можно настроить Throttle Level, что безусловно является достоинством. Недостатком же является то, что этих уровней всего два – High и Low – и нет никакой возможности задать этот уровень вручную, скажем, на 10240 запросов/сек. Еще одна странность – это то, что у всех конечных точек единый API Key.

После создания сервиса становится доступна страница документации по API сервиса, которая кроме общего описания сервиса, описания форматов ожидаемых входных и выходных сообщений, содержит еще и примеры вызова сервиса на C#, Python и R.
Кроме того, успешной моделью всегда можно поделиться с community в Azure ML Gallery, в которой уже сейчас много интересных экспериментов. Если ваша модель представляет большую общественную ценность, то воспользуйтесь возможностью опубликовать сервис, предоставляющий доступ к модели, в магазине SaaS-приложений Microsoft Azure Marketplace. В свою очередь Azure Marketplace уже содержит большой количество data-сервисов, доступных как бесплатно, так по подписке (например, за каждые 10К запросов).

Недостатки


В Azure ML, как и во многих сервисах облачной платформы Azure, есть несколько уровней (tier) предоставления сервиса. В Azure ML это уровни Free и Standard. Free обойдется вам в минимальную (почти нулевую) сумму и отлично подойдет для первоначального знакомства с сервисом. Уровень Standart – это enterprise-уровень, свободный от большого количества искусственных ограничений, имеющихся у Free Tier. Поэтому далее я буду говорить только о Standart Tier.

Я не скажу, что то, что перечислю ниже это ограничения, это скорее вещи, которые мне остались неясны.

Ложка дегтя для Azure ML Experiment


Я не нашел в документации по Azure ML указания на максимальный размер входных данных (в Гб), есть ли (и какие) ограничения на количество столбцов (предикторов) и строк (прецедентов) у доступных в Azure ML алгоритмов обучения. Если эти ограничения есть, то важность этих знаний при проектировании аналитической системы трудно переоценить.

Ложка дегтя для Azure ML Web Services


Неизвестно: максимальное количество одновременных запросов к одной конечной точке (endpoint) и максимальное количество конечных точек. Всего в одном месте я нашел следующие цифры (не берусь судить об их актуальности): максимум 20 параллельных запросов на одну конечную точку, максимум 80 конечных точек. Я проверил длительность вызова для одного моего Azure ML web-сервиса, находящегося в регионе US Central South (клиент, отправляющий запросы, находился в том же ДЦ). Время ожидания ответа в режиме сервиса Request/Response составляет около 0,4 секунды.
Отсюда можно посчитать, что производительность более 5К (20*80*1/0,4) запросов в секунду, в моем конкретном случае, ожидать не стоит. Данное ограничение масштабируемости приложения также необходимо учитывать при проектировании.

И, последнее, не хватает возможности настройки прав для каждой конечной точки в отдельности. Но для того, чтобы эти права выдавать для каждой конечной точки нужен персональный endpoint API Key (или другое средство аутентификации), а такая возможность пока в Azure ML отсутствует.

Killer Feature (вместо заключения)


Стоит отметить, что функциональности встроенных инструментов Azure ML Studio по каким-то причинам не хватает, исследователям доступна возможность написания и выполнения в проекте скриптов, написанных на R (quickstart) и Python (quickstart) – популярнейшие языки программирования в области научных исследований данных.
А еще говорят, что все это можно попробовать бесплатно. Кому покажется мало, здесь цены на Free и Standart Tier.

Дополнительные источники




К сожалению, не доступен сервер mySQL