Головна ідея теми в одному реченні: ROC показує не те, наскільки модель точна, а який вибір у тебе є — і AUC підсумовує весь цей вибір одним числом, яке нічого не каже про поріг.
рівень 1Рівень 1 — База
Візьми load_breast_cancer зі sklearn.datasets, навчи логістичну регресію
й побудуй ROC своїми руками на реальних даних:
- Реалізуй
roc_manual(y_true, scores)— сортування за спаданням скора й накопичення TPR та FPR, без жодних бібліотечних функцій для кривих. - Наклади свою криву на
roc_curve(..., drop_intermediate=False). - Порахуй AUC двома способами: площею трапецій і часткою правильно впорядкованих пар.
- Звір обидва числа з
roc_auc_score.
Зроблено, якщо: у зошиті є графік, де обидві криві збігаються, і
проходить перевірка assert np.allclose(наш_auc, roc_auc_score(...)) для обох
способів підрахунку.
рівень 2Рівень 2 — Плюс
Побудуй ситуацію, у якій модель із меншим AUC практично краща.
- Створи дві моделі так, щоб їхні ROC перетиналися: одна сильніша в зоні малого FPR, друга — у зоні великого. Найпростіше зробити це, змішавши два різні джерела скорів або по-різному зіпсувавши частину прогнозів.
- Порахуй AUC обох — потрібно, щоб «гірша» за AUC модель вигравала в зоні FPR ≤ 0,05.
- Порахуй часткову AUC (площу під кривою лише на ділянці FPR від 0 до 0,05, нормовану на ширину цієї ділянки) для обох моделей.
Зроблено, якщо: ти навів чотири числа (два повних AUC і дві часткових), показав на графіку точку перетину кривих і пояснив у двох-трьох реченнях, для якої задачі обрав би модель із меншим повним AUC.
рівень 3Рівень 3 — Виклик
Досліди, наскільки взагалі можна довіряти різниці в AUC.
- Реалізуй bootstrap-оцінку довірчого інтервалу AUC: 1000 разів візьми вибірку з поверненням того самого розміру, щоразу порахуй AUC, візьми 2,5-й і 97,5-й процентилі.
- Зроби це для вибірок розміром 200, 1000 і 5000 об'єктів.
- Візьми дві моделі з AUC 0,88 і 0,90 і зроби парний bootstrap: на кожній бутстреп-вибірці рахуй різницю AUC двох моделей і дивись, яка частка різниць більша за нуль.
Зроблено, якщо: для кожного з трьох розмірів названо 95% інтервал, і ти відповів числом на питання «чи значуща різниця 0,88 проти 0,90 на 200 об'єктах». Окремо поясни, чому парний bootstrap дає вужчий інтервал для різниці, ніж два незалежні інтервали для окремих AUC.
Підказки
- Для рівня 2 зручний прийом: візьми одну сильну модель і зіпсуй їй скори тільки для частини негативів — залежно від того, якій частині ти псуєш скор (найвищим чи середнім), перевага моделі опиниться в різних зонах FPR.
- Часткову AUC не треба виводити з формул. Обріж масиви
fpr/tprумовоюfpr <= 0.05, додай кінцеву точку інтерполяцією і застосуй ту саму суму трапецій, що й для повної площі. - У bootstrap обов'язково бери однакові індекси для обох моделей, коли рахуєш різницю: інакше до розкиду різниці додасться зайва незалежна випадковість, і висновок вийде надто песимістичним.
- Якщо на якійсь бутстреп-вибірці не виявилось жодного позитиву, AUC не визначений. Такі вибірки треба пропускати й чесно порахувати, скільки їх було.