Домашнє завдання

Крива компромісів: ROC та AUC

Головна ідея теми в одному реченні: ROC показує не те, наскільки модель точна, а який вибір у тебе є — і AUC підсумовує весь цей вибір одним числом, яке нічого не каже про поріг.


рівень 1Рівень 1 — База

Візьми load_breast_cancer зі sklearn.datasets, навчи логістичну регресію й побудуй ROC своїми руками на реальних даних:

  1. Реалізуй roc_manual(y_true, scores) — сортування за спаданням скора й накопичення TPR та FPR, без жодних бібліотечних функцій для кривих.
  2. Наклади свою криву на roc_curve(..., drop_intermediate=False).
  3. Порахуй AUC двома способами: площею трапецій і часткою правильно впорядкованих пар.
  4. Звір обидва числа з roc_auc_score.

Зроблено, якщо: у зошиті є графік, де обидві криві збігаються, і проходить перевірка assert np.allclose(наш_auc, roc_auc_score(...)) для обох способів підрахунку.


рівень 2Рівень 2 — Плюс

Побудуй ситуацію, у якій модель із меншим AUC практично краща.

  1. Створи дві моделі так, щоб їхні ROC перетиналися: одна сильніша в зоні малого FPR, друга — у зоні великого. Найпростіше зробити це, змішавши два різні джерела скорів або по-різному зіпсувавши частину прогнозів.
  2. Порахуй AUC обох — потрібно, щоб «гірша» за AUC модель вигравала в зоні FPR ≤ 0,05.
  3. Порахуй часткову AUC (площу під кривою лише на ділянці FPR від 0 до 0,05, нормовану на ширину цієї ділянки) для обох моделей.

Зроблено, якщо: ти навів чотири числа (два повних AUC і дві часткових), показав на графіку точку перетину кривих і пояснив у двох-трьох реченнях, для якої задачі обрав би модель із меншим повним AUC.


рівень 3Рівень 3 — Виклик

Досліди, наскільки взагалі можна довіряти різниці в AUC.

  1. Реалізуй bootstrap-оцінку довірчого інтервалу AUC: 1000 разів візьми вибірку з поверненням того самого розміру, щоразу порахуй AUC, візьми 2,5-й і 97,5-й процентилі.
  2. Зроби це для вибірок розміром 200, 1000 і 5000 об'єктів.
  3. Візьми дві моделі з AUC 0,88 і 0,90 і зроби парний bootstrap: на кожній бутстреп-вибірці рахуй різницю AUC двох моделей і дивись, яка частка різниць більша за нуль.

Зроблено, якщо: для кожного з трьох розмірів названо 95% інтервал, і ти відповів числом на питання «чи значуща різниця 0,88 проти 0,90 на 200 об'єктах». Окремо поясни, чому парний bootstrap дає вужчий інтервал для різниці, ніж два незалежні інтервали для окремих AUC.


Підказки