Машинне навчання · Блок 1 · Тема 02

Стовпець, який ти назвеш відповіддю

Таблиця одна й та сама. Що в ній ознака, а що відповідь — не її властивість, а твоє рішення. Від цього рішення залежить тип задачі, вибір моделі, метрика й навіть те, чи задача взагалі розвʼязна.

У попередній темі ми домовились, що машинне навчання — це пошук правила за прикладами з готовими відповідями. Лишилось одне: домовитись, що саме ми називаємо прикладом, а що — відповіддю. Виявиться, що відповідь не задана природою даних. Її призначаємо ми.

Дошка оголошень про продаж вживаних телефонів лишається наскрізним прикладом. Та сама таблиця, ті самі сім стовпців. Уся лекція про те, що з неї можна зробити щонайменше три різні задачі — і жоден рядок при цьому не зміниться.

01 / ФормаРядок, стовпець і чому це важливо

Найпоширеніша форма даних у машинному навчанні — звичайна прямокутна таблиця. Такі дані називають табличними (tabular), і саме з ними працює більша частина цього курсу. Правило укладання просте, але порушують його регулярно:

один рядок = один обʼєкт  ·  один стовпець = одна ознака

Обʼєкт — це те, про що ми робимо висновок. У нас це одне оголошення. Не продавець, не модель телефона, не день — саме оголошення. Якщо в таблиці рядок описує іноді оголошення, а іноді продавця з кількома оголошеннями, модель отримає суміш двох різних сутностей і жодна метрика не покаже, що не так.

Ознака (feature) — одна характеристика обʼєкта, виміряна однаково для всіх рядків. Це той самий DataFrame, з яким ти працював у темі pandas: рядки — записи, колонки — поля. Різниця лише в тому, що тепер у колонок зʼявляється роль.

Схема 1 · Анатомія таблиці

Пʼять рядків нашої дошки оголошень. Дивись не на числа, а на те, як позначені рядок і два стовпці.

Три позначки: бурштиновий контур — рядок-обʼєкт, одне оголошення. Рожева заливка — таргет, стовпець, який ми вирішили передбачати. Бірюзовий пунктир — стовпець, який міг би бути таргетом замість нього. Заміна однієї позначки на іншу перетворює задачу регресії на задачу класифікації, не змінюючи жодного значення в таблиці.

Ще одна річ, яку варто помітити одразу: у ML-таблиці не буває «порожніх» стовпців без ролі. Кожна колонка або йде в модель як ознака, або є відповіддю, або свідомо викидається. Третій варіант — теж рішення, і його доводиться ухвалювати частіше, ніж здається: колонки з ідентифікаторами, службовими мітками й датами найчастіше шкодять, і в розділі про час ми побачимо, наскільки саме.

02 / ВибірОзнака й таргет

Цільова ознака (target, у розмові — «таргет») — це стовпець, значення якого ми хочемо вміти відновлювати для нових обʼєктів. Решта стовпців, які подаються моделі на вхід, — просто ознаки. Формально задача навчання з учителем звучить так: знайти функцію, яка з набору ознак одного рядка дає значення таргета того самого рядка, і робить це якнайточніше на рядках, яких модель не бачила.

А тепер головне речення теми, і воно всупереч інтуїції. Таргет — це не властивість колонки. Це наш вибір. У таблиці немає стовпця, позначеного зірочкою. Немає типу даних «цільовий». Будь-яку з семи колонок можна оголосити відповіддю — і решта шести автоматично стануть ознаками. Задача при цьому зміниться повністю.

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

Інтерактив 1 · Конструктор датасету

700 оголошень, сім колонок. Міняється лише те, яку з них ми назвали відповіддю.

Що тут головне: число «унікальних значень» пораховане по тих самих 700 рядках і саме воно тягне за собою все інше. Два значення — бінарна класифікація. Три-шість — багатокласова. Пʼятсот пʼятдесят одне — регресія, бо на кожне окреме значення припадає близько одного прикладу й вивчати там нічого.

Кілька спостережень із цього конструктора, які варто винести окремо.

Одна таблиця — багато задач. Взяли price — отримали задачу регресії й лінійну модель. Взяли is_fraud — на тих самих даних отримали бінарну класифікацію й зовсім іншу метрику. Взяли condition — багатокласову класифікацію. Датасет не змінився ні на байт.

«Решта колонок стають ознаками» — правило механічне, а не остаточне. Обери таргетом price, і конструктор чесно віддасть в ознаки всі шість інших колонок, разом із is_fraud. Формально все правильно. Практично — задай собі питання, яке конструктор задати не може: чи буде ця колонка відома в момент, коли знадобиться прогноз? Ціну ми передбачаємо для щойно поданого оголошення, а мітку «шахрайське» на ньому ще ніхто не поставив — її саму треба спершу передбачити. Ознака, яку ми дізнаємось лише разом із відповіддю або пізніше за неї, на навчанні працює чудово, а в бою її просто немає. Перевіряти доступність кожної ознаки в часі — робота людини; нижче в цій темі побачиш, як дорого коштує її не зробити.

Не кожен вибір осмислений. Назви таргетом model — задача формально коректна: чотири класи, є мітки, є ознаки. Але передбачати назву моделі телефона за роком, памʼяттю та ціною — це відновлювати те, що й так відоме продавцеві, причому погано. Технічна коректність постановки не означає, що задача комусь потрібна. Питання «навіщо» ставить людина, і модель на нього не відповідає.

Таргет може бути не один. Найчастіше цільова ознака одна, і це найпростіший випадок. Іноді задачу з кількома цілями можна розділити на кілька окремих: передбачити ціну однією моделлю, ймовірність шахрайства — іншою. Але буває, що цілі повʼязані й ділити їх не можна: наприклад, треба одразу назвати й ціну, і термін продажу, бо одне залежить від другого. Тоді потрібні моделі з кількома виходами — і найпростіший приклад такої моделі, нейронна мережа, чекає наприкінці курсу.

Правило про залишок. Щойно ти обрав таргет, перевір решту колонок на одне питання: чи були б вони відомі в момент, коли треба зробити передбачення? Якщо ми передбачаємо ціну ще не поданого оголошення, то account_age_days відомий, а от кількість переглядів — ні, бо їх ще не було. Ознака, якої в момент передбачення не існує, робить модель чудовою на історії і непридатною в житті.

03 / ТипиЯкими бувають ознаки

Тип ознаки — це не про dtype у pandas. Це про те, які операції над значеннями мають зміст. Різниця між «числа» й «числа, які можна віднімати» вирішує і як колонку готувати до навчання, і які моделі до неї взагалі придатні.

Схема 2 · Пʼять типів ознак на нашій таблиці

Кожен тип має приклад із дошки оголошень і своє поводження перед навчанням.

Найпідступніший рядок — третій. Порядкова ознака виглядає як категорійна (це слова), а поводиться як числова (порядок є). Закодуєш її як категорію — модель не знатиме, що «новий» краще за «добрий». Закодуєш числами 0, 1, 2 — модель вважатиме, що відстань «потертий → добрий» точно така сама, як «добрий → новий», а це неправда.

Розберімо ті два рядки, де новачки помиляються найчастіше.

Числова vs категорійна за виглядом. Колонка memory_gb містить числа: 64, 128, 256. Але значень усього три, і телефон із 128 ГБ не «удвічі кращий» за телефон із 64 ГБ. Її можна залишити числом, а можна перетворити на три категорії — і це різні моделі з різною якістю. Зворотний випадок теж є: поштовий індекс записаний числом, але додавати індекси безглуздо, і числом його лишати не можна.

Порядкова. Наш condition — класична порядкова ознака: потертий гірший за добрий, добрий гірший за новий. Порядок є, а от відстань невідома. На практиці такі ознаки все одно кодують числами 0, 1, 2 — і майже завжди це працює, бо модель здатна виправити нерівномірність кроків, підбираючи ваги. Але знати про допущення варто: коли лінійна модель дає дивні коефіцієнти на порядковій колонці, причина найчастіше саме тут.

Ще одна річ, яка ріднить усі типи: більше ознак не означає краще. Кожна зайва колонка — це додатковий шанс, що модель знайде в ній випадкову закономірність і вивчить шум замість сигналу. Ознаку варто додавати тоді, коли є змістовна причина вважати, що вона впливає на таргет, а не тому, що вона є в таблиці. Кількісний бік цього ефекту розбирає тема зсув і розкид.

04 / МежаКласифікація чи регресія

Два головні типи задач навчання з учителем розрізняють за таргетом.

Класифікація — коли передбачається одна з обмеженої кількості міток, і на кожну мітку в даних є достатньо прикладів, щоб вивчити закономірність її появи. Регресія — коли передбачається довільне значення з великого або неперервного діапазону, і на кожне окреме значення прикладів немає й бути не може, тож знайдена закономірність поширюється на значення, яких модель не бачила. Саме це поширення й називають регресією.

Не плутай задачу з моделлю. Логістична регресія має в назві слово «регресія», але розвʼязує задачі класифікації. Це два різні класифікатори понять, і збіг слів — історична випадковість. Практична підказка: у назвах моделей scikit-learn тип задачі дописаний у кінці — RandomForestClassifier для класифікації, RandomForestRegressor для регресії. Це та сама модель із тим самим кодом усередині, різні в них лише останній крок і функція втрат.

Робоче правило, яке закриває більшість випадків, таке:

таргетщо робимочому
дробові значеннярегресія, без роздумівзначень нескінченно багато, на кожне окремо статистики немає
цілі, 2 варіантибінарна класифікаціянайзручніший випадок; більшість метрик і моделей заточені саме під нього
цілі, 3–10 варіантівбагатокласова класифікаціякласів мало, прикладів на кожен вистачає
цілі, більше 10треба думативідповідь залежить від того, скільки в тебе даних

Останній рядок і є цікавим. Класичний приклад — приріст кількості хворих за добу. Значення цілі: людей не буває 4,7. Але йдеться про десятки тисяч, а ряд спостережень короткий — кілька сотень днів. Отже, майже кожне значення трапляється вперше, статистики по ньому немає, і побудувати класифікатор на двадцять тисяч класів неможливо: на клас припадає менше одного прикладу. Задача регресійна, попри цілі числа.

Дзеркальний випадок теж реальний. Задача зі ста класами й мільярдом рядків — спокійно класифікаційна: на клас припадає десять мільйонів прикладів. Та сама задача зі ста класами й двомастами рядками — по два приклади на клас, модель не навчиться нічого, і краще ставити її як регресію по впорядкованій шкалі. Тип задачі визначається не таргетом окремо, а парою «таргет плюс обсяг даних».

Інтерактив 2 · Де проходить межа

Два числа вирішують усе: скільки різних значень має таргет і скільки в тебе рядків.

унікальних
рядків
на значення
тип значень
Ключове число — «на значення»: це просто рядки поділені на кількість унікальних значень, тобто скільки прикладів у середньому припадає на один клас. Поки їх десятки — класифікація має на чому вчитись. Коли одиниці — класів фактично немає, є шкала, і задачу треба ставити як регресію. Саме тому межі зон на карті косі: одна й та сама кількість класів при різному обсязі даних дає різну відповідь.

І останній прийом, який варто мати в голові. Коли даних мало настільки, що не йде ні класифікація, ні регресія, задачу свідомо спрощують до бінарної. Замість «яким буде курс завтра» питають «зросте чи ні». Замість «скільки телефонів продадуть наступного місяця» — «більше чи менше, ніж цього». Бінарний таргет розвʼязується найнадійніше: класів два, прикладів на кожен максимум, метрик — повний набір.

Ціна теж зрозуміла: ти втрачаєш величину. Модель, яка каже «зросте», не відрізняє зростання на 1 % від зростання на 40 %, а рішення про закупівлю залежить саме від цього. Тому бінаризація — це не спрощення задачі, а заміна її на іншу, простішу. Робити так можна, мовчати про це не можна.

05 / ЧасПередбачення чи прогнозування

Два слова, які українською й англійською однаково легко переплутати, а різниця між ними міняє і моделі, і підготовку даних.

Передбачення (prediction) — відповідь про обʼєкт, який не привʼязаний до моменту часу. Фото котика лишається фото котика і вчора, і за рік. Оголошення шахрайське або чесне саме по собі, а не тому, що подане у вівторок.

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

Схема 3 · Дві задачі на одній часовій осі

Угорі час не значить нічого. Унизу час — це і є ознака.

Як розрізнити за одним питанням: «якщо той самий обʼєкт трапиться через рік, відповідь буде та сама?» Так — це передбачення, і колонку з датою треба прибрати. Ні, відповідь залежить від того, коли — це прогнозування, і колонка з датою стає головною.

А тепер контрінтуїтивне. У задачах передбачення ознаку часу не просто можна не використовувати — її обовʼязково треба прибрати. Здається, що зайва колонка нікому не завадить: не знадобиться — модель її проігнорує. Не проігнорує.

Річ у тому, що дата — надзвичайно зручна ознака для запамʼятовування. Кожен день — своя невелика група рядків, у якій відповідь часто однорідна: того тижня модератори розбирали хвилю шахрайства, іншого — ні. Модель це помічає й будує правило виду «14 березня — шахрайське, 15 березня — чесне». На навчальних даних воно працює чудово, бо ці дні там є. На нових днях правило не має що сказати — таких дат модель не бачила, а нічого іншого вона й не вивчила: навіщо розбиратись у ціні й віці акаунта, якщо дата й так дає відповідь.

Це окремий випадок перенавчання (overfitting) — модель завчила конкретні моменти замість природи явища. Механізм перенавчання докладно розбирає тема зсув і розкид, а поки достатньо побачити ефект числами. Нижче — та сама дошка оголошень за 120 днів: 90 днів модель бачила на навчанні, 30 наступних — ні.

Інтерактив 3 · Що робить ознака дати

Дві однакові задачі, дві однакові вибірки. Різниця лише в тому, чи бачить модель день публікації.

свої дні
нові дні
розрив
днів
Повзунок керує тим, наскільки сильно частка шахрайства гуляє від дня до дня. Постав його на нуль — дати немає що запамʼятовувати, обидві моделі поводяться однаково. Крути вправо — модель із датою злітає на своїх днях і провалюється на нових, а модель без дати слабшає рівно, бо шуму в даних справді більшає. Однаково погано на обох половинах — чесно. Добре тут і погано там — це витік.
Практично. Прибирати треба не лише колонку з датою, а й усе, що її замінює: порядковий номер запису, номер партії вивантаження, автоінкрементний id. Усі вони несуть той самий час у прихованому вигляді й дають той самий ефект.

06 / ФормалізаціяТаблиці, зображення, текст, ряди

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

формащо цеприклад на нашій дошці
таблицірядки-обʼєкти, стовпці-ознаки, порядок рядків не значить нічогонаша таблиця оголошень
зображеннясітка пікселів; сусідство пікселів несе змістфото телефона в оголошенні
текстпослідовність слів; порядок слів несе змістопис оголошення від продавця
часові рядизначення, впорядковані в часі; сусідство в часі несе змісткількість оголошень за кожен день

Спільне в трьох останніх рядках — структура, яку не можна перемішувати. Рядки таблиці можна переставити в будь-якому порядку, і нічого не зміниться: кожен рядок самодостатній. Переставити пікселі зображення, слова в реченні або дні у ряді — означає знищити дані. Саме тому для них потрібні інші моделі: згорткові мережі для зображень, мовні моделі для тексту, моделі часових рядів для рядів.

Наш курс майже весь про таблиці — і це не збіднення. По-перше, у прикладних задачах табличні дані трапляються найчастіше. По-друге, усі поняття, які ми розбираємо на таблицях — таргет, метрика, перенавчання, чесна перевірка, — переносяться на решту форм без змін. Змінюється модель, не змінюється спосіб думати.

Є й четвертий сценарій, у якому передбачення не робиться взагалі: аналіз. Іноді від даних потрібні не прогнози, а висновки — які оголошення продаються найшвидше, чи корелює вік акаунта з ціною, скільки типових груп продавців є на дошці. Таргета в такій задачі немає, і питати «класифікація це чи регресія» безглуздо. Перевіряй це першим: часом задача, поставлена як «навчіть модель», насправді вимагає таблиці й графіка.

07 / ОбсягСкільки даних треба

Питання, яке ставлять першим і на яке немає універсальної відповіді. Не існує числа на кшталт «тисяча рядків достатньо»: потрібний обсяг залежить від того, наскільки складна закономірність, скільки в даних шуму, скільки ознак і скільки класів.

Що можна сказати точно — це нижню межу знизу, і вона проста до банальності. Клас, якого в даних немає, модель вивчити не може. Якщо серед десяти тисяч оголошень немає жодного шахрайського, ніяка модель не навчиться їх знаходити — вона просто вивчить, що шахрайства не буває, і матиме стовідсоткову точність на навчальних даних. Далі так само: клас, представлений трьома прикладами, вивчений не буде, скільки б рядків не було в решті таблиці.

Тому осмислене питання не «скільки рядків», а «скільки прикладів на найрідкіснішу відповідь». Саме це число показує інтерактив вище в клітинці «на значення». Практичні орієнтири, які варто мати як точку відліку, а не як закон:

Друга частина відповіді стосується не кількості, а покриття. Дані мають охоплювати той діапазон, у якому модель працюватиме. Якщо в навчальних даних телефони від 2 до 20 тисяч гривень, а в житті доведеться оцінювати колекційні за 200 тисяч — кількість рядків не рятує, бо цієї частини світу в них просто немає. Це та сама межа, яку ти бачив у попередній темі: модель не мовчить за межами даних, вона впевнено вигадує.

08 / ДаліЩо з цим робити

Підсумок теми вміщується у чотири рядки. Дані для ML — це таблиця, де рядок є обʼєктом, а стовпець ознакою. Таргет призначаємо ми, і від цього призначення залежить тип задачі. Тип задачі визначається не типом колонки, а парою «скільки різних значень» плюс «скільки даних». А колонка з часом у задачах передбачення — не безневинний баласт, а найкоротший шлях до моделі, яка бездоганна на історії і безпорадна далі.

Останнє речення підводить до наступної теми впритул. Ми весь час говорили «на нових даних», «на днях, яких модель не бачила» — але жодного разу не сказали, звідки ці нові дані беруться, поки модель ще не пішла в роботу. Відповідь: їх відрізають від наявних і ховають до кінця. Як саме різати, чому вибірок три, а не дві, і що трапляється, коли підглянути в заховане, — тема «Навчальна, валідаційна і тестова вибірки». Далі — метрики регресії й метрики класифікації: те, чим вимірюють якість для кожного з типів задач, які ми щойно розібрали.

Далі в практиці. У зошиті ти збереш ту саму дошку оголошень у pandas, роздивишся типи всіх семи колонок, а потім тричі поставиш задачу на одних і тих самих даних: регресію ціни, класифікацію шахрайства й багатокласову задачу про стан телефона. На кожній побачиш, як міняється і модель, і метрика. Наприкінці — навмисний витік: додамо ознаку, що підглядає у відповідь, і подивимось на підозріло ідеальний результат.

Далі в темі

Теорію прочитано. Тепер закріпи її на практиці.