Уяви лікарню, яка купила модель для раннього виявлення рідкісної хвороби. Продавець показує звіт: точність 99,4%. Головний лікар киває, контракт підписано. За півроку виявляється, що модель не знайшла жодного хворого — вона просто всім підряд пише «здоровий». І це справді дає 99,4% правильних відповідей, бо хворіє шестеро з тисячі.
Ця історія — не курйоз, а типова пастка. Одне число не здатне описати поведінку класифікатора, бо класифікатор помиляється двома різними способами, і ці способи майже ніколи не рівноцінні. Ця лекція про те, як розкласти якість моделі на складові, які справді щось означають: precision (точність позитивного прогнозу) і recall (повнота).
01 / МеханікаОцінка, поріг і рішення
Почнімо з того, чого зазвичай не пояснюють. Класифікатор насправді не видає слово
«хворий» або «здоровий». Він видає число — оцінку впевненості, найчастіше
в діапазоні від 0 до 1. Логістична регресія, градієнтний бустинг, нейромережа — усі вони
на виході дають щось на кшталт 0.83.
Щоб перетворити це число на рішення, потрібен ще один крок, який модель не
робить за нас: треба обрати поріг t. Правило просте:
За замовчуванням бібліотеки ставлять t = 0.5, і це створює ілюзію, що
рівно половина — щось природне. Насправді 0.5 — просто зручне число. Поріг є
окремим рішенням проєктувальника системи, і воно залежить не від моделі,
а від того, скільки коштує кожен вид помилки. Модель лишається тією самою; змінюючи поріг,
ми лише пересуваємо межу між «тривога» і «спокій».
02 / РозкладМатриця плутанини
Коли поріг зафіксовано, кожен обʼєкт вибірки потрапляє рівно в одну з чотирьох категорій. Їх утворює перетин двох питань: яка правда і що сказала модель.
- TP (true positive, істинно позитивний) — хворий, і модель це побачила. Влучання.
- FP (false positive, хибно позитивний) — здоровий, а модель підняла тривогу. Хибна тривога.
- TN (true negative, істинно негативний) — здоровий, і модель промовчала. Правильна тиша.
- FN (false negative, хибно негативний) — хворий, а модель промовчала. Пропуск.
Розташовані у квадрат 2×2, ці чотири числа називаються матрицею плутанини (confusion matrix). У ній міститься вся інформація про поведінку класифікатора при даному порозі: будь-яка метрика, яку ми далі побачимо, — це просто дріб із цих чотирьох чисел.
Найважливіше зауваження: FP і FN — це принципово різні події. Хибна тривога веде до зайвого обстеження. Пропуск — до невиявленої хвороби. Плутати їх в одному показнику означає свідомо втрачати інформацію.
Посунь поріг у інтерактиві нижче. Дивись, як точки перефарбовуються і як разом із ними пливуть усі чотири клітинки та всі метрики одночасно.
Інтерактив 1 · Поріг керує всім
Угорі — оцінки моделі для 240 пацієнтів, розкладені за справжнім діагнозом. Унизу — матриця плутанини для поточного порогу.
03 / ПасткаЧому accuracy бреше
Accuracy — це частка правильних відповідей:
Метрика чесна рівно в одному випадку: коли класи приблизно однакові за розміром і однаково важливі. Щойно одна з цих умов ламається, accuracy перестає нести інформацію.
Порахуймо явно. Нехай на 10 000 обстежених припадає 10 хворих — поширеність 0,1%. Розглянемо модель-порожнечу: вона взагалі не дивиться на дані й завжди відповідає «здоровий».
Позитивних прогнозів немає взагалі, отже TP = 0 і FP = 0. Усі 9 990 здорових вгадані: TN = 9 990. Усі 10 хворих пропущені: FN = 10.
Формально — майже ідеальний результат. Такий, що його не соромно показати в презентації.
Модель не знайшла жодного хворого. Її діагностична користь дорівнює нулю рівно.
Два числа описують ту саму модель: 99,9% і 0%. Обидва правильні. Різниця в тому, що перше рахує всі відповіді разом, а друге дивиться тільки на клас, заради якого систему й будували.
Ця асиметрія має назву — дисбаланс класів. Він трапляється майже скрізь, де взагалі варто застосовувати машинне навчання: шахрайські транзакції (частки відсотка), відмови обладнання, рідкісні діагнози, релевантні документи серед мільярда сторінок. Чим рідкісніший позитивний клас, тим більше accuracy виміряє розмір більшості замість якості моделі.
У наступному інтерактиві модель незмінна: та сама роздільна здатність, той самий поріг. Змінюється лише частка хворих у популяції. Дивись, що при цьому робить кожна метрика.
Інтерактив 2 · Дисбаланс: accuracy тримається, precision валиться
Одна й та сама модель у популяціях із різною поширеністю хвороби.
04 / PrecisionЧи можна вірити вироку
Перша з двох потрібних метрик відповідає на питання: якщо модель сказала «так», наскільки ймовірно, що вона має рацію?
У знаменнику — усі позитивні прогнози, і правильні, і хибні. Тобто precision дивиться на стовпець матриці: беремо все, що модель позначила як позитивне, і питаємо, яка частка з цього виявилась справжньою.
Українською precision зазвичай перекладають як «точність», що плутається з accuracy — теж «точністю». Щоб не плутатись, у цій лекції я вживаю англійські назви, а українською описово: точність позитивного прогнозу.
Precision — це метрика довіри до сигналу. Вона важлива там, де хибна тривога дорого коштує: користувач, чий важливий лист потрапив у спам; клієнт, якому безпідставно заблокували картку; юрист, який мусить прочитати тисячу нерелевантних документів. У всіх цих випадках FP витрачає чужий час, гроші або довіру.
05 / RecallСкільки ми проґавили
Друга метрика ставить дзеркальне питання: яку частку справжніх позитивних випадків модель узагалі помітила?
Тепер у знаменнику — усі, хто насправді позитивний, незалежно від того, що сказала модель. Recall дивиться на рядок матриці. Його синоніми, які ти зустрінеш у літературі: sensitivity (чутливість) у медицині і TPR (true positive rate) у теорії виявлення сигналів. Це одне й те саме число.
Recall — метрика повноти охоплення. Вона головна там, де пропуск катастрофічний: невиявлена пухлина, незнайдений дефект у партії деталей, шахрайський переказ, який пройшов. Тут ми готові терпіти хибні тривоги, бо перевірити зайве дешевше, ніж пропустити справжнє.
Зверни увагу на симетрію: precision штрафується за FP, recall — за FN. Кожна метрика бачить рівно один вид помилки і повністю ігнорує другий. Саме тому їх завжди наводять парою: окремо взяте будь-яке з цих чисел легко зробити ідеальним.
06 / КонфліктКомпроміс, якого не уникнути
Чому не можна мати обидві метрики високими? Тому що обома керує один і той самий важіль — поріг. Опускаємо поріг: модель стає підозріливішою, ловить більше справжніх хворих (recall росте), але заодно чіпляє більше здорових (precision падає). Піднімаємо поріг: кожен позитивний вирок стає надійнішим (precision росте), але частина хворих лишається непоміченою (recall падає).
Це не вада конкретної моделі, а наслідок того, що розподіли оцінок для двох класів перекриваються. Поки в зоні перекриття є і хворі, і здорові, будь-яка вертикальна межа розріже обидві групи одночасно. Прибрати компроміс може тільки краща модель — така, що розсуває розподіли далі один від одного.
Інтерактив 3 · Усі чотири метрики як функції порогу
Одна модель, 101 значення порогу. Вертикальна лінія — поточний вибір.
07 / PR-криваУся модель на одному графіку
Замість дивитись на два графіки окремо, зручно викинути поріг із координат і побудувати залежність precision від recall безпосередньо. Кожна точка такої кривої — це один поріг. Кінець із високим recall відповідає низьким порогам, кінець із високим precision — високим.
Форма кривої говорить про модель більше, ніж будь-яке одне число. Крива, що тулиться до правого верхнього кута, означає, що є пороги, які дають одразу і повноту, і надійність. Крива, що падає одразу, означає: розподіли перекриваються сильно, і компроміс жорсткий.
Площу під цією кривою називають average precision (AP). Це чесний однокласний підсумок якості ранжування, який не залежить від вибору порогу. Важлива деталь: базовий рівень PR-кривої дорівнює частці позитивних у вибірці. Якщо хворих 5%, то випадковий класифікатор дасть AP ≈ 0,05, і AP = 0,3 — це вже втричі краще за випадковість, хоч і виглядає низьким числом.
Інтерактив 4 · PR-крива з рухомою точкою
Другий повзунок керує якістю моделі: наскільки далеко рознесені розподіли оцінок.
08 / F1Одне число замість двох
Порівнювати моделі парами чисел незручно: модель A має precision 0,8 і recall 0,4, модель B — 0,6 і 0,6. Яка краща? Щоб отримати впорядкування, беруть гармонійне середнє двох метрик:
Чому гармонійне, а не звичайне? Бо звичайне середнє надто поблажливе до перекосу. Для моделі з precision = 1,0 і recall = 0,02 арифметичне середнє дасть 0,51 — начебто пристойно. Гармонійне дасть 0,039, бо воно притягується до меншого з двох чисел. Саме така поведінка нам і потрібна: модель, яка провалила одну зі сторін, не має отримувати половину балів.
Через чотири базові числа F1 записується компактно:
З цього запису видно головне обмеження: TN у формулі немає взагалі. F1 повністю ігнорує правильно розпізнані негативні випадки. Для рідкісного позитивного класу це радше перевага (TN там і так мільйони), але якщо класи рівноправні й тебе цікавить симетрична якість — F1 не та метрика.
09 / F-betaКоли важливість різна
F1 припускає, що precision і recall однаково цінні. У реальних задачах це майже ніколи не так. Узагальнення вводить параметр важливості:
Читається це так: recall важить у β² разів більше за precision. Розберімо межові випадки, щоб формула перестала бути абстракцією:
β = 1— рівновага, звичайний F1.β = 2— recall у чотири рази важливіший. Класика для медичного скринінгу й виявлення шахрайства: пропуск дорожчий за хибну тривогу.β = 0.5— precision учетверо важливіший. Спам-фільтри, рекомендації, автоматичні блокування — усе, де хибна тривога зачіпає невинного користувача.β → 0— F вироджується в чистий precision.β → ∞— F вироджується в чистий recall.
У інтерактиві нижче кольорова карта показує значення Fβ для всіх можливих пар (precision, recall). Змінюй β і дивись, як лінії рівня перекошуються: при великому β «хороша» зона зміщується вправо, до високого recall, при малому — вгору, до високого precision.
Інтерактив 5 · Карта F-beta
Ліворуч — Fβ для всіх пар метрик. Праворуч — як змінюється Fβ для твоєї точки, коли β їде від 0,1 до 5.
10 / ЕкономікаЯка помилка дорожча
Досі ми говорили про метрики абстрактно. Але вибір порогу — це врешті-решт економічне рішення, і його можна поставити чесно: приписати кожному виду помилки вартість і мінімізувати сумарні збитки.
Абсолютні величини не потрібні — досить відношення
C_FN / C_FP. Якщо пропуск обходиться в 20 разів дорожче за хибну тривогу,
оптимальний поріг буде значно нижчим за 0,5. Якщо навпаки — вищим. Це той самий важіль,
що й раніше, але тепер ми крутимо його не на око, а за критерієм.
| галузь | що таке FP | що таке FN | дорожча помилка |
|---|---|---|---|
| онкоскринінг | зайве обстеження, стрес пацієнта | невиявлена пухлина | FN → високий recall |
| спам-фільтр | важливий лист у теці «спам» | реклама в теці «вхідні» | FP → високий precision |
| антифрод | заблокована чесна оплата | шахрайський переказ пройшов | зазвичай FN, але FP дратує |
| кредитний скоринг | відмова платоспроможному | кредит тому, хто не поверне | залежить від маржі й ставки |
| пошук і рекомендації | нерелевантний результат згори | релевантний не показано | FP на перших позиціях |
| контроль якості | придатну деталь відбраковано | брак пішов до клієнта | FN, якщо є гарантія |
Зверни увагу на рядок про антифрод: там немає однозначної відповіді. Заблокована чесна оплата — це втрачена транзакція і роздратований клієнт, тобто цілком вимірювані гроші. Тому банки не ставлять recall на максимум, а шукають точку, де сума двох збитків найменша. Спробуй знайти її самостійно.
Інтерактив 6 · Поріг під задану вартість помилок
Популяція 1000 випадків, поширеність позитивного класу 8%. Витрати в умовних одиницях.
11 / Багато класівМакро, мікро і зважене
Досі клас був один: «позитивний». Коли класів три, десять чи тисяча, precision і recall
рахують для кожного класу окремо за схемою «один проти решти»: для класу
c позитивними вважаються обʼєкти класу c, усі інші — негативними.
Виходить набір із F1 для кожного класу. Далі їх треба звести в одне число, і способів три.
- Макро: порахувати F1 для кожного класу і взяти просте середнє. Усі класи рівноправні незалежно від розміру — рідкісний клас важить стільки ж, скільки найчисельніший.
- Мікро: спершу скласти TP, FP і FN по всіх класах, і лише потім порахувати метрику. Великі класи домінують. У задачі, де кожен обʼєкт має рівно одну мітку, мікро-F1 математично збігається зі звичайною accuracy.
- Зважене (weighted): середнє F1 з вагами, пропорційними розміру класів. Компроміс, який усе одно дає перевагу більшості.
Вибір між ними — це знову питання «що для нас важливо», а не технічна деталь. Якщо рідкісний клас — головна мета системи (як у діагностиці), макро чесніше. Якщо всі обʼєкти рівноцінні (як у розпізнаванні тексту), мікро адекватніше.
Інтерактив 7 · Три способи усереднити
Три класи різного розміру. Керуй якістю й розміром рідкісного класу.
12 / МежіЧого ці метрики не бачать
Precision, recall і F1 — потужний інструмент, але й у них є сліпі зони. Варто знати три.
Вони ігнорують TN
Жодна з трьох метрик не містить у формулі істинно негативних. Це навмисно: у задачах із рідкісним позитивним класом TN настільки багато, що вони затопили б будь-який показник. Але якщо тебе цікавить саме здатність моделі не піднімати тривогу, потрібна окрема метрика — специфічність (specificity):
Пара «recall + specificity» — це те, на чому побудована ROC-крива й показник AUC. На відміну від PR-кривої, ROC не залежить від поширеності класу: обидві її осі є частками всередині одного класу. Це і перевага (порівнюваність між популяціями), і вада (при сильному дисбалансі ROC виглядає оптимістичніше, ніж є насправді).
Вони не питають, наскільки модель упевнена
Після застосування порогу оцінка 0,51 і оцінка 0,99 стають однаковими одиницями. Уся інформація про впевненість зникає. Якщо вона потрібна — а вона потрібна скрізь, де результат моделі йде далі в розрахунок ризику чи очікуваної вигоди, — модель треба перевіряти на калібрування: чи справді серед обʼєктів з оцінкою 0,7 приблизно 70% позитивних.
Вони мовчать про те, для кого модель помиляється
Усі метрики цієї лекції рахуються по вибірці загалом. Модель може мати чудовий recall у середньому і при цьому систематично пропускати випадки в якійсь підгрупі даних. Загальне число цього не покаже — потрібно рахувати ті самі TPR і FPR окремо по групах. Це вже тема наступної лекції.
13 / ПідсумокЯк обирати метрику
Зведімо все в порядок дій, який працює для будь-якої задачі класифікації:
- Подивись на баланс класів. Якщо позитивних менше за третину — accuracy вже майже не інформативна, і показувати її як головний результат не варто.
- Назви ціну обох помилок. Не в балах, а в наслідках: що станеться з людиною чи бізнесом при FP і що при FN.
- Обери метрику, що відповідає цій ціні. Дорожчий FN — recall або F2. Дорожчий FP — precision або F0.5. Приблизно рівні — F1.
- Побудуй PR-криву на валідації і подивись на весь діапазон порогів, а не на одне значення 0,5.
- Зафіксуй поріг за критерієм — мінімум втрат, або вимога «recall не нижче 0,95», або максимум Fβ. І зафіксуй його на валідаційній вибірці, а міряй якість на тестовій.
- Звітуй парою чисел, а не одним. «Precision 0,71 при recall 0,88 на порозі 0,23» — це звіт. «Точність 94%» — це реклама.
practice.ipynb ти побудуєш матрицю
плутанини вручну через NumPy, звіриш із classification_report зі scikit-learn,
намалюєш PR-криву й підбереш поріг під задану матрицю вартостей на незбалансованому датасеті.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.