Cистеми машинного навчання, які працюють у реальних умовах: моніторинг конвеєрів

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

Створіть схему даних для перевірки необроблених даних

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

  1. Визначтеся з діапазоном і розподілом ознак. Якщо йдеться про категорійні ознаки, враховуйте набір їх можливих значень.

  2. Закодуйте своє розуміння в схему даних. Нижче наведено приклади правил.

    • Переконайтеся, що оцінки, отримані на основі відгуків користувачів, завжди перебувають у діапазоні від 1 до 5.
    • Перевірте, чи слово the зустрічається найчастіше (для англомовного тексту).
    • Переконайтеся, що для кожної категорійної ознаки встановлено значення з фіксованого набору можливих значень.
  3. Перевірте свої дані відповідно до схеми даних. Ваша схема має виявляти такі помилки даних:

    • відхилення;
    • неочікувані значення категорійних змінних;
    • неочікувані розподіли даних.

Напишіть модульні тести для перевірки конструювання ознак

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

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

  • Усі числові ознаки масштабуються, наприклад, між значеннями 0 і 1.
  • Вектори з прямим кодуванням містять лише одиницю й N-1 нулів.
  • Розподіл даних після трансформації відповідає очікуванням. Наприклад, якщо ви нормалізували дані за допомогою значень Z, то середнє таке значення має дорівнювати 0.
  • Викиди обробляються, зокрема, за допомогою масштабування або обрізання.

Перевірте показники для важливих фрагментів даних

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

Модель єдинорога працює добре в цілому, але показує погані результати, коли робить прогнози для пустелі Сахара.

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

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

Використовуйте реальні показники

Показники моделі не обов’язково відображають її реальну ефективність. Наприклад, змінивши гіперпараметр, ви можете збільшити показник AUC моделі, але як це позначиться на якості взаємодії з користувачем? Щоб виміряти реальну ефективність, потрібно визначити окремі параметри. Скажімо, можна опитати користувачів своєї моделі, щоб підтвердити, що вони справді побачили єдинорога в період, який спрогнозувала модель.

Перевірте, чи немає різниці між ефективністю в навчальному й робочому режимах

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

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

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

Вправа. Перевірте свої знання

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

З якою проблемою ви можете зіткнутися?
Натисніть, щоб дізнатися відповідь

Перевірте, чи немає витоку, який видає мітку

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

Вправа. Перевірте свої знання

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

  • вік пацієнта;
  • стать пацієнта;
  • попередні захворювання;
  • назва лікарні;
  • життєві показники;
  • результати аналізів;
  • спадковість.

Нижче вказано мітку.

  • Логічне значення: "Чи є в пацієнта рак?"

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

Чому ця модель, яка прекрасно працювала на тестовому наборі, зазнала невдачі в реальних умовах?
Натисніть, щоб дізнатися відповідь

Відстежуйте вік моделі впродовж усього конвеєра

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

Перевірте, чи є значення ваги й вихідні дані моделі чисельно стабільними

Під час навчання моделі значення ваги й вихідні дані шарів не можуть становити NaN (не число) або Inf (нескінченність). Напишіть тести для перевірки значень ваги й вихідних даних шарів на наявність NaN і Inf. Крім того, переконайтеся, що більше ніж половина вихідних даних шару не дорівнює нулю.

Відстежуйте ефективність моделі

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

  • Відстежуйте ефективність моделі за версіями коду, моделі й даних. Тоді ви зможете точно визначити причину погіршення ефективності.
  • Тестуйте кількість кроків навчання в секунду для нової версії моделі проти попередньої версії і фіксованого порогового значення.
  • Перехоплюйте витоки пам’яті, налаштувавши порогове значення для її використання.
  • Відстежуйте час відповіді API і його значення – процентилі. Не можна керувати часом відповіді API, однак повільна відповідь може стати причиною поганих показників у реальних умовах.
  • Відстежуйте кількість відповідей на запити, наданих за секунду.

Перевіряйте якість моделі в реальних умовах на даних, які вона отримує для обробки

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

  • Залучайте спеціалістів з оцінювання, щоб вони створювали мітки.

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

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

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

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

Рандомізація

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

  • Використовуйте власне число для ініціалізації генераторів випадкових чисел. Завдяки цьому при кожному запуску з генератора випадкових чисел виводитимуться ті самі значення в однаковому порядку, відтворюючи ваш набір даних.
  • Використовуйте інваріантні хеш-ключі. Хешування – це поширений спосіб розділення або вибірки даних. Можна хешувати кожен приклад і використовувати отримане ціле число, щоб вирішити, у який розділ помістити приклад. Вхідні дані для хеш-функції не мають змінюватися щоразу, коли ви запускаєте програму генерації даних. Не використовуйте для хешування поточний час або випадкове число, наприклад, якщо хочете відтворювати хеші за запитом.

Попередні підходи застосовуються як до вибірки, так і до розділення даних.

Рекомендації щодо хешування

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

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

Замість цього можна хешувати за формулою "запит + дата". Як результат, ви отримуватимете різний хеш кожного дня.

 

Рисунок 7. Анімована візуалізація, яка показує, як при хешуванні виключно на основі запиту дані щодня потрапляють у той самий сегмент, а при хешуванні за формулою "запит + дата" – у різні сегменти. Три сегменти: "Навчання", "Оцінювання" й "Проігноровано".
Рисунок 7. Хешування на основі запиту й хешування за формулою "запит + дата"