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

Як обрати модель

Сім алгоритмів позаду. Питання «який із них найкращий» відповіді не має — але питання «який із них узяти тут» відповідь має, і вона рахується.

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

У блоці 4 ми зібрали останні три інструменти: дерево рішень, випадковий ліс і градієнтний бустинг. До них уже були лінійна регресія, логістична регресія, k найближчих сусідів і наївний Баєс. Сім штук. Кожну ми розібрали окремо — і жодного разу не поставили їх поруч.

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

01 / Чесна відповідьНайкращої моделі немає

Це не ухиляння й не педагогічна обережність. Це доведене твердження, і зветься воно теоремою про відсутність безкоштовних обідів (no free lunch). Її сенс такий: якщо усереднити якість алгоритму по всіх мислимих задачах, усі алгоритми покажуть однаковий результат. Будь-який метод, що виграє на одному класі задач, рівно стільки ж програє на іншому.

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

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

02 / КаркасСім осей порівняння

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

Таблиця 1 · Сім моделей курсу за сімома осями

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

модельякість на таблицяхданих требамасштаб ознак категорії й пропускинавчанняпередбачення зрозумілістьручок
лінійна регресіясереднядесяткиважливийкодувати вручнумиттєвемиттєвевисока1
логістичнасереднядесяткиважливийкодувати вручнудуже швидкемиттєвевисока1–2
kNNсереднятисячікритичнийпоганонемаєповільнесередня1–2
наївний Баєснижче середньоїсотнібайдужийприродномиттєвешвидкесередня0–1
дерево рішеньдобрасотнібайдужийприродношвидкемиттєвенайвища2–3
випадковий лісвисокасотнібайдужийприродноповільнепомірненизька1–2
бустингнайвищатисячібайдужийприродноповільнешвидкенизька4–6
Як читати. «Ручок» — скільки гіперпараметрів доводиться підбирати, щоб модель показала свій максимум; у лісі одна (max_features), у бустингу щонайменше пара «крок і кількість дерев» плюс глибина. «Масштаб ознак» — чи зіпсується модель, якщо одна ознака в гривнях, а інша у відсотках: для kNN це питання життя, для дерева — ні, бо порогові питання не змінюються від множення ознаки на сто. «Зрозумілість» — чи можна показати людині, чому вийшла саме така відповідь.

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

«Навчання: немає» у kNN. Метод нічого не обчислює наперед — він просто запамʼятовує навчальну вибірку. Уся робота переїжджає на момент передбачення, коли треба знайти найближчих сусідів серед усіх збережених оголошень. Тому в таблиці навчання безкоштовне, а передбачення найдорожче з усіх семи. Виміряймо це на нашій дошці: навчання на 960 оголошеннях і передбачення для 24 000 нових.

модельнавчання, мспередбачення 24 000, мс
логістична≈ 60≈ 5
наївний Баєс≈ 1≈ 4
дерево≈ 3≈ 2
kNN≈ 8≈ 280
випадковий ліс≈ 200≈ 90
бустинг≈ 310≈ 30

Числа тут із одного прогону на звичайному ноутбуці — на іншій машині вони будуть інші. Важливі не вони, а співвідношення, і воно стійке: kNN передбачає приблизно в сотню разів повільніше за дерево, а ліс — єдиний, хто повільний з обох боків, бо на кожне передбачення треба обійти сто дерев.

Помнож це на навантаження. Мільйон передбачень пачкою логістична зробить приблизно за чверть секунди, а kNN — секунд за дванадцять. І це ще оптимістична оцінка: тут усі 24 000 рядків пораховані одним викликом, а в живому сервісі запити приходять по одному, і власні накладні витрати kNN платяться на кожному окремо.

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

03 / ФормаОдна дошка, сім моделей

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

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

Інтерактив 1 · Межа рішення кожної моделі

300 оголошень для навчання, 2 000 нових для перевірки. Рожевим залито зону, яку модель вважає шахрайською. Точки — навчальні оголошення: кола чесні, хрестики шахрайські.

точність, %
F1
краще бази, п.п.
до стелі, п.п.
Перемкни всі вісім кнопок підряд — форма межі і є відповідь. Лінійна й логістична малюють пряму й обидві застрягають біля 90 %: пряма мусить або пропустити куток, або залізти в чесну зону. kNN дає рвану межу, яка облягає точки. Дерево — сходинки зі строго вертикальних і горизонтальних відрізків, бо кожне питання стосується однієї ознаки. Ліс і бустинг — ті самі сходинки, але згладжені усередненням десятків дерев. Стеля цієї задачі — 94.8 %: вище не забереться жодна модель, бо частина оголошень випадкова за побудовою.

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

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

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

Інтерактив 2 · Хто виграє на 20 оголошеннях, а хто на 800

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

переможець
його точність
відрив, п.п.
останній
Прожени повзунок від краю до краю — рейтинг перевертається. На 20 оголошеннях логістична регресія попереду з 87.0 %, а дерево останнє з 80.1 %: ділити площину сходинками нема на чому, кожен листок отримує по дві точки. На 800 оголошеннях логістична вже остання з 91.4 %, а kNN, дерево, ліс і бустинг стоять у діапазоні 94.5–94.7 %. Пряма не стала гіршою — вона просто перестала покращуватись, бо вперлася у власне припущення. Решта продовжила вчитись.

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

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

05 / ДисциплінаЩо означає «порівняли»

Тепер найважливіша частина теми — і та, де помиляються найчастіше. Фраза «бустинг у нас показав 0.94, а kNN 0.59» не означає нічого, поки не сказано, як міряли. Чесне порівняння вимагає чотирьох однаковостей.

  1. Однакові дані. Ті самі рядки, ті самі ознаки, та сама передобробка. Якщо одній моделі ти прибрав викиди, а іншій ні — ти порівняв не моделі.
  2. Однаковий поділ. Ті самі фолди крос-валідації з тим самим random_state, а не «я перезапустив і взяв, що вийшло».
  3. Однакова метрика. Одна, обрана заздалегідь. Не «ця модель краща за accuracy, а ця за recall — виберу ту, що мені симпатичніша».
  4. Однаковий бюджет на налаштування. Кожній моделі — стільки ж спроб підібрати гіперпараметри, скільки й решті.

Пункт другий здається дрібним, тому ось цифри. Ми поміряли F1 логістичної регресії й дерева на нашій дошці пʼять разів, щоразу міняючи лише random_state поділу на фолди. Дерево дало від 0.829 до 0.862, логістична — від 0.820 до 0.847. На кожному окремому поділі дерево було попереду. Але якщо взяти дерево з невдалого поділу (0.829) і логістичну з вдалого (0.847), вийде впевнена перемога логістичної — з різницею більшою, ніж справжня перевага дерева. Розкид від поділу тут більший за різницю між моделями. Саме тому поділ мусить бути спільним, а не «однаковим за методом».

Пункт четвертий коштує ще дорожче. Ось наша дошка, 5-fold крос-валідація, ті самі фолди, метрика F1. Ліворуч — моделі зі значеннями за замовчуванням, праворуч — кожній дали рівно чотири спроби підібрати свій головний гіперпараметр (вкладеною крос-валідацією, як у темі 24):

модельF1 з коробкиF1 з бюджетомзмінамісце було → стало
бустинг0.9190.940+0.0211 → 1
ліс0.8010.903+0.1024 → 2
дерево0.8870.886−0.0012 → 3
логістична0.8250.835+0.0103 → 4
kNN0.4050.589+0.1846 → 5
наївний Баєс0.4830.524+0.0415 → 6

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

Інтерактив 3 · Той самий рейтинг, два режими вимірювання

Дошка з двома ознаками з інтерактиву 1: 300 оголошень для навчання, 2 000 для перевірки. «Як є» — значення за замовчуванням, ознаки не масштабовані. «Рівний бюджет» — кожній моделі шість кандидатів, найкращий обрано трифолдовою крос-валідацією, ознаки масштабовані.

перше місце
його точність
останнє місце
розрив, п.п.
Найповчальніший рядок — наївний Баєс. Його число не змінюється взагалі: 91.6 % в обох режимах, бо масштаб ознак йому байдужий, а підбирати в нього майже нема чого. Але місце змінюється з другого на пʼяте — просто тому, що сусіди нарешті отримали свій шанс. Друга історія — логістична регресія: на немасштабованих ознаках вона дає 79.4 %, тобто стоїть на базовій лінії (78.6 %); після масштабування й підбору штрафу — 90.2 %, тобто +10.8 п.п. А місце при цьому не змінилось — сьоме з семи: на цій дошці пряма межа просто не та форма, і жоден бюджет цього не виправить.

06 / ДноБазова лінія

Перш ніж радіти будь-якому числу, треба знати, з чим його порівнювати. Базова лінія (baseline) — це навмисно дурна модель, яка не дивиться на ознаки взагалі:

На нашій дошці шахрайських оголошень 200 із 1 200. Модель «усі оголошення чесні» має точність 83.3 % і не знаходить жодного шахрая. Тепер уяви звіт: «наша модель має точність 87 %». Звучить пристойно, поки не згадаєш, що дурна константа дає 83.3 %, а справжня цінність вимірюється тим, скількох шахраїв модель упіймала. Ось чому accuracy бреше на нерівних класах, і чому базову лінію рахують першою, а не останньою.

Тепер зменшімо дошку вдесятеро — до 120 оголошень — і поміряймо ще раз:

модельточність на 1 200точність на 120F1 на 1 200F1 на 120
базова лінія0.8330.8200.0000.000
логістична0.9480.8980.8250.558
kNN0.8730.8230.4050.165
наївний Баєс0.8480.8130.4830.380
дерево0.9630.8650.8870.584
ліс0.9420.8880.8010.567
бустинг0.9750.8900.9190.606

Читаємо. На 120 оголошеннях наївний Баєс має точність 0.813 проти 0.820 у базової лінії — тобто програє константі, яка нічого не вміє. kNN тримається врівень із нею: 0.823 проти 0.820, різниця в межах шуму. Помітно відриваються від дна лише логістична (0.898), ліс (0.888) і бустинг (0.890), дерево тримається посередині (0.865) — і навіть у цих чотирьох F1 упав приблизно вдвічі. Це не аргумент проти цих моделей — це аргумент за те, що на 120 рядках жодна модель не врятує, і зусилля треба вкладати не у вибір алгоритму, а в збір даних.

Пастка «95 % — це багато». Число саме по собі не означає нічого. Якщо в задачі 95 % відповідей одного класу, то 95 % точності — це рівно нуль корисної роботи. Правильна форма звіту завжди подвійна: стільки-то в моделі проти стільки-то в базової лінії. Без другої половини перша не читається.

07 / РецептПорядок дій на новій задачі

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

Схема 1 · Чотири кроки, і коли зупинятись

Над кожним кроком — його ціна в часі. Унизу — чотири умови, за яких далі йти вже не треба.

Чому саме такий порядок. Базова лінія коштує секунду й задає нуль відліку. Проста модель коштує хвилину й показує, чи є в ознаках хоч якийсь сигнал: якщо логістична регресія не відірвалась від базової лінії, справа майже напевно в даних, а не в алгоритмі. Ліс — надійна опора: працює зі значеннями за замовчуванням, не боїться масштабу й дає OOB-оцінку задарма. Бустинг ставлять останнім, бо він єдиний вимагає справжнього налаштування — і його перевага над лісом на нашій дошці склала 0.037 за F1 після того, як обидва отримали однаковий бюджет.

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

Таблиця 2 · Симптом задачі → з чого починати

Не правила, а перші здогади. Кожну ще треба перевірити вимірюванням — але починати з правильного місця дешевше.

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

08 / Ціна складностіКоли простіша модель краща

Припустімо, бустинг таки переміг: 0.940 проти 0.835 у логістичної. Здається, вибір зроблено. Але «точніша» і «та, що поїде в продакшн» — не синоніми, і причин щонайменше чотири.

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

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

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

Вартість підтримки. Бустинг треба переучувати, стежити за кількістю дерев, зберігати модель на сотні мегабайтів, підтримувати бібліотеку й версії. Логістична регресія — це десяток чисел у текстовому файлі. Через рік, коли автор моделі змінить роботу, різниця стане відчутною.

Робоче правило. Бери найпростішу модель, що дає прийнятну якість, а не найточнішу з можливих. «Прийнятну» визначає задача, а не змагання: якщо втрати від шахрайства падають на 80 % однаково при F1 = 0.84 і F1 = 0.94, різниці немає, а різниця в підтримці є.

09 / МежіЧого вибір моделі не вирішує

І чесне завершення блоку. Є три речі, проти яких безсилі всі сім моделей разом, і жодне налаштування нічого не змінить.

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

модельF1 на 7 ознакахF1 з новою ознакою
логістична0.8250.985
дерево0.8870.970
бустинг0.9190.964

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

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

Зміщена вибірка. Якщо навчальні оголошення зібрані лише за один місяць або лише в одному місті, модель вивчить закономірності цього зрізу. Жоден алгоритм не здогадається про те, чого в даних не було. Це не проблема моделі — це проблема того, як дані потрапили в таблицю.

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

10 / МапаЩо вже вміємо

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

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

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

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

Далі в темі

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