Абревіатура ROC розшифровується як receiver operating characteristic — «робоча характеристика приймача». Назва звучить дивно для метрики машинного навчання, бо народилася вона не в машинному навчанні. Під час Другої світової радари почали бачити надто багато: літак, хмару, зграю птахів, електричний шум. Оператор мусив вирішувати, коли натискати тривогу.
Проблема була не в тому, щоб «правильно налаштувати радар», а в тому, що будь-яке налаштування — це компроміс. Обережний оператор пропускає літаки. Панікер підіймає тривогу на кожну хмару. Криву, що описувала здатність конкретного оператора балансувати між цими двома бідами, і назвали ROC. Сімдесят років потому ми використовуємо її абсолютно так само — тільки замість оператора в нас класифікатор.
ОсноваЧотири результати одного прогнозу
Візьмемо антифрод-модель, яка оцінює ризик кожного платежу числом від 0 до 1. Коли ми порівнюємо це число з порогом і ухвалюємо рішення, можливі рівно чотири результати:
| скорочення | що сталося | у нашій задачі |
|---|---|---|
| TP | позитив, спійманий правильно | шахрайство заблоковано |
| FP | негатив, помилково позначений позитивом | чесний платіж заблоковано |
| FN | позитив, пропущений моделлю | шахрайство пройшло |
| TN | негатив, правильно пропущений | чесний платіж пройшов |
Перші дві літери в цих скороченнях читаються так: T (true) означає «модель угадала», F (false) — «модель помилилась», а P і N кажуть, що саме вона відповіла — «позитив» чи «негатив». Тобто FN — це не «фальшивий негатив», а «модель сказала негатив, і це була помилка». Плутанина в цих двох літерах — найчастіша причина того, чому далі не сходиться жодна формула.
Слово «позитивний» тут не означає «хороший». Позитивний клас — це той, який ми шукаємо: шахрайство, хвороба, дефект. Його призначає людина, коли ставить задачу, і від цього призначення залежать усі метрики лекції.
Ключове спостереження: FP і FN коштують по-різному, і різниця залежить не від математики, а від задачі. У фільтрі спаму хибний позитив — це втрачений робочий лист, і він болючіший за пропущений спам. У скринінгу на рак — навпаки: краще зайвий раз перестрахуватися, ніж не помітити хворобу. Метрика, яка змішує ці помилки в одне число, приховує від тебе саме той вибір, який ти маєш зробити свідомо.
Дві осіTPR і FPR: дві незалежні частки
ROC будується на двох величинах, і головне в них — знаменники. Вони різні, і саме тому ці частки не заважають одна одній.
- TPR (true positive rate, частка істинно позитивних) — частка спійманих серед усіх справжніх позитивів. Це та сама метрика, що зветься recall або чутливість: «скільки шахрайства ми зловили».
- FPR (false positive rate, частка хибно позитивних) — частка хибних тривог серед усіх справжніх негативів: «яку частку чесних платежів ми даремно заблокували».
Тепер найважливіше в цьому розділі, і це не формула, а геометрія матриці. Розклади чотири числа у квадрат 2×2: рядки — правда, стовпці — відповідь моделі. Тоді знаменник TPR — це верхній рядок цілком, знаменник FPR — нижній рядок цілком. Обидва знаменники живуть усередині одного рядка, тобто всередині одного класу, і жоден із них не заглядає в сусідній рядок.
А от знаменник precision — лівий стовпець, і він рядки перетинає: у ньому зустрічаються і справжні позитиви, і хибні тривоги з іншого класу. Ця різниця в геометрії пояснює половину лекції наперед, тож на неї варто подивитись.
Де живе знаменник кожної метрики
Ті самі чотири числа. Змінюється лише те, що ми беремо за 100%.
Порахуємо руками на маленькому прикладі, щоб формула перестала бути записом. Нехай із 200 платежів шахрайських 40, а модель на обраному порозі підняла тривогу 50 разів, і серед цих 50 справжнім шахрайством виявилось 34.
TP = 34 (спіймали). FP = 50 − 34 = 16 (даремно заблокували чесні). FN = 40 − 34 = 6 (шахрайство пройшло). TN = 200 − 40 − 16 = 144 (чесні пройшли).
У знаменнику всі 40 шахрайств, і жодного чесного платежу. Спіймали 85% шахрайства.
У знаменнику всі 160 чесних платежів, і жодного шахрайства. Даремно зачепили 10% чесних.
А тут у знаменнику 50 обʼєктів обох класів разом. Саме тому це число поїде, щойно зміниться склад популяції, — а два попередні не поїдуть.
ПорігЯк один повзунок породжує криву
Модель нічого не вирішує — вона видає скор. Рішення народжується в момент порівняння скора з порогом, і саме поріг є нашим важелем. Опустиш його до нуля — усе оголошується шахрайством, TPR = 1 і FPR = 1. Піднімеш до одиниці — модель мовчить, TPR = 0 і FPR = 0. Між цими крайнощами лежить неперервний спектр компромісів.
Кожне значення порога дає одну пару (FPR, TPR), тобто одну точку на площині. Проженемо поріг через усі можливі значення — точки складуться в криву. Це і є ROC. Посунь повзунок і подивись, як вертикальна лінія в гістограмах керує точкою на кривій.
Поріг рухає точку по ROC
Ліворуч — розподіли скорів для двох класів. Праворуч — та сама модель у координатах FPR/TPR.
ПобудоваROC крок за кроком
Щоб крива перестала бути магією, побудуємо її вручну на маленькій вибірці з 24 платежів. Алгоритм простий і не потребує жодних формул:
- Відсортувати всі обʼєкти за скором, від найбільшого до найменшого.
- Почати з порога вище за максимальний скор — нічого не класифіковано як позитив, ми в точці (0, 0).
- Опускати поріг так, щоб щоразу «захоплювати» рівно один наступний обʼєкт.
- Перерахувати TPR і FPR, поставити точку, зʼєднати з попередньою.
Уся краса в тому, що кожен крок дає рівно один із двох рухів. Захопили справжній позитив — TPR зросла, FPR не змінилася: крок угору. Захопили негатив — навпаки: крок праворуч. Тому ROC на скінченній вибірці завжди сходинки, а не гладка крива.
Пройдімо цей алгоритм повністю на шести обʼєктах — три позитиви й три негативи, — щоб було видно кожен рух. Скори вже відсортовані за спаданням:
| крок | скор | клас | TP | FP | FPR | TPR | рух |
|---|---|---|---|---|---|---|---|
| 0 | — | поріг вище за всі | 0 | 0 | 0.00 | 0.00 | старт (0, 0) |
| 1 | 0.90 | позитив | 1 | 0 | 0.00 | 0.33 | угору на 1/3 |
| 2 | 0.70 | негатив | 1 | 1 | 0.33 | 0.33 | праворуч на 1/3 |
| 3 | 0.60 | позитив | 2 | 1 | 0.33 | 0.67 | угору на 1/3 |
| 4 | 0.50 | негатив | 2 | 2 | 0.67 | 0.67 | праворуч на 1/3 |
| 5 | 0.40 | позитив | 3 | 2 | 0.67 | 1.00 | угору на 1/3 |
| 6 | 0.20 | негатив | 3 | 3 | 1.00 | 1.00 | праворуч, фініш |
Шість обʼєктів — шість кроків, і крива обовʼязково закінчується в точці (1, 1): коли поріг опустився нижче за найменший скор, позитивом оголошено геть усе. Ця вибірка ще знадобиться нам у розділі 08, тому запамʼятай її форму: три сходинки вгору й три праворуч, як драбинка.
Складаємо криву по одному порогу
24 платежі, відсортовані за скором. Тисни кнопку й дивись, куди піде крива на кожному кроці.
ФормаІдеальна, випадкова, перевернута
Форма кривої одразу каже, з чим ми маємо справу. Орієнтирів усього три.
Лівий верхній кут — мрія. Крива, що йде вертикально вгору, а потім горизонтально праворуч, означає: існує поріг, за якого TPR = 1 і FPR = 0. Усі позитиви мають скор вищий за всі негативи, розподіли не перетинаються взагалі.
Діагональ — випадкове вгадування. На ній TPR = FPR за будь-якого порога: підвищуючи поріг, ти втрачаєш стільки ж справжніх позитивів, скільки прибираєш хибних тривог. Модель не несе жодної інформації про клас.
Нижче діагоналі — гірше за монетку. Це не «поганий класифікатор», це переплутані знаки: модель систематично дає негативам вищий скор. Найчастіше причина банальна — переплутані мітки або переплутані класи у коді. Виправляється миттєво: поміняй прогноз на протилежний, і крива віддзеркалиться над діагональ.
Чотири моделі на одній площині
Усі криві побудовані на однаковій кількості обʼєктів. Різниця лише в тому, наскільки розповзаються розподіли скорів.
AUCПлоща під кривою
Крива зручна для аналізу, але коли треба порівняти двадцять моделей, потрібне число. Беруть найпростіше: площу під кривою — area under the curve, AUC (або AUROC, щоб не плутати з площею під PR-кривою).
Порахуємо площу під драбинкою з розділу 04 просто за клітинками. Кожен крок праворуч має ширину 1/3 і стоїть на певній висоті TPR, а прямокутник під ним має площу «ширина × висота»:
Перший крок праворуч стався на висоті TPR = 1/3, другий — на висоті 2/3, третій — на висоті 1. Ширина в усіх однакова: 1/3.
AUC цієї крихітної моделі — 0.667. Число здається довільним; у розділі 08 зʼясується, що воно означає дуже конкретну річ, і ми отримаємо його вдруге, зовсім іншим способом, навіть не малюючи кривої.
| AUC | що означає |
|---|---|
| 1.00 | ідеальний поділ; на реальних даних — привід шукати витік ознаки |
| 0.80–0.95 | робочий діапазон більшості практичних моделей |
| 0.50 | рівно випадкове вгадування |
| < 0.50 | знаки переплутані; інвертуй прогноз |
Три рядки цієї таблиці варто розібрати окремо, бо їх постійно читають неправильно.
AUC = 0.5 — це не «модель помиляється в половині випадків». Це означає, що крива лягла на діагональ: за будь-якого порога TPR дорівнює FPR. Тобто модель піднімає тривогу на шахрайстві рівно так само охоче, як на чесному платежі, — її скор не містить жодної інформації про клас. Accuracy при цьому може бути якою завгодно високою: досить, щоб один клас був рідкісним. Половина тут не про відповіді, а про непоінформованість.
AUC < 0.5 — це не «дуже погана модель». Це модель, яка знає
відповідь, але вимовляє її навпаки: систематично дає негативам вищий скор, ніж
позитивам. Інформація в ній є, просто з протилежним знаком. Якщо взяти її прогноз і
відняти від одиниці (або поміняти класи місцями), порядок обʼєктів перевернеться, і
AUC стане рівно 1 − AUC: із 0.23 вийде 0.77. Тому AUC 0.23 — це насправді
непогана модель із переплутаними мітками, а по-справжньому безнадійне значення — саме
0.5, бо його не рятує жодна інверсія.
AUC = 1.00 підозріла. Ідеальний поділ означає, що існує поріг, який не помиляється жодного разу на жодному обʼєкті. На реальних даних це майже завжди означає не геніальну модель, а витік: серед ознак опинилось щось, що вже містить відповідь. Найтиповіший випадок — ознака, яку в житті обчислюють після події, яку ми нібито передбачаємо.
Головна перевага AUC у тому, що вона не залежить від вибору порога. Вона міряє якість самого впорядкування обʼєктів, а не якість конкретного рішення. Це робить її правильним інструментом для питання «яка модель краща» — і геть непридатною для питання «який поріг узяти».
СенсЙмовірнісна інтерпретація AUC
«Площа під кривою» звучить як бухгалтерія. Але в AUC є друге, набагато змістовніше означення, і воно доводиться строго:
Тобто AUC = 0.89 означає буквально: візьми навмання одне шахрайство і один чесний платіж — у 89 випадках зі ста модель поставить шахрайству вищий бал. Ця інтерпретація пояснює всі граничні значення одразу. AUC = 0.5 — модель угадує порядок як монетка. AUC = 0 — вона плутає порядок завжди. AUC = 1 — не помиляється жодного разу.
А ще з неї випливає, що AUC можна оцінити без жодних кривих: просто кидати випадкові пари й рахувати частку правильно впорядкованих. Спробуй — і подивись, як оцінка збігається до точного значення.
AUC методом кидання пар
Кожен кидок бере один випадковий позитив і один випадковий негатив і питає: чий скор вищий?
ДоказЧому площа дорівнює ймовірності
Два означення AUC — «площа під кривою» і «ймовірність правильного впорядкування пари» — звучать як речі з різних світів. Одне про геометрію, друге про кидання жеребу. Насправді це одне й те саме число, і побачити чому можна за чотири рядки, без жодного інтеграла. Ця рівність — не цікавинка: саме вона пояснює, чому AUC не залежить ні від порога, ні від частки класів.
Домовимось про позначення: P — скільки в даних справжніх позитивів,
N — скільки справжніх негативів. Тоді різних пар «один позитив і один
негатив» рівно P · N штук.
Ми будували ROC, опускаючи поріг і захоплюючи обʼєкти по одному. Кожен негатив давав горизонтальний відрізок завширшки 1/N. Кожен позитив — вертикальний відрізок, який ширини не має і площі не додає. Отже вся площа під кривою зібрана з прямокутників, і кожен прямокутник належить рівно одному негативу.
Коли черга дійшла до конкретного негатива, крива вже піднялась на висоту
TPR = (кількість позитивів, захоплених раніше) / P. А захоплені раніше — це рівно ті
позитиви, чий скор вищий за скор цього негатива. Позначмо їхню кількість
a. Тоді площа прямокутника цього негатива:
Додаємо прямокутники всіх негативів. Спільний множник 1/(P·N) виноситься:
У чисельнику ми, самі того не помітивши, порахували пари: для кожного негатива додали кількість позитивів, які стоять вище за нього. Сума по всіх негативах — це кількість пар, у яких позитив отримав вищий бал.
А «частка пар» і є ймовірністю: візьми навмання один позитив і один негатив — з такою ймовірністю позитив отримає вищий скор. Дві інтерпретації зійшлися.
Перевіримо на драбинці з шести обʼєктів, у якої площа вийшла 6/9. Позитиви мали скори 0.90 · 0.60 · 0.40, негативи — 0.70 · 0.50 · 0.20. Пар усього 3 × 3 = 9. Рахуємо, у скількох позитив вищий: 0.90 б’є всі три негативи (3 пари), 0.60 б’є 0.50 і 0.20 (2 пари, бо 0.70 його обійшов), 0.40 б’є лише 0.20 (1 пара). Разом 3 + 2 + 1 = 6 із 9 — те саме 0.667, що ми отримали, додаючи прямокутники. Жодної кривої для цього малювати не довелось.
З цієї рівності одразу випливають дві властивості, які інакше довелося б заучувати. По-перше, AUC не залежить від порога — у формулі порога просто немає, є лише порівняння скорів між собою. По-друге, AUC не залежить від того, скільки в даних позитивів і негативів: кожна пара розглядається окремо, а їхня кількість стоїть у знаменнику й скорочується. До другого наслідку ми повернемось у розділі 11 — там саме він виявиться і сильною стороною ROC, і її сліпотою.
Усі пари одразу: кожна клітинка — одне порівняння
Рядки — 10 позитивів, стовпці — 14 негативів, разом 140 пар. Бірюзова клітинка означає «позитив вищий».
ДисбалансЧому accuracy обманює
Тепер найпрактичніший розділ. Уяви, що шахрайських платежів лише 1%. Класифікатор «усе чесне», який не робить узагалі нічого, дає accuracy 99%. Будь-яка справжня модель, що ловить частину шахрайства ціною хибних тривог, майже напевно матиме accuracy нижчу. За цією метрикою робити нічого — вигідніше.
Причина в тому, що accuracy усереднює по всій вибірці, а вибірку заповнює той клас, який трапляється частіше. Метрика фактично вимірює рідкість класу. TPR і FPR такої вади не мають: у кожної свій знаменник, тому частка класів на них не впливає взагалі. Покрути повзунок і переконайся.
Accuracy проти AUC при дисбалансі
Розподіли скорів не змінюються — змінюється тільки частка позитивного класу в популяції.
ШтукиСкільки це коштує в штуках
Незалежність ROC від частки класів — і сила, і слабкість. Сила: криву можна порівнювати між вибірками з різним складом, і вона не змінить оцінки моделі через те, що змінився склад потоку. Слабкість: вона мовчить про те, скільки сміття доведеться розгрібати живій людині.
Причина проста й арифметична: FPR ділиться на кількість негативів, а негативів при дисбалансі величезна маса. Частка від великого числа — велике число, навіть якщо сама частка мала. Порахуймо це руками, бо саме тут ховається найдорожча помилка практика.
Візьмемо одну модель, зафіксуємо один поріг і не будемо його чіпати: на ньому TPR = 0.85 і FPR = 0.05. Обидві величини належать моделі, а не потоку, тож при зміні складу популяції вони не рухаються. Пропустимо через модель 10 000 платежів.
5 000 шахрайських, 5 000 чесних.
На кожен спійманий платіж припадає 250 / 4 250 ≈ 0.06 хибної тривоги — тобто одна хибна тривога на сімнадцять правильних блокувань. Precision = 4 250 / 4 500 ≈ 0.94.
100 шахрайських, 9 900 чесних. Модель та сама, поріг той самий.
Тепер на кожен спійманий платіж припадає 495 / 85 ≈ 5.8 хибної тривоги. Precision = 85 / 580 ≈ 0.15: пʼять із шести піднятих тривог — помилкові.
Нічого. TPR = 0.85 і FPR = 0.05 в обох випадках, точка на кривій не зрушила, AUC не змінилась. А обсяг ручної роботи виріс майже в сто разів: із 0.06 до 5.8 хибної тривоги на один результат.
Ось чому «FPR лише 5%» — фраза, яка нічого не варта без частки позитивів поруч. П'ять відсотків від рідкісного класу — дрібниця; пʼять відсотків від маси негативів — черга з аналітиків. Наступний інтерактив показує цей перехід одним рухом.
Та сама точка ROC, зовсім інша купа роботи
TPR і FPR закріплені на 0.85 і 0.05. Змінюється лише склад потоку з 10 000 платежів.
PRКоли PR-крива краща за ROC
Отже, потрібна метрика, яка цю різницю бачить. І вона є:
precision = TP / (TP + FP). Пригадай геометрію з розділу 02:
знаменник precision — це стовпець, який перетинає обидва рядки матриці. Саме тому
precision реагує на склад популяції, а TPR і FPR — ні.
Якщо тепер побудувати криву не в осях FPR–TPR, а в осях recall–precision, пробігши тим самим порогом від краю до краю, вийде PR-крива. Площу під нею називають average precision (AP) — за тією самою логікою, що й AUC: одне число замість цілої кривої.
Дві криві поводяться при дисбалансі геть по-різному, і це не теорія, а замір. Ми взяли одну модель, не змінюючи в ній нічого, і прогнали її на двох наборах: у першому позитивів половина, у другому — один відсоток.
| частка позитивів | AUC (ROC) | AP (площа під PR) | базовий рівень PR |
|---|---|---|---|
| 50% | 0.940 | 0.940 | 0.50 |
| 1% | 0.942 | 0.323 | 0.01 |
AUC зрушила на дві тисячні — це звичайний шум вибірки, а не сигнал. AP впала майже втричі. Обидва числа правильні, і жодне з них не бреше: вони просто відповідають на різні питання. AUC питає «чи вміє модель ставити шахрайство вище за чесні платежі» — і вміє, однаково добре в обох наборах. AP питає «якщо модель підняла тривогу, наскільки їй можна вірити» — і відповідь тут різко залежить від того, скільки в потоці чесних платежів.
Читати AP окремо від частки позитивів так само безглуздо, як читати FPR без неї. Базовий рівень PR-кривої дорівнює частці позитивних: класифікатор, який роздає скори навмання, дасть AP приблизно рівний цій частці. Тому AP = 0.323 при 1% позитивних — це у 32 рази краще за випадковість, хоч число й виглядає скромним поруч із 0.940. А базовий рівень ROC — завжди 0.5, хоч би що коїлося з класами, і саме через це AUC не вміє показати різницю між двома рядками таблиці.
ROC не ворухнеться, PR обвалиться
Ліворуч ROC, праворуч PR. Модель та сама, змінюється лише частка позитивів.
МежіПорівняння моделей і чого AUC не бачить
AUC зручна для відбору моделей, але має три сліпі зони, про які варто знати.
Перша: вона нічого не каже про калібрування. Калібрування — це властивість скора бути справжньою ймовірністю: якщо модель поставила сотні платежів оцінку 0.7, то приблизно 70 із кожної сотні мусять виявитись шахрайськими. AUC цього не перевіряє взагалі, бо, як ми довели в розділі 08, вона дивиться лише на порядок скорів. Візьми будь-яку модель і піднеси всі її ймовірності до квадрата: 0.9 стане 0.81, 0.5 стане 0.25, усі числа зменшаться, але жодна пара не помінялась місцями — більше число, піднесене до квадрата, лишається більшим. Порядок той самий, отже й пари впорядковані так само, отже AUC не зміниться ані на тисячну — хоча ймовірності стали відверто брехливими.
Це не оцінка на око, а замір: на вибірці з 2 000 обʼєктів
roc_auc_score дає 0.876720 для сирих скорів і рівно те саме
0.876720 після піднесення до квадрата, після добування кореня й після переходу до
логіта. Усі чотири перетворення монотонні — тобто зберігають порядок, — і AUC їх просто
не помічає.
Числа міняються, порядок ні — AUC не ворушиться
Ті самі обʼєкти, чотири різні шкали скора. Угорі — де стоять обʼєкти, унизу — крива.
Якщо тобі потрібне число, яке справді означає «17% ризику», AUC тут не помічник — потрібні калібрувальні криві й Brier score (середній квадрат різниці між передбаченою ймовірністю та фактом 0/1). Це тема 21. Калібрування і вибір порога.
Друга: вона вважає всі помилки рівноцінними. Площа під кривою підсумовує всі пороги з однаковою вагою, зокрема й ті, які ти ніколи не використаєш. Модель із AUC 0.88, що добре працює в зоні високої точності, практично краща за модель із AUC 0.90, чия перевага сидить у зоні FPR понад 0.5.
Третя: різниця в AUC не завжди значуща. На вибірці з 200 обʼєктів різниця 0.88 проти 0.90 цілком може бути шумом. Тут допомагає та сама рівність із розділу 08: AUC — це частка серед P × N пар, а частка, порахована на скінченній вибірці, має похибку, і що менше пар, то вона більша. При 20 позитивах і 180 негативах пар усього 3 600, і різниця в другому знаку легко тоне в цьому розкиді. Порівнюючи моделі, дивись на довірчі інтервали або принаймні на розкид AUC по фолдах крос-валідації — це тема 18. Крос-валідація.
ПідсумокЩо варто запамʼятати
- TPR і FPR мають різні знаменники — тому обидві не залежать від частки класів.
- ROC — це не одна модель, а всі її можливі рішення одночасно, від «мовчати завжди» до «блокувати все».
- AUC має два рівноцінні означення: площа під ROC і ймовірність, що випадковий позитив отримає вищий скор за випадковий негатив. Це одне й те саме число, і рівність доводиться складанням прямокутників під сходинками.
- AUC = 0.5 — скор не містить інформації про клас; AUC <
0.5 — інформація є, але зі зворотним знаком, і інверсія прогнозу дає
1 − AUC. - Accuracy при рідкісному позитивному класі вимірює рідкість класу, а не якість моделі.
- ROC бреше не числом, а мовчанням: вона не показує, що при 1% позитивів той самий FPR = 0.05 дає майже 6 хибних тривог на кожен спійманий випадок.
- PR-крива бачить дисбаланс там, де ROC сліпа, бо precision змішує обидва класи в одному знаменнику. Її базовий рівень — частка позитивних, а не 0.5.
- AUC не бачить калібрування: будь-яке монотонне перетворення скорів лишає її незмінною.
І наскрізна думка обох сусідніх лекцій: модель дає впорядкування, рішення ухвалює людина. ROC — це просто чесний перелік того, між чим саме доводиться обирати.