Матриця невідповідностей і метрики

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

Реальна задача – діагноз рака у пацієнтів

Найкраща інтуїція виникає на прикладі реальної задачі, для якої конкретні метрики мають дуже важливі практичні наслідки. Тому замість абстрактних клас 1, клас 2 я буду використовувати медичний приклад, а саме модель, яка діагностує наявність рака у пацієнта. Всі зразу розуміють, що дуже важливо вміти якомога якісніше відповісти на питання:
– наскільки точно модель може вказати хто хворий, а хто ні (допомагає метрика “точність”, англ. accuracy) – це число повинно бути близьким до 100%, щоб загальна точність моделі викликала довіру;
– скільки здорових осіб отримають невірний діагноз “хворий” (допомагає метрика “влучність”, англ. precision) – їх відсоток повинен бути невеликим, щоб даремно не засмучувати пацієнтів, але не несе в собі великого ризику, оскільки вимагатиме лише додаткових аналізів;
– скільки хворих осіб отримають невірний діагноз “здоровий” (допомагає метрика “повнота”, англ. recall, power) – їх відсоток повинен бути якомога меншим, оскільки тут найбільший ризик для пацієнта: хвора людина може не розпочати вчасно лікування і знову звернутись до лікаря занадто пізно.

Матриця невідповідностей

Для прикладу я візьму 100 пацієнтів, серед яких 5 хворих і 95 здорових. Число 5 буде записано в першій колонці “Справжній стан: Хворий” (поділене відповідно до діагнозу), а число 95 – в другій “Справжній стан: Здоровий”. Далі, модель для чотирьох хворих дала правильний діагноз “хворий”, а для одного хворого неправильно вказала “здоровий”. Нарешті, модель для 93-х здорових дала вірний діагноз “здоровий”, а для решти двох – невірний діагноз “хворий”. Запишемо ці числа у відповідні елементи матриці.

Читати:  Кенселінґ Штучного Інтелекту - зло?

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

Справжній стан: ХворийСправжній стан: Здоровий
Діагноз: Хворий42
Діагноз: Здоровий193
Як читати вже заповнену кимсь іншим матрицю невідповідностей? На головній діагоналі знаходяться “добрі” числа (правильний діагноз), в решті елементів “погані” числа (невірний діагноз). В цьому випадку, 4+93=97 правильних діагнозів і 1+2=3 неправильних. До того ж, 2 здорових пацієнти помилково отримали діагноз “хворий”, а 1 хворий пацієнт помилково отримав діагноз “здоровий”.

Метрики матриці невідповідностей

1. Точність (Accuracy)

На перше питання “наскільки точно модель може вказати хто хворий, а хто ні” відповідає метрика “точність” – сума правильних діагнозів поділена на суму всіх діагнозів. В нашому випадку:

точність = (Справжній хворий та Діагноз хворий + Справжній здоровий та Діагноз здоровий) / Всі діагнози = ( 4 + 93 ) / 100 = 0.97

Отже, модель має точність 97% (тут і далі обчислену метрику треба помножити на 100% щоб отримати відповідник в відсотках) – тобто в 97% випадках діагноз буде вірним. Добре це чи погано? Загалом, точність 97% є високою, а отже доброю, але в ситуації з діагностуванням хворих цього не можна сказати, оскільки ця метрика занадто загальна і не містить важливих подробиць. За ними звернемося до інших метрик.

2. Влучність (Precision)

Ця метрика відповідає на питання “скільки осіб серед усіх осіб з діагнозом “хворий” отримають вірний діагноз?” В нашому випадку:

влучність = Справжній хворий та Діагноз хворий / ( Справжній хворий та Діагноз хворий + Справжній здоровий та Діагноз хворий ) = 4 / ( 4 + 2 ) = 0.67

Влучність 67% означає, що в 67% діагноз “хворий” отримає той, хто треба (хворий пацієнт), а в 33% – не той, хто треба (здоровий пацієнт). Добре це чи погано? З одного боку, відсоток несправедливо засмучених пацієнтів є великим, з іншого, окрім моральних страждань вони нічим не ризикують, а додаткове обстеження скоріше за все виявить відсутність хвороби. Тобто, хотілося б, щоб влучність була ближче до одиниці (тоді відсоток несправедливо засмучених пацієнтів буде меншим), але вона в’яжеться тільки з додатковими витратами.

Читати:  Найкращі українські художні фільми за версією ChatGPT

3. Повнота (Recall)

Остання з трьох метрик які я тут розглядаю (насправді, їх набагато більше), відповідає на питання “скільки осіб серед усіх хворих осіб отримають вірний діагноз?” В нашому випадку:

повнота = Справжній хворий та Діагноз хворий / ( Справжній хворий та Діагноз хворий + Справжній хворий та Діагноз здоровий ) = 4 / ( 4 + 1 ) = 0.8

Повнота 80% означає, що кожен п’ятий хворий пацієнт буде невірно діагностований, як “здоровий”, і змарнує шанс почати лікування вчасно. Отже маємо величезну ймовірність у цілих 20% того, що модель не зауважить рак, якщо він у пацієнта насправді є. Погодьтесь, це абсолютно неприйнятний ризик для ситуації, коли мова йдеться про здоров’я. Отже на цю метрику треба звернути особливу увагу.


Висновок

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

Точність – всі правильно вгадані результати ділимо на всі результати і отримуємо уявлення про загальну точність моделі прогнозування/діагностування – якщо точність є низькою, то далі можна не дивитися, ситуація вже дуже погана і решта метрик її не виправить. Змінюємо модель поки точність не стане високою.

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

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


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

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *