Машинне навчання пропонує безліч алгоритмів для розв'язання різноманітних задач. Щоб алгоритми працювали коректно, моделі необхідно навчити, а потім протестувати. QA-лід компанії SQUAD Дмитро Юзьвак, який спеціалізується на тестуванні алгоритмів машинного навчання, поділився покроковим ґайдом з перевірки ML-моделей в межах науково-популярної та deep tech конференції INSCIENCE CONFERENCE, яка відбулася в Києві у вересні. High Bar Journal обрав головне з його виступу.
Процес тестування ML-моделі
Крок 1. Визначити цілі тестування
Тут все просто: на початку потрібно чітко визначити цілі та завдання процесу, зрозумівши, які моделі машинного навчання потрібно оцінювати. Наприклад, чи хочемо ми перевірити, наскільки ефективно наш безпілотник зможе виявляти ворожі танки, або наскільки точно він зможе їх вражати.
Крок 2. Підготувати дані
Набір тестових даних має бути репрезентативним для реальних сценаріїв, на яких буде тестуватися модель. Врахувати потрібно і очікувані, і граничні випадки. Джерелами даних можуть стати публічні датасети, набори, зібрані власноруч, або синтетичні дані. Розглянемо приклад нижче.
Уявімо, що наша ML-модель має розпізнавати наявність тварин на зображеннях. Тоді потрібен набір картинок — з тваринами і без них. Так ми зможемо перевірити, наскільки добре модель виконує свої завдання.
Далі ми маємо розібратися, в яких саме ситуаціях модель працюватиме ефективно, а де можуть виникнути слабкі місця. Тому тестові сценарії розбиваємо на більш специфічні. Наприклад, окремо перевіряємо модель на різних видах тварин: небезпечних, маленьких, домашніх, великих тощо.
Категорії та фокус залежатимуть від сфери, де ви плануєте застосовувати свою ML-модель. Якщо, наприклад, це фотопастка для використання в лісі, то зосередитися варто на зображеннях диких тварин. Якщо ж ваша мета — стежити за домашнім улюбленцем, потрібні зображення котів, собак, рибок тощо.
Також звертайте увагу на нетипові випадки. У цьому прикладі це можуть бути люди в масках тварин або іграшки, схожі на тварин.
На перший погляд це може здаватися кумедним, однак у реальному житті це допомагає отримувати більш точні результати. Наприклад, під час військових дій використовується багато макетів та муляжів військової техніки. Якщо не протестувати, чи може безпілотник розрізняти макети, та чи не приймає він їх як звичайну техніку, є ризик того, що ресурси витрачатимуться на фальшиві цілі.
Крок 3. Налаштувати тестове середовище
На цьому етапі необхідно визначити, як саме будуть проводитися тести. Чи ви будете використовувати реальні пристрої чи «пісочницю» для експериментів? Відповідь залежить від можливостей та потреб конкретного бізнесу.
Крок 4. Запустити тести
На цьому етапі ми «показуємо» моделі нові дані, аби перевірити, наскільки добре вона впорається. Після їхньої обробки ми одержуємо результат, який називаємо передбаченням.
Наприклад, моделі показують зображення кота, і вона визначає, чи це справді він. Результат може бути представлений як текст або через підсвічування області, де знаходиться кіт. У реальності, звісно, одним зображенням не обійдешся — для найкращого результату потрібен великий датасет із зображень та передбачень.
Крок 5. Збір та аналіз результатів тестування ML-моделі
Отже, ми отримали наші дані: зібрали інформацію про тварин, знаємо, що на зображеннях, отримали передбачення від моделі. Перш ніж продовжити, потрібно підрахувати кількість позитивних і негативних даних. Перші — це ті, де є тварини, а другі — це ті, де тварин немає. Далі ми створюємо так звану матрицю невідповідностей.
У прикладі маємо 5 позитивних та 2 негативних приклади даних. Спершу потрібно підрахувати, скільки тварин наша модель визначила правильно. Для цього шукаємо випадки, коли на зображенні була тварина, і наша модель правильно ідентифікувала її як таку. Далі потрібно підрахувати, скільки з позитивних прикладів модель визначила неправильно. Наприклад, ми могли мати бронетранспортер, але модель двічі помилково позначила його як тварину.
Тепер перейдемо до негативних даних, які не містять тварин. Серед них наша модель помилково визначила одну тварину, а також правильно ідентифікувала одну не тварину. На основі цього ми можемо будувати статистичні метрики і оцінювати якість різних моделей машинного навчання. В роботі це буде виглядати приблизно ось так.
У реальності дані матриці невідповідностей будуть значно більшими за однозначні числа. Число залежить від кількості зібраних даних: чим їх більше, тим краще. На основі цих матриць ми зможемо розрахувати метрики, необхідні для оцінки якості нашої ML-моделі.
Метрики оцінки ML-моделі
Precision (точність) — показує, наскільки точно модель визначає позитивні приклади серед усіх, які вона класифікує як позитивні.
Precision (повнота) — вимірює, наскільки добре модель виявляє всі позитивні приклади серед усіх існуючих позитивних прикладів.
Precision і Recall часто плутають, адже метрики мають обернену залежність: щобільше Recall, то нижчий Precision, і навпаки, чим вищий Precision, тим нижчий Recall.
F1 score — гармонійне середнє значення між percision і recall. Використовується для оцінки балансу між цими двома метриками.
Коефіцієнт кореляції Метьюса між спостережуваними та передбаченими класами у задачах класифікації. На відміну від попередніх метрик, шкала вимірювань яких складає від 0 до 1, коефіцієнт кореляції Метьюса вимірюється у діапазоні від -1 до 1.
Як аналізувати цю метрику? Якщо коефіцієнт кореляції Метьюса дорівнює 1, модель ідеальна — жодного неправильного передбачення. Якщо він становить -1, то модель дуже погана й не зробила жодного правильного передбачення. Якщо ж значення близьке до нуля, це свідчить про те, що результат можна співставити з підкинутою монетою. Тоді, попри витрачені ресурси, ми не об’єктивно оцінити модель.
Три підходи для оцінки якості моделей
Підхід, заснований на метриках: коли виміряні показники відповідають очікуваним значенням, визначеним у вимогах.
Впроваджуючи алгоритми машинного навчання у великі бізнес-продукти, ми часто розуміємо цілі уже на етапі вимог. Бізнес-аналітики можуть вказати, що, наприклад, recall має бути не менше 95% для певної групи або ж акцентувати увагу на коефіцієнті кореляції Метьюса.
Це формує критерії для оцінки моделі: якщо метрики не досягають визначених значень, то модель недостатньо якісна. Тоді ми продовжуємо вдосконалювати алгоритм. Якщо ж показники відповідають цілі або перевищують її, можна переходити до наступних етапів.
Підхід, заснований на досвіді: коли виміряні показники відповідають очікуваним значенням, визначеним QA-інженерами.
Підхід буде корисним для стартапів, які самостійно створюють ML-модель. Тоді метрики можна обрати на власний розсуд, без необхідності дотримуватися попередньо встановлених вимог. Тут найкраще зосередитися на коефіцієнті кореляції Метьюса та F1 score.
Порівняльний підхід: коли обрані метрики перевищують показники, визначені в попередній версії алгоритму.
Цей підхід найкраще використовувати, якщо є кілька ML-моделей машинного навчання для порівняння або низка версій однієї з них. Наприклад, працюючи над поточною версією одного продукту, ми вимірюємо всі метрики, які оцінювали у попередній версії. Якщо вони зросли, це свідчить про еволюцію моделі, й тоді ми можемо впевнено перейти на нову версію. Якщо ж метрики впали, це вказує на деградацію — а значить, потрібно щось змінювати.