Ціна помилки

Точність 99% звучить чудово рівно доти, доки хтось не спитає, що саме модель робить у тому одному відсотку.

Уяви лікарню, яка купила модель для раннього виявлення рідкісної хвороби. Продавець показує звіт: точність 99.4%. Головний лікар киває, контракт підписано. За півроку виявляється, що модель не знайшла жодного хворого — вона просто всім підряд пише «здоровий». І це справді дає 99.4% правильних відповідей, бо хворіє шестеро з тисячі.

Ця історія — не курйоз, а типова пастка. Одне число не здатне описати поведінку класифікатора, бо класифікатор помиляється двома різними способами, і ці способи майже ніколи не рівноцінні. Ця лекція про те, як розкласти якість моделі на складові, які справді щось означають: precision (точність позитивного прогнозу) і recall (повнота).

МеханікаОцінка, поріг і рішення

Почнімо з того, чого зазвичай не пояснюють. Класифікатор насправді не видає слово «хворий» або «здоровий». Він видає число — оцінку впевненості, найчастіше в діапазоні від 0 до 1. Логістична регресія, градієнтний бустинг, нейромережа — усі вони на виході дають щось на кшталт 0.83.

Щоб перетворити це число на рішення, потрібен ще один крок, який модель не робить за нас: треба обрати поріг t. Правило просте:

ŷ = 1, якщо p̂ ≥ t   ·   ŷ = 0, якщо p̂ < t

За замовчуванням бібліотеки ставлять t = 0.5, і це створює ілюзію, що рівно половина — щось природне. Насправді 0.5 — просто зручне число. Поріг є окремим рішенням проєктувальника системи, і воно залежить не від моделі, а від того, скільки коштує кожен вид помилки. Модель лишається тією самою; змінюючи поріг, ми лише пересуваємо межу між «тривога» і «спокій».

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

РозкладМатриця плутанини

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

Розташовані у квадрат 2×2, ці чотири числа називаються матрицею плутанини (confusion matrix). У ній міститься вся інформація про поведінку класифікатора при даному порозі: будь-яка метрика, яку ми далі побачимо, — це просто дріб із цих чотирьох чисел.

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

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

Поріг керує всім

Угорі — оцінки моделі для 240 пацієнтів, розкладені за справжнім діагнозом. Унизу — матриця плутанини для поточного порогу.

accuracy—
precision—
recall—
F1—
Спробуй крайнощі: постав поріг у 0.00 — модель оголошує хворими геть усіх, recall стає 1.00, але precision падає до частки хворих у вибірці. Постав 1.00 — жодного позитивного прогнозу, recall = 0, precision взагалі невизначена. Обидва режими дають «непогану» accuracy — і обидва нікому не потрібні.

ПасткаЧому accuracy бреше

Accuracy — це частка правильних відповідей:

accuracy = (TP + TN) / (TP + FP + TN + FN)

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

Порахуймо явно. Нехай на 10 000 обстежених припадає 10 хворих — поширеність 0.1%. Розглянемо модель-порожнечу: вона взагалі не дивиться на дані й завжди відповідає «здоровий».

крок 1 · матриця плутанини порожньої моделі

Позитивних прогнозів немає взагалі, отже TP = 0 і FP = 0. Усі 9 990 здорових вгадані: TN = 9 990. Усі 10 хворих пропущені: FN = 10.

крок 2 · accuracy
accuracy = (0 + 9 990) / 10 000 = 0.999 = 99.9%

Формально — майже ідеальний результат. Такий, що його не соромно показати в презентації.

крок 3 · recall
recall = TP / (TP + FN) = 0 / (0 + 10) = 0

Модель не знайшла жодного хворого. Її діагностична користь дорівнює нулю рівно.

крок 4 · висновок

Два числа описують ту саму модель: 99.9% і 0%. Обидва правильні. Різниця в тому, що перше рахує всі відповіді разом, а друге дивиться тільки на клас, заради якого систему й будували.

Ця асиметрія має назву — дисбаланс класів. Він трапляється майже скрізь, де взагалі варто застосовувати машинне навчання: шахрайські транзакції (частки відсотка), відмови обладнання, рідкісні діагнози, релевантні документи серед мільярда сторінок. Чим рідкісніший позитивний клас, тим більше accuracy виміряє розмір більшості замість якості моделі.

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

Дисбаланс: accuracy тримається, precision валиться

Одна й та сама модель у популяціях із різною поширеністю хвороби.

accuracy—
«усі здорові»—
precision—
recall—
Що читати: recall не змінюється взагалі — він дивиться лише на хворих, і від їхньої кількості не залежить. Accuracy самої моделі теж стоїть на місці (поріг посередині, тож чутливість і специфічність тут рівні). А от accuracy порожньої моделі росте разом із дисбалансом і обганяє справжню модель приблизно на 10% позитивних. Precision тим часом обвалюється: кожен крок дисбалансу додає хибних тривог із дедалі більшої маси здорових.

ОбразОдин образ на дві метрики

Перш ніж писати формули, треба мати картинку в голові — інакше precision і recall плутатимуться довічно, і не тому, що вони складні, а тому, що вони симетричні на вигляд. Тож спершу образ, а формули за ним.

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

Тепер два різні питання до одного й того самого вилову, і в них уся суть теми:

Звідси одразу видно, чому кожну з них окремо легко зробити ідеальною й чому це нічого не варте. Хочеш precision = 1? Витягни одну-єдину рибину, у якій ти впевнений на всі сто, — у сітці буде 100% риби. Хочеш recall = 1? Перегороди все озеро й витягни його вміст цілком — жодна рибина не втече. Обидва рекорди безглузді, і саме тому ці числа завжди називають парою.

Сітка в цьому образі — не метафора з повітря, а точний відповідник порога з розділу 01. Велика сітка — низький поріг: гребемо все підряд. Маленька сітка — високий поріг: беремо лише найпевніше. Посунь повзунок і подивись, як одне й те саме рішення тягне два числа в різні боки.

Озеро, сітка й два різні знаменники

Бірюзові кружечки — риба (справді позитивні), сірі — мотлох. Помаранчеве коло — сітка: усе, що модель позначила позитивним.

у сітці риби—
у сітці мотлоху—
precision—
recall—
Дві дроби з тим самим чисельником: зверху в обох стоїть кількість риби в сітці. Precision ділить її на вміст сітки, recall — на вміст озера. Через це маленька сітка дає чистий, але мізерний улов, а величезна — повний, але брудний. Третього стану озеро не пропонує.

PrecisionЧи можна вірити вироку

Перша з двох потрібних метрик відповідає на питання: якщо модель сказала «так», наскільки ймовірно, що вона має рацію?

precision = TP / (TP + FP)

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

Українською precision зазвичай перекладають як «точність», що плутається з accuracy — теж «точністю». Щоб не плутатись, у цій лекції я вживаю англійські назви, а українською описово: точність позитивного прогнозу.

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

Важливо. Precision не визначена, коли модель не зробила жодного позитивного прогнозу: у знаменнику нуль. Бібліотеки в цьому разі зазвичай повертають 0 і друкують попередження. Це не «поганий precision» — це відсутність відповіді, і плутати ці речі не можна.

RecallСкільки ми проґавили

Друга метрика ставить дзеркальне питання: яку частку справжніх позитивних випадків модель узагалі помітила?

recall = TP / (TP + FN)

Тепер у знаменнику — усі, хто насправді позитивний, незалежно від того, що сказала модель. Recall дивиться на рядок матриці. Його синоніми, які ти зустрінеш у літературі: sensitivity (чутливість) у медицині і TPR (true positive rate) у теорії виявлення сигналів. Це одне й те саме число.

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

Зверни увагу на симетрію: precision штрафується за FP, recall — за FN. Кожна метрика бачить рівно один вид помилки і повністю ігнорує другий. Саме тому їх завжди наводять парою: окремо взяте будь-яке з цих чисел легко зробити ідеальним.

КонфліктКомпроміс, якого не уникнути

Чому не можна мати обидві метрики високими? Тому що обома керує один і той самий важіль — поріг. Опускаємо поріг: модель стає підозріливішою, ловить більше справжніх хворих (recall росте), але заодно чіпляє більше здорових (precision падає). Піднімаємо поріг: кожен позитивний вирок стає надійнішим (precision росте), але частина хворих лишається непоміченою (recall падає).

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

Усі чотири метрики як функції порогу

Одна модель, 101 значення порогу. Вертикальна лінія — поточний вибір.

accuracy—
precision—
recall—
F1—
Головне спостереження: recall спадає монотонно, precision загалом росте, а F1 має чіткий максимум між ними. Accuracy ж має широке пласке плато і навіть у найгіршій точці не падає нижче 0.70 — частки більшого класу. Саме тому за нею не видно, що модель робить із рідкісним класом.

Чому recall падає завжди, а precision — не завжди росте

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

Recall спадає монотонно. Підняти поріг означає відібрати позитивні прогнози, а не додати їх: жоден обʼєкт від підвищення порога не стане позитивним. Отже TP може лише зменшитись, а знаменник recall — усі справжні хворі — узагалі не залежить від порога, він однаковий за будь-якого рішення моделі. Дріб зі сталим знаменником і незростаючим чисельником може лише падати. Тому гарантія тут строга: вищий поріг — не більший recall, без винятків.

Precision росте «загалом», але не крок за кроком. У неї від порога залежить і чисельник, і знаменник: піднімаючи поріг, ми викидаємо із сітки і хибні тривоги (добре), і справжні влучання (погано). Якщо обʼєкт, який щойно випав із сітки, виявився хворим, precision у цю мить падає. Загальна тенденція вгору є, бо згори в упорядкуванні хворих густіше, ніж знизу, — але рівність не гарантована жодним кроком.

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

Поріг на один обʼєкт: хто зайшов у сітку

Пацієнти, упорядковані за оцінкою. Показано вікно навколо межі; кожне натискання пересуває межу рівно на одного.

у сітці0
останній зайшов—
precision—
recall—
Дві різні механіки в одному русі: recall або зростає, або стоїть — назад він не ходить ніколи. А precision стрибає в обидва боки: зайшов хворий — вона підскочила, зайшов здоровий — просіла. Максимізувати обидві неможливо не через невдалу модель, а тому, що у зоні, де хворі й здорові перемішані, будь-який поріг ріже обидві групи одночасно.

Тепер найважливіше практичне: вимога до однієї метрики автоматично призначає ціну по другій, і цю ціну треба вміти назвати числом. Візьмімо ту саму модель із 240 пацієнтів, що й у фігурах вище (72 хворих, 168 здорових), і подивимось, що коштує кожна вимога:

порігTPFPFNrecallprecision
0.70544180.7500.931
0.506124110.8470.718
0.35694830.9580.590
0.29716110.9860.538

Прочитаймо цю таблицю як розмову із замовником. Він каже: «recall має бути не нижчий за 0.98». Дивимось у стовпець recall: найвищий поріг, за якого умова ще виконується, — 0.29 (recall 0.986). Отже поріг доведеться опустити з 0.50 на 0.29, і платимо ми за це хибними тривогами: їх стає 61 замість 24. Тобто 37 зайвих обстежень за 10 додатково знайдених хворих — приблизно чотири зайві обстеження на кожного знайденого.

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

PR-криваУся модель на одному графіку

Замість дивитись на два графіки окремо, зручно викинути поріг із координат і побудувати залежність precision від recall безпосередньо. Кожна точка такої кривої — це один поріг. Кінець із високим recall відповідає низьким порогам, кінець із високим precision — високим.

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

Площу під цією кривою називають average precision (AP). Це чесний однокласний підсумок якості ранжування, який не залежить від вибору порогу. Важлива деталь: базовий рівень PR-кривої дорівнює частці позитивних у вибірці. Якщо хворих 5%, то класифікатор, який роздає оцінки навмання, дасть AP ≈ 0.05 — і AP = 0.30 означає 0.30 / 0.05 = у шість разів краще за випадковість, хоч число й виглядає низьким. Це головна відмінність від AUC, у якої базовий рівень завжди 0.5 незалежно від складу вибірки. Порівнювати AP із 0.5 — типова помилка, через яку викидають цілком робочі моделі.

PR-крива з рухомою точкою

Другий повзунок керує якістю моделі: наскільки далеко рознесені розподіли оцінок.

precision—
recall—
AP площа—
випадковий—
Постав роздільність на 0 — розподіли зіллються, і крива стане горизонтальною лінією на рівні частки позитивних: жоден поріг не дає переваги. Постав на 5 — крива притиснеться до верхнього краю, і зʼявиться діапазон порогів, де обидві метрики близькі до одиниці.

F1Одне число замість двох

Порівнювати моделі парами чисел незручно: модель A має precision 0.8 і recall 0.4, модель B — 0.6 і 0.6. Яка краща? Щоб отримати впорядкування, треба звести пару в одне число, тобто взяти якесь середнє. І ось тут виявляється, що середніх буває кілька, і вибір між ними — не формальність.

Що таке гармонійне середнє й навіщо воно взагалі існує. Звичайне (арифметичне) середнє двох чисел — це «скласти й поділити навпіл»: (a + b) / 2. Гармонійне робить те саме, але з оберненими величинами: перевертає обидва числа, усереднює їх, а результат перевертає назад.
H = 2 / (1/a + 1/b) = 2 · a · b / (a + b)
Звучить як примха, поки не згадаєш, звідки воно взялось. Ти проїхав дорогу туди зі швидкістю 60 км/год, а назад — 20 км/год. Яка середня швидкість за всю поїздку? Не 40. Візьмімо шлях 60 км в один бік: туди — 1 година, назад — 3 години, разом 120 км за 4 години, тобто 30 км/год. І це рівно гармонійне середнє: 2 · 60 · 20 / (60 + 20) = 2400 / 80 = 30. Правило, яке з цього видно: гармонійне середнє завжди притискається до меншого з двох чисел, бо повільна половина шляху зʼїдає більше часу, ніж швидка економить.

Саме ця властивість нам і потрібна, тому F1 — це гармонійне середнє precision і recall:

F1 = 2 · precision · recall / (precision + recall)

Порахуймо на прикладі, у якому різниця найпомітніша. Модель із precision = 1.00 і recall = 0.02 — це та, що знайшла двох хворих зі ста, зате в обох не помилилась. Арифметичне середнє дасть (1.00 + 0.02) / 2 = 0.51, тобто «трієчка», начебто пристойно. Гармонійне: 2 · 1.00 · 0.02 / (1.00 + 0.02) = 0.04 / 1.02 ≈ 0.039. Для скринінгу друге число чесніше: модель, яка проґавила 98 хворих зі ста, не заслуговує на половину балів через те, що була обережною.

Повернімось до питання з початку розділу. Модель A: precision 0.8 і recall 0.4 — F1 = 2 · 0.32 / 1.2 ≈ 0.533. Модель B: 0.6 і 0.6 — F1 = 2 · 0.36 / 1.2 = 0.600. Арифметичне середнє в обох випадках дало б 0.6, тобто нічию, і питання лишилось би без відповіді. Гармонійне віддає перевагу збалансованій B — і саме цього ми від нього хотіли.

Три середні на одній парі чисел

Precision закріплено, recall їде від 0 до 1. Дивись, як розходяться три способи усереднення.

арифметичне—
геометричне—
гармонійне (F1)—
менше з двох—
Порядок трьох середніх незмінний: гармонійне ніколи не вище за геометричне, а те — за арифметичне, і всі троє збігаються тільки тоді, коли числа рівні. Крива F1 тулиться до рожевої пунктирної лінії «менше з двох», тому перекошена модель не може виторгувати собі пристойний бал однією ідеальною метрикою.

Через чотири базові числа F1 записується компактно:

F1 = TP / (TP + ½(FP + FN))

З цього запису видно головне обмеження: TN у формулі немає взагалі. F1 повністю ігнорує правильно розпізнані негативні випадки. Для рідкісного позитивного класу це радше перевага (TN там і так мільйони), але якщо класи рівноправні й тебе цікавить симетрична якість — F1 не та метрика.

F-betaКоли важливість різна

F1 припускає, що precision і recall однаково цінні. У реальних задачах це майже ніколи не так. Узагальнення вводить параметр важливості:

Fβ = (1 + β2) · precision · recall / (β2 · precision + recall)

Читається це так: recall важить у β² разів більше за precision. Розберімо межові випадки, щоб формула перестала бути абстракцією:

У інтерактиві нижче кольорова карта показує значення Fβ для всіх можливих пар (precision, recall). Змінюй β і дивись, як лінії рівня перекошуються: при великому β «хороша» зона зміщується вправо, до високого recall, при малому — вгору, до високого precision.

Карта F-beta

Ліворуч — Fβ для всіх пар метрик. Праворуч — як змінюється Fβ для твоєї точки, коли β їде від 0.1 до 5.

Fβ—
F1 для порівняння—
Перевір межі: при β = 0.1 значення F майже дорівнює precision, при β = 5 — майже дорівнює recall. Тобто β — це буквально ручка, якою ти плавно переїжджаєш від однієї метрики до іншої.

ЕкономікаЯка помилка дорожча

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

втрати(t) = CFP · FP(t) + CFN · FN(t)

Читається формула так: «загальні збитки при порозі t дорівнюють вартості однієї хибної тривоги, помноженій на їхню кількість, плюс вартість одного пропуску, помножена на кількість пропусків». C — це ціна (cost), нижні індекси кажуть, ціна чого саме; FP(t) і FN(t) — уже знайомі числа з матриці плутанини, які залежать від порога.

Абсолютні величини не потрібні — досить відношення C_FN / C_FP. Якщо пропуск обходиться в 20 разів дорожче за хибну тривогу, оптимальний поріг буде значно нижчим за 0.5. Якщо навпаки — вищим. Це той самий важіль, що й раніше, але тепер ми крутимо його не на око, а за критерієм.

Пастка, у яку тут ступають майже всі: 0.5 — не нейтральна точка. Здається логічним, що коли обидві помилки коштують однаково, оптимальним буде поріг 0.5 — «однакові ціни, однакова межа». Це неправда, і причина не в цінах, а в кількостях. У популяції з наступної фігури позитивних лише 8%, тобто негативів у одинадцять разів більше. Опустивши поріг на крок, ти чіпляєш хибні тривоги з великої маси здорових і рятуєш мало пропусків із маленької маси хворих — обмін невигідний. Тому за рівних цін оптимальний поріг заїжджає вище за 0.5, а не нижче.

Для моделі з наступної фігури (популяція 1000 випадків, позитивних 8%) мінімум сумарних втрат лежить ось де:

CFN / CFPоптимальний порігFP на 1000FN на 1000
0.10.890.856
10.751129
30.643217
100.51818.5
300.401613.8
1000.282951.3

Дивись на середній стовпець згори вниз: що дорожчий пропуск, то нижчий поріг, і рухається він плавно, без стрибків. При рівних цінах оптимум 0.75 — далеко за 0.5. Аби поріг зійшов приблизно до 0.5, пропуск має коштувати вдесятеро дорожче за хибну тривогу, і лише при відношенні близько 100 система стає справді підозріливою. Права пара стовпців показує ціну цього руху в штуках: від 0.8 хибної тривоги на 1000 випадків до 295.

галузьщо таке FPщо таке FNдорожча помилка
онкоскринінгзайве обстеження, стрес пацієнтаневиявлена пухлинаFN → високий recall
спам-фільтрважливий лист у теці «спам»реклама в теці «вхідні»FP → високий precision
антифродзаблокована чесна оплаташахрайський переказ пройшовзазвичай FN, але FP дратує
кредитний скорингвідмова платоспроможномукредит тому, хто не повернезалежить від маржі й ставки
пошук і рекомендаціїнерелевантний результат згорирелевантний не показаноFP на перших позиціях
контроль якостіпридатну деталь відбракованобрак пішов до клієнтаFN, якщо є гарантія

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

Поріг під задану вартість помилок

Популяція 1000 випадків, поширеність позитивного класу 8%. Витрати в умовних одиницях.

FP на 1000—
FN на 1000—
втрати—
мінімум—
Що видно: зі зростанням CFN/CFP оптимальний поріг їде вліво — система стає підозріливішою. При відношенні 1:1 оптимум навпаки заходить далеко за 0.5: позитивних усього 8%, тож хибні тривоги накопичуються швидше за пропуски. Це і є формальна відповідь на питання «який поріг брати».

Багато класівМакро, мікро і зважене

Досі клас був один: «позитивний». Коли класів три, десять чи тисяча, precision і recall рахують для кожного класу окремо за схемою «один проти решти»: для класу c позитивними вважаються обʼєкти класу c, усі інші — негативними. Виходить набір із F1 для кожного класу. Далі їх треба звести в одне число, і способів три.

Вибір між ними — це знову питання «що для нас важливо», а не технічна деталь. Якщо рідкісний клас — головна мета системи (як у діагностиці), макро чесніше. Якщо всі обʼєкти рівноцінні (як у розпізнаванні тексту), мікро адекватніше.

Три способи усереднити

Три класи різного розміру. Керуй якістю й розміром рідкісного класу.

макро-F1—
мікро-F1—
зважене—
F1 класу C—
Ключовий дослід: постав recall рідкісного класу в 0 при розмірі 50. Мікро-F1 просяде на кілька відсотків і виглядатиме пристойно, макро-F1 провалиться на третину. Модель, яка повністю ігнорує цілий клас, «непогана» лише в мікроусередненні.

МежіЧого ці метрики не бачать

Precision, recall і F1 відповідають на важливі питання, але кожна з них дивиться у вузьку щілину. Сліпих зон три, і кожна коштувала комусь проваленого проєкту.

Вони ігнорують TN

Жодна з трьох метрик не містить у формулі істинно негативних. Це навмисно: у задачах із рідкісним позитивним класом TN настільки багато, що вони затопили б будь-який показник. Але якщо тебе цікавить саме здатність моделі не піднімати тривогу, потрібна окрема метрика — специфічність (specificity):

specificity = TN / (TN + FP) = 1 − FPR

Пара «recall + specificity» — це те, на чому побудована ROC-крива й показник AUC, тобто вся наступна тема 06. ROC та AUC. На відміну від PR-кривої, ROC не залежить від поширеності класу: обидві її осі є частками всередині одного класу. Це і перевага (порівнюваність між популяціями), і вада (при сильному дисбалансі ROC виглядає оптимістичніше, ніж є насправді).

Вони не питають, наскільки модель упевнена

Після застосування порогу оцінка 0.51 і оцінка 0.99 стають однаковими одиницями. Уся інформація про впевненість зникає. Якщо вона потрібна — а вона потрібна скрізь, де результат моделі йде далі в розрахунок ризику чи очікуваної вигоди, — модель треба перевіряти на калібрування: чи справді серед обʼєктів з оцінкою 0.7 приблизно 70% позитивних. Цьому присвячена тема 21. Калібрування і вибір порога.

Вони мовчать про те, для кого модель помиляється

Усі метрики цієї лекції рахуються по вибірці загалом. Модель може мати чудовий recall у середньому і при цьому систематично пропускати випадки в якійсь підгрупі даних. Загальне число цього не покаже — потрібно рахувати ті самі TPR і FPR окремо по групах. Цим займається окрема тема — 38. Справедливість моделей.

ПідсумокЯк обирати метрику

Зведімо все в порядок дій, який працює для будь-якої задачі класифікації:

  1. Подивись на баланс класів. Якщо позитивних менше за третину — accuracy вже майже не інформативна, і показувати її як головний результат не варто.
  2. Назви ціну обох помилок. Не в балах, а в наслідках: що станеться з людиною чи бізнесом при FP і що при FN.
  3. Обери метрику, що відповідає цій ціні. Дорожчий FN — recall або F2. Дорожчий FP — precision або F0.5. Приблизно рівні — F1.
  4. Побудуй PR-криву на валідації і подивись на весь діапазон порогів, а не на одне значення 0.5.
  5. Зафіксуй поріг за критерієм — мінімум втрат, або вимога «recall не нижче 0.95», або максимум Fβ. І зафіксуй його на валідаційній вибірці, а міряй якість на тестовій.
  6. Звітуй парою чисел, а не одним. «Precision 0.71 при recall 0.88 на порозі 0.23» — це звіт. «Точність 94%» — це реклама.