Наприкінці 1906 року статистик Френсіс Гальтон опинився на сільському ярмарку, де відвідувачі за монету вгадували вагу бика. Гальтон зібрав 787 записок і, готуючись посміятися з натовпу, порахував медіану здогадок. Вона відрізнялась від справжньої ваги менш ніж на один відсоток — точніше за будь-якого окремого фермера й точніше за експертів.
Чому так виходить? Кожен окремий учасник помиляється, але помиляється по-своєму: хтось завищує, хтось занижує. При усередненні індивідуальні відхилення гасять одне одного, а спільна для всіх крихта знання лишається. У машинному навчанні ця сама ідея називається ансамблем, а найпопулярніший ансамбль з дерев рішень — випадковим лісом.
Ми продовжимо працювати з даними попередньої лекції: 200 клієнтів банку, дві ознаки — стаж обслуговування в місяцях і середні місячні витрати, — і питання, чи залишиться клієнт на наступний рік. Там ми зупинились на неприємному висновку: одне дерево гуляє від підвибірки до підвибірки й ніколи не знає, чи можна йому вірити. Тепер полагодимо саме це.
01 / ІдеяМудрість натовпу
Ансамбль — це набір моделей, чиї прогнози обʼєднують в один. Для класифікації обʼєднання зазвичай означає голосування більшістю: скільки моделей сказали «лишиться», скільки «піде», перемагає більший табір. Для регресії беруть середнє.
Щоб ансамбль виграв у окремої моделі, потрібні дві умови, і обидві однаково важливі:
- Кожна модель має бути кращою за випадкове вгадування. Ансамбль із моделей, гірших за монетку, буде ще гіршим — він упевнено помилятиметься.
- Моделі мають помилятися в різних місцях. Сто однакових копій одного дерева дадуть рівно те, що дає одне дерево: усі проголосують однаково, і жодна помилка не буде виправлена.
Перша умова для дерев виконується легко. Друга — головна інженерна задача всієї теми, і половина цієї лекції присвячена тому, як штучно зробити дерева різними.
02 / ТеоріяТеорема Кондорсе
Що дає голосування більшістю, порахували ще 1785 року. Маркіз де Кондорсе розглядав
присяжних: нехай кожен із M присяжних незалежно ухвалює правильне рішення з
ймовірністю p, а вердикт визначає більшість. Ймовірність правильного вердикту
— це ймовірність, що правильно проголосувала більш ніж половина:
Це звичайний хвіст біноміального розподілу. Висновок із формули відомий як теорема присяжних, і в ній три випадки, які треба знати напамʼять:
- Якщо
p > 0.5, то P зростає з M і прямує до одиниці. Достатньо взяти більше голосів — і колективна помилка стане як завгодно малою. - Якщо
p = 0.5, то P дорівнює 0.5 за будь-якого M. Натовп монеток — це монетка. - Якщо
p < 0.5, ефект обертається: P спадає з M і прямує до нуля. Натовп поганих моделей упевнено помиляється — і що більший натовп, то впевненіше.
Інтерактив 1 · Крива Кондорсе
Скільки моделей потрібно, щоб більшість була права. Сірі криві — орієнтири для p = 0.4, 0.5, 0.6, 0.7.
03 / Дрібний шрифтЗастереження про незалежність
У формулі Кондорсе захована умова, без якої вона не працює: голоси мають бути незалежними. Саме тому там стоїть біноміальний коефіцієнт — він рахує кількість способів отримати k правильних голосів із M, припускаючи, що кожен голос кидається окремо.
У житті присяжні перемовляються, а моделі вчаться на одних і тих самих даних. Якщо всі дерева побудовані на однаковій вибірці однаковим детермінованим алгоритмом, вони будуть ідентичними. Ефективна кількість голосів у такому ансамблі дорівнює одиниці, скільки б дерев ми не додали.
04 / Трюк першийБегінг і бутстреп
Ідеально було б навчити кожне дерево на власній свіжій вибірці з реального світу. Але вибірка в нас одна. Лео Брейман 1996 року запропонував підробку, яка виявилась напрочуд робочою: бутстреп — витягування n обʼєктів із наявних n з поверненням.
Витягнули клієнта — записали й повернули назад у мішок. Тому один і той самий клієнт може потрапити у вибірку двічі й тричі, а хтось інший не потрапити взагалі. Розмір вибірки лишається тим самим, але склад щоразу інший. Метод «навчи модель на кожній бутстреп-вибірці й усередни прогнози» називається беггінгом (bagging — bootstrap aggregating).
05 / АрифметикаЗвідки береться 63%
Скільки різних обʼєктів потрапляє в одну бутстреп-вибірку? Порахуймо це до кінця — виведення коротке й дуже показове.
Візьмімо конкретного клієнта. За одне витягування ймовірність, що дістали саме його, дорівнює 1/n. Отже, ймовірність, що дістали не його:
Витягування незалежні, тому ймовірність, що його не взяли жодного разу за n спроб, — це добуток n однакових множників:
Це класична границя з математичного аналізу:
Причому збіжність швидка: вже при n = 20 значення дорівнює 0.358, при n = 100 — 0.366.
Отже, приблизно 36.8% обʼєктів у кожну конкретну вибірку не потрапляють, а 63.2% потрапляють хоча б раз:
Два наслідки. Перший: кожне дерево бачить приблизно дві третини даних, тобто вчиться на трохи іншій задачі — саме те, що нам потрібно для різноманітності. Другий, і він виявиться подарунком: третина даних для кожного дерева лишається невикористаною. На них це дерево можна чесно перевірити, нічого не відкладаючи заздалегідь.
Інтерактив 2 · Що відбувається при бутстрепі
Кожна клітинка — один обʼєкт вибірки. Колір показує, скільки разів його витягнули.
06 / Трюк другийВипадкові ознаки й декореляція
Самого беггінгу мало. Якщо в даних є одна дуже сильна ознака, то майже кожна бутстреп-вибірка обере її для кореня — і дерева знову вийдуть схожими, просто з трохи різними порогами. Кореляція між ними лишиться високою, а ансамбль виграє менше, ніж міг би.
Друга ідея Бреймана усуває саме це: у кожному вузлі розріз шукається не серед
усіх ознак, а серед випадкової підмножини розміру mtry. Не один раз на
дерево — а заново в кожному вузлі. Якщо сильна ознака цього разу не потрапила у вибір, дерево
змушене будувати розріз на чомусь іншому й знаходить структуру, яку інакше б проґавило.
Стандартні рекомендації такі:
| задача | mtry за замовчуванням | міркування |
|---|---|---|
| класифікація | √p | сильна декореляція, дерева слабші, але різні |
| регресія | p/3 | у регресії дерева чутливіші, потрібно більше ознак |
| mtry = p | це вже просто беггінг | дерева найсильніші, але найсхожіші |
Тут працює компроміс сили й кореляції, який Брейман сформулював прямо: якість лісу зростає, коли окремі дерева сильніші, і коли вони менш корельовані. Але ці дві вимоги тягнуть у різні боки. Малий mtry робить дерева різними — і водночас слабшими, бо найкорисніша ознака часто буває недоступною. Великий mtry робить кожне дерево сильним — і всі їх схожими. Оптимум зазвичай десь посередині, і √p — непогане перше наближення.
Щоб побачити компроміс на числах, потрібно більше ознак, ніж дві. Для наступного інтерактиву в датасет додано ще чотири колонки: кількість транзакцій (майже дублює витрати), вік акаунта в застосунку (майже дублює стаж), ідентифікатор сесії (чистий шум) і канал звернення (теж шум, але лише двох значень).
Інтерактив 3 · Скільки ознак дозволити вузлу
Шість ознак, ліс із 24 дерев. Три криві: сила окремого дерева, схожість дерев і точність ансамблю.
07 / ЗбіркаАлгоритм цілком
Тепер можна записати весь випадковий ліс у пʼять рядків. Нехай задано кількість дерев
T, розмір підмножини ознак mtry й обмеження на дерево:
- Для кожного дерева
t = 1…Tвитягни бутстреп-вибірку розміру n з поверненням. - Вирости на ній дерево звичайним жадібним алгоритмом, але в кожному вузлі перебирай
лише
mtryвипадково обраних ознак. - Дерево не обрізай. Так, у попередній лекції ми казали, що глибокі дерева перенавчаються — тут це навмисне.
- Для прогнозу пропусти обʼєкт крізь усі T дерев і візьми більшість голосів (або середнє від часток класу, якщо потрібні ймовірності).
- Обʼєкти, що не потрапили в бутстреп конкретного дерева, використай для OOB-оцінки.
Пункт 3 бентежить найбільше, тому розберімо його окремо. Глибоке дерево має мале зміщення й велику дисперсію. Усереднення багатьох моделей зменшує дисперсію, але не змінює зміщення. Отже, вигідно брати в ансамбль моделі саме з малим зміщенням — а з дисперсією розбереться усереднення. Обрізане дерево мало б і зміщення, і від нього ансамбль уже не врятує.
Інтерактив 4 · Скільки дерев треба
Повертаємось до двох ознак. Насиченість кольору — наскільки одностайно голосує ліс у цій точці.
n_estimators обирають не якістю, а бюджетом часу: 100–500 у
типовій задачі, більше — коли потрібні стабільні оцінки ймовірностей.08 / ПеревіркаДерево проти лісу
Найпереконливіший доказ — прямий експеримент. Візьмімо ту саму процедуру, що в кінці попередньої лекції: витягуємо нову підвибірку клієнтів і вчимося з нуля. Тільки тепер паралельно навчаються двоє: одне дерево і ліс із 25 дерев.
Натисни кнопку кілька разів і дивись на числа праворуч. Нас цікавить не так точність, як стабільність: наскільки сильно змінюється відповідь моделі, коли дані змінились ледь-ледь.
Інтерактив 5 · Наскільки ліс стабільніший
Ліворуч — одне дерево, праворуч — ліс із 25 дерев. Обидва вчаться на одній і тій самій новій підвибірці.
09 / БонусOOB — безкоштовна валідація
Повернімось до тих 36.8%, що лишились поза кожною бутстреп-вибіркою. Для конкретного клієнта приблизно третина дерев його не бачила під час навчання. Зберімо голоси тільки цих дерев — вийде чесний прогноз для клієнта, зроблений моделлю, яка з ним не знайома.
Повторивши це для всіх n клієнтів, отримаємо out-of-bag оцінку якості:
Це майже те саме, що крос-валідація, тільки безкоштовно: ніякого повторного навчання,
ніякої відкладеної вибірки. У scikit-learn вона вмикається одним аргументом
oob_score=True, і результат читається з rf.oob_score_.
Інтерактив 6 · OOB проти тестової вибірки
Рожева крива рахується всередині навчальних даних, бірюзова — на 1200 клієнтах, яких модель не бачила.
10 / ІнтерпретаціяВажливість ознак і її пастки
Ліс втратив головну перевагу дерева: сто дерев не намалюєш і вголос не прочитаєш. Натомість він пропонує зведену характеристику — важливість ознак. Способів порахувати її два, і вони міряють різні речі.
MDI — середнє зменшення забрудненості
Це те, що sklearn віддає у feature_importances_. Для кожного
вузла беруть приріст чистоти від його розрізу, множать на частку обʼєктів у вузлі й додають
до рахунку тієї ознаки, за якою різали. Потім усе усереднюють по деревах і нормують на суму:
Рахується безкоштовно — усі числа вже є після навчання. Але має дві відомі вади. Перша: зсув на користь ознак із багатьма різними значеннями. У неперервної ознаки сотні кандидатів на поріг, у бінарної — один; за чистої випадковості неперервна частіше знаходить розріз, який хоч трохи зменшує забрудненість. Друга: MDI рахується на навчальних даних, тому щедро оплачує розрізи, зроблені по шуму.
Permutation importance — падіння якості від псування ознаки
Другий підхід прямолінійний: візьми навчений ліс і тестову вибірку, виміряй точність. Потім перемішай значення однієї ознаки між обʼєктами — так її звʼязок із цільовою змінною руйнується, а розподіл лишається тим самим — і виміряй точність знову. Наскільки вона впала, настільки ознака й важлива.
Дорожче (потрібні повторні прогони) і шумніше (перемішування випадкове, тому роблять кілька повторів і усереднюють), зате чесно: вимірюється на даних, яких модель не бачила.
Інтерактив 7 · Дві важливості на одному лісі
Той самий ліс, шість ознак. Дві останні — навмисний шум, який нічого не пояснює.
Обидві важливості відповідають на питання «що впливає загалом». Питання «чому модель так вирішила про це конкретне оголошення» — інше, і відповідають на нього іншими засобами: значеннями Шеплі, локальними наближеннями, частинною залежністю. Разом із тим, чому переконливе пояснення буває небезпечнішим за його відсутність, це розібрано в темі 40 · Інтерпретованість.
11 / ТеоріяЧому ліс не перенавчається
Тепер найцікавіше питання лекції: чому ансамбль із необрізаних дерев, кожне з яких перенавчене, не перенавчений сам? Відповідь дає розклад дисперсії середнього.
Нехай кожне дерево дає прогноз із дисперсією σ². Якщо прогнози незалежні, дисперсія середнього з M штук — класична формула:
Тобто при M = 100 розкид падає в сто разів. Занадто добре, щоб бути правдою.
Насправді дерева вчаться на тих самих даних, і їхні помилки корельовані з коефіцієнтом ρ. Тоді формула стає такою:
Другий доданок згасає з ростом M — його ми перемагаємо кількістю дерев. Перший
не залежить від M взагалі: скільки дерев не додавай, нижче
ρσ² дисперсія не опуститься. Ось чому декореляція така важлива: вона
знижує саме ту стелю, яку кількістю не пробити.
Тепер видно, як усе складається докупи. Бутстреп і випадкові ознаки зменшують ρ. Велике M прибирає другий доданок. Необрізані дерева тримають зміщення малим. Ліс справді може перенавчитись — але тільки якщо ρ близька до одиниці, тобто якщо дерева перестали бути різними.
12 / ПорівнянняЛіс проти бустингу
Випадковий ліс — не єдиний спосіб зібрати ансамбль із дерев. Другий великий підхід — бустинг (XGBoost, LightGBM, CatBoost), і різниця між ними принципова. Тут — коротке порівняння; механіку бустингу крок за кроком розібрано в наступній темі 27 · Бустинг.
Ліс будує дерева паралельно й незалежно, кожне на своїй вибірці, і зменшує дисперсію. Бустинг будує дерева послідовно: кожне наступне вчиться виправляти помилки вже зібраного ансамблю, і зменшує зміщення. Звідси всі практичні відмінності:
| критерій | випадковий ліс | градієнтний бустинг |
|---|---|---|
| дерева | глибокі, незалежні | мілкі (3–8), послідовні |
| зменшує | дисперсію | зміщення |
| навчання | паралельне, легко масштабується | послідовне за побудовою |
| налаштування | працює «з коробки» | чутливий до learning_rate і глибини |
| перенавчання | не росте з кількістю дерев | росте — потрібна рання зупинка |
| стеля якості | трохи нижча | зазвичай вища на табличних даних |
Практичне правило просте. Ліс — це надійна базова лінія, яку варто отримати за пʼять хвилин на початку роботи: він майже не вимагає налаштування, дає OOB-оцінку задарма й рідко поводиться несподівано. Бустинг — це те, чим виграють змагання, коли готовий витратити час на підбір гіперпараметрів і маєш достатньо даних.
13 / ПідсумокЩо варто винести
Випадковий ліс — це відповідь на конкретну ваду конкретної моделі. Дерево має малу похибку зміщення й величезну дисперсію; усереднення багатьох дерев прибирає дисперсію, не чіпаючи зміщення. Уся інженерія зводиться до того, щоб дерева не були схожими:
- Бутстреп дає кожному дереву свої дві третини даних;
- випадкові ознаки в кожному вузлі не дають одній сильній ознаці захопити всі корені;
- голосування більшістю перетворює купу різних помилок на одну маленьку — за умовою теореми Кондорсе;
- OOB дає чесну оцінку якості без окремої валідаційної вибірки;
- важливість ознак частково повертає інтерпретованість — але permutation importance надійніша за MDI.
І головне, що варто запамʼятати з обох лекцій: слабкість алгоритму не завжди лікують всередині алгоритму. Іноді дешевше побудувати сто його недосконалих копій і дати їм проголосувати.
practice.ipynb ти зібереш беггінг
вручну на DecisionTreeClassifier, порівняєш його з
RandomForestClassifier, побудуєш криву OOB проти тестової помилки, порахуєш обидві
важливості через permutation_importance і зіставиш ліс із градієнтним бустингом
на одному датасеті.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.