Ти натиснув «навчити», дочекався, поки пробіжить прогрес-бар, і отримав число. Одне. Наприклад, F1 дорівнює 0.427. Далі екран перестає підказувати, і настає момент, який у курсах зазвичай проскакують за один абзац: що робити з цим числом. Складнішу модель? Докупити даних? Крутити гіперпараметри? Три відповіді звучать однаково розумно, коштують однаково дорого — і в кожній конкретній задачі щонайбільше одна з них правильна.
Ця тема — про те, як обрати правильну, не витрачаючи тиждень на кожну. У темі про перенавчання й недонавчання ми навчились ставити діагноз за двома числами. Тепер призначимо лікування й вибудуємо процес, у якому кожен наступний крок обирається з даних, а не з настрою.
ПостановкаЧисло є. І що?
Наша дошка оголошень про вживані телефони мусить сама відсіювати шахрайські оголошення — ті, де телефона не існує, а є лише приманка з передоплатою. У базі 6 000 оголошень із відомою відповіддю: 2 024 з них виявились шахрайськими, це 33.7 %. Оголошення описують пʼять чисел: ціна в гривнях, ціна відносно медіанної ціни по всій дошці, вік акаунта продавця в днях, кількість фото й довжина опису. Дошку ділимо на 3 900 навчальних і 2 100 перевірочних оголошень, як заведено ще з теми Train / Validation / Test.
Навчаємо логістичну регресію й міряємо F1 на перевірочних оголошеннях. Виходить 0.427. Модель ловить 33.9 % шахраїв, і в 57.7 % випадків, коли вона кричить «шахрай», вона права.
Тепер уяви, що це твій перший робочий день. Ти дивишся на 0.427 і не знаєш нічого: ні чи це багато, ні чи це мало, ні куди рухатись. І це не через брак досвіду — цього числа фізично недостатньо, щоб ухвалити рішення. Одне число ніколи не каже, що робити далі. Далі — три кроки, які перетворюють його на рішення: знайти дно, знайти стелю й поставити діагноз.
ДноСпершу дно
Число без базової лінії не означає рівно нічого. Базова лінія — це навмисно тупе рішення, з яким ти порівнюєш своє. Корисно мати три різні, бо вони відповідають на три різні питання.
- Дурна модель — константа, яка не дивиться на ознаки взагалі. «Усі оголошення чесні» дає точність 66.3 % і F1 = 0.000: жодного спійманого шахрая. Це відповідь на питання «чи модель узагалі щось вивчила».
- Проста модель — одне правило, написане руками за півгодини. «Підозріле, якщо ціна нижча за 90 % медіани дошки й акаунту менше 60 днів» дає F1 = 0.210. Це відповідь на питання «чи варто було вчити модель, чи вистачило б умови if».
- Людина — модератор, який дивиться на оголошення очима. На тих самих 2 100 оголошеннях він дає F1 = 0.566. Це відповідь на питання «чи можна вже когось замінити».
Тепер 0.427 читається. Модель удвічі краща за правило — отже, навчання не було марним. І помітно гірша за людину — отже, у продакшен її пускати рано. Одразу видно й наступний крок: не «взяти нейромережу», а закрити розрив із модератором.
Лінійка задачі: дно, ми, стеля
Одна вісь F1 і все, що на ній варто позначити перед тим, як щось покращувати.
Базові лінії — це не формальність і не звіт для начальства. Це шкала, без якої «0.427» — просто набір символів. Детальніше про те, як обирати базову лінію під різні задачі й чим порівняння моделей відрізняється від порівняння чисел, — у темі Порівняння моделей; тут вона потрібна нам як нижня риска на шкалі.
СтеляТепер стеля
Дно каже, чи є сенс у роботі. Стеля каже, коли її припинити. Це найдорожче знання в темі, і його майже ніколи не здобувають — тому регулярно трапляються команди, які пів року тиснуть модель, що вже стоїть упритул до межі задачі.
Стеля — це найкраща якість, яку в принципі можна отримати з цих даних. Вона існує тому, що в даних є незвідний шум: два оголошення можуть виглядати однаково за всіма пʼятьма ознаками, а виявитись різними — одне шахрайське, друге ні. Жодна модель не розрізнить те, що не розрізняється в даних.
Виміряти стелю точно неможливо, але оцінити — можна, і є два практичні способи.
Спосіб перший: узгодженість людей. Дай ту саму сотню оголошень двом модераторам незалежно й подивись, як часто їхні вироки збігаються. У нас це 85.2 %. Якщо двоє досвідчених людей розходяться в кожному сьомому випадку, чекати від моделі 95 % — самообман: у самій задачі стільки визначеності немає. Застереження важливе: узгодженість дає лише орієнтир, і зазвичай орієнтир завищений — люди можуть однаково помилятись і однаково не бачити те, чого в даних немає.
Спосіб другий: оцінка шуму. Знайди в даних групи однакових обʼєктів із різними відповідями й порахуй, яку частку вони становлять. Це прямий вимір того, скільки помилок закладено в самій задачі. У нашому навчальному прикладі дані згенеровані, тому ми маємо розкіш, якої в житті немає: знаємо справжню ймовірність шахрайства для кожного оголошення. Ідеальний віщун, який бачить цю ймовірність, дає F1 = 0.645. Це і є стеля.
Тут варто спинитись, бо число дивує: віщун бачить справжню ймовірність кожного оголошення — і все одно помиляється в третині випадків. Як так?
Тому що знати ймовірність і знати відповідь — різні речі. Візьми сотню оголошень, у яких справжня ймовірність шахрайства дорівнює 0.30. Віщун бачить це «0.30» точно, до останнього знака. Але тридцять із цієї сотні справді виявляться приманками, а сімдесят — ні, і яка саме тридцятка, не написано ніде: у даних цієї інформації немає. Що б віщун із сотнею не зробив, частина рішень буде хибною. Заблокує всіх — сімдесят хибних тривог. Пропустить усіх — тридцять пропусків.
Порахуймо руками на десяти оголошеннях, щоб побачити це в числах. Хай у чотирьох оголошень справжня ймовірність шахрайства 0.9, а в шести — 0.2. Скільки шахрайських насправді? У першій четвірці в середньому 4 × 0.9 = 3.6, у шістці 6 × 0.2 = 1.2, разом 4.8. Віщун блокує ту четвірку, де ймовірність висока — це найкраще, що з такими числами взагалі можна зробити. Тоді:
- спіймано (TP) = 3.6 із чотирьох заблокованих;
- хибних тривог (FP) = 4 − 3.6 = 0.4;
- пропущено (FN) = 4.8 − 3.6 = 1.2.
Звідси precision = 3.6 / 4 = 0.900, recall = 3.6 / 4.8 = 0.750, а F1 = 2 × 0.900 × 0.750 / (0.900 + 0.750) = 0.818. Не одиниця — при тому, що помилок «через незнання» тут немає взагалі. Віщун програв не розуму, а випадковості, зашитій у самі дані.
На нашій дошці ймовірності розподілені гірше, ніж у цьому прикладі: багато оголошень сидить у сірій зоні біля 0.3–0.5, де ставити можна на будь-що. Тому й стеля виходить не 0.818, а 0.645.
ДіагностикаДерево рішень діагноста
Дно й стеля відомі. Тепер сам діагноз. Він будується з двох чисел, які ти вже вмієш рахувати: помилка на навчальних даних і помилка на валідаційних. Важливо, що дивитись на них треба не абстрактно, а відносно стелі — «висока помилка» означає «далеко від стелі», а не «більша за нуль».
Дерево рішень діагноста
Три числа на вході — одна гілка на виході. Кожна гілка закінчується діями, а не порадою «подумайте ще».
Пройдемо гілки словами.
Гілка А: висока помилка вже на навчанні. Модель не впоралась із даними, які бачила. Це недонавчання: їй бракує або гнучкості, або інформації. Дії: складніша модель, кращі ознаки, довше навчання, слабший штраф. Дані тут не допоможуть узагалі — пряма, навчена на мільйоні прикладів, лишається прямою.
Гілка Б: на навчанні добре, на валідації погано. Модель запамʼятала конкретні приклади замість правила. Це перенавчання. Дії: більше даних, регуляризація, простіша модель, рання зупинка. Це єдина з трьох гілок, де замовляти розмітку має сенс.
Гілка В: обидві помилки малі, а в бою погано. Модель добре працює на твоїх даних і погано на живому потоці. Це вже не про складність — це або дрейф даних (оголошення в бою не такі, як у вибірці: інші категорії товарів, інша пора року, інші шахраї), або витік даних (у навчання просочилась ознака, якої в момент прогнозу не існує — наприклад, позначка модератора, поставлена вже після блокування). Дії: звірити розподіли ознак у вибірці й у потоці, перевірити кожну ознаку питанням «чи вона доступна в момент прогнозу», перерозділити дані за часом.
Наш випадок: на навчанні F1 = 0.451, на валідації 0.427, стеля 0.645. Розриву майже немає — 0.024, — зате до стелі цілих 0.218. Це гілка А, недонавчання, і жодних сумнівів тут немає. Отже, докупляти дані марно; треба або гнучкіша модель, або краща інформація на вході.
ДовідкаСимптом — причина — дія
Те саме у вигляді, зручному для роботи: побачив ліворуч — зроби праворуч.
| симптом | ймовірна причина | перша дія |
|---|---|---|
| обидві помилки високі | недонавчання | додати ознак, узяти гнучкішу модель, навчати довше |
| навчальна мала, валідаційна велика | перенавчання | додати даних, увімкнути регуляризацію, спростити модель |
| обидві малі, у бою погано | дрейф даних | звірити розподіли ознак, перенавчити на свіжих даних |
| метрика підозріло висока | витік даних | перевірити кожну ознаку на доступність у момент прогнозу |
| валідаційна нижча за навчальну | вибірки різні | перевірити поділ і стратифікацію |
| метрика скаче від запуску до запуску | замала вибірка або велика дисперсія | крос-валідація, усереднення, більший тест |
| усі помилки в одній групі обʼєктів | бракує ознаки саме про цю групу | аналіз помилок, потім нова ознака |
| модель гірша за просте правило | помилка в конвеєрі | перевірити масштабування, пропуски, порядок стовпців |
Останній рядок трапляється частіше, ніж хочеться визнавати. Якщо навчена модель
програє пʼятирядковому if, найімовірніша причина не в алгоритмі, а в тому,
що на вхід їй приїхало не те, що ти думаєш.
ПриладКриві навчання як прилад
Криву навчання ти вже бачив у темі про перенавчання — там вона була явищем: помилка залежить від обсягу вибірки. Тепер вона стане приладом. Ти будуєш дві криві, дивишся на їхню форму й отримуєш відповідь на конкретне питання, яке коштує грошей: чи допоможуть додаткові дані.
Будується так: береш підвибірки зростаючого розміру, на кожній навчаєш модель і міряєш
якість двічі — на самій підвибірці й на відкладеній частині. У scikit-learn
це один виклик learning_curve. Читається за трьома ознаками: розрив між
кривими, нахил валідаційної кривої в кінці й відстань до стелі.
Три криві навчання, три різні вироки
Перемикай сценарій. Дані справжні: усі три криві поміряні на нашій дошці, змінюється лише модель і набір ознак.
Три форми — три різні дії, і в цьому вся цінність приладу.
Криві злиплись низько. Розрив −0.006, приріст за останнє подвоєння вибірки +0.002, до стелі 0.221. Модель однаково безпорадна і на знайомих, і на нових оголошеннях. Даних у неї вже вдосталь — бракує не прикладів, а інформації в кожному прикладі. Замовляти розмітку тут означає купити те, що вже є.
Розрив величезний і не закривається. На навчанні дерево дає рівно 1.000 — воно запамʼятало кожне оголошення, — а на валідації 0.541. Але подивись на праву частину: валідаційна крива ще росте, за останнє подвоєння вибірки вона додала 0.027. Ось тут дані працюють, і працюють найдешевшим способом із можливих.
Криві зійшлись високо. Розрив −0.003, приріст за останнє подвоєння −0.004, до стелі 0.025. Це не поразка, а фініш: модель узяла від даних майже все, що в них є. Дані не допоможуть — але з протилежної причини, ніж у першому випадку.
ПомилкиСто помилок очима
Тепер метод, який дає найбільший приріст на одиницю зусиль — і який майже ніхто не робить, бо він виглядає надто просто, щоб бути технікою. Він робиться руками й займає годину.
- Візьми сто оголошень, на яких модель помилилась. Не всі 644 — рівно сто, випадкових. Більше не дасть нової інформації, менше дасть шум.
- Подивись на кожне очима й запиши, чому, на твою думку, модель помилилась. Не метрику, не важливість ознак — саме рядок даних.
- Згрупуй записане за причиною.
- Порахуй, скільки коштує кожна група в гривнях.
Четвертий крок — той, який відрізняє аналіз помилок від розглядання помилок. Групи різні не тільки за розміром: пропустити шахрая коштує 1 800 грн, а хибно заблокувати чесного — 200 грн. Група з двадцяти пропусків дорожча за групу з тридцяти хибних тривог.
Сто помилок, згрупованих за причиною
Довжина стовпчика — ціна групи в гривнях, а не кількість помилок. Обери групу — побачиш реальні оголошення з неї.
Читаємо результат. Найдорожча група — 48 помилок із 100, і вона коштує 72 000 грн зі 136 800, тобто 52.6 % усіх втрат. Усі 48 — не телефони: ноутбуки й аксесуари. Причина видно з першого ж рядка таблиці: ноутбук за 30 523 грн має відношення до медіани дошки 3.65 — «утричі дорожчий за типове оголошення», а всередині своєї категорії він коштує рівно стільки, скільки має, 0.99. Модель порівнювала ціну ноутбука з медіаною по всій дошці, де більшість — телефони, і робила з цього висновок «дуже дорого, отже точно не приманка». Тридцять девʼять шахрайських ноутбуків і аксесуарів пройшли повз.
Ось чому аналіз помилок такий ефективний. Ні метрика, ні важливість ознак цього не показали б: з погляду метрики модель просто «трохи слабка». Дефект видно тільки тоді, коли дивишся на самі рядки — і виявляється, що 38 % дошки обробляються за неправильною шкалою.
ВиправленняЩо дала знахідка
Лікування випливає з діагнозу дослівно: додати ознаку «ціна відносно медіани своєї категорії». Один стовпчик, порахований із даних, які вже є. Жодних нових оголошень, жодної складнішої моделі, та сама логістична регресія.
| модель | F1 на тесті | хибних тривог | пропусків | збиток |
|---|---|---|---|---|
| дурна константа | 0.000 | 0 | 708 | 1 274 400 грн |
| правило | 0.210 | 26 | 622 | 1 124 800 грн |
| модель v1 | 0.427 | 176 | 468 | 877 600 грн |
| модель v2, + одна ознака | 0.594 | 201 | 324 | 623 400 грн |
| модератор-людина | 0.566 | 240 | 334 | 649 200 грн |
| стеля задачі | 0.645 | — | — | — |
F1 виріс із 0.427 до 0.594, збиток упав на 254 200 грн на кожних 2 100 оголошеннях. Модель уперше обійшла живого модератора. І все це — один стовпчик, знайдений за годину розглядання ста рядків.
А тепер чесна половина історії. Окрилені успіхом, ми додали ще три похідні ознаки — квадрат відносної ціни, логарифм віку акаунта й добуток кількості фото на відносну ціну. Звучало розумно. На крос-валідації результат змінився з 0.620 на 0.620 — насправді на −0.0004, тоді як сама похибка вимірювання тут ±0.010. На тесті — 0.594 проти 0.594. Три ознаки, пів дня роботи, нуль ефекту, і правильне рішення — викинути їх, а не залишити «про всяк випадок».
ДаніСкільки дасть більше даних
«Треба більше даних» — найчастіша відповідь на будь-яку проблему в машинному навчанні й найдорожча в перевірці. Розмітити ще десять тисяч оголошень — це місяці роботи людей. Перед тим, як це замовляти, приріст можна оцінити наперед.
Спосіб такий. Будуємо криву «розмір вибірки → якість» на тому, що вже є, і продовжуємо її вперед. Продовжувати навмання не можна — потрібна форма кривої. Емпірично якість росте за степеневим законом: із кожним подвоєнням вибірки залишок до межі скорочується в однакову кількість разів. Формулою:
Тут n — кількість навчальних оголошень; A — межа, до якої
крива прямує, коли даних стає нескінченно багато; B і α
(грецька «альфа») — два числа, що описують, наскільки швидко крива до цієї межі
підбирається. Читається все разом так: чим більше даних, тим менший залишок
до межі, і зменшується він тим повільніше, чим ти ближче. Три числа
A, B і α підбираються так, щоб крива якнайкраще
лягла на вже поміряні точки. Значок n−α читається
«одиниця, поділена на n у степені α»: що більше n, то менше це
число, і то менше залишається відняти від межі.
Порахуймо на числах, бо інакше формула лишиться значками. Підгонка по всіх наших
десяти точках дає A = 0.661, B = 0.469, α = 0.33.
У нас 3 120 навчальних оголошень. Спершу 3 120 у степені 0.33 — це 14.2, отже
3120−0.33 дорівнює 1 / 14.2 = 0.0703.
Множимо на B: 0.469 × 0.0703 = 0.033. Це і є залишок до межі.
Тоді F1 = 0.661 − 0.033 = 0.628. Поміряли ми 0.620 — крива проходить
поруч, але не крізь останню точку, і це нормально: підгонка шукає компроміс
по всіх десяти, а не збіг з однією.
Потрібний залишок: 0.661 − 0.640 = 0.021. Тобто теперішній залишок 0.033 має скоротитись у 0.033 / 0.021 = 1.57 раза.
Залишок падає як n−0.33, тож щоб він
зменшився в 1.57 раза, обсяг має вирости в 1.57 у степені 1 / 0.33, тобто в
1.573.03 ≈ 3.9 раза: з 3 120 приблизно до
12 200 оголошень.
Інтерактив нижче на тій самій вимозі показує 12 743 — трохи більше, бо цілиться він не в кругле 0.640, а в 0.620 + 0.02 = 0.6401, і рахує без наших округлень по дорозі. Різниця в чотири відсотки тут нічого не міняє: обидва числа кажуть те саме — «учетверо більше даних».
І головне, що видно з арифметики кроку 3: показник α стоїть у
знаменнику. Що він менший, то дорожче обходиться кожна наступна сота F1. При
α = 0.33 скорочення залишку вдвічі коштує вісім разів більше даних; при α = 0.20 — уже
тридцять два рази. Ось звідки береться відчуття, що «модель перестала вчитись»: вона не
перестала, просто ціна кроку росте швидше, ніж бюджет.
Скільки оголошень треба для потрібного приросту
Лівий повзунок — скільки навчальних оголошень у тебе вже є. Правий — на скільки треба підняти F1. Підгонка будується тільки по точках ліворуч від твоєї позначки, як було б у житті.
Прожени лівий повзунок від краю до краю з приростом +0.02. Коли даних 260, відповідь оптимістична: треба 738 оголошень, менш ніж утричі більше — тиждень збору. Коли даних уже 1 100, треба 2 517, теж по силі. А на повній вибірці з 3 120 та сама вимога коштує 12 743 оголошення, у 4.1 раза більше, ніж є. Приріст +0.03 із цієї точки вимагає вже 93 822 навчальних оголошення, +0.04 — понад 330 мільйонів, а +0.05 не досягається взагалі: підгонка каже, що межа цієї моделі на цих ознаках — 0.661, і скільки даних не давай, вище не буде.
ПроцесОдна зміна за раз
Усе попереднє дає напрямок. Тепер про те, як рухатись, щоб не загубитись — бо загубитись тут напрочуд легко.
Уяви типовий вечір: ти додав ознаку, замінив логістичну регресію на градієнтний бустинг і заодно підкрутив поріг. Метрика зросла з 0.43 до 0.61. Питання: що спрацювало? Відповіді немає. Можливо, ознака дала +0.17, а бустинг забрав 0.02. Можливо, навпаки. Ти не знаєш, який із трьох кроків залишити, який відкотити й що робити наступного разу. Три зміни дали одне число, а одне число несе рівно один біт інформації — «стало краще» або «стало гірше».
Тому правило нудне й нерушиме: одна зміна — один замір — один рядок у журналі. Журнал — це буквально таблиця; ось наш, справжній:
| крок | що змінили | F1 на крос-валідації | зміна | вирок |
|---|---|---|---|---|
| 0 | базова лінія: одне правило | 0.210 (на тесті) | — | дно шкали |
| 1 | логістична регресія, 5 ознак | 0.453 ± 0.023 | — | старт |
| 2 | дерево без обмеження глибини | 0.541 ± 0.031 | +0.088 | на навчанні 1.000 — перенавчання |
| 3 | назад логістична, + ціна до медіани категорії | 0.620 ± 0.033 | +0.167 | прийнято |
| 4 | ще три похідні ознаки | 0.620 ± 0.023 | 0.000 | відхилено |
| 5 | class_weight="balanced" | 0.657 ± 0.020 | +0.037 | це зсув порога, не нове знання |
| — | фінальний замір кроку 3 на тесті | 0.594 | — | чесне число |
Журнал відповідає на питання, які без нього губляться. Крок 2 виглядав вдалим: дерево підняло F1 на 0.088. Але поруч записано, що на навчанні воно дало 1.000, — і це підказало, що виграш тут випадковий, а справжня причина слабкості деінде. Дерево вміє різати ціну різними порогами в різних гілках, тому частково обійшло нашу зламану ознаку грубою силою; ознака з кроку 3 вирішила ту саму проблему чесно й дала вдвічі більше.
Той самий журнал, але з вусиками
Пʼять рядків журналу на одній осі F1. Крапка — заміряне число, поперечка — плюс-мінус похибка з тієї самої колонки журналу.
Цикл розробки моделі
Один оберт — одна зміна. Виходів із циклу три, і всі три законні.
СтопКоли зупинитись
Останнє питання теми — і найнеприємніше, бо зупинятись ніхто не любить. Є три чесні критерії, і достатньо одного.
Приріст менший за похибку вимірювання. Наше F1 = 0.594 поміряне на 2 100 оголошеннях. Якби вибірка була інша, число вийшло б інше; розкид цієї величини — приблизно ±0.016 (його можна оцінити бутстрепом або крос-валідацією). Отже, покращення на 0.01 ти просто не побачиш: воно потоне в шумі вимірювання. А з інтерактиву 3 видно, що +0.01 із нашої точки коштує ще 744 оголошення — тобто ми пропонуємо витратити гроші на різницю, яку не зможемо підтвердити.
Наступний крок дорожчий за виграш. Порахуй у гривнях. Наш стрибок із 0.427 на 0.594 — це +0.167 за F1 і 254 200 грн економії, тобто приблизно 15 000 грн на кожну соту F1. Отже, приріст +0.02 вартий десь 30 000 грн за цикл. А коштує він, за тим самим інтерактивом, 12 743 навчальних оголошення всього — тобто 9 623 нових поверх наших 3 120. Якщо розмітка одного коштує хоча б 5 грн, це 48 000 грн витрат проти 30 000 грн виграшу. Арифметика закриває питання без жодних дискусій про машинне навчання.
Задача розвʼязана достатньо. Це не про метрику, а про продукт. Модель обійшла живого модератора (0.594 проти 0.566) і зняла 254 200 грн збитку з кожних 2 100 оголошень. Далі до стелі лишилось 0.051 — і, як показала екстраполяція, даними цей залишок не купується. Купити його можна тільки новою інформацією: історією скарг на продавця, номером телефона з чорного списку, схожістю фото на вже відомі приманки. Це вже не задача моделювання, а задача продукту.
ПідсумокЩо варто винести
Ми пройшли шлях від «0.427, і що?» до «0.594, і зупиняємось» — жодного разу не змінивши алгоритм. Ось порядок, який варто виконувати механічно на кожній новій задачі.
| крок | що робиш | що дізнаєшся |
|---|---|---|
| 1 | три базові лінії | чи має твоє число сенс узагалі |
| 2 | оцінка стелі | скільки ще можна виграти |
| 3 | дві помилки поруч | діагноз і гілка дерева |
| 4 | крива навчання | чи допоможуть додаткові дані |
| 5 | сто помилок очима | де саме модель ламається |
| 6 | ціна кожної групи помилок | що чинити першим |
| 7 | одна зміна, один замір, один рядок | що саме спрацювало |
| 8 | порівняння приросту з похибкою | коли зупинитись |
Головна думка теми в одному реченні: наступний крок не вибирають — його виводять із вимірів. Дві помилки поруч кажуть, куди рухатись; крива навчання каже, чи варто платити за дані; сто рядків, розглянутих очима, кажуть, яку саме ознаку шукати; ціна групи в гривнях каже, з чого почати. Усе це коштує кілька годин і майже завжди дає більше, ніж тиждень підбору гіперпараметрів.
На цьому блок про якість моделі закінчено. Ми вміємо чесно міряти (крос-валідація), стримувати (регуляризація), налаштовувати (гіперпараметри), читати ймовірності (калібрування й поріг) і тепер — вирішувати, що робити далі. Одну гілку діагнозу ми лишили без інструмента: гілка А казала «потрібна гнучкіша модель», а всі наші моделі досі проводили пряму або рахували відстані. У наступному блоці зʼявиться сімейство, яке вміє вигинатись як завгодно і ставити різні пороги в різних частинах даних, — саме те, чого нам бракувало на ноутбуках. Починається воно з дерев рішень.