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

Ціна помилки: precision і recall

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


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

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

  1. Отримай оцінки моделі через predict_proba(...)[:, 1].
  2. Побудуй матрицю плутанини власною функцією (не confusion_matrix) для порогів 0,3, 0,5 і 0,7.
  3. Для кожного порогу порахуй precision, recall і F1 своїми формулами.
  4. Звір усі числа з classification_report.

Зроблено, якщо: у зошиті є таблиця з трьох рядків (по одному на поріг) із колонками TP / FP / FN / TN / precision / recall / F1, і є перевірка assert np.allclose(наші, бібліотечні), яка проходить.


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

Візьми задачу, у якій дорожча протилежна помилка, ніж у медичному скринінгу, — наприклад, спам-фільтр: лист, помилково відправлений у спам (FP), болючіший за рекламу у вхідних (FN).

  1. Знайди поріг за вимогою «precision не нижче 0,99».
  2. Знайди поріг за максимумом F0.5.
  3. Знайди поріг за максимумом F2 (це вимога протилежної задачі).
  4. Побудуй один графік із трьома вертикальними лініями на трьох порогах поверх кривих precision і recall.

Зроблено, якщо: ти назвав усі три пороги числами, показав для кожного recall, який доводиться прийняти, і написав два-три речення про те, який поріг узяв би для спам-фільтра, а який — для онкоскринінгу, і чому.


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

Реалізуй з нуля три способи усереднення метрик для багатокласової задачі: макро, мікро і зважене.

  1. Візьми три класи різного розміру (наприклад, 500 / 300 / 50 об'єктів).
  2. Порахуй precision, recall і F1 окремо для кожного класу за схемою «один проти решти» — власною функцією.
  3. Зведи їх у три підсумкові числа: макро (просте середнє), мікро (спершу скласти TP, FP, FN по всіх класах, потім порахувати метрику) і зважене.
  4. Звір усі три з f1_score(..., average='macro' / 'micro' / 'weighted').
  5. Зроби модель, яка повністю ігнорує найменший клас (жодного прогнозу цього класу), і подивись, як поводяться три усереднення.

Зроблено, якщо: усі три числа збіглися з бібліотечними до 10⁻⁸, і ти показав конкретним прикладом, наскільки просідає кожне усереднення, коли цілий клас ігнорується. Окремо поясни, чому мікро-F1 у задачі з однією міткою на об'єкт математично дорівнює accuracy.


Підказки