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

Дані: ознаки, таргет, типи задач

Тема про постановку задачі, тож і завдання не про «підняти метрику». Вони про те, щоб побачити власними числами, як вибір таргета й кодування ознак змінюють усе далі.

Домен той самий, що в лекції та практиці — дошка оголошень про продаж вживаних телефонів. Датасет міняти не треба: усе робиться на тому, що збирається в practice.ipynb (np.random.default_rng(42), 700 рядків, сім колонок).


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

Постав сім задач на одній таблиці й склади з них паспорт датасету.

  1. Візьми ads із практики. По черзі оголоси таргетом кожну з семи колонок.
  2. Для кожної порахуй три числа: скільки унікальних значень має таргет, скільки рядків припадає в середньому на одне значення (700 / унікальних) і скільки ознак лишається.
  3. Признач кожній тип задачі за правилом із лекції: два значення — бінарна класифікація, 3–10 — багатокласова, більше — регресія.
  4. Для трьох таргетів — price, is_fraud, condition — реально навчи модель і виміряй метрику, придатну саме цьому типу задачі.

Зроблено, якщо: є таблиця з семи рядків із колонками таргет · унікальних · на значення · ознак · тип задачі · метрика, і ти назвав словами дві колонки, які не варто брати таргетом, — з поясненням, чому саме (не «погана метрика», а «таку відповідь ніхто не питає» або «її не існує в момент передбачення»).


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

Поміряй, скільки коштує неправильно визначений тип ознаки.

  1. Візьми задачу регресії ціни (price — таргет) із практики й запиши її MAE при правильному кодуванні: condition порядкова (0, 1, 2), model категорійна (pd.get_dummies).
  2. Зроби три зіпсовані варіанти й переучи модель на кожному:
  3. condition закодовано як категорійну (get_dummies замість 0/1/2);
  4. model закодовано як порядкову (моделі просто пронумеровані 0, 1, 2, 3);
  5. memory_gb закодовано як категорійну (три стовпці-прапорці замість числа).
  6. Повтори кожен вимір на пʼятьох різних random_state у train_test_split і візьми середнє MAE — інакше різницю не відрізнити від випадковості.

Зроблено, якщо: є таблиця з чотирьох рядків (правильно + три помилки), у кожному середнє MAE по пʼятьох розбиттях, і ти назвав, яка з трьох помилок найдорожча і яка майже нічого не змінює. Поясни другу: чому саме на цій колонці неправильне кодування зійшло з рук.


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

Побудуй витік ознаки часу й покажи його числами.

  1. Додай до ads колонку posted_at — день публікації, ціле число від 1 до 120. Розподіли оголошення по днях приблизно порівну.
  2. Зроби частку шахрайства залежною від дня: обери для кожного дня власну ймовірність (наприклад, випадкову з відрізка від 0,05 до 0,90) і перегенеруй is_fraud за нею, лишивши решту колонок без змін.
  3. Поділи дані не випадково, а за часом: дні 1–90 — навчальні, дні 91–120 — нові.
  4. Навчи дві однакові моделі (DecisionTreeClassifier підійде): одну без колонки posted_at, другу з нею. Для кожної виміряй accuracy окремо на навчальних днях і окремо на нових.
  5. Побудуй графік точності по днях: 120 точок, вертикальна лінія на 90-му дні.

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

Додатково (за бажанням): повтори пункт 4, замінивши posted_at на порядковий номер рядка range(len(ads)), попередньо відсортувавши таблицю за днем. Покажи, що результат той самий — і поясни, чому.


Підказки