Налаштування Feature Store для ML-моделей: Feast, Redis і S3

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

Feature store для ML: де ламається навчання та інференс

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

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

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

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

Feature store закриває це як окремий шар: ознаки описуються один раз і перевикористовуються і в навчанні, і в інференсі.

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

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

Що дає єдиний шар ознак

Єдиний шар ознак прибирає головне джерело розбіжностей у ML-проєктах: коли аналітик рахує ознаки одним запитом, а модель у проді отримує їх з іншого джерела. Feature store фіксує одну логіку розрахунку і роздає її у двох режимах — офлайн для навчання і онлайн для інференсу. Завдяки цьому ознаки в експерименті та в проді збігаються побітово, а не «приблизно».

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

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

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

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

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

Розділення режимів знімає навантаження з продової бази і прибирає нічні вивантаження, які раніше блокували аналітику.

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

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

Онлайн-сховище та офлайн-сховище: режими роботи

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

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

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

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

Варіант Коли підходить Обмеження
Онлайн-сховище в пам'яті Інференс із жорсткою вимогою низької затримки, часті точкові читання за ключем Тримає лише актуальний зріз, обсяг обмежений пам'яттю, потрібна політика витіснення
Офлайн-сховище в об'єктному сховищі Навчання на історії, пакетне вивантаження великих вікон, аудит ознак Не годиться для інференсу: читання за однією сутністю повільне, немає гарантій затримки
Гібридний контур із спільним розрахунком Продакшн, де важлива узгодженість навчання та інференсу Складніший в експлуатації: потрібна синхронізація запису й контроль розходжень

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

Як ми впроваджуємо feature store: етапи робіт

Впровадження feature store починається не з розгортання, а з інвентаризації того, що вже є. Ми дивимося, звідки моделі беруть ознаки сьогодні: SQL-вивантаження за розкладом, скрипти дата-інженерів, ручні зрізи зі сховища.

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

Далі вибудовуємо процес так, щоб кожен крок давав перевірюваний артефакт, а не «стало краще».

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

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

Що замовник отримує на руки

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

  • Конфігурації Feature Store: декларативні описи сутностей, джерел ознак і представлень (feature views), розкладені за середовищами dev/stage/prod з параметрами зберігання офлайн- і онлайн-шарів.
  • Схеми даних: опис сутностей, типів ознак, ключів з'єднання та часових міток — з валідацією на вході, щоб розбіжність між навчанням та інференсом ловилася на етапі реєстрації, а не в проді.
  • Політики доступу: ролі на читання й запис ознак, розмежування за командами та моделями, правила видачі ключів до онлайн-сховища й офлайн-шару.
  • Регламенти оновлення: розклад матеріалізації ознак, правила перерахунку при зміні джерела, порядок виведення застарілих версій з обігу.
  • Документація: схема потоку даних від джерела до моделі, інструкція з додавання нової ознаки, чек-лист релізу та порядок відкату на попередню версію.
  • Скрипти розгортання та міграцій: підняття середовища з нуля, перенесення наявних ознак, перевірка цілісності після оновлення.
  • Моніторинг і алерти: контроль свіжості ознак, частки пропусків і розбіжності між офлайн- та онлайн-значеннями з порогами спрацювання.

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

Кейс: скорочення ручної підготовки ознак утричі

Клієнт — команда ML-платформи в продуктовій компанії: десятки моделей скорингу та рекомендацій, навчання в Feast поверх S3, онлайн-віддача через Redis.

До впровадження сховища ознак кожен дата-сайєнтист збирав свій набір фіч вручну: вивантаження зі сховища, джойни в ноутбуках, ручне перенесення в прод.

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

Що змінили

Звели всі ознаки в єдиний реєстр: визначення фіч, джерела та власники описані декларативно, а не розкидані по скриптах.

Історичні значення для навчання матеріалізуються в S3 за розкладом, онлайн-значення пишуться в Redis при кожній події — одна й та сама логіка розрахунку обслуговує і навчання, і інференс.

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

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

Показник До Після
Підготовка набору ознак 3-4 дні 1 день
Частка ручних операцій ~70% ~15%
Розбіжності train/serving регулярно поодинокі випадки
Час від ідеї фічі до проду тижні дні

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

Що це дало за стабільністю

Головний ефект — передбачуваність інференсу. Модель на проді бачить рівно ті ознаки, на яких навчалася, тому метрики якості перестали «плавати» між релізами.

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

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

Чим відрізняється feature store від звичайного сховища даних?

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

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

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

Feature store фіксує визначення ознаки та її версію, тому навчання на зрізі місячної давності відтворюване, а розходження між експериментом і продакшеном видно як diff, а не як деградацію метрик через тиждень.

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

Інакше модель навчається на одному розподілі, а працює на іншому — класичний train/serve skew, який у звичайному сховищі доводиться ловити вручну.

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

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

Тому feature store не замінює сховище даних, а надбудовується над ним: S3 або озеро залишається джерелом історії, Redis — швидким онлайн-шаром, а реєстр ознак пов'язує їхні визначення, версії та власників в один керований контракт.

Часті технічні сумніви

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

Чи суміститься сховище ознак з нашим поточним стеком?

Feast працює поверх уже наявних джерел даних і не вимагає переносити їх. Офлайн-шар читає зі сховища файлів (S3-сумісного) або табличного сховища, онлайн-шар — з Redis. Навчання та інференс беруть ознаки з одного визначення, тому розходження між ними зникає за побудовою. Якщо у вас уже є Spark або dbt-вітрини, вони залишаються джерелом, а Feast стає шаром доступу.

Як проходить міграція з ручного збору ознак?

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

Що з підтримкою та оновленням?

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

Як це інтегрується з конвеєром навчання?

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

Обговоримо ваше завдання

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

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

Це і є точки, через які впровадження feature store або дає ефект, або перетворюється на ще один шар, який ніхто не підтримує.

Що ви отримаєте за підсумками розмови:

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

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

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

Наші компетенції:

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

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