Розробка MLOps-інфраструктури для торгових AI-моделей

Модель показує прибуток на історії, а в реальній торгівлі результат розходиться з розрахунком. Ми розробляємо MLOps-контури під ключ: версіонування моделей, контроль дрейфу, безпечний випуск і відкат. Розходження між моделлю та фактом виконання угод скорочується до передбачуваного рівня, а команда отримує керований процес замість ручних прогонів.
Часті запитання

Модель розходиться з бектестом: де ламається MLOps у трейдингу

Бектест майже завжди рівніший за живу торгівлю — питання в тому, наскільки.

Розходження закладається ще на навчанні: ознаки рахуються за даними, які на той момент ще не були доступні, склад інструментів береться за «тими, хто вижив», а витрати на виконання в розрахунок не потрапляють. Модель показує красиву криву там, де в неї просто не було шансу помилитися.

На живому ринку змінюється сам режим, а не лише дані. Просідає ліквідність усередині дня, зростає затримка між сигналом і виконанням, велика заявка рухає ціну проти нас.

Модель, навчена на трендовій ділянці, у боковику втрачає точність, і причина не в ринку, а в тому, що розгортання не відстежує зміну режиму.

Ручні перерахунки параметрів добивають картину. Гіперпараметри підкручують перед вечірньою сесією, ознаки перезбирають скриптом на локальній машині, ваги оновлюють копіюванням файлу, а реєстр версій моделей на кшталт MLflow так і не заводиться.

Через тиждень уже ніхто не відновить, яка версія моделі та який набір ознак дали сигнал у конкретній угоді — ні для розбору, ні для відкату.

«Найдорожче тут — не збиток за однією угодою, а неможливість пояснити результат», — каже наш інженер, який виводив такі системи в робочу експлуатацію.

Щоб розходження з бектестом стало керованою величиною, а не сюрпризом, розбираємо, де саме ламається MLOps у трейдингу і як це закривається.

Що дає керований життєвий цикл торгової моделі

Контроль версій моделей перестає бути папкою з файлами за датами. Кожен артефакт пов'язаний з версією коду, складом навчальної вибірки, набором гіперпараметрів і середовищем — із журналу видно, з чого зібрано конкретну версію, і її можна підняти заново на іншому вузлі. Це фундамент, на якому тримаються інші ефекти.

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

Час до випуску моделі скорочується завдяки передбачуваному шляху: нова версія проходить ті самі ворота якості, що й попередня, а викладка в торговий контур — відпрацьовану процедуру, а не разову ручну операцію. Рутинний випуск перестає бути подією і займає хвилини замість днів.

Зниження відмов торгівлі — наслідок прямої перевірки сумісності: розходження набору ознак між навчанням і роботою на живих даних, дрейф вхідних розподілів і невідповідність версій ловляться на вході, а не в момент виставлення ордера.

Розбір інциденту йде за журналом рішень — видно, яка версія спрацювала, на яких даних і чому фільтр пропустив або відхилив сигнал.

Зібраний MLOps-контур робить життєвий цикл моделі перевірюваним: будь-яку версію можна перезібрати, порівняти із сусідньою і відкотити, не переписуючи торгову логіку.

Режими роботи MLOps-контуру в трейдингу: порівняння варіантів

Режими MLOps-контуру розрізняються тим, де зберігаються дані, де обчислюється модель і хто відповідає за випуск нової версії в роботу.

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

Варіант Коли підходить Обмеження
Повний цикл на нашій стороні Немає власної команди й потужностей, потрібен швидкий вихід на робочі сигнали, дані допустимо передавати Передавання даних зовнішнім каналом, чутливі дані виносити не можна, час реакції на збій ділиться між сторонами
Розгортання у вашому контурі Дані не покидають периметр, є вимоги безпеки, важлива низька затримка сигналу Потрібні власні обчислювальні ресурси й чергова зміна, оновлення йдуть через погодження, частина експлуатації залишається на вашій команді
Гібридний контур Навчання й експерименти зручніше вести в нас, розрахунок сигналів — у вас, ознаки можна знеособити Потрібна синхронізація версій ознак і моделей, відтворюваність результату підтверджувати складніше
Автоматичний випуск із контролем дрейфу Моделі перенавчаються регулярно, дані йдуть потоком, потрібен передбачуваний цикл оновлення Потрібні метрики якості на робочих даних і автовідкат, пороги дрейфу калібруються під конкретний ринок

Вибір рідко буває бінарним. Пакетний перерахунок закриває щоденне навчання й перезбирання ознак, а потоковий перерахунок вмикають точково — там, де затримка сигналу справді впливає на результат.

На практиці робоча конфігурація для більшості задач — гібридний контур з автоматичним випуском і контролем дрейфу.

Етапи впровадження контуру: аудит даних, схема, налаштування, передача

Перш ніж розгортати контур, ми відновлюємо фактичну картину: звідки надходять котирування, як обчислюються ознаки, де губиться історія виконання заявок.

Без цього моніторинг перетворюється на спостереження за випадковими метриками, а розходження між перевіркою на історії та живим потоком випливає вже на реальних позиціях.

  1. Аудит даних і торгових журналів — звіряємо джерела котирувань, глибину історії та повноту записів про виконання, шукаємо розриви й розходження між логами майданчика та внутрішнім обліком.
  2. Схема контуру — фіксуємо, де живуть дані, ознаки, моделі й сигнали, як розділені навчання та виконання, які відмови вважаються допустимими.
  3. Версіонування моделей і ознак — кожна торгова модель прив'язана до набору даних і параметрів, відкат до попередньої версії проходить без перезбирання всього контуру.
  4. Налаштування моніторингу — якість сигналів, затримка розрахунку, частка відхилених заявок і дрейф розподілу ознак; оповіщення прив'язані до порогів, а не до факту падіння процесу.
  5. Перевірка на історії — прогін на накопичених даних: звіряємо поведінку моделі з еталоном, дивимося стійкість до зміни режиму ринку та до пропусків у потоці.
  6. Перевірка на живому потоці — тіньовий режим: модель рахує сигнали, але заявки не надсилає; порівнюємо з робочою логікою й дивимося, як поводиться моніторинг під навантаженням.
  7. Передача контуру — документація за схемою, регламенти перенавчання й відкату, розбір інцидентів із вашою командою та порядок подальшого супроводу.

Артефакти передачі: конфігурації, регламенти, схеми доступу

Проєкт вважається зданим не тоді, коли модель показала метрику на історичних даних, а коли контур живе без авторів. Тому в кінці роботи ми передаємо пакет артефактів, за яким інша команда зможе експлуатувати й розвивати систему. Що залишається у замовника на руках:

  • Реєстр моделей і версій — навчальний період, набір ознак, метрики на відкладеній вибірці та статус кожної версії: у контурі, у резерві або знята.
  • Конфігурації контуру — параметри розрахунку ознак, розклади перенавчання, пороги захистів і ліміти; розгортаються з репозиторію без ручних правок.
  • Політики доступу — ролі за середовищами: хто випускає модель, хто змінює ліміти, хто лише читає журнали.
  • Регламент випуску й відкату — обов'язкові перевірки перед публікацією, критерії зупинки та порядок повернення до попередньої версії за лічені хвилини.
  • Журнали аудиту — хто, коли і на якій підставі змінював модель, дані або обмеження; вивантаження для внутрішнього контролю.
  • Документація контуру — схема потоків даних, зовнішні залежності, точки відмови та відповідальні за кожен вузол.
  • Інструкції для чергової зміни — що робити при розходженні метрик з очікуваними, як зупинити торгівлю і кого оповістити.

Пакет синхронізовано з робочим контуром: зміна в репозиторії відображається в документації, тому через пів року знання не доводиться збирати з листування.

Кейс: розходження моделі та фактичного виконання угод

До впровадження сигнали рахувала одна версія моделі, а заявки йшли за артефактом, вивантаженим до останнього перенавчання. Версії розходилися на кілька діб, і це випливало вже у відкритій позиції: сигнал на вихід є, угода не закрита.

Звірку журналу сигналів із журналом виконання робили вручну — розбір одного торгового дня займав 3-4 години й майже не покривав нічні сесії.

Що змінили в контурі MLOps

Модельний контур зібрали навколо реєстру версій MLflow: кожне збирання отримує незмінний номер, і той самий номер іде в сигнал і в заявку — розходження ловиться на вході, а не в позиції.

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

Відкат — перемикання вказівника в реєстрі, без перезбирання й ручної правки конфігурацій на сервері виконання.

Метрики до і після

  • Частка сигналів без парної угоди: 4-6% → 0.2%
  • Розбір торгового дня: 3-4 години вручну → 10-15 хвилин за готовим звітом
  • Повернення до попередньої версії моделі: близько доби → хвилини
  • Покриття звіркою: лише денна сесія → усі сесії, включно з нічними

Розбір інциденту перестав залежати від того, хто вів зміну. Розходження відтворюється на тих самих даних і тією самою версією моделі — замість пошуку винного ланки команда отримує конкретний крок, на якому розійшлися сигнал і виконання угоди.

Чим відрізняється тіньовий випуск моделі від канареечного?

Різниця в тому, куди потрапляє відповідь моделі. Під час тіньового випуску копія бойового трафіку йде на нову версію, але її сигнали нікуди не надсилаються: розрахунок іде паралельно, а ми звіряємо передбачення двох версій на тому самому потоці даних.

Під час канареечного випуску частину живого трафіку — спочатку 1%, потім 5, 25 і 100 — обслуговує нова версія, і її рішення вже впливають на портфель.

Тіньовий режим піднімаємо зеркалюванням трафіку, наприклад через Istio, і він відповідає на питання «модель рахує так само коректно?»: чи сходяться розподіли сигналів, як змінилася латентність інференсу, скільки відмов на рідкісних інструментах.

Обмеження чесне — тіньовий прогін не перевіряє зв'язку з виконанням: ордери, ліміти ризику, обробку часткового виконання й повторних заявок.

Канареечний випуск перевіряє саме це, тому він іде другим. Поступове включення версії прив'язуємо до метрик: просадка щодо еталонної версії, частка відхилених ордерів, розходження передбачень із фактичним результатом.

Автоматичний відкат спрацьовує за порогом, а не за дзвінком чергового — інакше версія залишається в бою, поки хтось дивиться графіки.

Типові помилки під час порівняння режимів випуску: вмикати канарейку відразу, минаючи тіньовий етап; звіряти версії на різних вікнах ринку — за спокійного й волатильного режиму це різні розподіли; не фіксувати еталонну версію, через що незрозуміло, що саме погіршилося.

Окрема пастка — спільний для двох версій набір ознак: перерахували його під нову модель, і відкат уже не повертає минулу поведінку.

На практиці порядок такий: тіньовий прогін на кількох торгових сесіях, потім канарейка з кроком за часткою трафіку й автоматичним поверненням. Обидві ступені працюють на одному конвеєрі підготовки даних — інакше розходження версій не відокремити від розходження самих даних.

Технічні сумніви: дрейф даних, затримки, доступи, відкат

Перед стартом команди перевіряють чотири речі: що буде з моделлю при зміні режиму ринку, скільки триває шлях від сигналу до заявки, як відкотити версію, хто може втрутитися в систему.

Як ви відстежуєте дрейф даних?

Порівнюємо розподіл вхідних ознак і якість прогнозів на ковзному вікні з еталонним профілем навчальної вибірки. Розходження вище порога запускає перенавчання й оповіщення, а не тиху деградацію. Профіль, вікно й поріг лежать у конфігурації — правило відтворюване.

Як тримаєте затримку застосування моделі?

Базові розрахунки ознак ідуть заздалегідь, у момент рішення залишається лише легкий розрахунок прогнозу.

Затримку вимірюємо за перцентилями, а не за середнім, і тримаємо бюджет на всьому ланцюжку «дані — сигнал — заявка»: джерело котирувань, що відстало, позначає сигнал неактуальним, і в ринок він не йде.

Як відкотити версію моделі?

Модель, схеми ознак і конфігурація версіонуються одним набором. Відкат — повернення до попереднього набору артефактів однією командою, без перезбирання; тіньовий прогін на історії підтверджує коректність. Глибина зберігання розрахована на відкат на кілька кроків назад.

Як влаштовані доступи й аудит?

Права розділені за ролями: розробник не виводить модель у бій самотужки, запуск потребує підтвердження. Навчання, викатка й ручні правки параметрів потрапляють у незмінний журнал з автором і часом.

Обговорімо контур під ваш торговий процес і команду

Оцінка проєкту в MLOps для торгового контуру залежить не від кількості моделей, а від того, як сигнал проходить шлях від розрахунку до заявки і де на цьому шляху залишилися ручні кроки. Тому обговорення задачі починаємо з розбору поточного виконання, а не з презентації. Щоб повернутися з чіткою оцінкою, корисно мати під рукою:

  • перелік стратегій: які моделі працюють, на яких даних навчаються і як часто перенавчаються;
  • поточний шлях сигналу від розрахунку до виставлення заявки — з вузькими місцями та ручними діями;
  • джерела даних: котирування, новинні та альтернативні потоки, їхній обсяг і частоту оновлення;
  • вимоги до затримки й допустимого простою в години торгів;
  • регламент ризику: ліміти, автостопи, хто має право зупинити контур;
  • інфраструктуру: власні потужності або хмару, ізоляція середовищ, порядок видавання доступів і хто приймає результат.

У відповідь надсилаємо карту контуру: збирання й підготовка даних, навчання й перевірка моделі, викладка в торговий контур, спостереження й відкат на попередню версію.

До неї — план впровадження за етапами: що робимо першим, які артефакти передаємо в кожній точці приймання, які залежності залишаються на стороні замовника. План приходить документом з етапами, строками, зонами відповідальності та переліком ризиків.

Перший крок — технічна сесія на 45–60 хвилин з інженером, який буде вести проєкт: розбираємо потік даних і регламент ризику, домовляємося про критерії готовності. Опишіть задачу у вільній формі — повернемося з оцінкою та планом робіт.

Напрямки AI-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142