Тема про постановку задачі, тож і завдання не про «підняти метрику». Вони про те, щоб побачити власними числами, як вибір таргета й кодування ознак змінюють усе далі.
Домен той самий, що в лекції та практиці — дошка оголошень про продаж вживаних
телефонів. Датасет міняти не треба: усе робиться на тому, що збирається
в practice.ipynb (np.random.default_rng(42), 700 рядків, сім колонок).
рівень 1Рівень 1 — База
Постав сім задач на одній таблиці й склади з них паспорт датасету.
- Візьми
adsіз практики. По черзі оголоси таргетом кожну з семи колонок. - Для кожної порахуй три числа: скільки унікальних значень має таргет, скільки
рядків припадає в середньому на одне значення (
700 / унікальних) і скільки ознак лишається. - Признач кожній тип задачі за правилом із лекції: два значення — бінарна класифікація, 3–10 — багатокласова, більше — регресія.
- Для трьох таргетів —
price,is_fraud,condition— реально навчи модель і виміряй метрику, придатну саме цьому типу задачі.
Зроблено, якщо: є таблиця з семи рядків із колонками
таргет · унікальних · на значення · ознак · тип задачі · метрика, і ти назвав
словами дві колонки, які не варто брати таргетом, — з поясненням, чому саме
(не «погана метрика», а «таку відповідь ніхто не питає» або «її не існує в момент
передбачення»).
рівень 2Рівень 2 — Плюс
Поміряй, скільки коштує неправильно визначений тип ознаки.
- Візьми задачу регресії ціни (
price— таргет) із практики й запиши її MAE при правильному кодуванні:conditionпорядкова (0, 1, 2),modelкатегорійна (pd.get_dummies). - Зроби три зіпсовані варіанти й переучи модель на кожному:
conditionзакодовано як категорійну (get_dummiesзамість 0/1/2);modelзакодовано як порядкову (моделі просто пронумеровані 0, 1, 2, 3);memory_gbзакодовано як категорійну (три стовпці-прапорці замість числа).- Повтори кожен вимір на пʼятьох різних
random_stateуtrain_test_splitі візьми середнє MAE — інакше різницю не відрізнити від випадковості.
Зроблено, якщо: є таблиця з чотирьох рядків (правильно + три помилки), у кожному середнє MAE по пʼятьох розбиттях, і ти назвав, яка з трьох помилок найдорожча і яка майже нічого не змінює. Поясни другу: чому саме на цій колонці неправильне кодування зійшло з рук.
рівень 3Рівень 3 — Виклик
Побудуй витік ознаки часу й покажи його числами.
- Додай до
adsколонкуposted_at— день публікації, ціле число від 1 до 120. Розподіли оголошення по днях приблизно порівну. - Зроби частку шахрайства залежною від дня: обери для кожного дня власну
ймовірність (наприклад, випадкову з відрізка від 0,05 до 0,90) і перегенеруй
is_fraudза нею, лишивши решту колонок без змін. - Поділи дані не випадково, а за часом: дні 1–90 — навчальні, дні 91–120 — нові.
- Навчи дві однакові моделі (
DecisionTreeClassifierпідійде): одну без колонкиposted_at, другу з нею. Для кожної виміряй accuracy окремо на навчальних днях і окремо на нових. - Побудуй графік точності по днях: 120 точок, вертикальна лінія на 90-му дні.
Зроблено, якщо: є чотири числа (дві моделі × дві половини) і графік, з яких видно, що модель із датою краща на своїх днях і гірша на нових, а модель без дати працює однаково на обох. Назви розрив для кожної моделі одним числом і поясни в двох реченнях, чому розрив, а не сама точність, є ознакою витоку.
Додатково (за бажанням): повтори пункт 4, замінивши posted_at на порядковий
номер рядка range(len(ads)), попередньо відсортувавши таблицю за днем. Покажи,
що результат той самий — і поясни, чому.
Підказки
- Рівень 1. Функція
prepare_features(таблиця, назва_таргета)із практики вже вміє прибирати таргет із ознак і кодувати решту. Для перебору сімох таргетів зручний звичайний циклfor назва in ads.columns. Метрику вибирай так: регресія →mean_absolute_error, бінарна класифікація →roc_auc_score, багатокласова →accuracy_score. - Рівень 2. Різниця між варіантами буде десятки гривень, а розкид між розбиттями — сотні. Саме тому пункт 3 обовʼязковий: без усереднення ти поміряєш шум, а не ефект. Порівнюй не лише середнє, а й розмах між пʼятьма прогонами.
- Рівень 3. Дерево без обмеження глибини запамʼятає дні миттєво; з
max_depth=5ефект теж буде, але слабший — спробуй обидва. Для нових днів модель бачить значенняposted_at, яких не було в навчанні: подивись, що вона з ними робить, і поясни, чому будь-яке її рішення там буде довільним.