Ваші особливості важливі? Це не означає, що вони хороші - KDnuggets

Ваші особливості важливі? Це не означає, що вони хороші – KDnuggets

Вихідний вузол: 2893531

Ваші особливості важливі? Це не означає, що вони хороші
[Зображення автора]

 

Поняття «важливість функції» широко використовується в машинному навчанні як основний тип пояснюваності моделі. Наприклад, він використовується в 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»). Давайте подивимося на цільову змінну.

 

Ваші особливості важливі? Це не означає, що вони хороші
Гістограма змінної. [Зображення автора]

 

Після завантаження набору даних я виконав наступні кроки:

  1. Розділіть повний набір даних випадковим чином: 33% рядків у навчальному наборі даних, ще 33% у наборі даних перевірки та решта 33% у тестовому наборі даних.
  2. Навчіть регресор LightGBM на навчальному наборі даних.
  3. Робіть прогнози щодо наборів даних навчання, перевірки та тестування, використовуючи модель, навчену на попередньому кроці.
  4. Обчислюйте значення SHAP для навчальних, перевірочних і тестових наборів даних за допомогою бібліотеки Python «shap».
  5. Обчисліть внесок передбачення та внесок помилок кожної функції в кожному наборі даних (навчання, перевірка та тестування), використовуючи код, який ми бачили в попередньому параграфі.

Давайте порівняємо внесок помилок і внесок передбачення в наборі навчальних даних. Ми будемо використовувати точкову діаграму, щоб точки ідентифікували 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 та зараз живе в Римі. Він закінчив статистику, і його основні наукові інтереси стосуються програм машинного навчання для промисловості. Він також є позаштатним творцем контенту.

 
Оригінал. Повідомлено з дозволу.
 

Часова мітка:

Більше від KDnuggets