Абревіатура ROC розшифровується як receiver operating characteristic — «робоча характеристика приймача». Назва звучить дивно для метрики машинного навчання, бо народилася вона не в машинному навчанні. Під час Другої світової радари почали бачити надто багато: літак, хмару, зграю птахів, електричний шум. Оператор мусив вирішувати, коли натискати тривогу.
Проблема була не в тому, щоб «правильно налаштувати радар», а в тому, що будь-яке налаштування — це компроміс. Обережний оператор пропускає літаки. Панікер підіймає тривогу на кожну хмару. Криву, що описувала здатність конкретного оператора балансувати між цими двома бідами, і назвали ROC. Сімдесят років потому ми використовуємо її абсолютно так само — тільки замість оператора в нас класифікатор.
01 / ОсноваЧотири результати одного прогнозу
Візьмемо антифрод-модель, яка оцінює ризик кожного платежу числом від 0 до 1. Коли ми порівнюємо це число з порогом і ухвалюємо рішення, можливі рівно чотири результати:
| скорочення | що сталося | у нашій задачі |
|---|---|---|
| TP | позитив, спійманий правильно | шахрайство заблоковано |
| FP | негатив, помилково позначений позитивом | чесний платіж заблоковано |
| FN | позитив, пропущений моделлю | шахрайство пройшло |
| TN | негатив, правильно пропущений | чесний платіж пройшов |
Ключове спостереження: FP і FN коштують по-різному, і різниця залежить не від математики, а від задачі. У фільтрі спаму хибний позитив — це втрачений робочий лист, і він болючіший за пропущений спам. У скринінгу на рак — навпаки: краще зайвий раз перестрахуватися, ніж не помітити хворобу. Метрика, яка змішує ці помилки в одне число, приховує від тебе саме той вибір, який ти маєш зробити свідомо.
02 / Дві осіTPR і FPR: дві незалежні частки
ROC будується на двох величинах, і головне в них — знаменники. Вони різні, і саме тому ці частки не заважають одна одній.
- TPR (true positive rate) — частка спійманих серед усіх справжніх позитивів. Це та сама метрика, що зветься recall або чутливість: «скільки шахрайства ми зловили».
- FPR (false positive rate) — частка хибних тривог серед усіх справжніх негативів: «яку частку чесних платежів ми даремно заблокували».
03 / ПорігЯк один повзунок породжує криву
Модель нічого не вирішує — вона видає скор. Рішення народжується в момент порівняння скора з порогом, і саме поріг є нашим важелем. Опустиш його до нуля — усе оголошується шахрайством, TPR = 1 і FPR = 1. Піднімеш до одиниці — модель мовчить, TPR = 0 і FPR = 0. Між цими крайнощами лежить неперервний спектр компромісів.
Кожне значення порога дає одну пару (FPR, TPR), тобто одну точку на площині. Проженемо поріг через усі можливі значення — точки складуться в криву. Це і є ROC. Посунь повзунок і подивись, як вертикальна лінія в гістограмах керує точкою на кривій.
Інтерактив 1 · Поріг рухає точку по ROC
Ліворуч — розподіли скорів для двох класів. Праворуч — та сама модель у координатах FPR/TPR.
04 / ПобудоваROC крок за кроком
Щоб крива перестала бути магією, побудуємо її вручну на маленькій вибірці з 24 платежів. Алгоритм простий і не потребує жодних формул:
- Відсортувати всі обʼєкти за скором, від найбільшого до найменшого.
- Почати з порога вище за максимальний скор — нічого не класифіковано як позитив, ми в точці (0, 0).
- Опускати поріг так, щоб щоразу «захоплювати» рівно один наступний обʼєкт.
- Перерахувати TPR і FPR, поставити точку, зʼєднати з попередньою.
Уся краса в тому, що кожен крок дає рівно один із двох рухів. Захопили справжній позитив — TPR зросла, FPR не змінилася: крок угору. Захопили негатив — навпаки: крок праворуч. Тому ROC на скінченній вибірці завжди сходинки, а не гладка крива.
Інтерактив 2 · Складаємо криву по одному порогу
24 платежі, відсортовані за скором. Тисни кнопку й дивись, куди піде крива на кожному кроці.
05 / ФормаІдеальна, випадкова, перевернута
Форма кривої одразу каже, з чим ми маємо справу. Орієнтирів усього три.
Лівий верхній кут — мрія. Крива, що йде вертикально вгору, а потім горизонтально праворуч, означає: існує поріг, за якого TPR = 1 і FPR = 0. Усі позитиви мають скор вищий за всі негативи, розподіли не перетинаються взагалі.
Діагональ — випадкове вгадування. На ній TPR = FPR за будь-якого порога: підвищуючи поріг, ти втрачаєш стільки ж справжніх позитивів, скільки прибираєш хибних тривог. Модель не несе жодної інформації про клас.
Нижче діагоналі — гірше за монетку. Це не «поганий класифікатор», це переплутані знаки: модель систематично дає негативам вищий скор. Найчастіше причина банальна — переплутані мітки або переплутані класи у коді. Виправляється миттєво: поміняй прогноз на протилежний, і крива віддзеркалиться над діагональ.
Інтерактив 3 · Чотири моделі на одній площині
Усі криві побудовані на однаковій кількості обʼєктів. Різниця лише в тому, наскільки розповзаються розподіли скорів.
06 / AUCПлоща під кривою
Крива зручна для аналізу, але коли треба порівняти двадцять моделей, потрібне число. Беруть найпростіше: площу під кривою — area under the curve, AUC (або AUROC, щоб не плутати з площею під PR-кривою).
| AUC | що означає |
|---|---|
| 1.00 | ідеальний поділ; на реальних даних — привід шукати витік ознаки |
| 0.80–0.95 | робочий діапазон більшості практичних моделей |
| 0.50 | рівно випадкове вгадування |
| < 0.50 | знаки переплутані; інвертуй прогноз |
Головна перевага AUC у тому, що вона не залежить від вибору порога. Вона міряє якість самого впорядкування обʼєктів, а не якість конкретного рішення. Це робить її правильним інструментом для питання «яка модель краща» — і геть непридатною для питання «який поріг узяти».
07 / СенсЙмовірнісна інтерпретація AUC
«Площа під кривою» звучить як бухгалтерія. Але в AUC є друге, набагато змістовніше означення, і воно доводиться строго:
Тобто AUC = 0.89 означає буквально: візьми навмання одне шахрайство і один чесний платіж — у 89 випадках зі ста модель поставить шахрайству вищий бал. Ця інтерпретація пояснює всі граничні значення одразу. AUC = 0.5 — модель угадує порядок як монетка. AUC = 0 — вона плутає порядок завжди. AUC = 1 — не помиляється жодного разу.
А ще з неї випливає, що AUC можна оцінити без жодних кривих: просто кидати випадкові пари й рахувати частку правильно впорядкованих. Спробуй — і подивись, як оцінка збігається до точного значення.
Інтерактив 4 · AUC методом кидання пар
Кожен кидок бере один випадковий позитив і один випадковий негатив і питає: чий скор вищий?
08 / ДисбалансЧому accuracy обманює
Тепер найпрактичніший розділ. Уяви, що шахрайських платежів лише 1%. Класифікатор «усе чесне», який не робить узагалі нічого, дає accuracy 99%. Будь-яка справжня модель, що ловить частину шахрайства ціною хибних тривог, майже напевно матиме accuracy нижчу. За цією метрикою робити нічого — вигідніше.
Причина в тому, що accuracy усереднює по всій вибірці, а вибірку заповнює той клас, який трапляється частіше. Метрика фактично вимірює рідкість класу. TPR і FPR такої вади не мають: у кожної свій знаменник, тому частка класів на них не впливає взагалі. Покрути повзунок і переконайся.
Інтерактив 5 · Accuracy проти AUC при дисбалансі
Розподіли скорів не змінюються — змінюється тільки частка позитивного класу в популяції.
09 / PRКоли PR-крива краща за ROC
Незалежність ROC від частки класів — і сила, і слабкість. Сила: криву можна порівнювати між вибірками з різним складом. Слабкість: вона мовчить про те, скільки сміття доведеться розгрібати.
Річ у тім, що FPR ділиться на величезну кількість негативів. При 1% позитивів FPR = 0.05 виглядає скромно — але це 5% від 99% усіх платежів, тобто хибних тривог у пʼять разів більше, ніж усіх шахрайств разом. ROC цього не покаже, бо в її знаменниках немає співвідношення класів.
А precision має: TP / (TP + FP) — тут в одному
знаменнику зустрічаються обидва класи. Тому PR-крива (precision проти recall) чутлива
до дисбалансу саме там, де ROC сліпа.
Інтерактив 6 · ROC не ворухнеться, PR обвалиться
Ліворуч ROC, праворуч PR. Модель та сама, змінюється лише частка позитивів.
10 / МежіПорівняння моделей і чого AUC не бачить
AUC зручна для відбору моделей, але має три сліпі зони, про які варто знати.
Перша: вона нічого не каже про калібрування. AUC залежить лише від порядку скорів. Візьми будь-яку модель і піднеси всі її ймовірності до квадрата — порядок збережеться, AUC не зміниться ні на тисячну, хоча ймовірності стануть відверто брехливими. Якщо тобі потрібне число, яке справді означає «17% ризику», AUC тут не помічник — потрібні калібрувальні криві й Brier score.
Друга: вона вважає всі помилки рівноцінними. Площа під кривою підсумовує всі пороги з однаковою вагою, зокрема й ті, які ти ніколи не використаєш. Модель із AUC 0.88, що добре працює в зоні високої точності, практично краща за модель із AUC 0.90, чия перевага сидить у зоні FPR понад 0.5.
Третя: різниця в AUC не завжди значуща. На вибірці з 200 обʼєктів різниця 0.88 проти 0.90 цілком може бути шумом. Порівнюючи моделі, дивись на довірчі інтервали або принаймні на розкид AUC по фолдах крос-валідації.
11 / ПідсумокЩо варто запамʼятати
- TPR і FPR мають різні знаменники — тому обидві не залежать від частки класів.
- ROC — це не одна модель, а всі її можливі рішення одночасно, від «мовчати завжди» до «блокувати все».
- AUC — ймовірність, що випадковий позитив отримає вищий скор за випадковий негатив.
- Діагональ — випадкове вгадування; нижче за неї означає переплутані знаки, а не безнадійну модель.
- Accuracy при рідкісному позитивному класі вимірює рідкість класу, а не якість моделі.
- PR-крива бачить дисбаланс там, де ROC сліпа, бо precision змішує обидва класи в одному знаменнику.
І наскрізна думка обох сусідніх лекцій: модель дає впорядкування, рішення ухвалює людина. ROC — це просто чесний перелік того, між чим саме доводиться обирати.
practice.ipynb ти реалізуєш
побудову ROC сортуванням без жодних бібліотек, порахуєш AUC двома способами (трапеціями
та через частку правильно впорядкованих пар), звіриш зі sklearn.metrics,
побудуєш PR-криву на штучно розбалансованій вибірці й підбереш поріг під задане обмеження
на precision.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.