Разработка модели машинного обучения на заказ: прогноз, классификация, поиск аномалий

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

Обследование данных — от 200 000 ₽, 2–3 неделиЛёгкий пилот на выборке — 150 000–400 000 ₽Простая модель или правило — тоже результат

С чем приходят

Какие решения сегодня принимаются по опыту, а не по данным

Закупки и запасы

Заказывают по привычке и последнему заказу, дефицит и излишки существуют одновременно.

Ремонт оборудования

Ремонтируют по календарю или после остановки, хотя датчики пишут вибрацию, ток и температуру.

Клиенты и платежи

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

Качество процесса

Брак находят на выходе, хотя параметры процесса записаны и предшествовали ему.

Подозрительные операции

Отклонения находят на сверке через месяц, а не в момент операции.

Прогноз в одной таблице

Файл ведёт один человек, метод не проверялся, и никто не знает, насколько он ошибается.

Типы задач

Какую задачу решает модель: пример, данные, где ломается

Название метода не главное. Важнее, что именно предсказываем и что известно на момент решения. Спрос разобран на странице «Прогнозирование спроса», отказы оборудования — на странице «Предиктивное обслуживание», изображения — на странице «Компьютерное зрение». Что проверить в данных до старта — в чек-листе «Как подготовить данные для ИИ-пилота».

Задача
Пример
Что нужно в данных
Где ломается
ЗадачаПрогноз количествавременные ряды, регрессия
ПримерСколько продадим за срок поставки; какой будет загрузка линии
Что нужно в данныхИстория по дням или неделям, остатки, цены, акции, календарь; для сезона несколько полных циклов (сколько именно, называем на обследовании)
Где ломаетсяДефицит принят за нулевой спрос, акции не записаны, обучение и проверка идут на случайно разделённых днях
ЗадачаКлассификацияодин из заданных классов
ПримерК какому типу относится обращение; годна ли партия по параметрам процесса
Что нужно в данныхРазмеченные примеры каждого класса, размеченные одинаково разными людьми
Где ломаетсяКласс редкий, и модель всегда отвечает «обычный»; разметчики спорят между собой
ЗадачаВероятность событияоценка риска
ПримерБудет ли просрочка платежа; уйдёт ли клиент; сорвётся ли срок
Что нужно в данныхПрошлые случаи с известным исходом и только те признаки, что были в системе на дату решения
Где ломаетсяВ признаки попало то, что известно только после исхода; вероятность не откалибрована
ЗадачаПоиск аномалийотклонение от нормы
ПримерПодозрительная операция; необычный режим работы оборудования
Что нужно в данныхЗапись работы в штатных режимах, включая смены режима, и журнал известных инцидентов, чтобы проверить, заметила бы их система заранее
Где ломаетсяНормой считается один режим, а оборудование работает в нескольких; тревог много, и после первых ложных на них перестают реагировать
ЗадачаВремя до событияостаточный ресурс
ПримерЧерез сколько дней узел потребует ремонта
Что нужно в данныхИстории отказов однотипного оборудования, датчики до отказа, журнал ремонтов с датой и причиной
Где ломаетсяОтказов в истории мало, ремонты записаны без причины, оборудование неоднотипное
ЗадачаГруппировка без классовсегментация
ПримерКакие клиенты или позиции ведут себя похоже
Что нужно в данныхОднородные признаки по всем объектам и понятная цель разбиения
Где ломаетсяГруппы получились, но для них нет разных действий: разбиение ради разбиения
Проверка

Проверка по времени, утечка данных и приёмка без одной красивой цифры

Здесь не выживают модели, которые отлично выглядели на демонстрации. Правила ниже записываются в протокол до расчётов.

Проверка по времени, а не перемешиванием

Случайное деление записей подмешивает будущее в обучение: модель видит строки, идущие после проверяемых, и оценка выходит лучше, чем будет в работе. Поэтому учим на прошлом, проверяем на более позднем периоде и двигаем границу несколько раз: устойчивый результат повторяется, случайный нет. Горизонт проверки равен горизонту решения: за сколько дней до отказа или просрочки предупреждение ещё что-то меняет. Если времени в данных нет, например тип обращения, часть записей целиком откладываем для проверки. Разбор для склада — в статье «Как прогнозировать спрос на складе».

Утечка данных

Утечка — это когда в признаках оказалось то, что на момент решения ещё не было известно: статус заказа, который проставляют после отгрузки, остаток, пересчитанный задним числом. Модель выучивает подсказку и показывает отличное качество, а в бою подсказки нет. Ищем так: по каждому признаку спрашиваем, когда он становится известен, проверяем по времени и с подозрением относимся к слишком хорошему результату. Вторая форма — соседние по времени записи одного объекта, например кадры подряд, в обучении и в проверке.

Приёмка без одной красивой цифры

Единая цифра ошибки скрывает важное. В протокол приёмки входят:

  • сравнение с правилом и статистическим методом на тех же периодах: модель принимается, только если выигрыш повторяется при каждом сдвиге границы;
  • качество по сегментам, а не в среднем: крупные клиенты, ходовые позиции или основной режим оборудования скрывают провал на редких случаях;
  • для классификации и риска: полнота (доля найденных настоящих случаев) и точность тревог (доля верных тревог) по каждому классу отдельно, иначе при редком классе модель, всегда отвечающая «обычный», выглядит точной;
  • для поиска аномалий: число ложных тревог за неделю и доля известных событий из журнала, замеченных заранее;
  • виды ошибок и их цена, смещение: пропущенный отказ и ложная тревога стоят по-разному, а модель может систематически завышать или занижать;
  • поведение на периодах с акциями, сменой режима или поставщика;
  • доля случаев, которые модель не решает сама, и что с ними происходит.

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

Простое сначала

Что пробуем по порядку: от правила до сложной модели

Следующий уровень берётся, только если предыдущий не справился на отложенном периоде.

Уровень
Когда достаточно
Что нужно
Где ломается
УровеньПравило или порогmin/max, «если больше X»
Когда достаточноПроцесс стабилен, зависимости понятны эксперту и записываются на бумаге
Что нужноЗнание эксперта и несколько показателей
Где ломаетсяГраницы устаревают, если их не пересматривать; не видит сезон и сочетания факторов
УровеньСтатистический методскользящее среднее, сезонный профиль
Когда достаточноУстойчивый ряд с повторяющимся сезоном
Что нужноИстория за несколько полных циклов
Где ломаетсяЗапаздывает при смене уровня, не учитывает цены и акции
УровеньМодель на таблице признаковградиентный бустинг и подобные
Когда достаточноМного объектов, есть признаки, объясняющие исход, а правила и статистика не справились
Что нужноРазмеченная история и признаки, известные на момент решения
Где ломаетсяУтечка, подгонка под период, сопровождение сложнее
УровеньНейросетьсигналы, изображения, тексты
Когда достаточноВход не таблица, а сигнал, снимок или текст, и данных много
Что нужноБольшая размеченная выборка и вычислительные мощности для обучения (при необходимости GPU), свои или у хостера; выбираете и оплачиваете вы, в цену работ они не входят
Где ломаетсяДорого размечать и сопровождать; без выигрыша на отложенном периоде не оправдана
Простое выигрывает

Когда простая модель или правило выигрывает у сложной

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

  • Событий единицы. За всю историю несколько отказов, просрочек или случаев брака: сложную модель не на чем обучить, а проверка состоит из одного-двух случаев. Достаточно порога и ручного разбора.
  • Класс определяется одним признаком. Если брак почти всегда совпадает с выходом параметра за допуск, достаточно допуска: модель добавит сопровождение, но не точность.
  • Решение нужно объяснить. Отказ клиенту, остановка линии, спорная операция: правило читается мастером и аудитором, а ответ сложной модели нужно объяснять отдельно.
  • Причина вне данных. Исход определяют решения, которых в данных нет: поставщика сменили по звонку, режим изменили устно. Модель покажет историю, а не причину.
  • Данные записаны не так, как нужно. Причины ремонтов не фиксируются, исход заявки проставляется задним числом, нормальный режим не отмечен. Сначала порядок в данных, потом модель.
После запуска

Что передаём вместе с моделью, чтобы вести её без нас

Модель, которая ошибается тихо, хуже программы, которая падает громко. Полная инфраструктура нужна не каждой модели («Что такое MLOps»), но без перечисленного ниже модель нельзя ни проверить, ни обновить, ни передать другой команде.

  • Обучение одной командой. Скрипты, описание среды и версия обучающих данных: обучение можно повторить без нас и получить модель сопоставимого качества.
  • Словарь признаков. Для каждого признака записано, откуда он берётся и когда становится известен: по нему ищут утечку при следующей правке.
  • Контрольный набор. Отложенный период, не использованный при настройке. Новая версия не выходит в работу, если она хуже действующей на этом наборе и на свежем периоде; набор дополняем свежими данными, прежний сохраняем.
  • Порог переобучения. Значение метрики или доли спорных случаев, при котором модель пора обучать заново, записано в акте. Считается на свежих данных, по которым факт уже известен: на неподвижном контрольном наборе качество не меняется.
  • Откат и владелец. Предыдущая версия хранится, а сотрудник, получающий сигнал о падении качества, назван по имени.

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

Что делаем

Из чего состоит работа и сколько она стоит

Цены — по тарифам. Точная цена только у обследования, дальше вилка, которая сужается. Остановиться можно после любой ступени.

Обследование данных

Постановка задачи, проверка данных на достаточность и утечки, выбор метрик и способа проверки, план базового метода, предложение по порогу приёмки и вилка бюджета. Базовый метод строится и измеряется на истории в пилоте. 200 000 ₽ — один-два процесса, 2–3 недели; 350 000 ₽ — несколько систем, 3–4 недели; 500 000 ₽ — производство или контур, 4–6 недель. Вычитается из первого этапа, если продолжаете с нами.

200 000 / 350 000 / 500 000 ₽

Лёгкий пилот на выборке

Базовый метод и модель на одной группе, участке или выборке, проверка по времени, протокол со сравнением с простым методом.

150 000 – 400 000 ₽ · 2–8 недель

Тяжёлый пилот

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

400 000 – 1 200 000 ₽ · 2–3 месяца

Вывод в эксплуатацию

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

от 1 500 000 ₽ этапами по 300 000 – 700 000 ₽

Сопровождение

Контроль качества по расписанию, переобучение по метрике, разбор срабатываний. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

Обследование данных

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

Базовая линия и проверка на истории (лёгкий пилот)

Строим правило и статистический метод, затем модель на одной группе или участке; мерим всё по времени. На выходе протокол сравнения с простым методом.

Пилот в рабочем окружении (тяжёлый пилот)

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

Опытная эксплуатация и приёмка

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

Что дальше: расширять, сопровождать или остановиться

Расширяем этапами, сопровождаем или передаём вашей команде. Модель, не обыгравшая простой метод, остаётся простым методом.

Цена

Что двигает цену внутри вилки

Стоимость разработки ИИ по типам решений — в статье «Сколько стоит разработка ИИ на заказ».

Состояние данных

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

Число источников

Каждая система, откуда берутся данные и куда возвращается результат, добавляет доступы и владельца.

Требования контура

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

Строгость приёмки

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

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Исходный код в вашем репозитории с первого коммита; обученные модели передаются по акту вместе с версией обучающей выборки, по которой видно, на каких данных они обучены.
  • Инструкция, по которой обучение можно повторить без нас и получить модель сопоставимого качества; точное совпадение результата не обещаем из-за случайности обучения.
  • Контрольный набор и протокол проверки: по ним можно оценить результат без нас, в том числе силами другого подрядчика.
  • Данные остаются в вашем контуре. Если для работы нужна выгрузка, порядок её передачи и удаления после сдачи записываем в договоре и акте.
  • Право остановиться после любой ступени: сделанное остаётся у вас по акту.

Мы этого не делаем

  • Не называем точность модели до проверки на вашей истории.
  • Не принимаем результат по одной метрике.
  • Не проводим аттестацию и лицензируемые работы по защите информации: лицензии ФСТЭК у нас нет.
  • Не включаем автоматическое решение там, где ошибка необратима: модель готовит рекомендацию, решает человек.
  • Не внедряем систему на предприятие целиком: берём один участок или один контур.
  • Не берём работы дешевле 150 000 ₽ и не дежурим круглосуточно.
Инструменты

На чём собираем

Модели и данные
  • Python, scikit-learn, CatBoost, XGBoost
  • Статистические методы для рядов: сглаживание, сезонные индексы, методы для прерывистого спроса
  • PyTorch для сигналов, изображений и текстов
  • PostgreSQL и ClickHouse для данных
Эксплуатация
  • Планировщик задач (cron или Airflow, по масштабу) и Docker
  • Версии моделей и данных, воспроизводимое обучение
  • Мониторинг качества и входных данных
  • Развёртывание в вашем контуре
Материалы

Материалы по теме

Статья

Как подготовить данные для ИИ-пилота

Что выяснить о данных до старта: доступ, качество, объём, эталонная выборка.

  • Прогноз по табличным данным
  • Диагностика данных
Читать →
Статья

Как прогнозировать спрос на складе

От скользящего среднего до модели: проверка по времени, ошибки, переход к закупке.

  • Проверка по времени
  • Когда нужна модель
Читать →
Статья

Что такое MLOps

Дрейф данных, версии, мониторинг и откат: что нужно модели после запуска.

  • Дрейф данных
  • Когда MLOps не нужен
Читать →
Статья

Сколько стоит разработка ИИ на заказ

Цена по ступеням и типам решений, признаки плохой оценки.

  • Цена по ступеням
  • Прогнозная модель
Читать →
Заявка

Разберём вашу задачу и данные

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

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: разработка модели машинного обучения

Сколько стоит разработка ML-модели?

Обследование данных — 200 000, 350 000 или 500 000 ₽ в зависимости от числа систем, сумма вычитается из первого этапа, если продолжаете с нами. Лёгкий пилот на выборке — 150 000–400 000 ₽, тяжёлый — 400 000–1 200 000 ₽. Вывод в эксплуатацию — от 1 500 000 ₽ этапами по 300 000–700 000 ₽, сопровождение — от 20 000 ₽ в месяц.

Сколько данных нужно для модели?

Для сезонного спроса нужна история за несколько полных циклов сезонности, для классификации — размеченные примеры каждого класса, причём редких случаев должно хватать и для обучения, и для проверки, для прогноза отказов — записанные отказы с датой и причиной. Точный минимум зависит от задачи: называем его на обследовании, а не обещаем заранее.

Что делать, если данных мало?

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

Какую точность модели вы обещаете?

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

Нужна ли нейросеть для прогнозирования?

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

Что такое утечка данных и как вы её ищете?

Это когда модель в обучении видит то, что на момент решения ещё неизвестно, и поэтому на проверке показывает слишком хороший результат. Мы проверяем каждый признак вопросом «когда это становится известно», проверяем по времени, а если модель будет работать на новых клиентах или станках, не пускаем проверочные объекты в обучение.

Как часто нужно переобучать модель?

Когда ошибка на свежих данных, по которым факт уже известен, или доля спорных случаев выходит за порог из протокола приёмки, либо меняются сами данные: новый поставщик, режим работы, форма заявки. Календарь не нужен: нужны регулярный отчёт о качестве на свежих данных и сотрудник, который получает сигнал; периодичность зависит от скорости, с которой становится известен факт, и записывается в регламент.

Кому принадлежат модель и данные?

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

Как результат модели попадает в наши системы?

Если ответ нужен не в момент операции, модель запускается по расписанию в вашем контуре, читает данные из базы или выгрузки и записывает результат таблицей, которую забирает 1С, CRM или отчёт. Если ответ нужен в момент операции, модель оборачивается в небольшой веб-сервис с API. Где человек видит результат и кто решает, фиксируем на обследовании.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.