Прибуток:
- Здатність виробляти значущі похідні ознаки зі знаннями предметної області та кодувати категоріальні категорії за допомогою відповідних методів (one-hot, label, target)
- Можливість масштабувати числові змінні відповідно до типу моделі (стандартизація, нормалізація) і уникати непотрібного або неповного масштабування
- Можливість уникнути витоку функцій, вивчаючи всі перетворення після тренувального/тестового розділення та лише з навчання
У машинному навчанні є стара приказка: «Прикладне машинне навчання — це, по суті, розробка функцій». Оскільки успіх моделі часто залежить від того, які вхідні дані ви надаєте моделі, а не від обраного алгоритму. Розробка функцій — це мистецтво створювати значущі сигнали з необроблених даних, на яких може навчатися модель. Штучний інтелект є багатим джерелом ідей на цьому етапі: коли ви запитуєте, «які функції можна створити з цих даних», він перераховує десятки пропозицій. Але деякі з цих пропозицій можуть бути цінними, деякі можуть бути марними, а деякі можуть бути небезпечними (витік). Ваше завдання розібратися.
Чому розробка функцій
Необроблені дані рідко надходять до моделі в найкращому вигляді. Хоча стовпець «дата народження» сам по собі не має сенсу, значення «вік», згенероване з нього, є сильним сигналом. Ви можете витягти такі атрибути, як «день тижня», «день/ніч», «це свято» з «мітки часу замовлення». Ви можете поєднати два стовпці, щоб отримати співвідношення ("співвідношення боргу/доходу"). Тут розробка функцій перетворює знання домену в математичний сигнал; І саме тому саме сцена потребує найбільше людського розуму.
Перетворення категоріальних змінних у числа: кодування
Зазвичай моделі працюють із числами, а не з текстом. Перетворення категоріальних змінних (таких як місто, колір, тип товару) у числа називається кодуванням. Три поширені методи:
Одночасне кодування: відкриває окремий стовпець зі значенням 0/1 для кожної категорії. Для «місто» формуються колони Стамбул, Анкара, Ізмір; Якщо клієнт зі Стамбула, лише цей стовпець буде 1. Ідеально, коли кількість категорій невелика; Якщо категорій забагато, створюються сотні стовпців (це називається «вибухом розміру»).
Кодування міток: дає номер кожній категорії (Стамбул=0, Анкара=1). Це просто, але воно може випадково навчити модель послідовності (наприклад, Анкара > Стамбул); тому його використовують з обережністю в невпорядкованих категоріях.
Цільове кодування: замінює кожну категорію середнім значенням цільової змінної в цій категорії. Це дуже потужне, але найнебезпечніше джерело витоку: якщо брати до уваги цільові дані тестування, модель бачить майбутнє. Його слід розраховувати лише з даних навчання та ретельно (в межах перехресної перевірки).
Масштабування: великі числа не переповнюють модель
Деякі моделі (на основі відстані, лінійні моделі, нейронні мережі) чутливі до масштабу змінних. Якщо «дохід» (0-500 000) і «вік» (0-100) потрапляють в ту саму схему, дохід може домінувати просто тому, що він більший. Масштабування це виправляє. Два поширених методу: стандартизація (перетворює кожне значення на «на скільки стандартних відхилень від середнього значення») і нормалізація (мін.-макс. нормалізація — стискає значення в діапазоні 0-1). Моделі на основі дерев (дерева рішень, випадковий ліс) нечутливі до масштабу, вони не потребують масштабування.
Застереження: параметри масштабування та кодування (середнє значення, стандартне відхилення, відображення середніх категорій) слід обчислювати лише на основі даних навчання, потім те ж саме слід застосовувати до даних тесту. Включення тестових даних є витоком і робить вашу модель кращою, ніж вона є насправді.
Серце витоку в розробці функцій
Створення функцій – це місце, де найчастіше виникає витік даних. Дві типові помилки: витік часу — створення функції, яка включає інформацію про майбутнє (включно з днями після дня прогнозу під час розрахунку «середнього значення за останні 30 днів»). Витік статистики — розрахунок функції (середнє масштабування, цільове значення кодування) з усіх даних перед поділом навчання/тесту. Правило: вивчайте кожне перетворення після виконання тренувального/тестового розділення, і тільки на основі навчальних даних. Найбезпечніший спосіб робити це регулярно — використовувати конвеєр — структуру, яка збирає всі перетворення в єдиний ланцюжок і застосовує їх після розбиття.
метод
для чого
Ризик витоку
примітка
Одночасне кодування
Змінна з кількома категоріями
низький
Розбиває розмір у кількох категоріях
Кодування етикетки
Відсортована категорія
низький
Непорядок навчає неправильного порядку
цільове кодування
Багатокатегорійний, сильний сигнал
дуже високий
Просто з освіти, в CV
стандартизація
Лінійні/дистанційні моделі
середній
Параметр залежить тільки від освіти
Функція часового вікна
часові ряди
висока
Додайте майбутнє
три міні-чохла
Випадок 1 — Цінне майно. Кредитна команда згенерувала функцію «співвідношення боргу до доходу» на основі необроблених стовпців «щомісячний дохід» і «щомісячна оплата боргу». Ця єдина похідна функція підвищила точність моделі з 71% до 79%; тому що це була ставка, а не абсолютний дохід, який дійсно визначав ризик. Урок: коефіцієнти, створені знаннями домену, є сильними сигналами.
Випадок 2 — витік цільового кодування. Одна команда перетворила «поштовий індекс» на число з цільовим кодуванням (середня швидкість відтоку в цій області), але зробила це з усіх даних перед розділенням. Модель показала 94% на тестовому наборі, впавши до 68% у виробництві. 6 тижнів витрачених зусиль. Урок: цільове кодування виконується обережно, тільки в рамках навчання.
Випадок 3 — Забуття масштабування. Один аналітик ввів дохід (0-400 000) і вік клієнтів (18-75) у модель на основі відстані без масштабування. Модель дивилася майже виключно на дохід, придушуючи ефект віку. Коли було додано масштабування, сегментація стала важливою. Урок: масштабуванням не нехтують у дистанційних/лінійних моделях.
Чотири шаблони, які можна копіювати
1) Генерація ідеї функції (усунення залежить від вас):
Ваша роль: асистент з розробки функцій. Мої стовпці df: birth_date, order_time (timestamp), earnings_tl, debt_tl, city, product_category. Ціль: «чи буде повернений кредит» (0/1). Запропонуйте 15 функцій, які можна створити з цих стовпців; вкажіть ризик витоку (низький/середній/високий) для кожного. Чітко позначте ті, що містять майбутню інформацію.
2) Безпечне кодування (постспліт):
Напишіть код, який одноразово кодує "місто" та "категорію_продукту". ВАЖЛИВО: адаптуйте кодування лише до навчальних даних, а потім трансформуйте тестові дані (за допомогою sklearn OneHotEncoder). Поясніть, як ви обробляєте категорію unseen (handle_unknown) в освіті.
3) Конверсія без витоків за допомогою трубопроводу:
Налаштуйте sklearn Pipeline: застосуйте StandardScaler до числових стовпців, OneHotEncoder до категорійних стовпців, додайте класифікатор у кінці. Гарантія, що всі трансформації вивчаються ПІСЛЯ тренувального/тестового поділу та лише під час навчання. Поясніть код і поясніть, чому він не витікає.
4) Функція тимчасового вікна (контроль витоку):
Згенеруйте атрибут «кількість замовлень за останні 30 днів» для кожного клієнта, але НІКОЛИ не включайте дані після прогнозованого дня. Поясніть рядок за рядком, що код не дивиться в майбутнє. Я надам колонку дати посилання.
Слабка підказка / Сильна підказка
Слабка підказка:
Додайте хороші властивості до цих даних.
«Добре» не визначено, мета незрозуміла, контроль витоку відсутній. AI генерує випадкові, можливо, діряві функції.
Потужна підказка:
Ваша роль: розробник функцій. Ціль: "відтік через 30 днів" (0/1), орієнтовна контрольна дата: save_date. У df є історія транзакцій. Завдання: Створіть 8 функцій, дайте відповідь на запитання «Чи є у мене ця інформація під час передбачення» для КОЖНОЇ. Додавання дати після контрольної дати в функціях часового вікна. Напишіть код конвеєрно-сумісним способом, який буде виконано після розділу навчання/тесту.
Тут мета, контрольний час і контроль витоку визначаються з самого початку.
Поширені помилки
- Вивчення перетворення з усіх даних перед поділом. Якщо параметр масштабування/кодування бачить тестові дані, виникає витік.
- Недбале використання цільового кодування. Це найпотужніший, але найбільш небезпечний метод; просто з навчання, під час перехресної перевірки.
- Додавання майбутнього за допомогою функції часового вікна. Якщо розрахунок «останні 30 днів» вводиться після дня прогнозу, модель бачить майбутнє.
- Непотрібне масштабування в моделі дерева та неповне масштабування в лінійній моделі. Рішення про масштабування приймаються відповідно до типу моделі.
- Додавання всіх пропозицій функції ШІ без питань. Пропозиції можуть включати непотрібні та нестійкі функції.
Порада. Запишіть одне запитання для кожної функції, яку ви створюєте: «Чи можу я обчислити це значення за допомогою інформації, яку я маю на момент прогнозування?» Якщо відповідь не однозначна «так», не використовуйте цю функцію. Ця єдина дисципліна усуває більшість витоків, пов’язаних із функціями.
Підсумовуючи
Розробка функцій — це мистецтво генерувати значущі сигнали з необроблених даних і часто визначає успіх моделі більше, ніж алгоритм. Основними інструментами є кодування категорій (одна гаряча, мітка, ціль), масштабування числових значень (стандартизація, нормалізація) і створення похідних ознак зі знанням домену. Але ця фаза також є серцевиною витоку: усі трансформації потрібно вивчати після тренувального/тестового поділу та лише з навчальних даних. AI генерує багато ідей; Це людське судження відрізняє цінне від небезпечного.
Аплікаційне завдання
Виберіть цільову змінну та розробіть принаймні п’ять похідних ознак із стовпців, які у вас є. Для кожного з них письмово дайте відповідь на запитання «чи доступний я під час передбачення» та виключіть принаймні одне як «високий ризик витоку». Потім закодуйте функції безпеки в конвеєрі, які будуть реалізовані після розділу.
контрольний список
- [ ] Чи застосував я всі перетворення після поділу навчання/тесту?
- [ ] Чи навчився я лише параметрам масштабування/кодування під час навчання?
- [ ] Чи я відповів на запитання «чи маю це на момент передбачення» для кожної функції?
- [ ] Чи дотримувався я особливої обережності з такими методами високого ризику, як цільове кодування?
- [ ] Чи я вирішив масштабувати відповідно до типу моделі (деревоподібна/лінійна)?