[Зображення автора]
Поняття «важливість функції» широко використовується в машинному навчанні як основний тип пояснюваності моделі. Наприклад, він використовується в Recursive Feature Elimination (RFE) для повторного видалення найменш важливої функції моделі.
Однак існує помилкова думка про це.
Той факт, що функція важлива, не означає, що вона корисна для моделі!
Дійсно, коли ми говоримо, що функція важлива, це просто означає, що вона вносить значний внесок у прогнози, зроблені моделлю. Але ми повинні враховувати це такий внесок може бути неправильним.
Візьмемо простий приклад: фахівець із даних випадково забув ідентифікатор клієнта між характеристиками своєї моделі. Модель використовує ідентифікатор клієнта як функцію високого прогнозування. Як наслідок, ця функція матиме високу важливість, навіть якщо вона фактично погіршує модель, оскільки вона не може добре працювати з невидимими даними.
Щоб було зрозуміліше, нам потрібно буде розрізнити два поняття:
- Прогнозний внесок: яка частина прогнозів пов’язана з ознакою; це еквівалентно важливості функції.
- Внесок помилки: яка частина помилок передбачення зумовлена наявністю ознаки в моделі.
У цій статті ми побачимо, як обчислити ці величини та як використовувати їх, щоб отримати цінну інформацію про прогнозну модель (та покращити її).
Примітка: ця стаття присвячена випадку регресії. Якщо вас більше цікавить класифікаційний випадок, ви можете прочитати «Які функції є шкідливими для вашої моделі класифікації?»
Припустімо, ми створили модель для прогнозування доходів людей на основі їх роботи, віку та національності. Тепер ми використовуємо модель, щоб робити прогнози щодо трьох людей.
Таким чином, ми маємо основну істину, прогноз моделі та результуючу помилку:
Основна правда, прогноз моделі та абсолютна похибка (у тисячах доларів). [Зображення автора]
Коли у нас є прогностична модель, ми завжди можемо розкласти прогнози моделі на внески окремих функцій. Це можна зробити за допомогою значень SHAP (якщо ви не знаєте, як працюють значення SHAP, ви можете прочитати мою статтю: Цінності SHAP пояснюються саме так, як ви хотіли, щоб хтось пояснив вам).
Отже, скажімо, це значення SHAP відносно нашої моделі для трьох осіб.
Значення SHAP для прогнозів нашої моделі (у тисячах доларів). [Зображення автора]
Основна властивість значень SHAP полягає в тому, що вони адитивні. Це означає, що, взявши суму кожного рядка, ми отримаємо прогноз нашої моделі для цієї особи. Наприклад, якщо ми візьмемо другий рядок: 72 тис. $ + 3 тис. $ -22 тис. $ = 53 тис. $, що точно відповідає прогнозу моделі для другої особи.
Тепер значення SHAP є хорошим показником того, наскільки важлива функція для наших прогнозів. Дійсно, чим вище (абсолютне) значення SHAP, тим впливовіша функція для прогнозу щодо конкретної особи. Зауважте, що я говорю про абсолютні значення SHAP, тому що знак тут не має значення: функція однаково важлива, якщо вона підвищує чи знижує прогноз.
Таким чином, прогнозний внесок функції дорівнює середньому абсолютним значенням SHAP цієї функції. Якщо у вас є значення SHAP, що зберігаються у фреймі даних Pandas, це так просто:
prediction_contribution = shap_values.abs().mean()
У нашому прикладі це результат:
Прогнозний внесок. [Зображення автора]
Як бачите, робота є найважливішою характеристикою, оскільки в середньому на неї припадає 71.67 тис. доларів остаточного прогнозу. Другою та третьою найважливішими ознаками є відповідно національність та вік.
Однак той факт, що дана функція відповідає відповідній частині остаточного прогнозу, нічого не говорить про продуктивність функції. Щоб також розглянути цей аспект, нам потрібно буде обчислити «Внесок помилок».
Скажімо, ми хочемо відповісти на таке запитання: «Які прогнози зробила б модель, якби вона не мала функції робота?» Значення SHAP дозволяють відповісти на це питання. Насправді, оскільки вони є адитивними, достатньо відняти значення SHAP відносно функції робота з прогнозів, зроблених моделлю.
Звичайно, ми можемо повторити цю процедуру для кожної функції. У Pandas:
y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)
Ось результат:
Прогнози, які ми отримаємо, якщо вилучимо відповідну функцію. [Зображення автора]
Це означає, що якби у нас не було функції робота, тоді модель передбачить 20 тис. $ для першої особи, -19 тис. $ для другої особи та -8 тис. $ для третьої особи. Натомість, якби у нас не було функції вік, модель прогнозувала б 73 тис. $ для першої особи, 50 тис. $ для другої особи тощо.
Як бачите, прогнози для кожної окремої людини сильно відрізняються, якщо ми видалили різні функції. Як наслідок, також помилки передбачення будуть дуже різними. Ми можемо легко обчислити їх:
abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())
Результат такий:
Абсолютні помилки, які ми отримаємо, якщо вилучимо відповідну функцію. [Зображення автора]
Це помилки, які ми отримаємо, якщо вилучимо відповідну функцію. Інтуїтивно зрозуміло, що якщо помилка невелика, видалення функції не є проблемою — або навіть корисно — для моделі. Якщо помилка велика, видаляти функцію не варто.
Але ми можемо зробити більше, ніж це. Дійсно, ми можемо обчислити різницю між похибками повної моделі та похибками, які ми отримали б без функції:
error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)
Який є:
Різниця між помилками моделі та помилками, які ми мали б без функції. [Зображення автора]
Якщо це число:
- негативний, то наявність функції призводить до зменшення помилки передбачення, тому функція добре працює для цього спостереження!
- позитивний, то наявність ознаки призводить до збільшення помилки передбачення, тому ознака є поганою для цього спостереження.
Ми можемо обчислити «Внесок помилок» як середнє значення цих значень для кожної функції. У Pandas:
error_contribution = error_diff.mean()
Ось результат:
Внесок помилки. [Зображення автора]
Якщо це значення позитивне, то це означає, що в середньому наявність ознаки в моделі призводить до більшої похибки. Таким чином, без цієї функції прогноз був би загалом кращим. Іншими словами, функція приносить більше шкоди, ніж користі!
Навпаки, чим негативніше це значення, тим корисніша функція для прогнозів, оскільки її наявність призводить до менших помилок.
Давайте спробуємо використати ці концепції на реальному наборі даних.
Далі я буду використовувати набір даних, взятий з Пікаре (бібліотека Python під Ліцензія MIT). Набір даних називається «Gold» і містить часові ряди фінансових даних.
Зразок набору даних. Усі характеристики виражені у відсотках, тому -4.07 означає прибутковість -4.07%. [Зображення автора]
Особливості полягають у поверненні фінансових активів відповідно за 22, 14, 7 і 1 день до моменту спостереження («Т-22», «Т-14», «Т-7», «Т-1»). Ось вичерпний список усіх фінансових активів, які використовуються як функції прогнозування:
Список доступних активів. Кожен актив спостерігається в момент часу -22, -14, -7 і -1. [Зображення автора]
Загалом ми маємо 120 функцій.
Мета полягає в тому, щоб передбачити ціну золота (прибутковість) на 22 дні вперед у часі («Gold_T+22»). Давайте подивимося на цільову змінну.
Гістограма змінної. [Зображення автора]
Після завантаження набору даних я виконав наступні кроки:
- Розділіть повний набір даних випадковим чином: 33% рядків у навчальному наборі даних, ще 33% у наборі даних перевірки та решта 33% у тестовому наборі даних.
- Навчіть регресор LightGBM на навчальному наборі даних.
- Робіть прогнози щодо наборів даних навчання, перевірки та тестування, використовуючи модель, навчену на попередньому кроці.
- Обчислюйте значення SHAP для навчальних, перевірочних і тестових наборів даних за допомогою бібліотеки Python «shap».
- Обчисліть внесок передбачення та внесок помилок кожної функції в кожному наборі даних (навчання, перевірка та тестування), використовуючи код, який ми бачили в попередньому параграфі.
Давайте порівняємо внесок помилок і внесок передбачення в наборі навчальних даних. Ми будемо використовувати точкову діаграму, щоб точки ідентифікували 120 особливостей моделі.
Внесок передбачення проти внеску помилок (у наборі даних для навчання). [Зображення автора]
Існує дуже негативна кореляція між вкладом передбачення та внеском помилок у навчальному наборі.
І це має сенс: оскільки модель навчається на навчальному наборі даних, вона має тенденцію приписувати високу важливість (тобто високий внесок прогнозування) тим функціям, які призводять до значного зменшення помилки прогнозування (тобто дуже негативний внесок помилок)..
Але це не додає багато наших знань, чи не так?
Дійсно, для нас дійсно важливий набір даних перевірки. Набір даних перевірки насправді є найкращим проксі-сервером, який ми можемо мати про те, як наші функції поводитимуться з новими даними. Отже, давайте зробимо таке ж порівняння на наборі перевірки.
Внесок передбачення проти внеску помилок (у наборі даних перевірки). [Зображення автора]
З цього сюжету ми можемо отримати набагато більше цікавої інформації.
Функції в нижній правій частині графіка – це ті, яким наша модель правильно присвоює високу важливість, оскільки вони фактично призводять до зменшення помилки передбачення.
Також зауважте, що «Gold_T-22» (повернення золота за 22 дні до періоду спостереження) працює дуже добре порівняно з важливістю, яку йому надає модель. Це означає що ця функція, можливо, є недостатньою. І ця частина інформації особливо цікава, оскільки золото є активом, який ми намагаємося передбачити («Gold_T+22»).
З іншого боку, функції, які мають коефіцієнт помилок вище 0, погіршують наші прогнози. Наприклад, «US Bond ETF_T-1» у середньому змінює прогноз моделі на 0.092% (внесок прогнозу), але це призводить до того, що модель робить прогноз у середньому на 0.013% (внесок помилки) гіршим, ніж це було б без цієї функції .
Ми можемо це припустити всі функції з високим вмістом помилок (порівняно з їхнім прогнозним внеском), ймовірно, переобладнані або, загалом, вони мають різну поведінку в навчальному наборі та в наборі перевірки.
Давайте подивимося, які функції мають найбільший внесок помилок.
Функції, відсортовані за зменшенням частки помилок. [Зображення автора]
А тепер функції з найменшим рівнем помилок:
Функції, відсортовані за збільшенням кількості помилок. [Зображення автора]
Цікаво, що ми можемо помітити, що всі функції з вищим внеском помилки відносяться до T-1 (за 1 день до моменту спостереження), тоді як майже всі функції з меншим внеском помилки відносяться до T-22 (22 дні до моменту спостереження ).
Здається, це свідчить про те найновіші функції схильні до переобладнання, тоді як особливості, більш віддалені в часі, мають тенденцію до кращого узагальнення.
Зауважте, що без Error Contribution ми б ніколи не дізналися про цю інформацію.
Традиційні методи рекурсивного усунення функцій (RFE) засновані на видаленні неважливих функцій. Це еквівалентно видаленню функцій із першим невеликим прогнозним внеском.
Однак, виходячи з того, що ми сказали в попередньому параграфі, було б доцільніше спочатку видалити функції з найбільшим вмістом помилок.
Щоб перевірити, чи справді наша інтуїція, порівняємо два підходи:
- Традиційний RFE: спочатку видаліть непотрібні функції (найнижчий прогнозований внесок).
- Наш RFE: видалення шкідливих функцій перший (найбільший внесок помилок).
Давайте подивимося на результати перевірки:
Середня абсолютна помилка двох стратегій у наборі перевірки. [Зображення автора]
Найкраща ітерація для кожного методу була обведена колом: це модель із 19 функціями для традиційного RFE (синя лінія) та модель із 17 функціями для нашого RFE (помаранчева лінія).
Загалом здається, що наш метод працює добре: видалення функції з найвищим вмістом помилок призводить до незмінно меншого MAE порівняно з видаленням функції з найвищим вкладом передбачення.
Однак ви можете подумати, що це добре працює лише тому, що ми переналаштовуємо набір перевірки. Адже нас цікавить результат, який ми отримаємо на тестовому наборі.
Отже, давайте подивимося те саме порівняння на тестовому наборі.
Середня абсолютна помилка двох стратегій у тестовому наборі. [Зображення автора]
Результат схожий на попередній. Навіть якщо відстань між двома лініями менша, MAE, отриманий шляхом видалення найвищого учасника помилки, явно кращий, ніж MAE, отриманий видаленням найнижчого учасника прогнозу.
Оскільки ми вибрали моделі, що ведуть до найменшого MAE у наборі перевірки, давайте подивимося їхні результати на тестовому наборі:
- Внесок RFE-Prediction (19 функцій). MAE на тестовому наборі: 2.04.
- Внесок RFE-Error (17 функцій). MAE на тестовому наборі: 1.94.
Отже, найкращий MAE, який використовує наш метод, на 5% кращий порівняно з традиційним RFE!
Концепція важливості функції відіграє фундаментальну роль у машинному навчанні. Однак поняття «важливість» часто помилково сприймають як «доброту».
Щоб розрізнити ці два аспекти, ми ввели два поняття: внесок передбачення та внесок помилок. Обидві концепції базуються на значеннях SHAP набору даних перевірки, і в статті ми бачили код Python для їх обчислення.
Ми також випробували їх на реальному наборі фінансових даних (у якому завдання передбачити ціну золота) і довели, що рекурсивне усунення ознак на основі внеску помилок призводить до кращої середньої абсолютної помилки на 5% порівняно з традиційним RFE на основі внеску прогнозу.
Весь код, використаний для цієї статті, можна знайти в цей блокнот.
Дякую за читання!
Самуеле Маццанті є провідним спеціалістом із обробки даних у Jakala та зараз живе в Римі. Він закінчив статистику, і його основні наукові інтереси стосуються програм машинного навчання для промисловості. Він також є позаштатним творцем контенту.
Оригінал. Повідомлено з дозволу.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- PlatoHealth. Розвідка про біотехнології та клінічні випробування. Доступ тут.
- джерело: https://www.kdnuggets.com/your-features-are-important-it-doesnt-mean-they-are-good?utm_source=rss&utm_medium=rss&utm_campaign=your-features-are-important-it-doesnt-mean-they-are-good
- : має
- :є
- : ні
- $UP
- 07
- 1
- 14
- 17
- 19
- 20k
- 22
- 7
- a
- МЕНЮ
- про це
- вище
- абсолют
- Рахунки
- насправді
- додавати
- добавка
- після
- вік
- попереду
- ВСІ
- дозволяти
- майже
- Також
- завжди
- am
- an
- та
- Інший
- відповідь
- все
- застосування
- підходи
- ЕСТЬ
- стаття
- AS
- зовнішній вигляд
- аспекти
- активи
- Активи
- At
- автор
- доступний
- середній
- поганий
- заснований
- основний
- BE
- оскільки
- було
- перед тим
- корисний
- КРАЩЕ
- Краще
- між
- синій
- облігація
- обидва
- приносити
- Приносить
- приніс
- побудований
- але
- by
- обчислювати
- званий
- CAN
- не може
- carried
- випадок
- Зміни
- перевірка
- класифікація
- ясніше
- очевидно
- код
- порівняти
- порівняний
- порівняння
- обчислення
- концепція
- поняття
- Занепокоєння
- Вважати
- послідовно
- містить
- зміст
- навпаки
- внесок
- внески
- вкладник
- Кореляція
- курс
- творець
- В даний час
- клієнт
- дані
- вчений даних
- набори даних
- день
- Днів
- різниця
- різний
- відстань
- Віддалений
- відмінність
- розрізняти
- do
- Ні
- зроблений
- Не знаю
- вниз
- Падіння
- два
- e
- кожен
- легко
- досить
- рівним
- однаково
- Еквівалент
- помилка
- помилки
- Навіть
- точно
- приклад
- Пояснюваність
- пояснені
- виражений
- витяг
- факт
- особливість
- риси
- остаточний
- фінансовий
- фінансові дані
- Перший
- увагу
- після
- для
- знайдений
- позаштатний
- від
- Повний
- фундаментальний
- Загальне
- в цілому
- отримати
- даний
- мета
- золото
- ціна на золото
- добре
- великий
- Земля
- рука
- шкодити
- шкідливий
- Мати
- he
- тут
- Високий
- вище
- найвищий
- дуже
- його
- Як
- How To
- Однак
- HTTPS
- i
- ID
- ідея
- ідентифікувати
- if
- зображення
- значення
- важливо
- удосконалювати
- in
- В інших
- Дохід
- Augmenter
- зростаючий
- вказувати
- індикатор
- індивідуальний
- осіб
- промисловість
- Впливовий
- інформація
- розуміння
- розуміння
- екземпляр
- замість
- зацікавлений
- цікавий
- інтереси
- в
- введені
- інтуїція
- IT
- ітерація
- ЙОГО
- робота
- просто
- KDnuggets
- Знати
- знання
- відомий
- найбільших
- вести
- провідний
- Веде за собою
- вивчення
- найменш
- менше
- бібліотека
- Лінія
- ліній
- список
- Місце проживання
- подивитися
- серія
- знизити
- найнижчий
- машина
- навчання за допомогою машини
- made
- головний
- зробити
- РОБОТИ
- Робить
- Матерія
- Питання
- Може..
- значити
- засоби
- метод
- методика
- неправильне уявлення
- модель
- Моделі
- момент
- більше
- найбільш
- багато
- my
- Необхідність
- негативний
- ніколи
- Нові
- увагу
- поняття
- зараз
- номер
- спостерігати
- спостерігається
- отримувати
- отриманий
- of
- часто
- on
- ONE
- or
- помаранчевий
- порядок
- Інше
- наші
- з
- Результат
- панди
- частина
- особливо
- Люди
- відсоток
- продуктивність
- period
- дозвіл
- частина
- plato
- Інформація про дані Платона
- PlatoData
- відіграє
- позитивний
- можливо
- передбачати
- прогнозування
- прогноз
- Прогнози
- інтелектуального
- наявність
- попередній
- price
- ймовірно
- Проблема
- процедура
- власність
- доведений
- повноваження
- штовхає
- Python
- питання
- Читати
- реальний
- насправді
- останній
- Рекурсивний
- скорочення
- регресія
- відносний
- доречний
- решті
- видалення
- видаляти
- Вилучено
- видалення
- повторювати
- дослідження
- ті
- відповідно
- результат
- в результаті
- результати
- повертати
- Умови повернення
- право
- Роль
- Рим
- ROW
- Зазначений
- то ж
- say
- вчений
- другий
- побачити
- Здається,
- бачив
- обраний
- сенс
- Серія
- комплект
- Повинен
- підпис
- аналогічний
- простий
- просто
- з
- один
- невеликий
- менше
- So
- деякі
- Хтось
- конкретний
- статистика
- Крок
- заходи
- зберігати
- стратегії
- Приймати
- прийняті
- взяття
- говорити
- Мета
- Завдання
- сказати
- має тенденцію
- тест
- ніж
- Що
- Команда
- їх
- Їх
- потім
- Там.
- Ці
- вони
- речі
- думати
- третій
- це
- ті
- тисячі
- три
- через
- Таким чином
- час
- Часовий ряд
- до
- Усього:
- традиційний
- навчений
- Навчання
- намагався
- Правда
- намагатися
- намагається
- два
- тип
- us
- використання
- використовуваний
- використовує
- використання
- перевірка достовірності
- Цінний
- значення
- Цінності
- змінна
- перевірено
- дуже
- vs
- хотіти
- we
- ДОБРЕ
- Що
- коли
- в той час як
- Чи
- який
- широко
- волі
- з
- без
- слова
- Work
- робочий
- працює
- гірше
- б
- ви
- вашу
- зефірнет