За курс Python ти навчився складати програми з правил, які придумуєш сам: якщо ціна менша за поріг — зроби одне, інакше інше. Це працює доти, доки правила знаєш ти. А тепер задача, де їх не знає ніхто.
Уяви дошку оголошень про продаж вживаних телефонів. Щодня туди додають тисячі оголошень, і серед них є шахрайські: телефон не існує, продавець просить передоплату й зникає. Твоє завдання — відсіювати такі оголошення до того, як хтось на них попадеться. Ця дошка буде наскрізним прикладом усієї лекції: усе, що я показуватиму, показуватиму на ній.
ПостановкаЗвідки беруться правила
Спершу розвʼяжімо задачу так, як ти робив це весь курс Python. Сідаєш, дивишся на кілька десятків шахрайських оголошень, помічаєш спільне — і пишеш умови:
якщо акаунту менше 7 днів → позначити
Це звичайна програма. У неї на вході дані про оголошення й написані тобою правила, на виході — відповідь для кожного оголошення. Стрілка йде зліва направо, і найдорожчий елемент тут — твоя голова: правила беруться з неї.
Машинне навчання перевертає цю стрілку. Ми даємо машині дані разом із правильними відповідями — десять тисяч оголошень, кожне з яких модератор уже позначив як чесне або шахрайське, — і просимо знайти правило, яке ці відповіді відтворює. На виході отримуємо не відповіді, а правило, яким потім можна відповідати на нові оголошення.
Куди дивиться стрілка
Один і той самий набір понять, переставлений місцями. Уся різниця — тут.
Тут одразу варто прибрати найпоширеніше непорозуміння. Модель нічого не «розуміє». Вона не знає, що таке телефон, гроші чи обман. Усе, що вона робить, — знаходить закономірність у прикладах: комбінації чисел, які в навчальних даних частіше траплялися поруч із міткою «шахрайське». Якщо ця закономірність випадкова — модель вивчить випадковість із тим самим старанням.
«Правило», яке знаходить модель, теж не схоже на рядок коду. Найчастіше це просто набір чисел — ваг, які показують, наскільки кожна ознака зсуває відповідь. Формула однакова для всіх оголошень, змінюються лише числа в ній. Саме тому модель можна зберегти у файл і переслати: вона вміщується в кілька кілобайтів.
Ось як виглядають наші дані. Це звичайна таблиця — той самий DataFrame,
з яким ти працював у темі pandas:
| колонка | що це | приклад |
|---|---|---|
| модель | назва моделі телефона | Galaxy A54 |
| рік | рік випуску | 2021 |
| стан | оцінка стану продавцем | добрий |
| памʼять | обсяг памʼяті, ГБ | 128 |
| ціна | ціна в оголошенні, грн | 7 400 |
| чи шахрайське | позначка модератора | ні |
Перші пʼять колонок — це те, що ми знаємо про оголошення. Остання — те, що хочемо передбачати. Різниця між ними принципова, і наступна тема курсу («Дані: ознаки, таргет, типи задач») присвячена саме їй.
ПорівнянняТі самі дані, два підходи
Розмову про переваги легко звести до гасел, тому краще порахувати. Візьмімо 260 оголошень, з яких 128 насправді шахрайські, і всього дві ознаки: наскільки ціна нижча за ринкову й скільки днів акаунту продавця. Обидві реально доступні модератору, обидві щось значать: шахрай зазвичай ставить привабливо низьку ціну й робить свіжий акаунт.
Спершу спробуй ловити шахраїв правилами. Вмикай і вимикай їх у будь-якому поєднанні й дивись на два числа: скільки шахраїв спіймано і скільки чесних продавців потрапило під підозру помилково. Потім перемкнись у режим «вчимо на прикладах» — там ті самі дані, але жодного написаного руками правила.
Правила проти прикладів
Кожна точка — оголошення. Рожеві справді шахрайські, світлі — чесні. Бурштиновий обідок означає «фільтр позначив».
Зверни увагу на закономірність, яку видно на будь-якому наборі правил: щойно ти розширюєш правило, щоб ловити більше шахраїв, разом із ними під підозру потрапляють чесні продавці. Це не вада конкретного правила, а властивість задачі — два числа завжди рухаються разом, і ціну цього обміну доводиться призначати людині. Ціла тема курсу, Precision і Recall, про те, як цей обмін вимірювати.
Друге спостереження важливіше. Модель не придумала нової ознаки й не дізналася про шахраїв нічого, чого не було в даних. Вона просто підібрала межу під форму хмари точок, а не під форму нашої уяви. Людина мислить відсічками «дешевше за X» — і межа виходить сходинками. Модель шукає компроміс одразу по обох ознаках — і межа виходить похилою. Уся перевага саме в цьому, і вона зникає, щойно даних мало або мітки в них неправильні.
Останнє варто пояснити, бо звучить як застереження заради застереження. Модель підганяє межу під ті точки, які їй показали. Коли точок 260, кожна окрема майже не зсуває межу: вона тримається на масі. Коли точок десять, кожна тягне межу на себе, і достатньо однієї дивної, щоб межа поїхала. А коли мітки неправильні — скажімо, модератор помилково позначив чесних продавців як шахраїв — модель відтворить і цю помилку, бо іншого джерела правди в неї немає. Правило руками в обох випадках поводиться інакше: воно написане з голови, тож від кількості прикладів і від помилок у мітках не залежить узагалі. Саме тому на малих і брудних даних правила часто виграють, і це не поразка ML, а межа його застосовності.
МеханізмЯк машина шукає правило
Ми двічі сказали «модель знаходить правило» — і жодного разу не сказали, як саме. Питання законне, бо звучить це як магія. Магії немає: усередині сидить арифметика, яку можна порахувати на аркуші, і зараз ми це зробимо.
Почнімо з того, чим є «правило» технічно. Це формула з невідомими числами. Наприклад, для оцінки підозрілості оголошення:
+ w2 × (наскільки свіжий акаунт) + w0
Форму формули задає людина, обираючи модель. А от числа w0, w1, w2 — невідомі. Їх називають вагами (weights): кожна вага показує, наскільки сильно й у який бік відповідна ознака тягне відповідь. Знайти правило означає рівно одне — підібрати ці числа. Більше в навчанні нічого немає.
Порахуймо руками
Щоб побачити підбір без жодного програмування, візьмімо задачу, меншу нікуди: три телефони, одна ознака, одна вага. Ознака — обсяг памʼяті, відповідь — ціна.
| памʼять, ГБ | справжня ціна, грн |
|---|---|
| 64 | 2 400 |
| 128 | 4 800 |
| 256 | 9 600 |
Правило шукаємо у вигляді ціна = w × памʼять. Одне невідоме
число. Машина не знає, з чого почати, тому починає з чого завгодно — скажімо, з w = 10.
Далі вона робить те саме, що зробили б ми: рахує, наскільки промахнулась.
Спосіб міряти промах теж треба обрати, і найпростіший — середня абсолютна помилка: узяти різницю між відповіддю моделі й правильною, викинути знак (бо промах на 500 грн угору й на 500 грн униз однаково поганий), і усереднити по всіх трьох рядках. Це число називають помилкою моделі, або функцією втрат (loss): одне число, яким описано, наскільки погано модель відтворює всі приклади разом.
| вага w | що каже модель | промахи | середня помилка |
|---|---|---|---|
| 10 | 640 · 1 280 · 2 560 | −1 760 · −3 520 · −7 040 | 4 107 |
| 30 | 1 920 · 3 840 · 7 680 | −480 · −960 · −1 920 | 1 120 |
| 40 | 2 560 · 5 120 · 10 240 | +160 · +320 · +640 | 373 |
| 37.5 | 2 400 · 4 800 · 9 600 | 0 · 0 · 0 | 0 |
Перший рядок читається так: при w = 10 модель каже 10 × 64 = 640 грн замість 2 400, тобто занижує на 1 760. Те саме для двох інших телефонів; середнє з 1 760, 3 520 і 7 040 дорівнює 4 107. Головне тут — знак промахів: усі три відʼємні, модель занижує скрізь, отже вагу треба збільшувати. При w = 40 знаки перевернулись на плюс — проскочили, треба трохи назад. Так, крок за кроком звужуючи, доходимо до w = 37.5, де помилка нульова.
Оце й усе навчання. Три дії по колу: спрогнозувати для всіх прикладів, поміряти сумарну помилку, підправити ваги в бік її зменшення. Модель із двома вагами крутить два числа замість одного, модель із мільйоном ваг — мільйон, але цикл той самий.
Цикл підбору ваг
Ті самі чотири спроби з таблиці вище, розкладені по колу навчання.
Два наслідки з цього механізму варто помітити одразу, бо вони пояснять половину
дивних поведінок далі в курсі. Перший: модель мінімізує помилку на тих прикладах,
які їй дали — і більше нічого не оптимізує. Якщо приклади криві, вона старанно
відтворить кривизну. Другий: форму формули обираємо ми. Пряма
ціна = w × памʼять ніколи не вигнеться дугою, хоч скільки
крути w. Коли форма не підходить під дані, підбір ваг цього не виправить —
треба міняти модель.
МежаКоли ML доречний, а коли ні
Спокуса після такої демонстрації — вирішити, що моделлю треба розвʼязувати все. Це дорога помилка. Правила руками мають одну властивість, якої в моделі немає ніколи: вони передбачувані. Ти точно знаєш, що станеться на будь-якому вході, можеш пояснити рішення користувачеві й виправити помилку за хвилину.
Тому чесна межа виглядає так:
| ситуація | ознака | чим розвʼязувати |
|---|---|---|
| правил мало | їх можна перелічити на аркуші | звичайний код |
| правило записане | закон, договір, тариф | звичайний код |
| потрібна гарантія | помилка коштує надто дорого | звичайний код або людина |
| правил забагато | сотні винятків, що перетинаються | модель |
| правила плавають | шахраї щомісяця змінюють тактику | модель |
| правило не формулюється | «чи гарне фото» ніхто не опише умовами | модель |
| немає розмічених даних | ніхто не проставив відповіді | спершу дані, потім модель |
Розберімо два рядки, у яких найчастіше помиляються. «Правил забагато» — це не про складність окремого правила, а про їхню кількість і взаємодію. Одну умову «ціна нижча за 60 %» ти напишеш і супроводжуватимеш роками. Але коли до неї додаються двісті винятків на кшталт «крім телефонів старших за пʼять років у місті N у грудні», жодна людина вже не втримає систему в голові. Модель тримає таку кількість поєднань без зусиль — саме тому, що не тримає їх у голові, а просто рахує.
«Правила плавають» — про час. Фільтр із чотирьох умов зловить шахраїв цього місяця. Наступного вони поставлять ціну на рівні 90 % ринкової й почекають три тижні перед публікацією — і фільтр осліпне. Модель тут виграє не розумом, а швидкістю оновлення: щоб перевчити її на нових даних, потрібні години, а не нарада.
На дошці оголошень це виглядає як три шари, які працюють послідовно. Перший шар — жорсткі правила: оголошення без фото не публікуємо, ціну нижчу за 100 грн не приймаємо, продавця з відомого чорного списку блокуємо. Тут потрібна гарантія, а не ймовірність, тому моделі нема чого робити. Другий шар — модель: усе, що пройшло перший, вона впорядковує за підозрілістю — від найпідозрілішого до найспокійнішого. Третій шар — людина: модератор дивиться перші кількасот оголошень із цього списку, бо переглянути всі десять тисяч він фізично не встигне.
Зверни увагу, що модель тут не ухвалює рішень. Вона лише розставляє чергу, а рішення «блокувати чи ні» лишається за правилом або за людиною. Так побудована більшість реальних систем, і це знімає половину страхів про «модель помилилась і заблокувала чесного продавця»: у такій схемі вона нікого не блокує.
ТипиТри способи вчитися
Досі ми говорили про один сценарій: у даних уже є правильні відповіді. Але це не єдиний спосіб навчити модель. За тим, що саме є в даних, розрізняють три типи навчання — і всі три можна показати на нашій дошці оголошень, не міняючи датасету.
Три типи навчання на одній дошці оголошень
Різниця не в моделі й не в алгоритмі, а в тому, що саме лежить у даних.
Навчання з учителем (supervised learning) — той самий випадок, що й у попередньому розділі. У даних є пари «оголошення → правильна відповідь», і модель вчиться відтворювати цей звʼязок, щоб застосувати його до нових оголошень. «Учитель» тут — не людина поруч із компʼютером, а сама наявність відповідей у таблиці. Хтось їх колись проставив: модератор натиснув кнопку, продавець закрив угоду за конкретну суму.
Навчання без учителя (unsupervised learning) — коли відповідей немає й брати їх нема звідки. Модель отримує самі ознаки й шукає структуру: які оголошення схожі між собою, скільки типових груп узагалі є на дошці, які з них не схожі ні на що. Перевірити такий результат складніше — правильної відповіді, з якою можна звіритись, просто не існує.
Навчання з підкріпленням (reinforcement learning) — коли моделі ніхто не каже правильну відповідь, але за кожну дію вона отримує нагороду. Наш бот обирає, яке оголошення показати покупцеві першим. Правильної відповіді немає: ніхто не знає, що саме треба було показати. Але є сигнал — покупець написав продавцеві або пішов геть. Максимізуючи суму таких сигналів за багато показів, бот поступово вчиться вибирати краще. Про це є окрема тема наприкінці курсу.
Тип навчання тягне за собою тип задачі, а тип задачі — набір придатних моделей. Чотири назви, які тобі знадобляться вже за хвилину, і кожна означає рівно те, на що схожа відповідь:
- Регресія — відповідь є числом із широкого діапазону: ціна оголошення, скільки днів воно провисить. Значень нескінченно багато, тому модель не вибирає з готового списку, а обчислює;
- Класифікація — відповідь є однією міткою з короткого списку: «шахрайське / чесне» (це бінарна класифікація, два варіанти) або «новий / добрий / потертий» (багатокласова);
- Кластеризація — правильних відповідей немає взагалі, і модель сама розкладає оголошення на групи схожих. Скільки груп і що вони означають, вирішує вже людина;
- Пошук аномалій — теж без міток: модель шукає не групи, а окремі обʼєкти, що не вписуються в жодну з них.
Перші дві потребують готових відповідей у даних, тобто навчання з учителем; дві інші обходяться без них. Обери внизу, що саме ми хочемо передбачати на наших оголошеннях, і подивись, як від цього змінюється весь ланцюжок:
Карта типів задач
Датасет один і той самий — оголошення про телефони. Змінюється лише те, що вважати відповіддю.
ТерміниDS, ML, DL, AI: хто кого містить
Ці чотири скорочення новачок плутає постійно — і це не його провина. У літературі вони справді перекриваються: різні автори проводять межі по-різному, а вакансії з однаковою назвою описують різну роботу. Найкорисніше не шукати єдино правильне визначення, а запамʼятати робочу схему й знати, де вона умовна.
Вкладеність понять і типовий порядок роботи
Угорі — хто в кому міститься. Унизу — у якому порядку це роблять на практиці.
DS, наука про дані (data science) — найширше з чотирьох. Це весь комплекс роботи з даними: зібрати, почистити, подивитись, побудувати модель, зробити висновок, показати його людині, яка ухвалює рішення. Математика й статистика тут — інструмент, а не окремий вид спорту.
AI, штучний інтелект (artificial intelligence) — про системи, які розвʼязують задачі, що традиційно вважалися людськими: бачити, розуміти мову, планувати, грати. Історично сюди входять і підходи, які нічого не вчать на даних, — наприклад, шаховий перебір або система правил лікарської діагностики.
ML, машинне навчання (machine learning) — підмножина, у якій модель будується з даних, а не програмується вручну. Саме цим і займається весь наш курс. Той факт, що деякі автори вважають ML ширшим за AI, а не вужчим, — теж чесна частина картини: межа проходить не там, де хочеться, а по-різному в різних школах.
DL, глибоке навчання (deep learning) — частина ML, де моделлю є нейронна мережа з багатьма шарами. Це не окремий вид магії, а конкретне сімейство моделей, яке вчиться тим самим циклом, що й лінійна регресія. У курсі є окрема тема, і виявиться, що нового там менше, ніж здається.
МежіЧого модель не вміє
Це найважливіший розділ теми. Усе попереднє можна вивчити за годину; те, що нижче, відрізняє людину, яка навчила модель, від людини, якій можна довірити рішення.
Модель бачила лише те, що було в даних
Модель — це закономірність, знайдена в конкретному діапазоні прикладів. Поза цим діапазоном вона не мовчить і не каже «не знаю». Формула визначена скрізь, тож модель підставить будь-які числа й видасть результат — з тією самою впевненістю, що й завжди.
Нижче — крихітна модель ціни телефона, навчена на оголошеннях 2018–2023 років з памʼяттю 64, 128 і 256 ГБ. Виведи запит за межі цього діапазону й подивись, що вона відповідає — і що при цьому показує метрика її якості.
Межа моделі
Бірюзова смуга — діапазон, у якому модель бачила приклади. Пряма продовжується й за неї.
Звідси практичний висновок: перед тим як вірити прогнозу, перевір, чи схожий обʼєкт узагалі був у навчальних даних. Модель ніколи не зробить цього за тебе — у неї немає поняття «я такого не бачила».
Кореляція — не причина
Припустимо, модель виявила: оголошення з фото на білому тлі продаються дорожче. Спокуса — порадити всім продавцям знімати телефон на аркуші паперу. Але звʼязок, найімовірніше, зовсім інший: на білому тлі знімають магазини, а в магазинів і телефони новіші, і ціни вищі. Тло — не причина ціни, а ознака того, хто продає.
Тло, ціна і той, хто за ними обома стоїть
Дві стрілки, які модель бачить, і третя — якої вона не бачить.
Модель знаходить сумісну зустрічальність: що з чим траплялося поруч. Питання «що станеться, якщо втрутитись і змінити ознаку» — інше питання, і відповідає на нього експеримент, а не навчальна вибірка. Це не дрібниця: більшість дорогих провалів у прикладному ML — саме тут.
Упереджені дані дають упереджену модель
Уяви, що торік модератори з якихось причин ретельніше перевіряли оголошення з одного міста. Шахраїв там знайшли більше — не тому, що їх було більше, а тому, що більше шукали. Модель, навчена на цих мітках, чесно вивчить: «місто N — підозріло». Далі вона починає позначати звідти більше оголошень, модератори перевіряють їх ще ретельніше, знаходять ще більше — і наступна версія моделі впевнена вже сильніше.
Петля, яка сама себе годує
Чотири кроки по колу. Жоден із них окремо не є помилкою.
Ключове тут: модель не помилилась. Вона точно відтворила закономірність, яка справді була в даних. Помилка в тому, що ця закономірність описувала роботу модераторів, а не поведінку продавців. Дані ніколи не бувають нейтральним знімком світу — вони завжди знімок того, як їх збирали. Тема Справедливість моделей наприкінці курсу саме про це.
Немає закономірності — не буде моделі
І найпростіше обмеження, яке чомусь згадують останнім. Якщо звʼязку між ознаками й відповіддю не існує, жодна модель його не знайде. Спробуй передбачити, о котрій годині покупець напише продавцеві, маючи лише марку телефона й ціну, — отримаєш модель, чия якість на нових даних не відрізняється від випадкового вгадування.
Прикро тут те, що на навчальних даних така модель усе одно покаже якийсь результат: досить складна модель завжди знайде спосіб запамʼятати окремі рядки замість того, щоб знайти закономірність — а закономірності й немає. Це явище зветься перенавчанням (overfitting), і зустрічатиметься воно в курсі постійно. Саме тому якість вимірюють лише на прикладах, яких модель не бачила, — і цьому присвячена тема Train / Validation / Test.
fit, платять інженерові.ДаліЩо з цим робити
Підсумуймо коротко. Звичайна програма — це дані плюс правила на вході й відповіді на виході. Машинне навчання міняє місцями відповіді й правила: ми даємо приклади з готовими відповідями, а отримуємо правило. Правило це не розумне й нічого не розуміє — воно лише відтворює закономірність, яка була в прикладах, і рівно настільки добре, наскільки ці приклади описують реальність.
Далі курс іде по цьому ланцюжку. Наступна тема — «Дані: ознаки, таргет, типи задач» — розбирає найперший практичний крок: як з таблиці оголошень зробити те, що модель узагалі здатна прийняти. Що вважати ознакою, що таргетом, куди подіти текст і категорії, чому рік випуску й ціна в тисячах гривень погано живуть в одній формулі. Далі — як чесно міряти якість, перша модель для чисел і перша модель для міток.
Один наскрізний приклад — дошка оголошень про вживані телефони — пройде з тобою кілька перших тем. Це зроблено навмисно: коли датасет не змінюється, добре видно, що змінюється насправді.