<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nikita+Yegorov</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nikita+Yegorov"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Nikita_Yegorov"/>
		<updated>2026-05-19T14:11:39Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72775</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72775"/>
				<updated>2020-02-24T20:15:50Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' {{---}} это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа {{---}} понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 {{---}} минимально допустимым значением, 0.9 {{---}} оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров  для быстрого масштабирования количества контейнеров по мере увеличения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения модели, которая выглядит работающей, но, на самом деле, таковой не является, например, когда устаревший набор данных использовался в обучении или модель обучилась не на всех признаках. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72774</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72774"/>
				<updated>2020-02-24T20:00:28Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' {{---}} это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа {{---}} понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 {{---}} минимально допустимым значением, 0.9 {{---}} оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров  для быстрого масштабирования количества контейнеров по мере увеличения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения модели, которая выглядит работающей, но, на самом деле, таковой не является, например, когда устаревший набор данных использовался в обучении или модель обучилась не на всех признаках. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72773</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72773"/>
				<updated>2020-02-24T19:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров  для быстрого масштабирования количества контейнеров по мере увеличения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения модели, которая выглядит работающей, но, на самом деле, таковой не является, например, когда устаревший набор данных использовался в обучении или модель обучилась не на всех признаках. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72772</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72772"/>
				<updated>2020-02-24T19:13:24Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров  для быстрого масштабирования количества контейнеров по мере увеличения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения модели, которая выглядит работающей, но, на самом деле, таковой не является, например, когда устаревший набор данных использовался в обучении или модель обучилась не на всех признаках. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72771</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72771"/>
				<updated>2020-02-24T19:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения модели, которая выглядит работающей, но, на самом деле, таковой не является, например, когда устаревший набор данных использовался в обучении или модель обучилась не на всех признаках. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72770</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72770"/>
				<updated>2020-02-24T18:57:55Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Внедряя модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, используются в системах компании. Благодаря внедрению модели машинного обучения, компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав эффективно работающую модель, требуется ввести ее в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований, модель исполняет прогнозы в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо внедрять модель с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72769</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72769"/>
				<updated>2020-02-24T18:29:21Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных).&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски).&lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных).&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком). &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку).&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель).&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Внедрение модели машинного обучения в производство означает доступность модели для других бизнес-систем. Развертывая модель, другие системы могут отправлять ей данные и получать от модели прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря внедрению модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72768</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72768"/>
				<updated>2020-02-24T18:20:42Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготавливает и объединяет все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
&lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72752</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72752"/>
				<updated>2020-02-23T19:16:44Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72751</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72751"/>
				<updated>2020-02-23T19:16:13Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.png Источник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания [https://christophergs.github.io/assets/images/deployment.png Источник]]]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72750</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72750"/>
				<updated>2020-02-23T19:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Затем, если модель устраивает заказчика, то необходимо или внедрить модель, или, если существует возможности для улучшения, улучшить модель. Если на данном этапе несколько подходящих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрение==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72749</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72749"/>
				<updated>2020-02-23T17:40:21Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
На этом шаге происходит обучения модели. Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Далее, если модель устраивает заказчика, то нужно либо внедрять её, либо, если существует возможности для улучшения, попытаться еще ее улучшить. Если на данном этапе несколько удовлетворяющих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрени==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72748</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72748"/>
				<updated>2020-02-23T17:31:40Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Далее, если модель устраивает заказчика, то нужно либо внедрять её, либо, если существует возможности для улучшения, попытаться еще ее улучшить. Если на данном этапе несколько удовлетворяющих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
==Внедрени==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72747</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72747"/>
				<updated>2020-02-23T17:31:07Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Бизнес-анализ==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
*	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
*	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
*	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
==Оценка решения==&lt;br /&gt;
Результатом предшествующего этапа является построенная модель машинного обучения и найденные закономерности. На данном этапе происходит оценивание результатов проекта.&lt;br /&gt;
&lt;br /&gt;
Если на предыдущем этапе оценивались результаты моделирования с технической точки зрения, то здесь происходит оценка результатов с позиции достижения бизнес-целей. Например, насколько качественно полученная модель решает поставленные бизнес-задачи. Также, необходимо понять найдена ли в течении проекта какая-то новая полезная информация, которую стоит выделить отдельно. Далее необходимо проанализировать ход проекта и сформулировать его сильные и слабые стороны. Для этого нужно ответить на следующие вопросы: &lt;br /&gt;
*	Какие этапы проекта можно было сделать эффективнее?&lt;br /&gt;
*	Какие ошибки были сделаны? Возможно ли их избежать в будущем?&lt;br /&gt;
*	Были ли не сработавшие гипотезы? Если да, стоит ли их повторять? &lt;br /&gt;
*	Были ли неожиданности при реализации шагов? Как их предусмотреть в будущем? &lt;br /&gt;
&lt;br /&gt;
Далее, если модель устраивает заказчика, то нужно либо внедрять её, либо, если существует возможности для улучшения, попытаться еще ее улучшить. Если на данном этапе несколько удовлетворяющих моделей, то нужно выбрать модель, которая будет дальше внедряться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Внедрени==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72741</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72741"/>
				<updated>2020-02-23T14:22:11Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, [[Настройка гиперпараметров|перебираются гиперпараметры]], сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
1.	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
2.	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
3.	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться [https://medium.com/@elutins/grid-searching-in-machine-learning-quick-explanation-and-python-implementation-550552200596 grid-search] или [https://en.wikipedia.org/wiki/Random_search random-search].&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72724</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72724"/>
				<updated>2020-02-20T16:31:37Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
==Моделирование==&lt;br /&gt;
&lt;br /&gt;
Обучение моделей машинного обучения происходит итерационно – пробуются различные модели, перебираются гиперпараметры, сравниваются значения выбранной метрики и выбирается лучшая комбинация. &lt;br /&gt;
&lt;br /&gt;
===Выбор алгоритма===&lt;br /&gt;
Вначале нужно понять, какие модели будут использоваться. Выбор модели зависит от решаемой задачи, используемых признаков и требований по сложности (например, если модель будет дальше внедряться в Excel, то Дерево решений или AdaBoost не подойдут). При выборе модели обязательно принять во внимание следующие факторы:&lt;br /&gt;
1.	Достаточность данных (обычно, сложные модели требуют большого количества данных)&lt;br /&gt;
2.	Обработка пропусков (некоторые алгоритмы не умеют обрабатывать пропуски) &lt;br /&gt;
3.	Формат данных (для части алгоритмов потребуется конвертация данных)&lt;br /&gt;
&lt;br /&gt;
===Планирование тестирования===&lt;br /&gt;
Далее необходимо определить, на каких данных будет обучаться модель, а на каких тестироваться. Традиционный подход – это разделение набора данных на 3 части (обучение, валидация и тестирование) в пропорции 60/20/20. В данном случае обучающая выборка используется для обучения модели, а валидация и тестирование для получения значения метрики без эффекта переобучения. Более сложные стратегии обучения модели подразумевают использование различных вариантов кросс-валидации. Также на данном шаге требуется определить, как будет происходить оптимизация гиперпараметров моделей, сколько потребуется итераций для каждого алгоритма, будет ли использоваться grid-search или random-search.&lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
На данном шаге начинается цикл обучения. После каждой итерации записывается результат модели. На выходе получаем результаты для каждой модели и использованных в ней гиперпараметров. Кроме того, для моделей, у которых значение выбранной метрики превышает минимально допустимое, нужно обратить внимание на следующие особенности: &lt;br /&gt;
*	Необычные закономерности (Например, точность предсказания модели на 95% объясняется всего лишь одним признаком) &lt;br /&gt;
*	Скорость обучения модели (Если модель долго обучается, то стоит использовать более эффективный алгоритм или уменьшить обучающую выборку)&lt;br /&gt;
*	Проблемы с данными (Например, в тестовую выборку попали объекты с пропущенными значениями, и, как следствие, значение метрики было посчитано не полностью, и она не позволяет целиком оценить модель)&lt;br /&gt;
&lt;br /&gt;
===Оценка результатов===&lt;br /&gt;
После формирования списка из подходящих моделей, нужно еще раз их детально проанализировать и выбрать лучшие модели. На выходе необходимо иметь список моделей, отсортированный по объективному и/или субъективному критерию. Задачи шага: провести технический анализ качества модели (ROC, Gain, K-S и т.д.), оценить, готова ли модель к внедрению в корпоративное хранилище данных, достигаются ли заданные критерии качества, проанализировать результаты с точки зрения достижения бизнес-целей. Если критерий успешности (выбранная метрика) не достигнут, то необходимо или улучшить текущую модель, или использовать другую. Прежде чем переходить к внедрению нужно убедиться, что результат моделирования понятен и логичен. Например, прогнозируется отток клиентов и значение метрики GAIN равно 99%. Слишком хороший результат – повод проверить модель еще раз.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72680</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72680"/>
				<updated>2020-02-16T17:48:53Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем точность (англ. ''accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Настройка гиперпараметров|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72679</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72679"/>
				<updated>2020-02-16T17:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Точность(англ. ''Accuracy'') равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Настройка гиперпараметров|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72676</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72676"/>
				<updated>2020-02-16T16:17:54Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Точность равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Настройка гиперпараметров|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72673</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72673"/>
				<updated>2020-02-16T15:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Точность равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для выбора признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При выборе признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Модель алгоритма и её выбор|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72665</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72665"/>
				<updated>2020-02-13T21:52:54Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и [[Уменьшение размерности|преобразования данных для создания признаков]], используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Модель алгоритма и её выбор|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72664</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72664"/>
				<updated>2020-02-13T21:32:52Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[[Уменьшение размерности|Конструирование признаков]] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Модель алгоритма и её выбор|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72663</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72663"/>
				<updated>2020-02-13T21:31:58Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[[Уменьшение размерности|Конструирование признаков]] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки ([[Модель алгоритма и её выбор|перебор гиперпараметров]]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
* [[Модель алгоритма и её выбор]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72662</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72662"/>
				<updated>2020-02-13T21:24:56Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа задачи, которую требуется решить, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучить модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверить модель на тестовом наборе данных. &lt;br /&gt;
*	Использовать ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Определить, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72661</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72661"/>
				<updated>2020-02-13T19:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверьте модель на тестовом наборе данных. &lt;br /&gt;
*	Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Далее, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72660</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72660"/>
				<updated>2020-02-13T19:23:18Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверьте модель на тестовом наборе данных. &lt;br /&gt;
*	Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72659</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72659"/>
				<updated>2020-02-13T19:21:19Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
*	С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: данные для обучения и данные для тестирования.&lt;br /&gt;
*	Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
*	Проверьте модель на тестовом наборе данных. &lt;br /&gt;
*	Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
*	Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72658</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72658"/>
				<updated>2020-02-13T19:16:56Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить, насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72657</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72657"/>
				<updated>2020-02-13T18:46:35Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели машинного обучения [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72656</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72656"/>
				<updated>2020-02-13T18:24:26Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще использовать с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72655</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72655"/>
				<updated>2020-02-13T18:20:36Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и должны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72654</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72654"/>
				<updated>2020-02-13T18:15:23Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и обязаны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72653</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72653"/>
				<updated>2020-02-13T18:14:47Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и обязаны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72652</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72652"/>
				<updated>2020-02-13T18:14:17Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На этом этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача этого этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, который подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача этого шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах).&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные не должны содержать ошибок и обязаны быть релевантными.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже, эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 Конструирование признаков] состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации необходимо разделить набор данных случайным образом на два набора данных: &lt;br /&gt;
*	Данные для обучения. &lt;br /&gt;
*	Данные для тестирования.&lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80 гиперпараметров]), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак был случайно удален из кода. Такие проблемы, присущие машинному обучения, не приведут к ошибке на стандартных тестах.&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72651</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72651"/>
				<updated>2020-02-13T17:55:15Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения. Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального способа разработки. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять, кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами [https://ru.wikipedia.org/wiki/SMART SMART].&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие: &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате.&lt;br /&gt;
*	Финансовые риски.&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель.&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая [[Оценка качества в задачах классификации и регрессии|метрика]] будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, подчиняется некоторой закономерности. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача данного шага – понять слабые и сильные стороны в имеющихся данных, определить их достаточность, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников данных, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальными» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том, как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели машинного обучения. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты. &lt;br /&gt;
*	Электронные таблицы. &lt;br /&gt;
*	Панели мониторинга бизнес-приложения. &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в модели машинного обучения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем специфичные тесты для модели машинного обучения, но с учетом необычно больших требований к ЦП / памяти в некоторых моделях машинного обучения такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Виды ансамблей]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Ансамбли]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72647</id>
		<title>Известные наборы данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72647"/>
				<updated>2020-02-13T17:40:52Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Обзор==&lt;br /&gt;
&lt;br /&gt;
Для многих алгоритмов машинного обучения требуется большое количество данных. Кроме того, что моделям нужны данные для обучения, нужно сравнивать эффективность разных моделей. Поскольку поиск хороших наборов данных и их разметка {{---}} трудная задача, на помощь приходят уже собранные и размеченные наборы данных, для которых зачастую уже опубликованы результаты каких-то алгоритмов, и можно оценить, насколько хорошо работает исследуемая модель. &lt;br /&gt;
&lt;br /&gt;
В этой статье рассмотрены с примерами несколько популярных наборов данных. Другие классические наборы можно посмотреть, например, на википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research[https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Набор данных&lt;br /&gt;
! Какие объекты&lt;br /&gt;
! Число объектов&lt;br /&gt;
! Число классов&lt;br /&gt;
! Доля ошибок лучшего опубликованного алгоритма&lt;br /&gt;
|-&lt;br /&gt;
| Iris&lt;br /&gt;
| Данные измерений четырех параметров цветков ириса&lt;br /&gt;
| 150&lt;br /&gt;
| 3&lt;br /&gt;
| N/A, малый размер набора данных&lt;br /&gt;
|-&lt;br /&gt;
| MNIST&lt;br /&gt;
| Рукописные цифры, черно-белые изображения 32х32 пикселя&lt;br /&gt;
| 70 000&lt;br /&gt;
| 10&lt;br /&gt;
| 0.18% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.01890.pdf[https://arxiv.org/pdf/1805.01890.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CIFAR-10&lt;br /&gt;
| Фотографии объектов разных классов, цветные изображения 32х32 пикселя&lt;br /&gt;
| 60 000&lt;br /&gt;
| 10&lt;br /&gt;
| 1.23% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.09501.pdf[https://arxiv.org/pdf/1805.09501.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ImageNet&lt;br /&gt;
| Фотографии с указанием классов объектов на изображении и их позиций&lt;br /&gt;
| Больше 14 миллионов&lt;br /&gt;
| Больше 21 тысячи&lt;br /&gt;
| Большое количество различных метрик, см. ImageNet Competition. 1-5% на классификацию&lt;br /&gt;
|-&lt;br /&gt;
| Coco&lt;br /&gt;
| Фотографии сложных повседневных сцен, содержащих объекты в их естественном окружении.&lt;br /&gt;
| 328 000 изображений (более 2.5 миллионов вхождений объектов)&lt;br /&gt;
| 91&lt;br /&gt;
| Много метрик. Зависит, в частности, от площади, занимаемой объектом на изображении. &amp;lt;ref&amp;gt;http://cocodataset.org/#detection-leaderboard[http://cocodataset.org/#detection-leaderboard]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Fashion-MNIST&lt;br /&gt;
| Черно-белые фотографии различных видов одежды, 28x28 пикселей.&lt;br /&gt;
| 60000 изображений + 10000 тестовых изображений&lt;br /&gt;
| 10&lt;br /&gt;
| 3.3% (WRN40-4 8.9M params) &amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist[https://github.com/zalandoresearch/fashion-mnist]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Boston housing&lt;br /&gt;
| Данные о недвижимости в районах Бостона.&lt;br /&gt;
| 506&lt;br /&gt;
| 13&lt;br /&gt;
| RMSE-1.33055&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Iris==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Iris {{---}} небольшой набор данных для задачи классификации, опубликованный еще в 1936 году Робертом Фишером, используя данные биолога Эдгара Андерсона. В этом наборе данных представлены по 50 описаний цветков одного из трех типов {{---}} Ирис щетинистый (Iris setosa), Ирис виргинский (Iris virginica) и Ирис разноцветный (Iris versicolor). &lt;br /&gt;
&lt;br /&gt;
Для каждого цветка измерены четыре величины {{---}} длина чашелистника (англ. sepal length), ширина чашелистника (sepal width), длина лепестка (англ. petal length), ширина лепестка (англ. petal width). Все цветки промаркированы одним из трех типов, что позволяет тестировать на нем алгоритмы классификации. Интересное наблюдение {{---}} один из классов цветков линейно отделим от двух других.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Длина чашелистника&lt;br /&gt;
! Ширина чашелистника&lt;br /&gt;
! Длина лепестка&lt;br /&gt;
! Ширина лепестка&lt;br /&gt;
! Класс&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| 3.5&lt;br /&gt;
| 1.4&lt;br /&gt;
| 0.2&lt;br /&gt;
| setosa&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| 3.2&lt;br /&gt;
| 4.7&lt;br /&gt;
| 1.4&lt;br /&gt;
| versicolor&lt;br /&gt;
|-&lt;br /&gt;
| 6.3&lt;br /&gt;
| 3.3&lt;br /&gt;
| 6.0&lt;br /&gt;
| 2.5&lt;br /&gt;
| virginica&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
&lt;br /&gt;
  iris=load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  Y = iris.target&lt;br /&gt;
  X, Y = shuffle(X, Y)&lt;br /&gt;
  n = len(iris.data)&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
       type  precision    recall  f1-score   support&lt;br /&gt;
          0       1.00      1.00      1.00        28&lt;br /&gt;
          1       0.95      0.88      0.91        24&lt;br /&gt;
          2       0.88      0.96      0.92        23&lt;br /&gt;
  avg / total     0.95      0.95      0.95        75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MNIST==&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:MnistExamples.png|мини|[https://en.wikipedia.org/wiki/MNIST_database#/media/File:MnistExamples.png Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Набор данных MNIST {{---}} большой (порядка 60 000 тренировочных и 10 000 проверочных объектов, помеченных на принадлежность одному из десяти классов {{---}} какая цифра изображена на картинке) набор картинок с рукописными цифрами, часто используемый для тестирования различных алгоритмов распознавания образов. Он содержит черно-белые картинки размера 28x28 пикселей, исходно взятые из набора образцов из бюро переписи населения США, к которым были добавлены тестовые образцы, написанные студентами американских университетов.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;http://yann.lecun.com/exdb/mnist/[http://yann.lecun.com/exdb/mnist/]&amp;lt;/ref&amp;gt; MNIST можно найти список лучших результатов, достигнутых алгоритмами на это наборе данных. Так, худший из записанных результатов достигнут простым линейным классификатором (12% ошибок), а подавляющее большинство лучших результатов получены алгоритмами на основе нейронных сетей. Так, ансамбль из 35 сверточных нейронных сетей в 2012 году сумел получить всего 0.23% ошибок на наборе данных, что является очень хорошим результатом, вполне сравнимым с человеком.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой пример, скачивающий набор данных и запускающий на нем один из классификаторов. Даже с уменьшением набора данных в сто раз и не самым подходящим классификатором точность выше половины угаданных цифр {{---}} заметно лучше, чем случайная разметка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  from sklearn.datasets import fetch_mldata&lt;br /&gt;
  from numpy import arange&lt;br /&gt;
  import random&lt;br /&gt;
  from sklearn.tree import DecisionTreeClassifier&lt;br /&gt;
  from sklearn import datasets, svm, metrics&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mnist-predict.png|мини]]&lt;br /&gt;
&lt;br /&gt;
  mnist = fetch_mldata('MNIST original')&lt;br /&gt;
  indices = arange(len(mnist.data))&lt;br /&gt;
  randidx = random.sample(list(indices), 500)&lt;br /&gt;
  mnist.data = mnist.data[randidx]&lt;br /&gt;
  mnist.target = mnist.target[randidx]&lt;br /&gt;
  X = mnist.data&lt;br /&gt;
  Y = mnist.target&lt;br /&gt;
  train = len(X)//2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
     % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
    digit    precision    recall  f1-score   support&lt;br /&gt;
        0         0.68      0.58      0.62        26&lt;br /&gt;
        1         0.71      0.87      0.78        23&lt;br /&gt;
        2         0.29      0.24      0.26        25&lt;br /&gt;
        3         0.64      0.28      0.39        25&lt;br /&gt;
        4         0.50      0.54      0.52        28&lt;br /&gt;
        5         0.46      0.46      0.46        24&lt;br /&gt;
        6         0.47      0.62      0.54        24&lt;br /&gt;
        7         0.66      0.78      0.71        27&lt;br /&gt;
        8         0.32      0.60      0.42        15&lt;br /&gt;
        9         0.59      0.39      0.47        33&lt;br /&gt;
  avg/total       0.54      0.53      0.52       250&lt;br /&gt;
&lt;br /&gt;
==CIFAR-10==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Cifar-10.png|мини|[https://medium.com/@jannik.zuern/training-a-cifar-10-classifier-in-the-cloud-using-tensorflow-and-google-colab-f3a5fbdfe24d Источник]]]&lt;br /&gt;
CIFAR-10 (Canadian Institute For Advanced Research) {{---}} еще один большой набор изображений, который обычно используется для тестирования алгоритмов машинного обучения. Он содержит 60 000 цветных картинок размером 32х32 пикселя, размеченных в один из десяти классов: самолеты, автомобили, коты, олени, собаки, лягушки, лошади, корабли и грузовики. В наборе данных по 6000 картинок каждого класса. CIFAR-10 является размеченным подмножеством заметно большего набора данных, состоящего примерно из восьмидесяти миллионов изображений.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
С момента публикации CIFAR-10 вышло много статей, авторы которых пытаются добиться максимальной точности на этом наборе данных. В среднем более хорошие результаты показывают различные сверточные нейронные сети с различными вариантами настройки и дополнительной предобработки данных.&lt;br /&gt;
&lt;br /&gt;
На википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10[https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10]&amp;lt;/ref&amp;gt;  можно найти таблицу лучших публикаций с процентами ошибки на этом наборе данных. Так, лучший на сегодняшний момент алгоритм, опубликованный в мае 2018 года, допускает ошибку всего порядка 1.48%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой код, скачивающий CIFAR-10 из интернета и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  from keras.datasets import cifar10&lt;br /&gt;
  from sklearn.utils import shuffle    &lt;br /&gt;
&lt;br /&gt;
  (x_train, y_train), (x_test, y_test) = cifar10.load_data()&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ImageNet==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Imagenet.png|мини|[http://www.image-net.org/challenges/LSVRC/2014/ Источник]]]&lt;br /&gt;
&lt;br /&gt;
База данных Imagenet {{---}} проект по созданию и сопровождению массивной базы данных аннотированных изображений. Аннотация изображений происходит путем краудсорсинга сообществом. Из-за этого достигается большое количество размеченных данных.&lt;br /&gt;
&lt;br /&gt;
Особенность данного набора данных {{---}} про каждую картинку известно несколько фактов вида &amp;quot;в этом прямоугольнике есть автомобиль&amp;quot;, что в совокупности с индексом по типам объектов, которые есть на изображениях, позволяет обучить алгоритм для распознавания объектов какой-то конкретной категории. На август 2017 года в ImageNet 14 197 122 изображения, разбитых на 21 841 категорию.&lt;br /&gt;
&lt;br /&gt;
===Imagenet Challenge===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Imagenet-contest.png|мини|[https://en.wikipedia.org/wiki/File:ImageNet_error_rate_history_(just_systems).svg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Вместе с публикацией набора данных стартовал конкурс ImageNet Large Scale Visual Recognition Challenge (ILSVRC&amp;lt;ref&amp;gt;http://www.image-net.org/challenges/LSVRC/[http://www.image-net.org/challenges/LSVRC/]&amp;lt;/ref&amp;gt;). В его рамках участникам предлагается достигнуть наибольшей точности при классификации набора изображений. Организаторы использовали около тысячи различных категорий объектов, которые нужно классифицировать. На примере этого конкурса хорошо видно, как в 2010-е годы люди научились заметно лучше распознавать образы на изображениях, уже в 2017 году большинство участвующих команд преодолели порог в 95% правильных ответов. Эта задача, проблема компьютерного зрения, имеет огромное практическое значение во многих прикладных областях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==COCO==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-examples.jpg|мини|Пример изображений из MS Coco [http://cocodataset.org/images/coco-examples.jpg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
MS COCO (англ. ''Common Objects in Context'') {{---}} большой набор изображений. Состоит из более чем 330000 изображений (220000  {{---}} размеченных), с более чем 1.5 милионов объектов на них. Все объекты находятся в их естественном окружении (контексте). Изображения, как правило, содержат объекты разных классов (только 10% имеют единственный класс). Все изображения сопровождаются аннотациями, хранящихся в json формате. Подробнее о структуре аннотаций можно прочитать [http://cocodataset.org/#format-data здесь].&lt;br /&gt;
&lt;br /&gt;
COCO имеет пять типов аннотаций для разных задач:&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Обнаружение ключевых точек. Обнаружение объектов и локализация их ключевых точек.&lt;br /&gt;
* Сегментация окружения (англ. ''Stuff Segmentation''). В отличии от задачи обнаружения объектов (человек, кот, машина), здесь внимание фокусируется на том, что его окружает (трава, стена, небо). Метки классов организованы в иерархическом порядке (напр., ''stuff → outdoor-stuff → sky → clouds''). Чтобы добиться совместимости с задачей обнаружения объектов, используются следующие идентификаторы категорий:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Идентификатор&lt;br /&gt;
! Соответствие&lt;br /&gt;
|-&lt;br /&gt;
|1-91 || категории объектов (не используются в сегментации окружения)&lt;br /&gt;
|-&lt;br /&gt;
|92-182 || категории окружения&lt;br /&gt;
|-&lt;br /&gt;
|183 || категория &amp;quot;другое&amp;quot; (выбирается для &amp;quot;объектов&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
* Паноптическая сегментация (англ. ''Panoptic Segmentation'') {{---}} обединение задач семантической сегментации ([[Сегментация изображений]]) и обнаружения объектов. Задача состоит в том, чтобы классифицировать все пиксели изображения на принадлежность к некоторому классу, а также определить, к какому из экземпляров данного класса они относятся. &lt;br /&gt;
* Аннотирование изображения (англ. ''Caption Evaluation''). Генерация сопроводительной подписи к изображению.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
Результат задачи зависит от многих факторов. Например, для задачи обнаружения объекта, наилучшие результаты алгоритмы показывают на крупных объектах. &lt;br /&gt;
Более подробно с метриками можно ознакомиться [http://cocodataset.org/#detection-leaderboard здесь].&lt;br /&gt;
Приведем лишь результаты детектора [https://arxiv.org/abs/1512.03385 ResNet] (bbox) - победителя 2015 Detection Challenge.&lt;br /&gt;
Графики представляют из себя семейство кривых Pressision Recall для различных метрик.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Detection-analysis-person.jpg|мини|PR кривые для класса &amp;quot;Person&amp;quot; [http://cocodataset.org/images/detection-analysis-person.jpg оригинал]]]&lt;br /&gt;
 |[[Файл:Detection-analysis-all.jpg|мини|Усредненные значения для всех классов [http://cocodataset.org/images/detection-analysis-all.jpg оригинал]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Пример использования [https://github.com/cocodataset COCO API] на python:&lt;br /&gt;
&lt;br /&gt;
  %matplotlib inline&lt;br /&gt;
  from pycocotools.coco import COCO&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import skimage.io as io&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  import pylab&lt;br /&gt;
  pylab.rcParams['figure.figsize'] = (8.0, 10.0)&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  dataDir='..'&lt;br /&gt;
  dataType='val2017'&lt;br /&gt;
  annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)&lt;br /&gt;
  &lt;br /&gt;
  coco=COCO(annFile)&lt;br /&gt;
  &lt;br /&gt;
  cats = coco.loadCats(coco.getCatIds())&lt;br /&gt;
  nms=[cat['name'] for cat in cats]&lt;br /&gt;
  print('COCO categories: \n{}\n'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  nms = set([cat['supercategory'] for cat in cats])&lt;br /&gt;
  print('COCO supercategories: \n{}'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  # get all images containing given categories, select one at random&lt;br /&gt;
  catIds = coco.getCatIds(catNms=['person','dog','skateboard']);&lt;br /&gt;
  imgIds = coco.getImgIds(catIds=catIds );&lt;br /&gt;
  imgIds = coco.getImgIds(imgIds = [324158])&lt;br /&gt;
  img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]&lt;br /&gt;
  &lt;br /&gt;
  # load and display image&lt;br /&gt;
  # I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))&lt;br /&gt;
  # use url to load image&lt;br /&gt;
  I = io.imread(img['coco_url'])&lt;br /&gt;
  plt.axis('off')&lt;br /&gt;
  plt.imshow(I)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-1.png |мини| center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
  # load and display instance annotations&lt;br /&gt;
  plt.imshow(I); plt.axis('off')&lt;br /&gt;
  annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)&lt;br /&gt;
  anns = coco.loadAnns(annIds)&lt;br /&gt;
  coco.showAnns(anns)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-2.png|мини|center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
==Fashion-MNIST==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:FMNIST.png|мини|Пример изображений из Fashion-MNIST]]&lt;br /&gt;
Fashion-MNIST {{---}} это набор изображений, взятых из статей [https://jobs.zalando.com/en/tech/?gh_src=nevh2y1 Zalando], состоящий из обучающего набора из 60000 примеров и тестового набора из 10000 примеров. Каждый пример представляет собой черно-белое изображение 28x28, связанное с меткой из 10 классов. Создатели Fashion-MNIST предложили его в качестве прямой замены исходного набора данных MNIST, состоящего из рукописных цифр, для сравнительного анализа алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделений для обучения и тестирования. Аргументировали необходимость такой замены тем, что исходный набор данных MNIST действительно хорошо отражает возможность алгоритма хоть что-то классифицировать, но если алгоритм работает на стандартном MNIST, он все равно может не сработать на других примерах данных. Также на наборе данных MNIST научились достигать слишком высоких результатов точности (97% для классических алгоритмов машинного обучения и 99.7% для сверточных нейронных сетей), в то время как MNIST не отражает современных сложных проблем компьютерного зрения. Это позволило сделать предположение о том, что набор данных MNIST слишком простой по современным меркам и его требуется заменить.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist&amp;lt;/ref&amp;gt; набора данных можно найти список лучших результатов, достигнутых алгоритмами на этом наборе данных. Так как задача классификации набора данных Fashion-MNIST сложнее, чем в случае стандартного набора MNIST, в таблице представлены только алгоритмы глубокого обучения, т.к. только для них эта задача имеет смысл. Так, худший из записанных результатов достигнут сверточной нейронной сетью с 3 сверточными слоями и одним слоем пулинга (12.4% ошибок), а подавляющее большинство лучших результатов получены боле сложными архитектурами. Лучший результат был достигнут WRN сетью и составляет всего 3.3% ошибки.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, скачивающий Fashion-MNIST с использованием NumPy и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  import mnist_reader&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
  from sklearn.utils import shuffle&lt;br /&gt;
  x_train, y_train = mnist_reader.load_mnist('data/fashion', kind='train')&lt;br /&gt;
  x_test, y_test = mnist_reader.load_mnist('data/fashion', kind='t10k')&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
==Boston Housing==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Boston Housing содержит данные, собранные Службой переписи населения США (англ. ''U.S Census Service''), касающиеся недвижимости в районах Бостона. Набор данных состоит из 13 признаков и 506 строк и также предоставляет такую информацию, как уровень преступности (CRIM), ставка налога на недвижимость (TAX), возраст людей, которым принадлежит дом (AGE), соотношение числа учащихся и преподавателей в районе (PTRATIO) и другие. Данный набор данных используется для предсказания следующих целевых переменных: средняя стоимость дома (MEDV) и уровень закиси азота (NOX).&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Для решения задачи предсказания средней стоимости дома используется множественная линейная регрессия. Метрикой качества модели выступает корень из среднеквадратичной ошибки ([[Оценка качества в задачах классификации и регрессии|англ. ''root-mean-square error, RMSE'' ]]). В среднем, значение RMSE на данном наборе данных находится в районе 3,5-5 в зависимости от выбранной модели. Однако на соревновании на сайте [https://www.kaggle.com/sagarnildass/predicting-boston-house-prices Kaggle] пользователь [https://www.kaggle.com/c/boston-housing/leaderboard MayankSatnalika] получил результат 1.33055.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, загружающий набор данных из библиотеки sklearn с использованием NumPy и Pandas и запускающий на нем алгоритм линейной регрессии.&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  from sklearn.datasets import load_boston&lt;br /&gt;
  from sklearn.model_selection import train_test_split&lt;br /&gt;
  from sklearn.linear_model import LinearRegression&lt;br /&gt;
  from sklearn.metrics import mean_squared_error&lt;br /&gt;
  boston_dataset = load_boston()&lt;br /&gt;
  boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)&lt;br /&gt;
  boston['MEDV'] = boston_dataset.target&lt;br /&gt;
  X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT', 'RM'])&lt;br /&gt;
  Y = boston['MEDV']&lt;br /&gt;
  X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=5)&lt;br /&gt;
  lin_model = LinearRegression()&lt;br /&gt;
  lin_model.fit(X_train, Y_train)&lt;br /&gt;
  y_train_predict = lin_model.predict(X_train)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))# 5.6371293350711955&lt;br /&gt;
  y_test_predict = lin_model.predict(X_test)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))# 5.13740078470291&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;br /&gt;
[[Категория: Классификация и регрессия]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72645</id>
		<title>Известные наборы данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72645"/>
				<updated>2020-02-13T17:37:17Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Обзор==&lt;br /&gt;
&lt;br /&gt;
Для многих алгоритмов машинного обучения требуется большое количество данных. Кроме того, что моделям нужны данные для обучения, нужно сравнивать эффективность разных моделей. Поскольку поиск хороших наборов данных и их разметка {{---}} трудная задача, на помощь приходят уже собранные и размеченные наборы данных, для которых зачастую уже опубликованы результаты каких-то алгоритмов, и можно оценить, насколько хорошо работает исследуемая модель. &lt;br /&gt;
&lt;br /&gt;
В этой статье рассмотрены с примерами несколько популярных наборов данных. Другие классические наборы можно посмотреть, например, на википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research[https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Набор данных&lt;br /&gt;
! Какие объекты&lt;br /&gt;
! Число объектов&lt;br /&gt;
! Число классов&lt;br /&gt;
! Доля ошибок лучшего опубликованного алгоритма&lt;br /&gt;
|-&lt;br /&gt;
| Iris&lt;br /&gt;
| Данные измерений четырех параметров цветков ириса&lt;br /&gt;
| 150&lt;br /&gt;
| 3&lt;br /&gt;
| N/A, малый размер набора данных&lt;br /&gt;
|-&lt;br /&gt;
| MNIST&lt;br /&gt;
| Рукописные цифры, черно-белые изображения 32х32 пикселя&lt;br /&gt;
| 70 000&lt;br /&gt;
| 10&lt;br /&gt;
| 0.18% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.01890.pdf[https://arxiv.org/pdf/1805.01890.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CIFAR-10&lt;br /&gt;
| Фотографии объектов разных классов, цветные изображения 32х32 пикселя&lt;br /&gt;
| 60 000&lt;br /&gt;
| 10&lt;br /&gt;
| 1.23% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.09501.pdf[https://arxiv.org/pdf/1805.09501.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ImageNet&lt;br /&gt;
| Фотографии с указанием классов объектов на изображении и их позиций&lt;br /&gt;
| Больше 14 миллионов&lt;br /&gt;
| Больше 21 тысячи&lt;br /&gt;
| Большое количество различных метрик, см. ImageNet Competition. 1-5% на классификацию&lt;br /&gt;
|-&lt;br /&gt;
| Coco&lt;br /&gt;
| Фотографии сложных повседневных сцен, содержащих объекты в их естественном окружении.&lt;br /&gt;
| 328 000 изображений (более 2.5 миллионов вхождений объектов)&lt;br /&gt;
| 91&lt;br /&gt;
| Много метрик. Зависит, в частности, от площади, занимаемой объектом на изображении. &amp;lt;ref&amp;gt;http://cocodataset.org/#detection-leaderboard[http://cocodataset.org/#detection-leaderboard]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Fashion-MNIST&lt;br /&gt;
| Черно-белые фотографии различных видов одежды, 28x28 пикселей.&lt;br /&gt;
| 60000 изображений + 10000 тестовых изображений&lt;br /&gt;
| 10&lt;br /&gt;
| 3.3% (WRN40-4 8.9M params) &amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist[https://github.com/zalandoresearch/fashion-mnist]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Boston housing&lt;br /&gt;
| Данные о недвижимости в районах Бостона.&lt;br /&gt;
| 506&lt;br /&gt;
| 13&lt;br /&gt;
| RMSE-1.33055&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Iris==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Iris {{---}} небольшой набор данных для задачи классификации, опубликованный еще в 1936 году Робертом Фишером, используя данные биолога Эдгара Андерсона. В этом наборе данных представлены по 50 описаний цветков одного из трех типов {{---}} Ирис щетинистый (Iris setosa), Ирис виргинский (Iris virginica) и Ирис разноцветный (Iris versicolor). &lt;br /&gt;
&lt;br /&gt;
Для каждого цветка измерены четыре величины {{---}} длина чашелистника (англ. sepal length), ширина чашелистника (sepal width), длина лепестка (англ. petal length), ширина лепестка (англ. petal width). Все цветки промаркированы одним из трех типов, что позволяет тестировать на нем алгоритмы классификации. Интересное наблюдение {{---}} один из классов цветков линейно отделим от двух других.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Длина чашелистника&lt;br /&gt;
! Ширина чашелистника&lt;br /&gt;
! Длина лепестка&lt;br /&gt;
! Ширина лепестка&lt;br /&gt;
! Класс&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| 3.5&lt;br /&gt;
| 1.4&lt;br /&gt;
| 0.2&lt;br /&gt;
| setosa&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| 3.2&lt;br /&gt;
| 4.7&lt;br /&gt;
| 1.4&lt;br /&gt;
| versicolor&lt;br /&gt;
|-&lt;br /&gt;
| 6.3&lt;br /&gt;
| 3.3&lt;br /&gt;
| 6.0&lt;br /&gt;
| 2.5&lt;br /&gt;
| virginica&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
&lt;br /&gt;
  iris=load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  Y = iris.target&lt;br /&gt;
  X, Y = shuffle(X, Y)&lt;br /&gt;
  n = len(iris.data)&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
       type  precision    recall  f1-score   support&lt;br /&gt;
          0       1.00      1.00      1.00        28&lt;br /&gt;
          1       0.95      0.88      0.91        24&lt;br /&gt;
          2       0.88      0.96      0.92        23&lt;br /&gt;
  avg / total     0.95      0.95      0.95        75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MNIST==&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:MnistExamples.png|мини|[https://en.wikipedia.org/wiki/MNIST_database#/media/File:MnistExamples.png Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Набор данных MNIST {{---}} большой (порядка 60 000 тренировочных и 10 000 проверочных объектов, помеченных на принадлежность одному из десяти классов {{---}} какая цифра изображена на картинке) набор картинок с рукописными цифрами, часто используемый для тестирования различных алгоритмов распознавания образов. Он содержит черно-белые картинки размера 28x28 пикселей, исходно взятые из набора образцов из бюро переписи населения США, к которым были добавлены тестовые образцы, написанные студентами американских университетов.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;http://yann.lecun.com/exdb/mnist/[http://yann.lecun.com/exdb/mnist/]&amp;lt;/ref&amp;gt; MNIST можно найти список лучших результатов, достигнутых алгоритмами на это наборе данных. Так, худший из записанных результатов достигнут простым линейным классификатором (12% ошибок), а подавляющее большинство лучших результатов получены алгоритмами на основе нейронных сетей. Так, ансамбль из 35 сверточных нейронных сетей в 2012 году сумел получить всего 0.23% ошибок на наборе данных, что является очень хорошим результатом, вполне сравнимым с человеком.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой пример, скачивающий набор данных и запускающий на нем один из классификаторов. Даже с уменьшением набора данных в сто раз и не самым подходящим классификатором точность выше половины угаданных цифр {{---}} заметно лучше, чем случайная разметка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  from sklearn.datasets import fetch_mldata&lt;br /&gt;
  from numpy import arange&lt;br /&gt;
  import random&lt;br /&gt;
  from sklearn.tree import DecisionTreeClassifier&lt;br /&gt;
  from sklearn import datasets, svm, metrics&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mnist-predict.png|мини]]&lt;br /&gt;
&lt;br /&gt;
  mnist = fetch_mldata('MNIST original')&lt;br /&gt;
  indices = arange(len(mnist.data))&lt;br /&gt;
  randidx = random.sample(list(indices), 500)&lt;br /&gt;
  mnist.data = mnist.data[randidx]&lt;br /&gt;
  mnist.target = mnist.target[randidx]&lt;br /&gt;
  X = mnist.data&lt;br /&gt;
  Y = mnist.target&lt;br /&gt;
  train = len(X)//2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
     % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
    digit    precision    recall  f1-score   support&lt;br /&gt;
        0         0.68      0.58      0.62        26&lt;br /&gt;
        1         0.71      0.87      0.78        23&lt;br /&gt;
        2         0.29      0.24      0.26        25&lt;br /&gt;
        3         0.64      0.28      0.39        25&lt;br /&gt;
        4         0.50      0.54      0.52        28&lt;br /&gt;
        5         0.46      0.46      0.46        24&lt;br /&gt;
        6         0.47      0.62      0.54        24&lt;br /&gt;
        7         0.66      0.78      0.71        27&lt;br /&gt;
        8         0.32      0.60      0.42        15&lt;br /&gt;
        9         0.59      0.39      0.47        33&lt;br /&gt;
  avg/total       0.54      0.53      0.52       250&lt;br /&gt;
&lt;br /&gt;
==CIFAR-10==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Cifar-10.png|мини|[https://medium.com/@jannik.zuern/training-a-cifar-10-classifier-in-the-cloud-using-tensorflow-and-google-colab-f3a5fbdfe24d Источник]]]&lt;br /&gt;
CIFAR-10 (Canadian Institute For Advanced Research) {{---}} еще один большой набор изображений, который обычно используется для тестирования алгоритмов машинного обучения. Он содержит 60 000 цветных картинок размером 32х32 пикселя, размеченных в один из десяти классов: самолеты, автомобили, коты, олени, собаки, лягушки, лошади, корабли и грузовики. В наборе данных по 6000 картинок каждого класса. CIFAR-10 является размеченным подмножеством заметно большего набора данных, состоящего примерно из восьмидесяти миллионов изображений.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
С момента публикации CIFAR-10 вышло много статей, авторы которых пытаются добиться максимальной точности на этом наборе данных. В среднем более хорошие результаты показывают различные сверточные нейронные сети с различными вариантами настройки и дополнительной предобработки данных.&lt;br /&gt;
&lt;br /&gt;
На википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10[https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10]&amp;lt;/ref&amp;gt;  можно найти таблицу лучших публикаций с процентами ошибки на этом наборе данных. Так, лучший на сегодняшний момент алгоритм, опубликованный в мае 2018 года, допускает ошибку всего порядка 1.48%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой код, скачивающий CIFAR-10 из интернета и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  from keras.datasets import cifar10&lt;br /&gt;
  from sklearn.utils import shuffle    &lt;br /&gt;
&lt;br /&gt;
  (x_train, y_train), (x_test, y_test) = cifar10.load_data()&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ImageNet==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Imagenet.png|мини|[http://www.image-net.org/challenges/LSVRC/2014/ Источник]]]&lt;br /&gt;
&lt;br /&gt;
База данных Imagenet {{---}} проект по созданию и сопровождению массивной базы данных аннотированных изображений. Аннотация изображений происходит путем краудсорсинга сообществом. Из-за этого достигается большое количество размеченных данных.&lt;br /&gt;
&lt;br /&gt;
Особенность данного набора данных {{---}} про каждую картинку известно несколько фактов вида &amp;quot;в этом прямоугольнике есть автомобиль&amp;quot;, что в совокупности с индексом по типам объектов, которые есть на изображениях, позволяет обучить алгоритм для распознавания объектов какой-то конкретной категории. На август 2017 года в ImageNet 14 197 122 изображения, разбитых на 21 841 категорию.&lt;br /&gt;
&lt;br /&gt;
===Imagenet Challenge===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Imagenet-contest.png|мини|[https://en.wikipedia.org/wiki/File:ImageNet_error_rate_history_(just_systems).svg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Вместе с публикацией набора данных стартовал конкурс ImageNet Large Scale Visual Recognition Challenge (ILSVRC&amp;lt;ref&amp;gt;http://www.image-net.org/challenges/LSVRC/[http://www.image-net.org/challenges/LSVRC/]&amp;lt;/ref&amp;gt;). В его рамках участникам предлагается достигнуть наибольшей точности при классификации набора изображений. Организаторы использовали около тысячи различных категорий объектов, которые нужно классифицировать. На примере этого конкурса хорошо видно, как в 2010-е годы люди научились заметно лучше распознавать образы на изображениях, уже в 2017 году большинство участвующих команд преодолели порог в 95% правильных ответов. Эта задача, проблема компьютерного зрения, имеет огромное практическое значение во многих прикладных областях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==COCO==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-examples.jpg|мини|Пример изображений из MS Coco [http://cocodataset.org/images/coco-examples.jpg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
MS COCO (англ. ''Common Objects in Context'') {{---}} большой набор изображений. Состоит из более чем 330000 изображений (220000  {{---}} размеченных), с более чем 1.5 милионов объектов на них. Все объекты находятся в их естественном окружении (контексте). Изображения, как правило, содержат объекты разных классов (только 10% имеют единственный класс). Все изображения сопровождаются аннотациями, хранящихся в json формате. Подробнее о структуре аннотаций можно прочитать [http://cocodataset.org/#format-data здесь].&lt;br /&gt;
&lt;br /&gt;
COCO имеет пять типов аннотаций для разных задач:&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Обнаружение ключевых точек. Обнаружение объектов и локализация их ключевых точек.&lt;br /&gt;
* Сегментация окружения (англ. ''Stuff Segmentation''). В отличии от задачи обнаружения объектов (человек, кот, машина), здесь внимание фокусируется на том, что его окружает (трава, стена, небо). Метки классов организованы в иерархическом порядке (напр., ''stuff → outdoor-stuff → sky → clouds''). Чтобы добиться совместимости с задачей обнаружения объектов, используются следующие идентификаторы категорий:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Идентификатор&lt;br /&gt;
! Соответствие&lt;br /&gt;
|-&lt;br /&gt;
|1-91 || категории объектов (не используются в сегментации окружения)&lt;br /&gt;
|-&lt;br /&gt;
|92-182 || категории окружения&lt;br /&gt;
|-&lt;br /&gt;
|183 || категория &amp;quot;другое&amp;quot; (выбирается для &amp;quot;объектов&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
* Паноптическая сегментация (англ. ''Panoptic Segmentation'') {{---}} обединение задач семантической сегментации ([[Сегментация изображений]]) и обнаружения объектов. Задача состоит в том, чтобы классифицировать все пиксели изображения на принадлежность к некоторому классу, а также определить, к какому из экземпляров данного класса они относятся. &lt;br /&gt;
* Аннотирование изображения (англ. ''Caption Evaluation''). Генерация сопроводительной подписи к изображению.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
Результат задачи зависит от многих факторов. Например, для задачи обнаружения объекта, наилучшие результаты алгоритмы показывают на крупных объектах. &lt;br /&gt;
Более подробно с метриками можно ознакомиться [http://cocodataset.org/#detection-leaderboard здесь].&lt;br /&gt;
Приведем лишь результаты детектора [https://arxiv.org/abs/1512.03385 ResNet] (bbox) - победителя 2015 Detection Challenge.&lt;br /&gt;
Графики представляют из себя семейство кривых Pressision Recall для различных метрик.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Detection-analysis-person.jpg|мини|PR кривые для класса &amp;quot;Person&amp;quot; [http://cocodataset.org/images/detection-analysis-person.jpg оригинал]]]&lt;br /&gt;
 |[[Файл:Detection-analysis-all.jpg|мини|Усредненные значения для всех классов [http://cocodataset.org/images/detection-analysis-all.jpg оригинал]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Пример использования [https://github.com/cocodataset COCO API] на python:&lt;br /&gt;
&lt;br /&gt;
  %matplotlib inline&lt;br /&gt;
  from pycocotools.coco import COCO&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import skimage.io as io&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  import pylab&lt;br /&gt;
  pylab.rcParams['figure.figsize'] = (8.0, 10.0)&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  dataDir='..'&lt;br /&gt;
  dataType='val2017'&lt;br /&gt;
  annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)&lt;br /&gt;
  &lt;br /&gt;
  coco=COCO(annFile)&lt;br /&gt;
  &lt;br /&gt;
  cats = coco.loadCats(coco.getCatIds())&lt;br /&gt;
  nms=[cat['name'] for cat in cats]&lt;br /&gt;
  print('COCO categories: \n{}\n'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  nms = set([cat['supercategory'] for cat in cats])&lt;br /&gt;
  print('COCO supercategories: \n{}'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  # get all images containing given categories, select one at random&lt;br /&gt;
  catIds = coco.getCatIds(catNms=['person','dog','skateboard']);&lt;br /&gt;
  imgIds = coco.getImgIds(catIds=catIds );&lt;br /&gt;
  imgIds = coco.getImgIds(imgIds = [324158])&lt;br /&gt;
  img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]&lt;br /&gt;
  &lt;br /&gt;
  # load and display image&lt;br /&gt;
  # I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))&lt;br /&gt;
  # use url to load image&lt;br /&gt;
  I = io.imread(img['coco_url'])&lt;br /&gt;
  plt.axis('off')&lt;br /&gt;
  plt.imshow(I)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-1.png |мини| center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
  # load and display instance annotations&lt;br /&gt;
  plt.imshow(I); plt.axis('off')&lt;br /&gt;
  annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)&lt;br /&gt;
  anns = coco.loadAnns(annIds)&lt;br /&gt;
  coco.showAnns(anns)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-2.png|мини|center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
==Fashion-MNIST==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:FMNIST.png|мини|Пример изображений из Fashion-MNIST]]&lt;br /&gt;
Fashion-MNIST {{---}} это набор изображений, взятых из статей [https://jobs.zalando.com/en/tech/?gh_src=nevh2y1 Zalando], состоящий из обучающего набора из 60000 примеров и тестового набора из 10000 примеров. Каждый пример представляет собой черно-белое изображение 28x28, связанное с меткой из 10 классов. Создатели Fashion-MNIST предложили его в качестве прямой замены исходного набора данных MNIST, состоящего из рукописных цифр, для сравнительного анализа алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделений для обучения и тестирования. Аргументировали необходимость такой замены тем, что исходный набор данных MNIST действительно хорошо отражает возможность алгоритма хоть что-то классифицировать, но если алгоритм работает на стандартном MNIST, он все равно может не сработать на других примерах данных. Также на наборе данных MNIST научились достигать слишком высоких результатов точности (97% для классических алгоритмов машинного обучения и 99.7% для сверточных нейронных сетей), в то время как MNIST не отражает современных сложных проблем компьютерного зрения. Это позволило сделать предположение о том, что набор данных MNIST слишком простой по современным меркам и его требуется заменить.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist&amp;lt;/ref&amp;gt; набора данных можно найти список лучших результатов, достигнутых алгоритмами на этом наборе данных. Так как задача классификации набора данных Fashion-MNIST сложнее, чем в случае стандартного набора MNIST, в таблице представлены только алгоритмы глубокого обучения, т.к. только для них эта задача имеет смысл. Так, худший из записанных результатов достигнут сверточной нейронной сетью с 3 сверточными слоями и одним слоем пулинга (12.4% ошибок), а подавляющее большинство лучших результатов получены боле сложными архитектурами. Лучший результат был достигнут WRN сетью и составляет всего 3.3% ошибки.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, скачивающий Fashion-MNIST с использованием NumPy и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  import mnist_reader&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
  from sklearn.utils import shuffle&lt;br /&gt;
  x_train, y_train = mnist_reader.load_mnist('data/fashion', kind='train')&lt;br /&gt;
  x_test, y_test = mnist_reader.load_mnist('data/fashion', kind='t10k')&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
==Boston Housing==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Boston Housing содержит данные, собранные Службой переписи населения США (англ. ''U.S Census Service''), касающиеся недвижимости в районах Бостона. Набор данных состоит из 13 признаков и 506 строк и также предоставляет такую информацию, как уровень преступности (CRIM), ставка налога на недвижимость (TAX), возраст людей, которым принадлежит дом (AGE), соотношение числа учащихся и преподавателей в районе (PTRATIO) и другие. Данный набор данных используется для предсказания следующих целевых переменных: средняя стоимость дома (MEDV) и уровень закиси азота (NOX).&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Для решения задачи предсказания средней стоимости дома используется множественная линейная регрессия. Метрикой качества модели выступает корень из среднеквадратичной ошибки )([[Оценка качества в задачах классификации и регрессии|англ. ''root-mean-square error, RMSE'' ]]). В среднем, значение RMSE на данном наборе данных находится в районе 3,5-5 в зависимости от выбранной модели. Однако на соревновании на сайте [https://www.kaggle.com/sagarnildass/predicting-boston-house-prices Kaggle] пользователь [https://www.kaggle.com/c/boston-housing/leaderboard MayankSatnalika] получил результат 1.33055.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, загружающий набор данных из библиотеки sklearn с использованием NumPy и Pandas и запускающий на нем алгоритм линейной регрессии.&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  from sklearn.datasets import load_boston&lt;br /&gt;
  from sklearn.model_selection import train_test_split&lt;br /&gt;
  from sklearn.linear_model import LinearRegression&lt;br /&gt;
  from sklearn.metrics import mean_squared_error&lt;br /&gt;
  boston_dataset = load_boston()&lt;br /&gt;
  boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)&lt;br /&gt;
  boston['MEDV'] = boston_dataset.target&lt;br /&gt;
  X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT', 'RM'])&lt;br /&gt;
  Y = boston['MEDV']&lt;br /&gt;
  X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=5)&lt;br /&gt;
  lin_model = LinearRegression()&lt;br /&gt;
  lin_model.fit(X_train, Y_train)&lt;br /&gt;
  y_train_predict = lin_model.predict(X_train)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))# 5.6371293350711955&lt;br /&gt;
  y_test_predict = lin_model.predict(X_test)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))# 5.13740078470291&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;br /&gt;
[[Категория: Классификация и регрессия]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72642</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72642"/>
				<updated>2020-02-13T15:05:43Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие. &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате;&lt;br /&gt;
*	Финансовые риски;&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель;&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая метрика будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Анализ и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется анализ, сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, чья связь с целевыми переменными закономерна. Анализ и подготовка данных состоят из 4 стадий: анализ данных, сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Анализ данных===&lt;br /&gt;
&lt;br /&gt;
Задача данного шага – понять слабые и сильные стороны в имеющихся данных, понять насколько их достаточно, предложить идеи, как их использовать, и лучше понять бизнес-процессы заказчика. Требуется провести анализ всех источников, к которым заказчик предоставляет доступ. Если собственных данных не хватает, тогда необходимо купить данные у третьих лиц или организовать сбор новых данных. Для начала нужно понимать, какие данные есть у заказчика. Данные могут быть: собственными, сторонними  и «потенциальные» данными (нужно организовать сбор, чтобы их получить). Также требуется описать данные во всех источниках (таблица, ключ, количество строк, количество столбцов, объем на диске). Далее, с помощью таблиц и графиков смотрим на данные, чтобы сформулировать гипотезы о том как данные помогут решить поставленную задачу. Обязательно до моделирования требуется оценить насколько качественные нужны данные, так как любые ошибки на данном шаге могут негативно повлиять на ход проекта. Типичные проблемы, которые могут быть в данных: пропущенные значения, ошибки в данных, опечатки, неконсистентная кодировка значений (например «w» и «women» в разных системах)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Следующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Инженер по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
&lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты ; &lt;br /&gt;
*	Электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ML-модели. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-моделях такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Виды ансамблей]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Ансамбли]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72641</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72641"/>
				<updated>2020-02-13T14:04:46Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется понять кто участвует в проекте со стороны заказчика, кто выделяет деньги под проект, и кто принимает ключевые решения. Вдобавок необходимо узнать существуют ли готовые решения и, если да, чем они не устраивают заказчика.&lt;br /&gt;
&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо оценить какие ресурсы потребуются в течении проекта: есть ли у заказчика доступное железо или его необходимо закупать, где и как хранятся данные, будет ли предоставлен доступ в эти системы, нужно ли дополнительно докупать/собирать внешние данные, сможет ли заказчик выделить своих экспертов для консультаций на данный проект. &lt;br /&gt;
&lt;br /&gt;
Нужно описать вероятные риски проекта, а также определить план действий по их уменьшению. Типичные риски следующие. &lt;br /&gt;
*	Не успеть закончить проект к назначенной дате;&lt;br /&gt;
*	Финансовые риски;&lt;br /&gt;
*	Малое количество или плохое качество данных, которые не позволят получить эффективную модель;&lt;br /&gt;
*	Данные качественные, но закономерности в принципе отсутствуют и, в результате, заказчик не заинтересован в полученной модели.&lt;br /&gt;
&lt;br /&gt;
После того, как задача описана на языке бизнеса, необходимо поставить ее в терминах машинного обучения. Особенно нужно узнать ответы на следующие вопросы: Какая метрика будет использована для оценки результата модели(например: accuracy, precision, recall, MSE, MAE и т.д.)? Каков критерий успешности модели (например, считаем Accuracy равный 0.8 — минимально допустимым значением, 0.9 — оптимальным)?&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты ; &lt;br /&gt;
*	Электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ML-модели. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-моделях такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Виды ансамблей]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Ансамбли]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72638</id>
		<title>Известные наборы данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72638"/>
				<updated>2020-02-12T15:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Обзор==&lt;br /&gt;
&lt;br /&gt;
Для многих алгоритмов машинного обучения требуется большое количество данных. Кроме того, что моделям нужны данные для обучения, нужно сравнивать эффективность разных моделей. Поскольку поиск хороших наборов данных и их разметка {{---}} трудная задача, на помощь приходят уже собранные и размеченные наборы данных, для которых зачастую уже опубликованы результаты каких-то алгоритмов, и можно оценить, насколько хорошо работает исследуемая модель. &lt;br /&gt;
&lt;br /&gt;
В этой статье рассмотрены с примерами несколько популярных наборов данных. Другие классические наборы можно посмотреть, например, на википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research[https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Набор данных&lt;br /&gt;
! Какие объекты&lt;br /&gt;
! Число объектов&lt;br /&gt;
! Число классов&lt;br /&gt;
! Доля ошибок лучшего опубликованного алгоритма&lt;br /&gt;
|-&lt;br /&gt;
| Iris&lt;br /&gt;
| Данные измерений четырех параметров цветков ириса&lt;br /&gt;
| 150&lt;br /&gt;
| 3&lt;br /&gt;
| N/A, малый размер набора данных&lt;br /&gt;
|-&lt;br /&gt;
| MNIST&lt;br /&gt;
| Рукописные цифры, черно-белые изображения 32х32 пикселя&lt;br /&gt;
| 70 000&lt;br /&gt;
| 10&lt;br /&gt;
| 0.18% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.01890.pdf[https://arxiv.org/pdf/1805.01890.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CIFAR-10&lt;br /&gt;
| Фотографии объектов разных классов, цветные изображения 32х32 пикселя&lt;br /&gt;
| 60 000&lt;br /&gt;
| 10&lt;br /&gt;
| 1.23% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.09501.pdf[https://arxiv.org/pdf/1805.09501.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ImageNet&lt;br /&gt;
| Фотографии с указанием классов объектов на изображении и их позиций&lt;br /&gt;
| Больше 14 миллионов&lt;br /&gt;
| Больше 21 тысячи&lt;br /&gt;
| Большое количество различных метрик, см. ImageNet Competition. 1-5% на классификацию&lt;br /&gt;
|-&lt;br /&gt;
| Coco&lt;br /&gt;
| Фотографии сложных повседневных сцен, содержащих объекты в их естественном окружении.&lt;br /&gt;
| 328 000 изображений (более 2.5 миллионов вхождений объектов)&lt;br /&gt;
| 91&lt;br /&gt;
| Много метрик. Зависит, в частности, от площади, занимаемой объектом на изображении. &amp;lt;ref&amp;gt;http://cocodataset.org/#detection-leaderboard[http://cocodataset.org/#detection-leaderboard]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Fashion-MNIST&lt;br /&gt;
| Черно-белые фотографии различных видов одежды, 28x28 пикселей.&lt;br /&gt;
| 60000 изображений + 10000 тестовых изображений&lt;br /&gt;
| 10&lt;br /&gt;
| 3.3% (WRN40-4 8.9M params) &amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist[https://github.com/zalandoresearch/fashion-mnist]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Iris==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Iris {{---}} небольшой набор данных для задачи классификации, опубликованный еще в 1936 году Робертом Фишером, используя данные биолога Эдгара Андерсона. В этом наборе данных представлены по 50 описаний цветков одного из трех типов {{---}} Ирис щетинистый (Iris setosa), Ирис виргинский (Iris virginica) и Ирис разноцветный (Iris versicolor). &lt;br /&gt;
&lt;br /&gt;
Для каждого цветка измерены четыре величины {{---}} длина чашелистника (англ. sepal length), ширина чашелистника (sepal width), длина лепестка (англ. petal length), ширина лепестка (англ. petal width). Все цветки промаркированы одним из трех типов, что позволяет тестировать на нем алгоритмы классификации. Интересное наблюдение {{---}} один из классов цветков линейно отделим от двух других.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Длина чашелистника&lt;br /&gt;
! Ширина чашелистника&lt;br /&gt;
! Длина лепестка&lt;br /&gt;
! Ширина лепестка&lt;br /&gt;
! Класс&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| 3.5&lt;br /&gt;
| 1.4&lt;br /&gt;
| 0.2&lt;br /&gt;
| setosa&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| 3.2&lt;br /&gt;
| 4.7&lt;br /&gt;
| 1.4&lt;br /&gt;
| versicolor&lt;br /&gt;
|-&lt;br /&gt;
| 6.3&lt;br /&gt;
| 3.3&lt;br /&gt;
| 6.0&lt;br /&gt;
| 2.5&lt;br /&gt;
| virginica&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
&lt;br /&gt;
  iris=load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  Y = iris.target&lt;br /&gt;
  X, Y = shuffle(X, Y)&lt;br /&gt;
  n = len(iris.data)&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
       type  precision    recall  f1-score   support&lt;br /&gt;
          0       1.00      1.00      1.00        28&lt;br /&gt;
          1       0.95      0.88      0.91        24&lt;br /&gt;
          2       0.88      0.96      0.92        23&lt;br /&gt;
  avg / total     0.95      0.95      0.95        75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MNIST==&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:MnistExamples.png|мини|[https://en.wikipedia.org/wiki/MNIST_database#/media/File:MnistExamples.png Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Набор данных MNIST {{---}} большой (порядка 60 000 тренировочных и 10 000 проверочных объектов, помеченных на принадлежность одному из десяти классов {{---}} какая цифра изображена на картинке) набор картинок с рукописными цифрами, часто используемый для тестирования различных алгоритмов распознавания образов. Он содержит черно-белые картинки размера 28x28 пикселей, исходно взятые из набора образцов из бюро переписи населения США, к которым были добавлены тестовые образцы, написанные студентами американских университетов.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;http://yann.lecun.com/exdb/mnist/[http://yann.lecun.com/exdb/mnist/]&amp;lt;/ref&amp;gt; MNIST можно найти список лучших результатов, достигнутых алгоритмами на это наборе данных. Так, худший из записанных результатов достигнут простым линейным классификатором (12% ошибок), а подавляющее большинство лучших результатов получены алгоритмами на основе нейронных сетей. Так, ансамбль из 35 сверточных нейронных сетей в 2012 году сумел получить всего 0.23% ошибок на наборе данных, что является очень хорошим результатом, вполне сравнимым с человеком.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой пример, скачивающий набор данных и запускающий на нем один из классификаторов. Даже с уменьшением набора данных в сто раз и не самым подходящим классификатором точность выше половины угаданных цифр {{---}} заметно лучше, чем случайная разметка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  from sklearn.datasets import fetch_mldata&lt;br /&gt;
  from numpy import arange&lt;br /&gt;
  import random&lt;br /&gt;
  from sklearn.tree import DecisionTreeClassifier&lt;br /&gt;
  from sklearn import datasets, svm, metrics&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mnist-predict.png|мини]]&lt;br /&gt;
&lt;br /&gt;
  mnist = fetch_mldata('MNIST original')&lt;br /&gt;
  indices = arange(len(mnist.data))&lt;br /&gt;
  randidx = random.sample(list(indices), 500)&lt;br /&gt;
  mnist.data = mnist.data[randidx]&lt;br /&gt;
  mnist.target = mnist.target[randidx]&lt;br /&gt;
  X = mnist.data&lt;br /&gt;
  Y = mnist.target&lt;br /&gt;
  train = len(X)//2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
     % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
    digit    precision    recall  f1-score   support&lt;br /&gt;
        0         0.68      0.58      0.62        26&lt;br /&gt;
        1         0.71      0.87      0.78        23&lt;br /&gt;
        2         0.29      0.24      0.26        25&lt;br /&gt;
        3         0.64      0.28      0.39        25&lt;br /&gt;
        4         0.50      0.54      0.52        28&lt;br /&gt;
        5         0.46      0.46      0.46        24&lt;br /&gt;
        6         0.47      0.62      0.54        24&lt;br /&gt;
        7         0.66      0.78      0.71        27&lt;br /&gt;
        8         0.32      0.60      0.42        15&lt;br /&gt;
        9         0.59      0.39      0.47        33&lt;br /&gt;
  avg/total       0.54      0.53      0.52       250&lt;br /&gt;
&lt;br /&gt;
==CIFAR-10==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Cifar-10.png|мини|[https://medium.com/@jannik.zuern/training-a-cifar-10-classifier-in-the-cloud-using-tensorflow-and-google-colab-f3a5fbdfe24d Источник]]]&lt;br /&gt;
CIFAR-10 (Canadian Institute For Advanced Research) {{---}} еще один большой набор изображений, который обычно используется для тестирования алгоритмов машинного обучения. Он содержит 60 000 цветных картинок размером 32х32 пикселя, размеченных в один из десяти классов: самолеты, автомобили, коты, олени, собаки, лягушки, лошади, корабли и грузовики. В наборе данных по 6000 картинок каждого класса. CIFAR-10 является размеченным подмножеством заметно большего набора данных, состоящего примерно из восьмидесяти миллионов изображений.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
С момента публикации CIFAR-10 вышло много статей, авторы которых пытаются добиться максимальной точности на этом наборе данных. В среднем более хорошие результаты показывают различные сверточные нейронные сети с различными вариантами настройки и дополнительной предобработки данных.&lt;br /&gt;
&lt;br /&gt;
На википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10[https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10]&amp;lt;/ref&amp;gt;  можно найти таблицу лучших публикаций с процентами ошибки на этом наборе данных. Так, лучший на сегодняшний момент алгоритм, опубликованный в мае 2018 года, допускает ошибку всего порядка 1.48%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой код, скачивающий CIFAR-10 из интернета и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  from keras.datasets import cifar10&lt;br /&gt;
  from sklearn.utils import shuffle    &lt;br /&gt;
&lt;br /&gt;
  (x_train, y_train), (x_test, y_test) = cifar10.load_data()&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ImageNet==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Imagenet.png|мини|[http://www.image-net.org/challenges/LSVRC/2014/ Источник]]]&lt;br /&gt;
&lt;br /&gt;
База данных Imagenet {{---}} проект по созданию и сопровождению массивной базы данных аннотированных изображений. Аннотация изображений происходит путем краудсорсинга сообществом. Из-за этого достигается большое количество размеченных данных.&lt;br /&gt;
&lt;br /&gt;
Особенность данного набора данных {{---}} про каждую картинку известно несколько фактов вида &amp;quot;в этом прямоугольнике есть автомобиль&amp;quot;, что в совокупности с индексом по типам объектов, которые есть на изображениях, позволяет обучить алгоритм для распознавания объектов какой-то конкретной категории. На август 2017 года в ImageNet 14 197 122 изображения, разбитых на 21 841 категорию.&lt;br /&gt;
&lt;br /&gt;
===Imagenet Challenge===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Imagenet-contest.png|мини|[https://en.wikipedia.org/wiki/File:ImageNet_error_rate_history_(just_systems).svg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Вместе с публикацией набора данных стартовал конкурс ImageNet Large Scale Visual Recognition Challenge (ILSVRC&amp;lt;ref&amp;gt;http://www.image-net.org/challenges/LSVRC/[http://www.image-net.org/challenges/LSVRC/]&amp;lt;/ref&amp;gt;). В его рамках участникам предлагается достигнуть наибольшей точности при классификации набора изображений. Организаторы использовали около тысячи различных категорий объектов, которые нужно классифицировать. На примере этого конкурса хорошо видно, как в 2010-е годы люди научились заметно лучше распознавать образы на изображениях, уже в 2017 году большинство участвующих команд преодолели порог в 95% правильных ответов. Эта задача, проблема компьютерного зрения, имеет огромное практическое значение во многих прикладных областях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==COCO==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-examples.jpg|мини|Пример изображений из MS Coco [http://cocodataset.org/images/coco-examples.jpg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
MS COCO (англ. ''Common Objects in Context'') {{---}} большой набор изображений. Состоит из более чем 330000 изображений (220000  {{---}} размеченных), с более чем 1.5 милионов объектов на них. Все объекты находятся в их естественном окружении (контексте). Изображения, как правило, содержат объекты разных классов (только 10% имеют единственный класс). Все изображения сопровождаются аннотациями, хранящихся в json формате. Подробнее о структуре аннотаций можно прочитать [http://cocodataset.org/#format-data здесь].&lt;br /&gt;
&lt;br /&gt;
COCO имеет пять типов аннотаций для разных задач:&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Обнаружение ключевых точек. Обнаружение объектов и локализация их ключевых точек.&lt;br /&gt;
* Сегментация окружения (англ. ''Stuff Segmentation''). В отличии от задачи обнаружения объектов (человек, кот, машина), здесь внимание фокусируется на том, что его окружает (трава, стена, небо). Метки классов организованы в иерархическом порядке (напр., ''stuff → outdoor-stuff → sky → clouds''). Чтобы добиться совместимости с задачей обнаружения объектов, используются следующие идентификаторы категорий:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Идентификатор&lt;br /&gt;
! Соответствие&lt;br /&gt;
|-&lt;br /&gt;
|1-91 || категории объектов (не используются в сегментации окружения)&lt;br /&gt;
|-&lt;br /&gt;
|92-182 || категории окружения&lt;br /&gt;
|-&lt;br /&gt;
|183 || категория &amp;quot;другое&amp;quot; (выбирается для &amp;quot;объектов&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
* Паноптическая сегментация (англ. ''Panoptic Segmentation'') {{---}} обединение задач семантической сегментации ([[Сегментация изображений]]) и обнаружения объектов. Задача состоит в том, чтобы классифицировать все пиксели изображения на принадлежность к некоторому классу, а также определить, к какому из экземпляров данного класса они относятся. &lt;br /&gt;
* Аннотирование изображения (англ. ''Caption Evaluation''). Генерация сопроводительной подписи к изображению.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
Результат задачи зависит от многих факторов. Например, для задачи обнаружения объекта, наилучшие результаты алгоритмы показывают на крупных объектах. &lt;br /&gt;
Более подробно с метриками можно ознакомиться [http://cocodataset.org/#detection-leaderboard здесь].&lt;br /&gt;
Приведем лишь результаты детектора [https://arxiv.org/abs/1512.03385 ResNet] (bbox) - победителя 2015 Detection Challenge.&lt;br /&gt;
Графики представляют из себя семейство кривых Pressision Recall для различных метрик.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Detection-analysis-person.jpg|мини|PR кривые для класса &amp;quot;Person&amp;quot; [http://cocodataset.org/images/detection-analysis-person.jpg оригинал]]]&lt;br /&gt;
 |[[Файл:Detection-analysis-all.jpg|мини|Усредненные значения для всех классов [http://cocodataset.org/images/detection-analysis-all.jpg оригинал]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Пример использования [https://github.com/cocodataset COCO API] на python:&lt;br /&gt;
&lt;br /&gt;
  %matplotlib inline&lt;br /&gt;
  from pycocotools.coco import COCO&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import skimage.io as io&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  import pylab&lt;br /&gt;
  pylab.rcParams['figure.figsize'] = (8.0, 10.0)&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  dataDir='..'&lt;br /&gt;
  dataType='val2017'&lt;br /&gt;
  annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)&lt;br /&gt;
  &lt;br /&gt;
  coco=COCO(annFile)&lt;br /&gt;
  &lt;br /&gt;
  cats = coco.loadCats(coco.getCatIds())&lt;br /&gt;
  nms=[cat['name'] for cat in cats]&lt;br /&gt;
  print('COCO categories: \n{}\n'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  nms = set([cat['supercategory'] for cat in cats])&lt;br /&gt;
  print('COCO supercategories: \n{}'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  # get all images containing given categories, select one at random&lt;br /&gt;
  catIds = coco.getCatIds(catNms=['person','dog','skateboard']);&lt;br /&gt;
  imgIds = coco.getImgIds(catIds=catIds );&lt;br /&gt;
  imgIds = coco.getImgIds(imgIds = [324158])&lt;br /&gt;
  img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]&lt;br /&gt;
  &lt;br /&gt;
  # load and display image&lt;br /&gt;
  # I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))&lt;br /&gt;
  # use url to load image&lt;br /&gt;
  I = io.imread(img['coco_url'])&lt;br /&gt;
  plt.axis('off')&lt;br /&gt;
  plt.imshow(I)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-1.png |мини| center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
  # load and display instance annotations&lt;br /&gt;
  plt.imshow(I); plt.axis('off')&lt;br /&gt;
  annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)&lt;br /&gt;
  anns = coco.loadAnns(annIds)&lt;br /&gt;
  coco.showAnns(anns)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-2.png|мини|center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
==Fashion-MNIST==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:FMNIST.png|мини|Пример изображений из Fashion-MNIST]]&lt;br /&gt;
Fashion-MNIST {{---}} это набор изображений, взятых из статей [https://jobs.zalando.com/en/tech/?gh_src=nevh2y1 Zalando], состоящий из обучающего набора из 60000 примеров и тестового набора из 10000 примеров. Каждый пример представляет собой черно-белое изображение 28x28, связанное с меткой из 10 классов. Создатели Fashion-MNIST предложили его в качестве прямой замены исходного набора данных MNIST, состоящего из рукописных цифр, для сравнительного анализа алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделений для обучения и тестирования. Аргументировали необходимость такой замены тем, что исходный набор данных MNIST действительно хорошо отражает возможность алгоритма хоть что-то классифицировать, но если алгоритм работает на стандартном MNIST, он все равно может не сработать на других примерах данных. Также на наборе данных MNIST научились достигать слишком высоких результатов точности (97% для классических алгоритмов машинного обучения и 99.7% для сверточных нейронных сетей), в то время как MNIST не отражает современных сложных проблем компьютерного зрения. Это позволило сделать предположение о том, что набор данных MNIST слишком простой по современным меркам и его требуется заменить.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist&amp;lt;/ref&amp;gt; набора данных можно найти список лучших результатов, достигнутых алгоритмами на этом наборе данных. Так как задача классификации набора данных Fashion-MNIST сложнее, чем в случае стандартного набора MNIST, в таблице представлены только алгоритмы глубокого обучения, т.к. только для них эта задача имеет смысл. Так, худший из записанных результатов достигнут сверточной нейронной сетью с 3 сверточными слоями и одним слоем пулинга (12.4% ошибок), а подавляющее большинство лучших результатов получены боле сложными архитектурами. Лучший результат был достигнут WRN сетью и составляет всего 3.3% ошибки.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, скачивающий Fashion-MNIST с использованием NumPy и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  import mnist_reader&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
  from sklearn.utils import shuffle&lt;br /&gt;
  x_train, y_train = mnist_reader.load_mnist('data/fashion', kind='train')&lt;br /&gt;
  x_test, y_test = mnist_reader.load_mnist('data/fashion', kind='t10k')&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
==Boston Housing==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Boston Housing содержит данные, собранные Службой переписи населения США (англ. ''U.S Census Service''), касающиеся недвижимости в районах Бостона. Набор данных состоит из 13 признаков и 506 строк и также предоставляет такую информацию, как уровень преступности (CRIM), ставка налога на недвижимость (TAX), возраст людей, которым принадлежит дом (AGE), индекс доступности к автомагистралям (RAD), соотношение числа учащихся и преподавателей в районе (PTRATIO) и другие. Данный набор данных используется для предсказания следующих целевых переменных: средняя стоимость дома (MEDV) и уровень закиси азота (NOX).&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Для решения задачи предсказания средней стоимости дома используется множественная линейная регрессия. Метрикой качества модели выступает корень из среднеквадратичной ошибки (англ. ''root-mean-square error, RMSE''). В среднем, значение RMSE на данном наборе данных находится в районе 3,5-5 в зависимости от выбранной модели. Однако на соревновании на сайте [https://www.kaggle.com/sagarnildass/predicting-boston-house-prices Kaggle] пользователь [https://www.kaggle.com/c/boston-housing/leaderboard MayankSatnalika] получил результат 1.33055.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, загружающий набор данных из библиотеки skleran с использованием NumPy и Pandas и запускающий на нем алгоритм линейной регрессии.&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  from sklearn.datasets import load_boston&lt;br /&gt;
  from sklearn.model_selection import train_test_split&lt;br /&gt;
  from sklearn.linear_model import LinearRegression&lt;br /&gt;
  from sklearn.metrics import mean_squared_error&lt;br /&gt;
  boston_dataset = load_boston()&lt;br /&gt;
  boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)&lt;br /&gt;
  boston['MEDV'] = boston_dataset.target&lt;br /&gt;
  X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT', 'RM'])&lt;br /&gt;
  Y = boston['MEDV']&lt;br /&gt;
  X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=5)&lt;br /&gt;
  lin_model = LinearRegression()&lt;br /&gt;
  lin_model.fit(X_train, Y_train)&lt;br /&gt;
  y_train_predict = lin_model.predict(X_train)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))# 5.6371293350711955&lt;br /&gt;
  y_test_predict = lin_model.predict(X_test)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))# 5.13740078470291&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;br /&gt;
[[Категория: Классификация и регрессия]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72637</id>
		<title>Известные наборы данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=72637"/>
				<updated>2020-02-12T14:37:27Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: Добавление известного набора данных для регрессии&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Обзор==&lt;br /&gt;
&lt;br /&gt;
Для многих алгоритмов машинного обучения требуется большое количество данных. Кроме того, что моделям нужны данные для обучения, нужно сравнивать эффективность разных моделей. Поскольку поиск хороших наборов данных и их разметка {{---}} трудная задача, на помощь приходят уже собранные и размеченные наборы данных, для которых зачастую уже опубликованы результаты каких-то алгоритмов, и можно оценить, насколько хорошо работает исследуемая модель. &lt;br /&gt;
&lt;br /&gt;
В этой статье рассмотрены с примерами несколько популярных наборов данных. Другие классические наборы можно посмотреть, например, на википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research[https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Набор данных&lt;br /&gt;
! Какие объекты&lt;br /&gt;
! Число объектов&lt;br /&gt;
! Число классов&lt;br /&gt;
! Доля ошибок лучшего опубликованного алгоритма&lt;br /&gt;
|-&lt;br /&gt;
| Iris&lt;br /&gt;
| Данные измерений четырех параметров цветков ириса&lt;br /&gt;
| 150&lt;br /&gt;
| 3&lt;br /&gt;
| N/A, малый размер набора данных&lt;br /&gt;
|-&lt;br /&gt;
| MNIST&lt;br /&gt;
| Рукописные цифры, черно-белые изображения 32х32 пикселя&lt;br /&gt;
| 70 000&lt;br /&gt;
| 10&lt;br /&gt;
| 0.18% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.01890.pdf[https://arxiv.org/pdf/1805.01890.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CIFAR-10&lt;br /&gt;
| Фотографии объектов разных классов, цветные изображения 32х32 пикселя&lt;br /&gt;
| 60 000&lt;br /&gt;
| 10&lt;br /&gt;
| 1.23% &amp;lt;ref&amp;gt;https://arxiv.org/pdf/1805.09501.pdf[https://arxiv.org/pdf/1805.09501.pdf]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ImageNet&lt;br /&gt;
| Фотографии с указанием классов объектов на изображении и их позиций&lt;br /&gt;
| Больше 14 миллионов&lt;br /&gt;
| Больше 21 тысячи&lt;br /&gt;
| Большое количество различных метрик, см. ImageNet Competition. 1-5% на классификацию&lt;br /&gt;
|-&lt;br /&gt;
| Coco&lt;br /&gt;
| Фотографии сложных повседневных сцен, содержащих объекты в их естественном окружении.&lt;br /&gt;
| 328 000 изображений (более 2.5 миллионов вхождений объектов)&lt;br /&gt;
| 91&lt;br /&gt;
| Много метрик. Зависит, в частности, от площади, занимаемой объектом на изображении. &amp;lt;ref&amp;gt;http://cocodataset.org/#detection-leaderboard[http://cocodataset.org/#detection-leaderboard]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Fashion-MNIST&lt;br /&gt;
| Черно-белые фотографии различных видов одежды, 28x28 пикселей.&lt;br /&gt;
| 60000 изображений + 10000 тестовых изображений&lt;br /&gt;
| 10&lt;br /&gt;
| 3.3% (WRN40-4 8.9M params) &amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist[https://github.com/zalandoresearch/fashion-mnist]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Iris==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Iris {{---}} небольшой набор данных для задачи классификации, опубликованный еще в 1936 году Робертом Фишером, используя данные биолога Эдгара Андерсона. В этом наборе данных представлены по 50 описаний цветков одного из трех типов {{---}} Ирис щетинистый (Iris setosa), Ирис виргинский (Iris virginica) и Ирис разноцветный (Iris versicolor). &lt;br /&gt;
&lt;br /&gt;
Для каждого цветка измерены четыре величины {{---}} длина чашелистника (англ. sepal length), ширина чашелистника (sepal width), длина лепестка (англ. petal length), ширина лепестка (англ. petal width). Все цветки промаркированы одним из трех типов, что позволяет тестировать на нем алгоритмы классификации. Интересное наблюдение {{---}} один из классов цветков линейно отделим от двух других.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Длина чашелистника&lt;br /&gt;
! Ширина чашелистника&lt;br /&gt;
! Длина лепестка&lt;br /&gt;
! Ширина лепестка&lt;br /&gt;
! Класс&lt;br /&gt;
|-&lt;br /&gt;
| 5.1&lt;br /&gt;
| 3.5&lt;br /&gt;
| 1.4&lt;br /&gt;
| 0.2&lt;br /&gt;
| setosa&lt;br /&gt;
|-&lt;br /&gt;
| 7.0&lt;br /&gt;
| 3.2&lt;br /&gt;
| 4.7&lt;br /&gt;
| 1.4&lt;br /&gt;
| versicolor&lt;br /&gt;
|-&lt;br /&gt;
| 6.3&lt;br /&gt;
| 3.3&lt;br /&gt;
| 6.0&lt;br /&gt;
| 2.5&lt;br /&gt;
| virginica&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
&lt;br /&gt;
  iris=load_iris()&lt;br /&gt;
  X = iris.data&lt;br /&gt;
  Y = iris.target&lt;br /&gt;
  X, Y = shuffle(X, Y)&lt;br /&gt;
  n = len(iris.data)&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
       type  precision    recall  f1-score   support&lt;br /&gt;
          0       1.00      1.00      1.00        28&lt;br /&gt;
          1       0.95      0.88      0.91        24&lt;br /&gt;
          2       0.88      0.96      0.92        23&lt;br /&gt;
  avg / total     0.95      0.95      0.95        75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MNIST==&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:MnistExamples.png|мини|[https://en.wikipedia.org/wiki/MNIST_database#/media/File:MnistExamples.png Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Набор данных MNIST {{---}} большой (порядка 60 000 тренировочных и 10 000 проверочных объектов, помеченных на принадлежность одному из десяти классов {{---}} какая цифра изображена на картинке) набор картинок с рукописными цифрами, часто используемый для тестирования различных алгоритмов распознавания образов. Он содержит черно-белые картинки размера 28x28 пикселей, исходно взятые из набора образцов из бюро переписи населения США, к которым были добавлены тестовые образцы, написанные студентами американских университетов.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;http://yann.lecun.com/exdb/mnist/[http://yann.lecun.com/exdb/mnist/]&amp;lt;/ref&amp;gt; MNIST можно найти список лучших результатов, достигнутых алгоритмами на это наборе данных. Так, худший из записанных результатов достигнут простым линейным классификатором (12% ошибок), а подавляющее большинство лучших результатов получены алгоритмами на основе нейронных сетей. Так, ансамбль из 35 сверточных нейронных сетей в 2012 году сумел получить всего 0.23% ошибок на наборе данных, что является очень хорошим результатом, вполне сравнимым с человеком.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой пример, скачивающий набор данных и запускающий на нем один из классификаторов. Даже с уменьшением набора данных в сто раз и не самым подходящим классификатором точность выше половины угаданных цифр {{---}} заметно лучше, чем случайная разметка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  from sklearn.datasets import fetch_mldata&lt;br /&gt;
  from numpy import arange&lt;br /&gt;
  import random&lt;br /&gt;
  from sklearn.tree import DecisionTreeClassifier&lt;br /&gt;
  from sklearn import datasets, svm, metrics&lt;br /&gt;
&lt;br /&gt;
[[Файл:Mnist-predict.png|мини]]&lt;br /&gt;
&lt;br /&gt;
  mnist = fetch_mldata('MNIST original')&lt;br /&gt;
  indices = arange(len(mnist.data))&lt;br /&gt;
  randidx = random.sample(list(indices), 500)&lt;br /&gt;
  mnist.data = mnist.data[randidx]&lt;br /&gt;
  mnist.target = mnist.target[randidx]&lt;br /&gt;
  X = mnist.data&lt;br /&gt;
  Y = mnist.target&lt;br /&gt;
  train = len(X)//2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
     % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
    digit    precision    recall  f1-score   support&lt;br /&gt;
        0         0.68      0.58      0.62        26&lt;br /&gt;
        1         0.71      0.87      0.78        23&lt;br /&gt;
        2         0.29      0.24      0.26        25&lt;br /&gt;
        3         0.64      0.28      0.39        25&lt;br /&gt;
        4         0.50      0.54      0.52        28&lt;br /&gt;
        5         0.46      0.46      0.46        24&lt;br /&gt;
        6         0.47      0.62      0.54        24&lt;br /&gt;
        7         0.66      0.78      0.71        27&lt;br /&gt;
        8         0.32      0.60      0.42        15&lt;br /&gt;
        9         0.59      0.39      0.47        33&lt;br /&gt;
  avg/total       0.54      0.53      0.52       250&lt;br /&gt;
&lt;br /&gt;
==CIFAR-10==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Cifar-10.png|мини|[https://medium.com/@jannik.zuern/training-a-cifar-10-classifier-in-the-cloud-using-tensorflow-and-google-colab-f3a5fbdfe24d Источник]]]&lt;br /&gt;
CIFAR-10 (Canadian Institute For Advanced Research) {{---}} еще один большой набор изображений, который обычно используется для тестирования алгоритмов машинного обучения. Он содержит 60 000 цветных картинок размером 32х32 пикселя, размеченных в один из десяти классов: самолеты, автомобили, коты, олени, собаки, лягушки, лошади, корабли и грузовики. В наборе данных по 6000 картинок каждого класса. CIFAR-10 является размеченным подмножеством заметно большего набора данных, состоящего примерно из восьмидесяти миллионов изображений.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
С момента публикации CIFAR-10 вышло много статей, авторы которых пытаются добиться максимальной точности на этом наборе данных. В среднем более хорошие результаты показывают различные сверточные нейронные сети с различными вариантами настройки и дополнительной предобработки данных.&lt;br /&gt;
&lt;br /&gt;
На википедии&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10[https://en.wikipedia.org/wiki/CIFAR-10#Research_Papers_Claiming_State-of-the-Art_Results_on_CIFAR-10]&amp;lt;/ref&amp;gt;  можно найти таблицу лучших публикаций с процентами ошибки на этом наборе данных. Так, лучший на сегодняшний момент алгоритм, опубликованный в мае 2018 года, допускает ошибку всего порядка 1.48%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
Простой код, скачивающий CIFAR-10 из интернета и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  from keras.datasets import cifar10&lt;br /&gt;
  from sklearn.utils import shuffle    &lt;br /&gt;
&lt;br /&gt;
  (x_train, y_train), (x_test, y_test) = cifar10.load_data()&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ImageNet==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:Imagenet.png|мини|[http://www.image-net.org/challenges/LSVRC/2014/ Источник]]]&lt;br /&gt;
&lt;br /&gt;
База данных Imagenet {{---}} проект по созданию и сопровождению массивной базы данных аннотированных изображений. Аннотация изображений происходит путем краудсорсинга сообществом. Из-за этого достигается большое количество размеченных данных.&lt;br /&gt;
&lt;br /&gt;
Особенность данного набора данных {{---}} про каждую картинку известно несколько фактов вида &amp;quot;в этом прямоугольнике есть автомобиль&amp;quot;, что в совокупности с индексом по типам объектов, которые есть на изображениях, позволяет обучить алгоритм для распознавания объектов какой-то конкретной категории. На август 2017 года в ImageNet 14 197 122 изображения, разбитых на 21 841 категорию.&lt;br /&gt;
&lt;br /&gt;
===Imagenet Challenge===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Imagenet-contest.png|мини|[https://en.wikipedia.org/wiki/File:ImageNet_error_rate_history_(just_systems).svg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
Вместе с публикацией набора данных стартовал конкурс ImageNet Large Scale Visual Recognition Challenge (ILSVRC&amp;lt;ref&amp;gt;http://www.image-net.org/challenges/LSVRC/[http://www.image-net.org/challenges/LSVRC/]&amp;lt;/ref&amp;gt;). В его рамках участникам предлагается достигнуть наибольшей точности при классификации набора изображений. Организаторы использовали около тысячи различных категорий объектов, которые нужно классифицировать. На примере этого конкурса хорошо видно, как в 2010-е годы люди научились заметно лучше распознавать образы на изображениях, уже в 2017 году большинство участвующих команд преодолели порог в 95% правильных ответов. Эта задача, проблема компьютерного зрения, имеет огромное практическое значение во многих прикладных областях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==COCO==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-examples.jpg|мини|Пример изображений из MS Coco [http://cocodataset.org/images/coco-examples.jpg Оригинал]]]&lt;br /&gt;
&lt;br /&gt;
MS COCO (англ. ''Common Objects in Context'') {{---}} большой набор изображений. Состоит из более чем 330000 изображений (220000  {{---}} размеченных), с более чем 1.5 милионов объектов на них. Все объекты находятся в их естественном окружении (контексте). Изображения, как правило, содержат объекты разных классов (только 10% имеют единственный класс). Все изображения сопровождаются аннотациями, хранящихся в json формате. Подробнее о структуре аннотаций можно прочитать [http://cocodataset.org/#format-data здесь].&lt;br /&gt;
&lt;br /&gt;
COCO имеет пять типов аннотаций для разных задач:&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Обнаружение ключевых точек. Обнаружение объектов и локализация их ключевых точек.&lt;br /&gt;
* Сегментация окружения (англ. ''Stuff Segmentation''). В отличии от задачи обнаружения объектов (человек, кот, машина), здесь внимание фокусируется на том, что его окружает (трава, стена, небо). Метки классов организованы в иерархическом порядке (напр., ''stuff → outdoor-stuff → sky → clouds''). Чтобы добиться совместимости с задачей обнаружения объектов, используются следующие идентификаторы категорий:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Идентификатор&lt;br /&gt;
! Соответствие&lt;br /&gt;
|-&lt;br /&gt;
|1-91 || категории объектов (не используются в сегментации окружения)&lt;br /&gt;
|-&lt;br /&gt;
|92-182 || категории окружения&lt;br /&gt;
|-&lt;br /&gt;
|183 || категория &amp;quot;другое&amp;quot; (выбирается для &amp;quot;объектов&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
* Паноптическая сегментация (англ. ''Panoptic Segmentation'') {{---}} обединение задач семантической сегментации ([[Сегментация изображений]]) и обнаружения объектов. Задача состоит в том, чтобы классифицировать все пиксели изображения на принадлежность к некоторому классу, а также определить, к какому из экземпляров данного класса они относятся. &lt;br /&gt;
* Аннотирование изображения (англ. ''Caption Evaluation''). Генерация сопроводительной подписи к изображению.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
Результат задачи зависит от многих факторов. Например, для задачи обнаружения объекта, наилучшие результаты алгоритмы показывают на крупных объектах. &lt;br /&gt;
Более подробно с метриками можно ознакомиться [http://cocodataset.org/#detection-leaderboard здесь].&lt;br /&gt;
Приведем лишь результаты детектора [https://arxiv.org/abs/1512.03385 ResNet] (bbox) - победителя 2015 Detection Challenge.&lt;br /&gt;
Графики представляют из себя семейство кривых Pressision Recall для различных метрик.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Detection-analysis-person.jpg|мини|PR кривые для класса &amp;quot;Person&amp;quot; [http://cocodataset.org/images/detection-analysis-person.jpg оригинал]]]&lt;br /&gt;
 |[[Файл:Detection-analysis-all.jpg|мини|Усредненные значения для всех классов [http://cocodataset.org/images/detection-analysis-all.jpg оригинал]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Пример использования [https://github.com/cocodataset COCO API] на python:&lt;br /&gt;
&lt;br /&gt;
  %matplotlib inline&lt;br /&gt;
  from pycocotools.coco import COCO&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  import skimage.io as io&lt;br /&gt;
  import matplotlib.pyplot as plt&lt;br /&gt;
  import pylab&lt;br /&gt;
  pylab.rcParams['figure.figsize'] = (8.0, 10.0)&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  dataDir='..'&lt;br /&gt;
  dataType='val2017'&lt;br /&gt;
  annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)&lt;br /&gt;
  &lt;br /&gt;
  coco=COCO(annFile)&lt;br /&gt;
  &lt;br /&gt;
  cats = coco.loadCats(coco.getCatIds())&lt;br /&gt;
  nms=[cat['name'] for cat in cats]&lt;br /&gt;
  print('COCO categories: \n{}\n'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  nms = set([cat['supercategory'] for cat in cats])&lt;br /&gt;
  print('COCO supercategories: \n{}'.format(' '.join(nms)))&lt;br /&gt;
  &lt;br /&gt;
  # get all images containing given categories, select one at random&lt;br /&gt;
  catIds = coco.getCatIds(catNms=['person','dog','skateboard']);&lt;br /&gt;
  imgIds = coco.getImgIds(catIds=catIds );&lt;br /&gt;
  imgIds = coco.getImgIds(imgIds = [324158])&lt;br /&gt;
  img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]&lt;br /&gt;
  &lt;br /&gt;
  # load and display image&lt;br /&gt;
  # I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))&lt;br /&gt;
  # use url to load image&lt;br /&gt;
  I = io.imread(img['coco_url'])&lt;br /&gt;
  plt.axis('off')&lt;br /&gt;
  plt.imshow(I)&lt;br /&gt;
  plt.show()&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-1.png |мини| center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
  # load and display instance annotations&lt;br /&gt;
  plt.imshow(I); plt.axis('off')&lt;br /&gt;
  annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)&lt;br /&gt;
  anns = coco.loadAnns(annIds)&lt;br /&gt;
  coco.showAnns(anns)&lt;br /&gt;
&lt;br /&gt;
[[Файл:Coco-2.png|мини|center| [https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb оригинал]]]&lt;br /&gt;
&lt;br /&gt;
==Fashion-MNIST==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл:FMNIST.png|мини|Пример изображений из Fashion-MNIST]]&lt;br /&gt;
Fashion-MNIST {{---}} это набор изображений, взятых из статей [https://jobs.zalando.com/en/tech/?gh_src=nevh2y1 Zalando], состоящий из обучающего набора из 60000 примеров и тестового набора из 10000 примеров. Каждый пример представляет собой черно-белое изображение 28x28, связанное с меткой из 10 классов. Создатели Fashion-MNIST предложили его в качестве прямой замены исходного набора данных MNIST, состоящего из рукописных цифр, для сравнительного анализа алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделений для обучения и тестирования. Аргументировали необходимость такой замены тем, что исходный набор данных MNIST действительно хорошо отражает возможность алгоритма хоть что-то классифицировать, но если алгоритм работает на стандартном MNIST, он все равно может не сработать на других примерах данных. Также на наборе данных MNIST научились достигать слишком высоких результатов точности (97% для классических алгоритмов машинного обучения и 99.7% для сверточных нейронных сетей), в то время как MNIST не отражает современных сложных проблем компьютерного зрения. Это позволило сделать предположение о том, что набор данных MNIST слишком простой по современным меркам и его требуется заменить.&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
На сайте&amp;lt;ref&amp;gt;https://github.com/zalandoresearch/fashion-mnist&amp;lt;/ref&amp;gt; набора данных можно найти список лучших результатов, достигнутых алгоритмами на этом наборе данных. Так как задача классификации набора данных Fashion-MNIST сложнее, чем в случае стандартного набора MNIST, в таблице представлены только алгоритмы глубокого обучения, т.к. только для них эта задача имеет смысл. Так, худший из записанных результатов достигнут сверточной нейронной сетью с 3 сверточными слоями и одним слоем пулинга (12.4% ошибок), а подавляющее большинство лучших результатов получены боле сложными архитектурами. Лучший результат был достигнут WRN сетью и составляет всего 3.3% ошибки.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, скачивающий Fashion-MNIST с использованием NumPy и запускающий на нем стандартный классификатор.&lt;br /&gt;
&lt;br /&gt;
  import mnist_reader&lt;br /&gt;
  from sklearn.datasets import load_iris&lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier&lt;br /&gt;
  from sklearn.utils import shuffle&lt;br /&gt;
  x_train, y_train = mnist_reader.load_mnist('data/fashion', kind='train')&lt;br /&gt;
  x_test, y_test = mnist_reader.load_mnist('data/fashion', kind='t10k')&lt;br /&gt;
  X, Y = shuffle(x_train, y_train)&lt;br /&gt;
  n = 1000&lt;br /&gt;
  X, Y = X[:n], Y[:n]&lt;br /&gt;
  X, Y = X.reshape((n, -1)), Y.reshape((n,))&lt;br /&gt;
  train = n // 2&lt;br /&gt;
  clf = DecisionTreeClassifier(criterion=&amp;quot;entropy&amp;quot;, max_depth=5)&lt;br /&gt;
  clf.fit(X[:train], Y[:train])&lt;br /&gt;
  expected = Y[train:]&lt;br /&gt;
  predicted = clf.predict(X[train:])&lt;br /&gt;
  print(&amp;quot;Classification report for classifier %s:\n%s\n&amp;quot;&lt;br /&gt;
   % (clf, metrics.classification_report(expected, predicted)))&lt;br /&gt;
&lt;br /&gt;
==Boston Housing Dataset==&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
&lt;br /&gt;
Boston Housing Dataset содержит данные, собранные Службой переписи населения США (англ. ''U.S Census Service''), касающиеся недвижимости в районах Бостона. Набор данных состоит из 13 признаков и 506 строк и также предоставляет такую информацию, как уровень преступности (CRIM), ставка налога на недвижимость (TAX), возраст людей, которым принадлежит дом (AGE), индекс доступности к автомагистралям (RAD), соотношение числа учащихся и преподавателей в районе (PTRATIO) и другие. Данный набор данных используется для предсказания следующих целевых переменных: средняя стоимость дома (MEDV) и уровень закиси азота (NOX).&lt;br /&gt;
&lt;br /&gt;
===Результаты===&lt;br /&gt;
&lt;br /&gt;
Для решения задачи предсказания средней стоимости дома используется множественная линейная регрессия. Метрикой качества модели выступает корень из среднеквадратичной ошибки (англ. ''root-mean-square error, RMSE''). В среднем, значение RMSE на данном наборе данных находится в районе 3,5-5 в зависимости от выбранной модели. Однако на соревновании на сайте [https://www.kaggle.com/sagarnildass/predicting-boston-house-prices Kaggle] пользователь [https://www.kaggle.com/c/boston-housing/leaderboard MayankSatnalika] получил результат 1.33055.&lt;br /&gt;
&lt;br /&gt;
===Код===&lt;br /&gt;
&lt;br /&gt;
Простой код, загружающий набор данных из библиотеки skleran с использованием NumPy и Pandas и запускающий на нем алгоритм линейной регрессии.&lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  import numpy as np&lt;br /&gt;
  from sklearn.datasets import load_boston&lt;br /&gt;
  from sklearn.model_selection import train_test_split&lt;br /&gt;
  from sklearn.linear_model import LinearRegression&lt;br /&gt;
  from sklearn.metrics import mean_squared_error&lt;br /&gt;
  boston_dataset = load_boston()&lt;br /&gt;
  boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)&lt;br /&gt;
  boston['MEDV'] = boston_dataset.target&lt;br /&gt;
  X = pd.DataFrame(np.c_[boston['LSTAT'], boston['RM']], columns=['LSTAT', 'RM'])&lt;br /&gt;
  Y = boston['MEDV']&lt;br /&gt;
  X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=5)&lt;br /&gt;
  lin_model = LinearRegression()&lt;br /&gt;
  lin_model.fit(X_train, Y_train)&lt;br /&gt;
  y_train_predict = lin_model.predict(X_train)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_train, y_train_predict)))# 5.6371293350711955&lt;br /&gt;
  y_test_predict = lin_model.predict(X_test)&lt;br /&gt;
  rmse = (np.sqrt(mean_squared_error(Y_test, y_test_predict)))# 5.13740078470291&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
* [[Задача нахождения объектов на изображении]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Компьютерное зрение]]&lt;br /&gt;
[[Категория: Классификация и регрессия]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72636</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72636"/>
				<updated>2020-02-12T14:36:10Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Жизненный_цикл_модели_машинного_обучения.jpeg|550px|thumb|right| Жизненный цикл модели ML [https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining#/media/File:CRISP-DM_Process_Diagram.pngИсточник]]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется сформулировать вопросы, которые определяют бизнес-цели, на которых могут сосредоточиться методы науки о данных.&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Примеры метрик: продолжительность пребывания товара на складе, количество материала, которое экономится в процессе производства и количество абонентов, которые остались у своего оператора.&lt;br /&gt;
Далее требуется понять ключевые показатели модели, ставя и уточняя &amp;quot;острые&amp;quot; вопросы: релевантные, конкретные и однозначные. Машинное обучение — это работа с именами и числами для получения ответов на такие вопросы. В основном модели машинного обучения отвечают на следующие вопросы:&lt;br /&gt;
*	Сколько? (регрессия) &lt;br /&gt;
*	К какой категории относится объект? (классификация) &lt;br /&gt;
*	К какой группе относится объект? (кластеризация) &lt;br /&gt;
*	Является ли действия данного пользователя странными? (обнаружение аномалий) &lt;br /&gt;
*	Что похожее предложить пользователю? (рекомендация)&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков.&lt;br /&gt;
Последняя задача данного этапа заключается в поиске метрики успешности модели. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты ; &lt;br /&gt;
*	Электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ML-модели. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-моделях такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Виды ансамблей]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;br /&gt;
[[Категория: Ансамбли]]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F.jpeg&amp;diff=72635</id>
		<title>Файл:Жизненный цикл модели машинного обучения.jpeg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F.jpeg&amp;diff=72635"/>
				<updated>2020-02-12T14:13:45Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72629</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72629"/>
				<updated>2020-02-10T09:53:42Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Datascience-lifecycle.png|550px|thumb|right| Жизненный цикл модели ML]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Разработка модели машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML. Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется сформулировать вопросы, которые определяют бизнес-цели, на которых могут сосредоточиться методы науки о данных.&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Примеры метрик: продолжительность пребывания товара на складе, количество материала, которое экономится в процессе производства и количество абонентов, которые остались у своего оператора.&lt;br /&gt;
Далее требуется понять ключевые показатели модели, ставя и уточняя &amp;quot;острые&amp;quot; вопросы: релевантные, конкретные и однозначные. Машинное обучение — это работа с именами и числами для получения ответов на такие вопросы. В основном модели машинного обучения отвечают на следующие вопросы:&lt;br /&gt;
*	Сколько? (регрессия) &lt;br /&gt;
*	К какой категории относится объект? (классификация) &lt;br /&gt;
*	К какой группе относится объект? (кластеризация) &lt;br /&gt;
*	Является ли действия данного пользователя странными? (обнаружение аномалий) &lt;br /&gt;
*	Что похожее предложить пользователю? (рекомендация)&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков.&lt;br /&gt;
Последняя задача данного этапа заключается в поиске метрики успешности модели. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанный, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация &amp;quot;грязных&amp;quot; данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом подготовки данных является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	Веб-сайты ; &lt;br /&gt;
*	Электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	Серверные приложения.&lt;br /&gt;
&lt;br /&gt;
Также необходимо понять, собирается ли компания использовать Платформу как Сервис (англ. ''Platform as a Service, PaaS'') или Инфраструктуру как Сервис (англ. ''Infrastructure as a Service, IaaS''). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса.Также, нужно убедиться, что развертывание происходит через платформу непрерывного развертывания(англ. ''Continuous Deployment platform'').&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравнение результатов, данных новой моделью, и результатов, данных старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или признак была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ML-модели. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода могут помочь). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-моделях такие тесты особенно стоит использовать.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (англ. ''split testing'' ). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/lifecycle   The Team Data Science Process lifecycle]&lt;br /&gt;
#[https://christophergs.github.io/machine%20learning/2019/03/17/how-to-deploy-machine-learning-models/  How to Deploy Machine Learning Models]&lt;br /&gt;
#[https://www.deploymachinelearning.com/ Deploy Machine Learning Models with Django]&lt;br /&gt;
#[https://tealium.com/blog/under-the-hood/data-readiness-lessons-from-the-field-for-machine-learning-data-prep/  Machine Learning Data Preparation]&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72618</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72618"/>
				<updated>2020-02-09T22:32:43Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Datascience-lifecycle.png|550px|thumb|right| Жизненный цикл модели ML]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Модель машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML.  Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
В данном конспекте жизненный цикл модели машинного обучения будет рассмотрен на примере модели, которая предсказывает превышает ли доход человека 50 тысяч долларов.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется сформулируйте вопросы, которые определяют бизнес-цели, на которых могут сосредоточиться методы науки о данных.&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Примеры метрик: продолжительность пребывания товара на складе, количество материала, которое экономится в процессе производства и количество абонентов, которые остались у своего оператора.&lt;br /&gt;
Далее требуется понять ключевые показатели модели, ставя и уточняя &amp;quot;острые&amp;quot; вопросы: релевантные, конкретные и однозначные. Машинное обучение — это работа с именами и числами для получения ответов на такие вопросы. В основном модели машинного обучения отвечают на следующие вопросы:&lt;br /&gt;
*	Сколько? (регрессия) &lt;br /&gt;
*	К какой категории относится объект? (классификация) &lt;br /&gt;
*	К какой группе относится объект? (кластеризация) &lt;br /&gt;
*	Является ли действия данного пользователя странными? (обнаружение аномалий) &lt;br /&gt;
*	Что похожее предложить пользователю? (рекомендация)&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков.&lt;br /&gt;
Последняя задача данного этапа заключается в поиске метрики успешности модели. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанные, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация грязных данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом проекта машинного обучения является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	веб-сайты в Интернете; &lt;br /&gt;
*	электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	серверные приложения.&lt;br /&gt;
Также необходимо понять, собираетесь ли компания использовать Платформу как Сервис (Platform as a Service-PaaS) или Инфраструктуру как Сервис (Infrastructure as a Service-IaaS). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Убедитесь, что развертывание происходит через платформу непрерывного развертывания(Continuous Deployment platform).&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравниваете средние / на строку прогнозы, данные новой моделью, и прогнозы, данные старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или функция была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ваши ML-приложения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода помогут). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-приложениях такие тесты особенно стоит выполнять.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (от англ. split testing — раздельное тестирование). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72617</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72617"/>
				<updated>2020-02-09T22:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Datascience-lifecycle.png|550px|thumb|right| Жизненный цикл модели ML]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Модель машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML.  Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
В данном конспекте жизненный цикл модели машинного обучения будет рассмотрен на примере модели, которая предсказывает превышает ли доход человека 50 тысяч долларов.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется сформулируйте вопросы, которые определяют бизнес-цели, на которых могут сосредоточиться методы науки о данных.&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Примеры метрик: продолжительность пребывания товара на складе, количество материала, которое экономится в процессе производства и количество абонентов, которые остались у своего оператора.&lt;br /&gt;
Далее требуется понять ключевые показатели модели, ставя и уточняя &amp;quot;острые&amp;quot; вопросы: релевантные, конкретные и однозначные. Машинное обучение — это работа с именами и числами для получения ответов на такие вопросы. В основном модели машинного обучения отвечают на следующие вопросы:&lt;br /&gt;
*	Сколько? (регрессия) &lt;br /&gt;
*	К какой категории относится объект? (классификация) &lt;br /&gt;
*	К какой группе относится объект? (кластеризация) &lt;br /&gt;
*	Является ли действия данного пользователя странными? (обнаружение аномалий) &lt;br /&gt;
*	Что похожее предложить пользователю? (рекомендация)&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит из менеджера, исследователей, разработчиков, аналитиков и тестировщиков.&lt;br /&gt;
Последняя задача данного этапа заключается в поиске метрики успешности модели. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанные, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация грязных данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом проекта машинного обучения является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	веб-сайты в Интернете; &lt;br /&gt;
*	электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	серверные приложения.&lt;br /&gt;
Также необходимо понять, собираетесь ли компания использовать Платформу как Сервис (Platform as a Service-PaaS) или Инфраструктуру как Сервис (Infrastructure as a Service-IaaS). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Убедитесь, что развертывание происходит через платформу непрерывного развертывания(Continuous Deployment platform).&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравниваете средние / на строку прогнозы, данные новой моделью, и прогнозы, данные старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или функция была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ваши ML-приложения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода помогут). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-приложениях такие тесты особенно стоит выполнять.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (от англ. split testing — раздельное тестирование). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;br /&gt;
&lt;br /&gt;
==Пример кода на Python 3 ==&lt;br /&gt;
  #установка git-репозитория и добавление в него исходных файлов&lt;br /&gt;
  git clone https://github.com/pplonski/my_ml_service.git&lt;br /&gt;
  cd my_ml_service&lt;br /&gt;
  ls -l&lt;br /&gt;
  git add backend/&lt;br /&gt;
  git commit -am &amp;quot;setup django project&amp;quot;&lt;br /&gt;
  git push&lt;br /&gt;
&lt;br /&gt;
  #создание проекта Django и Jupyter ноутбука&lt;br /&gt;
  mkdir backend&lt;br /&gt;
  cd backend&lt;br /&gt;
  django-admin startproject server&lt;br /&gt;
  cd server&lt;br /&gt;
  python manage.py runserver&lt;br /&gt;
  pip3 install jupyter notebook&lt;br /&gt;
  ipython kernel install --user --name=venv&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
  #обучение модели&lt;br /&gt;
  pip3 install numpy pandas sklearn joblib&lt;br /&gt;
  import json # will be needed for saving preprocessing details&lt;br /&gt;
  import numpy as np &lt;br /&gt;
  import pandas as pd&lt;br /&gt;
  from sklearn.model_selection import train_test_split &lt;br /&gt;
  from sklearn.preprocessing import LabelEncoder &lt;br /&gt;
  from sklearn.ensemble import RandomForestClassifier &lt;br /&gt;
  from sklearn.ensemble import ExtraTreesClassifier &lt;br /&gt;
  import joblib # load dataset&lt;br /&gt;
  # load dataset&lt;br /&gt;
  df = pd.read_csv('https://raw.githubusercontent.com/pplonski/datasets-for-start/master/adult/data.csv', skipinitialspace=True)&lt;br /&gt;
  x_cols = [c for c in df.columns if c != 'income']&lt;br /&gt;
  # set input matrix and target column&lt;br /&gt;
  X = df[x_cols]&lt;br /&gt;
  y = df['income']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=1234)&lt;br /&gt;
  train_mode = dict(X_train.mode().iloc[0])&lt;br /&gt;
  X_train = X_train.fillna(train_mode)&lt;br /&gt;
  print(train_mode)&lt;br /&gt;
  # convert categoricals&lt;br /&gt;
  encoders = {}&lt;br /&gt;
  for column in ['workclass', 'education', 'marital-status',&lt;br /&gt;
                  'occupation', 'relationship', 'race',&lt;br /&gt;
                  'sex','native-country']:&lt;br /&gt;
      categorical_convert = LabelEncoder()&lt;br /&gt;
      X_train[column] = categorical_convert.fit_transform(X_train[column])&lt;br /&gt;
      encoders[column] = categorical_convert&lt;br /&gt;
  # train the Random Forest algorithm&lt;br /&gt;
  rf = RandomForestClassifier(n_estimators = 100)&lt;br /&gt;
  rf = rf.fit(X_train, y_train)&lt;br /&gt;
  # train the Extra Trees algorithm&lt;br /&gt;
  et = ExtraTreesClassifier(n_estimators = 100)&lt;br /&gt;
  et = et.fit(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #создание модели Django&lt;br /&gt;
  # run this in backend/server directory&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72616</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72616"/>
				<updated>2020-02-09T21:41:56Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Datascience-lifecycle.png|550px|thumb|right| Жизненный цикл модели ML]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Модель машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML.  Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
В данном конспекте жизненный цикл модели машинного обучения будет рассмотрен на примере модели, которая предсказывает превышает ли доход человека 50 тысяч долларов.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется сформулируйте вопросы, которые определяют бизнес-цели, на которых могут сосредоточиться методы науки о данных.&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Примеры метрик: продолжительность пребывания товара на складе, количество материала, которое экономится в процессе производства и количество абонентов, которые остались у своего оператора.&lt;br /&gt;
Далее требуется понять ключевые показатели модели, ставя и уточняя &amp;quot;острые&amp;quot; вопросы: релевантные, конкретные и однозначные. Машинное обучение — это работа с именами и числами для получения ответов на такие вопросы. В основном модели машинного обучения отвечают на следующие вопросы:&lt;br /&gt;
*	Сколько? (регрессия) &lt;br /&gt;
*	К какой категории относится объект? (классификация) &lt;br /&gt;
*	К какой группе относится объект? (кластеризация) &lt;br /&gt;
*	Является ли действия данного пользователя странными? (обнаружение аномалий) &lt;br /&gt;
*	Что похожее предложить пользователю? (рекомендация)&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит&lt;br /&gt;
Последняя задача данного этапа заключается в поиске метрики успешности модели. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанные, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация грязных данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом проекта машинного обучения является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
[[Файл:Deployment lifecycle.png|450px|thumb|right| Цикл развертывания]]&lt;br /&gt;
&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность моделей для других бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения. &lt;br /&gt;
Основная задача, решаемая на этом этапе - ввод модели в эксплуатацию. Необходимо развернуть модель и конвейер в рабочую или близкую к ней среду, чтобы приложения могли к ней обращаться.&lt;br /&gt;
Создав набор эффективно работающих моделей, требуется ввести их в эксплуатацию для взаимодействия с другими системами компании. В зависимости от бизнес-требований прогнозы выполняются в режиме реального времени или в стандартном режиме. Для развертывания модели, необходимо предоставить их с помощью открытого API-интерфейса. Интерфейс упрощает использование модели различными приложениями, например:&lt;br /&gt;
*	веб-сайты в Интернете; &lt;br /&gt;
*	электронные таблицы; &lt;br /&gt;
*	Панели мониторинга бизнес-приложения; &lt;br /&gt;
*	серверные приложения.&lt;br /&gt;
Также необходимо понять, собираетесь ли компания использовать Платформу как Сервис (Platform as a Service-PaaS) или Инфраструктуру как Сервис (Infrastructure as a Service-IaaS). PaaS может быть полезен для создания прототипов и компаний с меньшим трафиком. В конце концов, по мере роста бизнеса и / или увеличения трафика компании придется использовать IaaS с большей сложностью. Есть множество решений от больших компаний (AWS, Google, Microsoft). Если приложения контейнеризованы, развертывание на большинстве платформ / инфраструктур будет проще. Контейнезирование также дает возможность использовать платформу оркестровки контейнеров (теперь Kubernetes является стандартом) для быстрого масштабирования количества контейнеров по мере изменения спроса. Убедитесь, что развертывание происходит через платформу непрерывного развертывания(Continuous Deployment platform).&lt;br /&gt;
&lt;br /&gt;
==Тестирование и мониторинг==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется тестирование, мониторинг и контролирование модели. В основном тесты моделей машинного обучения делятся на следующие части:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Дифференциальные тесты===&lt;br /&gt;
&lt;br /&gt;
Происходит сравниваете средние / на строку прогнозы, данные новой моделью, и прогнозы, данные старой моделью для стандартного набора тестовых данных. Необходимо настроить чувствительность этих тестов в зависимости от варианта использования модели. Эти тесты могут быть жизненно важны для обнаружения моделей, которые выглядят рабочими, например, когда устаревший набор данных использовался в обучении или функция была случайно удалена из кода. Эти виды проблем, связанных с ML, не приведут к провалу традиционных тестов..&lt;br /&gt;
&lt;br /&gt;
===Контрольные тесты===&lt;br /&gt;
&lt;br /&gt;
Тесты сравнивают время, затрачиваемое либо на обучение, либо на предоставление прогнозов из модели от одной версии к другой. Они мешают вводить неэффективные добавления кода в ваши ML-приложения. Опять же, это то, что трудно уловить с помощью традиционных тестов (хотя некоторые инструменты статического анализа кода помогут). &lt;br /&gt;
&lt;br /&gt;
===Нагрузочные / стресс-тесты===&lt;br /&gt;
&lt;br /&gt;
Это не совсем ML-специфичные тесты, но с учетом необычно больших требований к ЦП / памяти в некоторых ML-приложениях такие тесты особенно стоит выполнять.&lt;br /&gt;
&lt;br /&gt;
===A/B-тестирование===&lt;br /&gt;
&lt;br /&gt;
Еще один популярный способ тестирования - A/B-тестирование. Этот метод также называется сплит-тестированием (от англ. split testing — раздельное тестирование). A/B-тестирование позволяет оценивать количественные показатели работы двух вариантов модели, а также сравнивать их между собой. Чтобы получить статистически значимый результат, очень важно исключить влияние моделей друг на друга.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Все вышеперечисленные тесты намного проще с контейнеризованными приложениями, так как это делает раскрутку реалистичного производственного стека тривиальной.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Мониторинг и оповещение могут быть особенно важны при развертывании моделей. По мере усложнения системы потребуются возможности мониторинга и оповещения, чтобы сообщать, когда прогнозы для конкретной системы выходят за пределы ожидаемого диапазона. Мониторинг и оповещение также могут быть связаны с косвенными проблемами, например, при обучении новой сверточной нейронной сети расходовать ежемесячный бюджет AWS за 30 минут. Также понадобятся панели управления, позволяющие быстро проверить развернутые версии моделей.&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Deployment_lifecycle.png&amp;diff=72614</id>
		<title>Файл:Deployment lifecycle.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Deployment_lifecycle.png&amp;diff=72614"/>
				<updated>2020-02-09T20:11:27Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72613</id>
		<title>Жизненный цикл модели машинного обучения</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%96%D0%B8%D0%B7%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D1%86%D0%B8%D0%BA%D0%BB_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=72613"/>
				<updated>2020-02-09T18:35:27Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: Новая страница: « Жизненный цикл модели ML  '''Жизненный цикл модели машинно…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Datascience-lifecycle.png|550px|thumb|right| Жизненный цикл модели ML]]&lt;br /&gt;
&lt;br /&gt;
'''Жизненный цикл модели машинного обучения''' – это многоэтапный процесс, в течении которого исследователи, инженеры и разработчики обучают, разрабатывают и обслуживают модель машинного обучения.Модель машинного обучения принципиально отличается от традиционной разработки программного обеспечения и требует своего собственного уникального процесса: жизненного цикла разработки ML.  Модель машинного обучения — это приложение искусственного интеллекта (ИИ), которое дает возможность автоматически учиться и совершенствоваться на основе собственного опыта без явного участия человека. Основная цель модели заключается в том, чтобы компания смогла использовать преимущества алгоритмов искусственного интеллекта и машинного обучения для получения дополнительных конкурентных преимуществ.&lt;br /&gt;
&lt;br /&gt;
В данном конспекте жизненный цикл модели машинного обучения будет рассмотрен на примере модели, которая предсказывает превышает ли доход человека 50 тысяч долларов.&lt;br /&gt;
&lt;br /&gt;
==Исследование==&lt;br /&gt;
На этом этапе необходимо вместе с заказчиком сформулировать проблемы бизнеса, которые будет решать модель. Также, требуется сформулируйте вопросы, которые определяют бизнес-цели, на которых могут сосредоточиться методы науки о данных.&lt;br /&gt;
Главная задача этого этапа — понять основные бизнес-переменные, которые будет прогнозировать модель. Такие переменные называются ключевыми показателями модели. После этого необходимо определить какие метрики будут использоваться, чтобы определить успешность проекта. Примеры метрик: продолжительность пребывания товара на складе, количество материала, которое экономится в процессе производства и количество абонентов, которые остались у своего оператора.&lt;br /&gt;
Далее требуется понять ключевые показатели модели, ставя и уточняя &amp;quot;острые&amp;quot; вопросы: релевантные, конкретные и однозначные. Машинное обучение — это работа с именами и числами для получения ответов на такие вопросы. В основном модели машинного обучения отвечают на следующие вопросы:&lt;br /&gt;
*	Сколько? (регрессия) &lt;br /&gt;
*	К какой категории относится объект? (классификация) &lt;br /&gt;
*	К какой группе относится объект? (кластеризация) &lt;br /&gt;
*	Является ли действия данного пользователя странными? (обнаружение аномалий) &lt;br /&gt;
*	Что похожее предложить пользователю? (рекомендация)&lt;br /&gt;
&lt;br /&gt;
После необходимо сформировать команду проекта, распределить роли и обязанности между его участниками; создать расширенный поэтапный план проекта, который будет дополняться по мере поступления новой информации. Команда проекта состоит&lt;br /&gt;
Последняя задача данного этапа заключается в поиске метрики успешности модели. Например, может потребоваться спрогнозировать количество абонентов, которые хотели уйти от своего оператора, но в итоге остались у него. К моменту завершения проекта требуется чтобы модель уменьшила отток абонентов на X%. С помощью этих данных можно составить рекламные предложения для минимизации оттока. Метрики должны быть составлены в соответствии с принципами SMART.&lt;br /&gt;
&lt;br /&gt;
==Сбор и подготовка данных==&lt;br /&gt;
На данном этапе осуществляется сбор и подготовка всех необходимых данных для использования в модели. Основные задача данного этапа состоит в том, чтобы получить обработанные, высококачественный набор данных, чья связь с целевыми переменными закономерна. Сбор и подготовка данных состоят из 3 стадий: сбор данных, нормализация данных и моделирование данных.&lt;br /&gt;
&lt;br /&gt;
===Сбор данных===&lt;br /&gt;
Сбор данных — это процесс сбора информации по интересующим переменным в установленной систематической форме, которая позволяет отвечать на поставленные вопросы исследования, проверять гипотезы и оценивать результаты. Правильный сбор данных имеет важное значение для обеспечения целостности исследований. Как выбор подходящих инструментов сбора данных, так и четко разграниченные инструкции по их правильному использованию снижают вероятность возникновения ошибок. Прогнозирующие модели хороши только для данных, из которых они построены, поэтому правильная практика сбора данных имеет решающее значение для разработки высокопроизводительных моделей. Данные должны быть безошибочными и содержать релевантную информацию.&lt;br /&gt;
===Нормализация данных===&lt;br /&gt;
Cледующий шаг в процессе подготовки — это то место, где аналитики и инженеры данных обычно проводят большую часть своего времени: очистка и нормализация грязных данных. Часто это требует от них принимать решения на основе данных, которые они не совсем понимают, например, что делать с отсутствующими или неполными данными, а также с выбросами. Что еще хуже - эти данные нелегко соотнести с соответствующей единицей анализа: вашим клиентом. Например, чтобы предсказать, уйдет ли один клиент (а не сегмент или целая аудитория), нельзя полагаться на разрозненные данные из разрозненных источников. Ваш специалист по данным подготовит и объединит все данные из этих источников в формат, который могут интерпретировать модели ML. &lt;br /&gt;
===Моделирование данных=== &lt;br /&gt;
Следующим этапом проекта машинного обучения является моделирование данных, которые мы хотим использовать для прогнозирования. Моделирование данных — это сложный процесс создания логического представления структуры данных. Правильно сконструированная модель данных должна быть адекватна предметной области, т.е. соответствовать всем пользовательским представлениям данных. Моделирование также включает в себя смешивание и агрегирование веб данных, данных из мобильных приложений, оффлайн данных и др.&lt;br /&gt;
Для модели, рассматриваемой в данном конспекте, инженеры объединяют разнородные данные в цельный набор данных. Например, у них есть уже готовые данные по признакам, и они объединяют их в один набор данных.&lt;br /&gt;
&lt;br /&gt;
==Разработка модели==&lt;br /&gt;
&lt;br /&gt;
На данном этапе осуществляется разработка модели и решаются две основные задачи: конструирование признаков, и поиск модели, которая лучше остальных решает поставленную задачу, на основе имеющихся метрик.&lt;br /&gt;
&lt;br /&gt;
===Конструирование признаков===&lt;br /&gt;
	&lt;br /&gt;
Конструирование признаков состоит из учета, статистической обработки и преобразования данных для создания признаков, используемых в модели. Чтобы понять лежащие в основе модели механизмы, целесообразно оценить связь между компонентами и понять, как алгоритмы машинного обучения будут использовать эти компоненты. &lt;br /&gt;
На данном этапе нужно творческое сочетание опыта и информации, полученной на этапе исследования данных. В конструирование признаков необходимо найти баланс. Важно найти и учесть информативные переменные, не создавая при этом лишние несвязанные признаки. Информативные признаки улучшают результат модели, а не информативные — добавляют в модель ненужный шум. При создании признаков необходимо учитывать все новые данные, полученные во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
===Обучение модели===&lt;br /&gt;
В зависимости от типа вопроса, на который вы ищете ответ, можно использовать разные алгоритмы моделирования. Процесс обучения модели машинного обучения состоит из следующих шагов:&lt;br /&gt;
С помощью кросс-валидации разделите набор данных случайным образом на два набора данных: для обучения и для тестирования. &lt;br /&gt;
Обучите модель с помощью тренировочного набора данных. &lt;br /&gt;
Оцените набор данных для обучения и тестирования. &lt;br /&gt;
Используйте ансамбль конкурирующих алгоритмов машинного обучения, а также связанные с ними параметры настройки (перебор гиперпараметров), которые определяют ответы на поставленный вопрос по имеющимся данным. &lt;br /&gt;
Выясните, какой алгоритм наиболее точно решает поставленную задачу, сравнивая метрики для все возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
==Развертывание==&lt;br /&gt;
Развертывание моделей машинного обучения или простое внедрение моделей в производство означает доступность ваших моделей для других ваших бизнес-систем. Развертывая модели, другие системы могут отправлять им данные и получать их прогнозы, которые, в свою очередь, заполняются в системах компании. Благодаря развертыванию модели машинного обучения компания сможет в полной мере воспользоваться созданной моделью машинного обучения.&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Datascience-lifecycle.png&amp;diff=72612</id>
		<title>Файл:Datascience-lifecycle.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Datascience-lifecycle.png&amp;diff=72612"/>
				<updated>2020-02-09T17:55:10Z</updated>
		
		<summary type="html">&lt;p&gt;Nikita Yegorov: Жизненный цикл модели ML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Жизненный цикл модели ML&lt;/div&gt;</summary>
		<author><name>Nikita Yegorov</name></author>	</entry>

	</feed>