Уяви майстерню, де на стіні висять сім інструментів: молоток, викрутка, ножівка, лещата, дриль, рубанок, шліфмашина. Питання «який із них найкращий» звучить безглуздо — і саме тому в майстерні його ніхто не ставить. Ставлять інше: що я збираюся зробити, з якого матеріалу, скільки в мене часу і чи доведеться потім комусь пояснювати, як воно тримається.
У блоці 5 ми зібрали останні три інструменти: дерево рішень, випадковий ліс і градієнтний бустинг. До них уже були лінійна регресія, логістична регресія, k найближчих сусідів і наївний Баєс. Сім штук. Кожну ми розібрали окремо — і жодного разу не поставили їх поруч.
Ця тема ставить. Наскрізний приклад лишається тим самим, що й весь курс: дошка оголошень про вживані телефони, дві задачі — передбачити ціну (регресія) і розпізнати шахрайське оголошення (класифікація). Усі числа нижче пораховані на одній і тій самій дошці: 1 200 оголошень, з них 200 шахрайських.
Чесна відповідьНайкращої моделі немає
Це не ухиляння й не педагогічна обережність. Це доведене твердження, і зветься воно теоремою про відсутність безкоштовних обідів (no free lunch). Її сенс такий: якщо усереднити якість алгоритму по всіх мислимих задачах, усі алгоритми покажуть однаковий результат. Будь-який метод, що виграє на одному класі задач, рівно стільки ж програє на іншому.
Звучить абстрактно, тому переведімо в практичне. Кожна модель — це припущення про те, як влаштований світ, записане у формі алгоритму:
- Лінійна й логістична регресія припускають, що вплив кожної ознаки сталий: додав гігабайт памʼяті — ціна підскочила на однакову суму незалежно від того, скільки її вже було.
- kNN припускає, що близькі за ознаками обʼєкти близькі й за відповіддю, а «близькі» вимірюються звичайною відстанню.
- Наївний Баєс припускає, що ознаки не повʼязані між собою всередині класу.
- Дерева та їхні ансамблі припускають, що відповідь можна отримати послідовністю порогових питань до окремих ознак.
Виграє та модель, чиї припущення ближчі до твоїх даних. Якщо ціна телефона справді падає рівномірно з роками — виграє пряма. Якщо шахрайство визначається комбінацією «ціна підозріло низька і акаунт свіжий» — виграють дерева, бо саме таку комбінацію вони і вміють записати. Тому єдиний спосіб дізнатися, хто виграє, — це поміряти. Решта теми про те, як міряти так, щоб результат щось означав.
КаркасВісім осей порівняння
Перше, що варто зламати в собі, — звичку порівнювати моделі одним числом. Точність важлива, але вона майже ніколи не єдина. Модель живе в системі: її треба навчити (це час), запустити (це знову час), пояснити комусь (це вже не час, а нерви), підтримувати роками. Ось осі, за якими моделі реально відрізняються.
Сім моделей курсу за вісьмома осями
Оцінки типові, не абсолютні: на конкретних даних будь-яка клітинка може зсунутись. Таблиця відповідає на питання «чого очікувати», а не «що вийде».
| модель | якість на таблицях | даних треба | масштаб ознак | категорії й пропуски | навчання | передбачення | зрозумілість | ручок |
|---|---|---|---|---|---|---|---|---|
| лінійна регресія | середня | десятки | важливий | кодувати вручну | миттєве | миттєве | висока | 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 грн і акаунт молодший за три місяці — це шахрайство». Ліс зі ста дерев уже не прочитаєш, хоча він і показує важливість ознак. Бустинг у цьому сенсі найтемніший: його дерева передбачають не відповідь, а залишок, у якого немає побутового сенсу.
ФормаОдна дошка, сім моделей
Таблиця показує, чим моделі відрізняються на словах. Тепер подивімось, чим вони відрізняються на вигляд. Візьмімо ту саму задачу про шахрайство, але лишімо дві ознаки, щоб усе вмістилося на площину: знижку від типової ціни (наскільки оголошення дешевше за середнє для такого телефона) і вік акаунта продавця в днях.
Шахрайство на цій дошці влаштоване так: підозріле або «дешево і продавець щойно зареєструвався», або «дешево настільки, що вже неважливо, хто продає». Разом ці два правила утворюють кутову область — фігуру, яку прямою лінією не обвести.
Межа рішення кожної моделі
300 оголошень для навчання, 2 000 нових для перевірки. Рожевим залито зону, яку модель вважає шахрайською. Точки — навчальні оголошення: кола чесні, хрестики шахрайські.
Зверни увагу на головне число: різниця між найгіршою й найкращою з семи моделей — близько чотирьох відсоткових пунктів, а різниця між найгіршою моделлю та базовою лінією «всі оголошення чесні» — понад одинадцять. Вибір моделі важить, але менше, ніж факт, що ти взагалі щось навчив.
ОбсягСкільки в тебе даних
Наступна вісь — та, яку новачки помічають останньою, хоча вона вирішує найчастіше. Складна модель має багато параметрів; щоб їх надійно оцінити, потрібні дані. Коли даних мало, складна модель вивчає не закономірність, а конкретні рядки — це перенавчання в чистому вигляді. І тоді проста модель із «поганими» припущеннями виграє в складної моделі з правильними: її припущення хоч і грубі, зате не потребують підтвердження даними.
Хто виграє на 20 оголошеннях, а хто на 800
Та сама дошка. Для кожного обсягу модель навчається шість разів на різних вибірках, точність усереднюється й міряється на 700 нових оголошеннях. Вертикальна риска — поточне положення повзунка.
Із цієї картинки випливає практичний висновок, який варто запамʼятати цілком: складність моделі має рости разом з обсягом даних. Двісті рядків — територія лінійних моделей і наївного Баєса. Тисячі — територія лісу. Десятки тисяч — територія бустингу, і саме там він відривається від усіх остаточно.
ДисциплінаЩо означає «порівняли»
Тепер найважливіша частина теми — і та, де помиляються найчастіше. Фраза «бустинг у нас показав 0.94, а kNN 0.59» не означає нічого, поки не сказано, як міряли. Чесне порівняння вимагає чотирьох однаковостей.
- Однакові дані. Ті самі рядки, ті самі ознаки, та сама передобробка. Якщо одній моделі ти прибрав викиди, а іншій ні — ти порівняв не моделі.
- Однаковий поділ. Ті самі фолди
крос-валідації з тим самим
random_state, а не «я перезапустив і взяв, що вийшло». - Однакова метрика. Одна, обрана заздалегідь. Не «ця модель краща за accuracy, а ця за recall — виберу ту, що мені симпатичніша».
- Однаковий бюджет на налаштування. Кожній моделі — стільки ж спроб підібрати гіперпараметри, скільки й решті.
Пункт другий здається дрібним, тому ось цифри. Ми поміряли F1 логістичної регресії й
дерева на нашій дошці пʼять разів, щоразу міняючи лише random_state поділу на
фолди. Дерево дало від 0.829 до 0.862, логістична — від 0.820 до 0.847. На кожному
окремому поділі дерево було попереду. Але якщо взяти дерево з невдалого поділу (0.829) і
логістичну з вдалого (0.847), вийде впевнена перемога логістичної — з різницею більшою,
ніж справжня перевага дерева. Розкид від поділу тут більший за різницю між
моделями. Саме тому поділ мусить бути спільним, а не «однаковим за методом».
А ще з цього випливає, що самих лише чотирьох однаковостей мало: навіть коли всі вони
дотримані, лишається питання, чи не є вціліла різниця просто везінням. Як його порахувати
— наступний розділ.
Пункт четвертий коштує ще дорожче. Ось наша дошка, 5-fold крос-валідація, ті самі фолди, метрика F1. Ліворуч — моделі зі значеннями за замовчуванням, праворуч — кожній дали рівно чотири спроби підібрати свій головний гіперпараметр (вкладеною крос-валідацією, як у темі 20):
| модель | F1 з коробки | F1 з бюджетом | зміна | місце було → стало |
|---|---|---|---|---|
| бустинг | 0.919 | 0.940 | +0.021 | 1 → 1 |
| ліс | 0.801 | 0.903 | +0.102 | 4 → 2 |
| дерево | 0.887 | 0.886 | −0.001 | 2 → 3 |
| логістична | 0.825 | 0.835 | +0.010 | 3 → 4 |
| kNN | 0.405 | 0.589 | +0.184 | 6 → 5 |
| наївний Баєс | 0.483 | 0.524 | +0.041 | 5 → 6 |
Чотири спроби на модель — мізерний бюджет, а рейтинг уже перетасувався. Ліс піднявся з четвертого місця на друге, kNN додав 0.184 і перестав бути посміховиськом, дерево з другого місця опустилось на третє, нічого не втративши. Тепер уяви типовий пост у мережі: «ми взяли бустинг, перебрали двісті конфігурацій, і він переграв kNN з коробки». Це правда — і це нічого не означає.
Той самий рейтинг, два режими вимірювання
Дошка з двома ознаками з інтерактиву 1: 300 оголошень для навчання, 2 000 для перевірки. «Як є» — значення за замовчуванням, ознаки не масштабовані. «Рівний бюджет» — кожній моделі шість кандидатів, найкращий обрано трифолдовою крос-валідацією, ознаки масштабовані.
ПохибкаРізниця, менша за розкид, — не різниця
Попередній розділ дав лише половину відповіді. Ми побачили, що зміна поділу гойдає F1 приблизно на 0.03 і що з різних поділів можна «довести» майже будь-що. Ми навіть помітили головне: на кожному окремому поділі дерево було попереду логістичної. Але зі спостереження «на кожному» ми так і не зробили числа. Без нього розділ 05 лишається закликом бути обережним, а питання висить: як відрізнити справжню перевагу від везіння? Відповідь арифметична й поміщається в чотири дії. Нової бібліотеки для них не треба — усі числа вже пораховані крос-валідацією, ми просто перестаємо їх викидати.
Дія 1. Не викидай окремі фолди
Крос-валідація ділить дані на k рівних частин — фолдів — і повертає не одне число, а k чисел: по одному з кожного фолда. Далі їх майже завжди усереднюють, а решту викидають. Дарма. Середнє каже, наскільки гарна модель; розкид навколо середнього каже, наскільки цьому середньому можна вірити. Друга половина не менш важлива за першу, і коштує вона нуль: числа вже є.
Дія 2. Порівнюй парно, а не в середньому
Спокуса — відняти середнє однієї моделі від середнього другої. Так теж можна, але це слабший спосіб. Сильніший — рахувати різницю на кожному фолді окремо:
Тут i — номер фолда, від 1 до k; тобто різниць виходить рівно
стільки, скільки фолдів. Виграш ось у чому: обидві моделі на фолді i
перевіряються на тих самих рядках. Якщо фолд трапився легкий, він піднімає обидві
моделі — і при відніманні ця спільна удача зникає. Лишається саме те, чим моделі
відрізняються, без шуму, який їх обох однаково стосується. Це зветься парним
порівнянням, і воно ж пояснює, чому пункт «однаковий поділ» із попереднього
розділу такий принциповий: без спільних фолдів парну різницю просто нема з чого скласти.
Дія 3. Порахуй розкид цих різниць
s. Читається буквально:
«числа гуляють приблизно на s у той чи інший бік від свого середнього».Дія 4. Порівняй середню різницю із запасом
Тепер у тебе два числа: Δ — середня з усіх різниць d, і
s — їхній розкид. Питання «чи справжня перевага» перетворюється на
питання «чи Δ помітно більша за нуль на тлі власного розкиду». Порогом слугує
запас на випадковість:
Що тут кожен символ:
- s — стандартне відхилення тих самих
kрізниць, із дії 3; - k — скільки фолдів ти взяв: 5, 10 — скільки завгодно;
- √k — квадратний корінь із
k: число, яке при множенні саме на себе даєk. √4 = 2, √9 = 3, √5 ≈ 2.24; - t — множник, що залежить лише від кількості фолдів. При 5 фолдах t = 2.8, при 10 — 2.3, при 20 — 2.1. Він приходить із таблиці розподілу Стьюдента, але запамʼятовувати звідки не обовʼязково: для нас це просто число, яке робить висновок обережнішим, коли вимірювань мало.
Чому ділимо на √k. Тому що середнє з k чисел коливається
менше, ніж кожне з них окремо, — і рівно у √k разів. Побутова версія: кинь монету один раз
— випаде або нуль, або одиниця, розкид максимальний; усередни сто кидків — вийде щось біля
0.5, і від разу до разу це «біля» майже не гуляє. Що більше фолдів, то надійніше середнє й
то менший запас потрібен.
Правило читання виходить коротке:
- |Δ| більша за запас — перевагу можна називати перевагою й писати в звіт;
- |Δ| не більша за запас — різницю не доведено. Зверни увагу на формулювання: це не «моделі однакові», а «наявних вимірювань не вистачає, щоб їх розрізнити». По суті ти щойно побудував довірчий інтервал навколо різниці й побачив, що нуль у нього потрапляє.
Порахуймо руками
Візьмімо пару «дерево проти логістичної регресії» з фігури нижче: та сама дошка з двома ознаками, 2 000 оголошень, 5 фолдів по 400. Різниці F1 по фолдах, у відсоткових пунктах:
- Середнє: (5.2 + 6.7 + 5.0 + 5.0 + 4.4) ÷ 5 = 26.3 ÷ 5 = Δ = 5.3.
- Відхилення кожного числа від середнього: −0.1, +1.4, −0.3, −0.3, −0.9.
- Квадрати відхилень: 0.01, 1.96, 0.09, 0.09, 0.81. Їхня сума — 2.96.
- Ділимо на
k− 1 = 4: виходить 0.74. Корінь: s = 0.9.
Чому на 4, а не на 5: середнє ми порахували з цих самих пʼятьох чисел, тож одне з них уже «витрачене» на нього — вільних лишилось чотири. Це технічна поправка; на висновок вона не впливає. - Запас: 2.8 × 0.9 ÷ √5 = 2.52 ÷ 2.24 = 1.1.
Δ = 5.3 проти запасу 1.1 — майже впʼятеро більше. Перевага дерева справжня, і це видно навіть без арифметики: різниця має один знак на всіх пʼятьох фолдах. А тепер перемкни фігуру на пару «логістична проти наївного Баєса» — там Δ = 1.6 при запасі 2.0, хоча півтора пункти на око виглядають цілком солідною перемогою.
Різниця по фолдах проти запасу на випадковість
Дошка з двома ознаками, 2 000 оголошень, 5 фолдів по 400, метрика F1. Угорі — результат кожної моделі на кожному фолді; лінія зʼєднує пару, поміряну на однакових рядках. Унизу — ті самі пʼять різниць, їхнє середнє Δ і смуга запасу навколо нуля.
s виходить меншим за
справжній, а запас — оптимістичнішим. Ліки дешеві: повтори крос-валідацію кілька
разів із різними поділами (5 фолдів × 5 повторів = 25 різниць) і читай межу як світлофор.
«Набагато більше за запас» — перевага. «Приблизно як запас» — переміряй, а не публікуй.І окремо про те, що робити, коли різницю не доведено. Не кидати монетку. Коли два числа нерозрізнимі за якістю, вибір просто переїжджає на решту осей із розділу 02: бери ту модель, що швидша, дешевша в підтримці й зрозуміліша людині. Нічия за метрикою — це не глухий кут, а дозвіл вибирати за іншою ознакою.
ПасткаПрокляття переможця
Припустімо, запас ти порахував, різниця його перекрила, переможець визначився. Лишилось одне питання, і воно найнеприємніше: чи можна вірити самому числу переможця? Виявляється, ні — і не тому, що ти щось зробив не так.
Кожна виміряна оцінка складається з двох частин: справжньої якості моделі й випадкового шуму того замірювання. Шум може бути в плюс, може в мінус — у середньому нуль. Але ти не береш середню модель. Ти береш найкращу. А найкращою з багатьох частіше за інших виявляється та, якій шум додав, а не відняв. Тому оцінка переможця систематично завищена — просто тому, що ти брав максимум. Це зветься прокляттям переможця (winner's curse), і тема 20 вже показала його на підборі числа сусідів для kNN. Тут те саме явище піднімається на поверх вище — з окремих гіперпараметрів на цілі моделі.
Найкоротший спосіб це відчути — пʼять чисел. Уяви пʼять моделей, справжня якість яких однакова, скажімо 90 %, а вимірювання гуляє на пару пунктів. Ти поміряв і побачив:
Середнє цих пʼятьох — 90.2, тобто майже точно справжня якість: шум усереднився. А максимум — 91.8. Ти оголосиш переможцем ту модель, що дала 91.8, і саме це число запишеш у звіт, — хоча її справжня якість ті самі 90. Максимум завжди більший за середнє, і саме ця різниця й є завищенням. Причому воно росте разом із кількістю кандидатів: що більше чисел, то більший максимум, навіть якщо всі моделі однакові.
Скільки коштує право вибирати
Двадцять чотири однаково гарні кандидати (дерева, навчені на різних підвибірках). Переможця обирають за точністю на вибірці вибору, а потім міряють його ж на нових оголошеннях, яких вибір не бачив. Обидві криві усереднено по 24 повторах, щоб не дивитись на один випадковий розклад.
Тепер видно, чому попередній розділ вимагав однакового бюджету. Механізм один і той самий, але поверхів два. Усередині однієї моделі ти перебираєш гіперпараметри й береш найкращий — це переможець серед конфігурацій. Зверху ти перебираєш моделі й береш найкращу — переможець серед моделей. Обидва рази максимум завищений, і обидва завищення складаються. Саме тому «наш бустинг після двохсот конфігурацій дав 0.94» — число з подвійною надбавкою, і порівнювати його з чиїмось kNN «з коробки» не можна навіть після вирівнювання бюджету: у того, хто перебирав більше, і завищення більше.
Звідси єдиний надійний засіб, і він не в тому, щоб менше перебирати:
Той самий засіб у вигляді, придатному для крос-валідації, зветься вкладеною крос-валідацією і влаштований так: зовнішня петля ділить дані на фолди й відповідає лише за вимірювання; усередині кожного зовнішнього фолда працює своя, внутрішня крос-валідація, і вона відповідає лише за вибір — моделі, гіперпараметрів, порога. Зовнішній фолд ніколи не бере участі у виборі, який на ньому міряють. Дорожче в стільки разів, скільки внутрішніх фолдів, — і це чесна ціна за число, якому можна вірити.
ДноБазова лінія
Перш ніж радіти будь-якому числу, треба знати, з чим його порівнювати. Базова лінія (baseline) — це навмисно дурна модель, яка не дивиться на ознаки взагалі:
- для регресії — «завжди відповідай середню ціну по навчальній
вибірці» (
DummyRegressor); - для класифікації — «завжди відповідай найчастіший клас»
(
DummyClassifier).
На нашій дошці шахрайських оголошень 200 із 1 200. Модель «усі оголошення чесні» має точність 83.3 % і не знаходить жодного шахрая. Тепер уяви звіт: «наша модель має точність 87 %». Звучить пристойно, поки не згадаєш, що дурна константа дає 83.3 %, а справжня цінність вимірюється тим, скількох шахраїв модель упіймала. Ось чому accuracy бреше на нерівних класах, і чому базову лінію рахують першою, а не останньою.
Тепер зменшімо дошку вдесятеро — до 120 оголошень — і поміряймо ще раз:
| модель | точність на 1 200 | точність на 120 | F1 на 1 200 | F1 на 120 |
|---|---|---|---|---|
| базова лінія | 0.833 | 0.820 | 0.000 | 0.000 |
| логістична | 0.948 | 0.898 | 0.825 | 0.558 |
| kNN | 0.873 | 0.823 | 0.405 | 0.165 |
| наївний Баєс | 0.848 | 0.813 | 0.483 | 0.380 |
| дерево | 0.963 | 0.865 | 0.887 | 0.584 |
| ліс | 0.942 | 0.888 | 0.801 | 0.567 |
| бустинг | 0.975 | 0.890 | 0.919 | 0.606 |
Читаємо. На 120 оголошеннях наївний Баєс має точність 0.813 проти 0.820 у базової лінії — тобто програє константі, яка нічого не вміє. kNN тримається врівень із нею: 0.823 проти 0.820, різниця в межах шуму. Помітно відриваються від дна лише логістична (0.898), ліс (0.888) і бустинг (0.890), дерево тримається посередині (0.865) — і навіть у цих чотирьох F1 упав приблизно вдвічі. Це не аргумент проти цих моделей — це аргумент за те, що на 120 рядках жодна модель не врятує, і зусилля треба вкладати не у вибір алгоритму, а в збір даних.
РецептПорядок дій на новій задачі
Тепер зберімо все у послідовність кроків. Порядок не випадковий: кожен наступний крок дорожчий за попередній, і кожен має сенс лише тоді, коли попередній уже дав число, з яким можна порівнювати.
Пʼять кроків, і коли зупинятись раніше
Над кожним кроком — його ціна. Унизу — чотири умови, за яких далі йти вже не треба. Крок 4 умови зупинки не має: його роблять завжди й рівно один раз, коли всі попередні вже позаду.
Другий бік цього рецепта — вміння одразу відкинути те, що на цій задачі не працює. Ознаки самої задачі часто вказують на модель раніше, ніж перше вимірювання.
Симптом задачі → з чого починати
Не правила, а перші здогади. Кожну ще треба перевірити вимірюванням — але починати з правильного місця дешевше.
| що бачиш у задачі | з чого починати | чому |
|---|---|---|
| Рядків менше за 200 | логістична або наївний Баєс | мало вільних величин — мало даних треба |
| Ознак більше, ніж рядків | лінійна модель із регуляризацією | решта моделей просто запамʼятає вибірку |
| Треба пояснити кожне рішення | одне дерево або лінійна модель | лише їх можна прочитати вголос |
| Багато категорій і пропусків | дерева, ліс, бустинг | працюють із ними без кодування |
| Відповідь потрібна за мілісекунди | лінійна модель або дерево | kNN і ліс платять на кожному запиті |
| Класи дуже нерівні | спершу метрику, потім модель | інакше переможе базова лінія |
| Треба максимум, і є година | бустинг із ранньою зупинкою | найсильніший на таблицях, але потребує ручок |
| Дані — не таблиця: текст, звук, фото | нейронні мережі | табличні моделі не бачать структури сигналу |
| Не знаю, з чого почати | базова лінія, потім ліс | два числа за пʼять хвилин — уже орієнтир |
Ціна складностіКоли простіша модель краща
Припустімо, бустинг таки переміг: 0.940 проти 0.835 у логістичної. Здається, вибір зроблено. Але «точніша» і «та, що поїде в продакшн» — не синоніми, і причин щонайменше чотири.
Пояснюваність. Банк відмовляє в кредиті — і за законом мусить назвати причину. Страхова піднімає тариф — клієнт має право спитати чому. «Так вирішив ансамбль із трьохсот дерев» — не відповідь. Логістична регресія відповідає одразу: кожен коефіцієнт — це відношення шансів, і його можна проговорити словами.
Регуляторні вимоги. У медицині, кредитуванні й наймі діють правила, що прямо обмежують складність моделі або вимагають її аудиту. Модель, яку неможливо перевірити, часто просто заборонена — і питання її точності навіть не постає.
Ціна помилки. Якщо помилка коштує дорого і рідкісна, різниця в кілька відсоткових пунктів може бути менш важливою за передбачуваність поведінки. Лінійна модель на нових, незвичних даних помиляється плавно: вона продовжує пряму. Дерево на тих самих даних поверне значення найближчого листка, яким би недоречним воно не було. Знати, як модель поводиться поза межами навчальних даних, іноді цінніше за десяту частку метрики.
Вартість підтримки. Бустинг треба переучувати, стежити за кількістю дерев, зберігати модель на сотні мегабайтів, підтримувати бібліотеку й версії. Логістична регресія — це десяток чисел у текстовому файлі. Через рік, коли автор моделі змінить роботу, різниця стане відчутною.
МежіЧого вибір моделі не вирішує
І чесне завершення блоку. Є три речі, проти яких безсилі всі сім моделей разом, і жодне налаштування нічого не змінить.
Погані ознаки. Модель бачить рівно те, що ти їй дав. На нашій дошці
шахрайство означає «ціна підозріло низька для такого телефона» — але серед ознак
є лише ціна окремо, рік окремо й памʼять окремо. Дерева здатні зібрати таке відношення
самотужки, послідовністю розрізів, лінійні моделі — ні. Додаймо одну ознаку:
ціна ÷ медіанна ціна такого бренду й року. Ось що стає з тими самими
моделями:
| модель | F1 на 7 ознаках | F1 з новою ознакою |
|---|---|---|
| логістична | 0.825 | 0.985 |
| дерево | 0.887 | 0.970 |
| бустинг | 0.919 | 0.964 |
Одна ознака, порахована трьома рядками коду, підняла логістичну регресію з третього місця на перше й лишила позаду налаштований бустинг. Це загальне правило, а не випадковість нашої дошки: робота з ознаками майже завжди дає більший приріст, ніж заміна моделі. Що таке ознака й звідки вона береться — тема про дані, ознаки й таргет.
Витік даних. Якщо в ознаки випадково потрапила інформація з майбутнього або сама відповідь у замаскованому вигляді, метрика злетить до 0.99 у будь-якої моделі — і розсиплеться в продакшні. Найкращий бустинг на витеклих даних гірший за найгіршу логістичну регресію на чесних. Ознаки витоку й способи його ловити — у темі про розбиття даних.
Зміщена вибірка. Якщо навчальні оголошення зібрані лише за один місяць або лише в одному місті, модель вивчить закономірності цього зрізу. Жоден алгоритм не здогадається про те, чого в даних не було. Це не проблема моделі — це проблема того, як дані потрапили в таблицю.
Спільне в усіх трьох: їх не видно з боку метрики. Крос-валідація покаже чудове число, модель переможе всіх конкурентів у чесному порівнянні — і зламається в перший день роботи. Тому питання «яку модель узяти» ніколи не буває першим. Першим завжди буде «чи справді ці дані відповідають на моє питання».
МапаЩо вже вміємо
Двадцять вісім тем позаду, і вони складаються в замкнену картину. Варто побачити її цілком, перш ніж рухатись далі.
- Блок 1 — фундамент. Що таке навчання з учителя, звідки беруться ознаки й таргет, навіщо розбивати дані на три частини й чим міряти якість: MAE, RMSE і R² для регресії, precision, recall, F1 і ROC-AUC для класифікації.
- Блок 2 — дані на практиці. NumPy, розвідувальний аналіз даних, передобробка, інженерія ознак і PCA — саме те, що, як ми щойно побачили, дає більший приріст, ніж заміна алгоритму.
- Блок 3 — перші моделі. Пряма, сигмоїда, сусіди й теорема Баєса. Разом із градієнтним спуском — механізмом, яким навчається половина всього, що є в машинному навчанні.
- Блок 4 — якість моделі. Перенавчання й недонавчання, розклад помилки на зміщення й дисперсію, крос-валідація, регуляризація, підбір гіперпараметрів, калібрування й діагностика. Це не моделі, а дисципліна, без якої моделі не мають ціни.
- Блок 5 — дерева й ансамблі. Дерево, ліс, бустинг.
- Блок 6 — навчання без учителя. Задачі, у яких правильної відповіді немає взагалі: кластеризація k-means, ієрархічна кластеризація й DBSCAN, пошук аномалій.
- Блок 7 — підсумок. Сьогоднішнє вміння поставити всі ці моделі поруч і чесно порівняти.
Що лишилось попереду. Спершу дві теми цього ж блоку: наскрізний проєкт — той самий порядок дій зі схеми 1, пройдений від сирої таблиці до одного числа, — і модель у продакшені, де зʼясується, що навчена модель це ще не робоча система. Далі нейронні мережі: сімейство моделей, яке починається там, де табличні методи закінчуються — на тексті, зображеннях і звуку. І наостанок сучасні теми — справедливість моделей, навчання з підкріпленням та інтерпретованість.
Але головне, що варто винести з цієї теми, від жодного з наступних блоків не залежить. Питання «яка модель найкраща» не має відповіді. Питання «яка модель краща на цих даних, за цією метрикою, при однаковому бюджеті» відповідь має — і ти тепер умієш її отримати так, щоб їй можна було вірити.