Feature engineering - це місце, де створюється основна цінність ML. Проста модель з відмінними ознаками перемагає складну модель з поганими ознаками. Це робота, яка реально рухає метрики - трансформація сирих даних у сигнали, з яких моделі можуть навчатись.
Де використовується
Кожна ML-система покладається на feature engineering:
- Fraud detection: Velocity features, поведінкові патерни, мережеві сигнали
- Рекомендації: Преференції користувачів, популярність товарів, історія взаємодій
- Кредитний скоринг: Агрегації історії платежів, коефіцієнти боргу, індикатори стабільності
- Прогнозування попиту: Сезонність, тренди, ефекти промо-акцій
- Прогноз відтоку: Тренди залученості, звернення до підтримки, патерни використання
Найкращі ML-команди витрачають 60-80% часу на ознаки, не на моделі.
Типові дані
Сирі дані до feature engineering:
| Джерело | Формат | Приклади |
|---|---|---|
| Транзакційні | Event logs | Покупки, кліки, логіни |
| Профілі користувачів | Key-value | Демографія, преференції, налаштування |
| Часові ряди | Послідовні | Ціни, показники сенсорів, метрики |
| Текст | Неструктурований | Відгуки, повідомлення, описи |
| Категоріальні | Коди | Категорії продуктів, регіони, типи пристроїв |
Feature engineering трансформує це у формат для моделі: - Числові ознаки масштабовані належним чином - Категоріальні ознаки закодовані - Пропущені значення оброблені - Темпоральні патерни витягнуті - Взаємодії захоплені
Що робимо на практиці
- Зрозуміти бізнес-проблему - Який сигнал допоміг би передбачити target?
- Дослідити сирі дані - Що доступно, яка якість, що відсутнє?
- Визначити точку прогнозу - Яка інформація доступна на момент прогнозу?
- Витягнути базові ознаки - Прямі маппінги з сирих даних
- Створити агрегації - Суми, кількості, середні по часових вікнах
- Побудувати ratio features - Поточне vs історичне, entity vs популяція
- Закодувати категорії - Обрати кодування на основі кардинальності та моделі
- Обробити пропуски - Імпутація або індикаторні ознаки
- Валідувати якість ознак - Перевірити розподіли, кореляції, leakage
- Протестувати в продакшні - Переконатись, що ознаки обчислюються однаково при серінгу
Спочатку Baseline
Почніть з найпростішого набору ознак, що схоплює проблему:
- Прямі маппінги: Числові колонки as-is, one-hot encoded категорії
- Базові агрегації: Count, sum, mean ключових подій
- Recency features: Днів з останньої події
- Прості ratio: Цей період vs минулий період
Цей baseline: - Швидко встановлює мінімальну планку продуктивності - Рано виявляє проблеми якості даних - Дає інтерпретовану відправну точку - Дозволяє швидку ітерацію
Додавайте складність лише коли продуктивність baseline виходить на плато.
Типові патерни та коли їх обирати
Числові трансформації
| Патерн | Коли використовувати | Приклад |
|---|---|---|
| Стандартизація | Лінійні моделі, нейромережі | (x - mean) / std |
| Min-max scaling | Обмежені ознаки, нейромережі | (x - min) / (max - min) |
| Log transform | Правоскошені розподіли | log(x + 1) |
| Binning | Нелінійні залежності | Вікові групи: 18-25, 26-35, ... |
| Winsorization | Обробка викидів | Обрізати на 1-му та 99-му перцентилі |
Кодування категорій
| Патерн | Коли використовувати | Кардинальність |
|---|---|---|
| One-hot encoding | Tree моделі, низька кардинальність | < 20 категорій |
| Target encoding | Висока кардинальність, табличні моделі | 20-1000 категорій |
| Frequency encoding | Висока кардинальність, просто | Будь-яка |
| Embedding | Нейромережі, дуже висока кардинальність | 1000+ категорій |
| Hash encoding | Обмеження пам'яті, невідомі категорії | Будь-яка |
Темпоральні ознаки
| Патерн | Приклад | Use Case |
|---|---|---|
| Rolling aggregations | Сума покупок за останні 30 днів | Виявлення трендів |
| Time since event | Днів з останнього логіну | Recency сигнали |
| Cyclical encoding | sin/cos години, дня тижня | Періодичні патерни |
| Lag features | Значення 1, 7, 30 днів тому | Часові ряди |
| Trend features | Нахил по часовому вікну | Напрямок змін |
Ознаки взаємодії
| Патерн | Приклад | Коли корисно |
|---|---|---|
| Множення | Feature A * Feature B | Відомі взаємодії |
| Ratio | Feature A / Feature B | Відносні порівняння |
| Різниця | Feature A - Feature B | Зміни, дельти |
| Поліноміальні | Feature A^2, A^3 | Нелінійні залежності |
Патерни Feature Engineering
Фреймворк агрегацій:
Для кожної entity (user, product, session):
Для кожного типу події (purchase, click, view):
Для кожного часового вікна (1d, 7d, 30d, 90d):
Обчислити: count, sum, mean, max, min, std
Поведінкові сигнали: - Консистентність: std активності по часових періодах - Тренд: порівняння недавньої vs історичної поведінки - Різноманітність: кількість унікальних категорій взаємодії - Інтенсивність: rate активності на одиницю часу
Текстові ознаки: - Довжина: кількість символів, кількість слів - Патерни: regex matches, наявність ключових слів - Embeddings: TF-IDF, sentence transformers
Стратегії для пропущених значень: - Імпутувати медіаною/модою для випадкових пропусків - Імпутувати доменно-специфічним значенням (наприклад, 0 для count features) - Створити бінарний індикатор: is_feature_missing - Залишити as-is для tree моделей, що обробляють пропуски
Оцінка та метрики
Метрики якості ознак:
| Метрика | Що вимірює | Ціль |
|---|---|---|
| Coverage | % рядків з non-null значенням | > 80% для критичних ознак |
| Cardinality | Унікальні значення | Відповідає вибору кодування |
| Кореляція з target | Прогнозна сила | Вище краще, але перевірте на leakage |
| Стабільність | Консистентність розподілу в часі | Низький дрифт |
| Вартість обчислення | Час/ресурси на генерацію | В межах бюджету латентності |
Підводні камені: - Feature leakage: Використання інформації з часу після прогнозу - Target leakage: Ознака кодує label прямо або опосередковано - Distribution shift: Ознака обчислюється по-різному в тренуванні vs серінгу - High cardinality surprises: Нові категорії в продакшні
Режими відмови та чеклист дебагу
- [ ] Leakage: Ознака має неможливо високу кореляцію з target
- [ ] Training-serving skew: Різні code paths для тренування та інференсу
- [ ] Stale features: Online ознаки не оновлюються, серваться застарілі значення
- [ ] NULL explosion: Upstream data issue спричиняє масові пропуски
- [ ] Type mismatch: Integer overflow, проблеми string encoding
- [ ] Time zone bugs: Агрегаційні вікна обчислені в неправильному timezone
- [ ] Off-by-one errors: Часові вікна включають майбутні дані
- [ ] Join fanout: One-to-many join надуває значення ознак
Продакшн-чеклист
Розробка ознак: - [ ] Визначення ознаки задокументовано - [ ] Unit tests для логіки ознаки - [ ] Протестовано на holdout даних - [ ] Перевірено на leakage - [ ] Вартість обчислення прийнятна
Деплоймент ознак: - [ ] Однакова логіка в тренуванні та серінгу - [ ] Моніторинг feature drift - [ ] Алертинг на NULL rates - [ ] Стратегія backfill визначена - [ ] Версіонування на місці
Підтримка ознак: - [ ] Регулярні аудити якості - [ ] Процес deprecation для невикористаних ознак - [ ] Документація оновлена - [ ] Залежності відстежуються
Інструменти та стек
| Категорія | Інструменти |
|---|---|
| Обчислення ознак | pandas, Polars, Spark, dbt |
| Feature stores | Feast, Tecton, Vertex AI Feature Store |
| Валідація | Great Expectations, Pandera |
| Візуалізація | matplotlib, seaborn, Plotly |
| Трекінг експериментів | MLflow, Weights & Biases |
Приклад міні-кейсу
Сценарій: Покращити модель прогнозу відтоку для підписного сервісу.
Поточний стан: Модель використовує 12 ознак (демографія, тип плану, tenure). AUC 0.68.
Спринт feature engineering: 1. Engagement features: Сесії за 7/30/90 днів, кількість використання функцій 2. Trend features: Сесії цього тижня vs 4-тижневе середнє 3. Support signals: Відкриті тікети, час вирішення, sentiment 4. Payment features: Невдалі платежі, зміни способу оплати 5. Recency features: Днів з останнього логіну, останнього використання функції
Результат: 45 нових ознак. Після selection, 23 ознаки в фінальній моделі. AUC покращився до 0.79.
Ключовий інсайт: Trend features (зниження engagement) були найбільш прогнозними, не статичні ознаки.
Пов'язані сторінки
- Індекс: ML Field Guide
- Бінарна класифікація в продакшні
- Feature Stores на практиці
- Моніторинг якості даних
Додаткове читання
- Feature Engineering for Machine Learning - Alice Zheng
- scikit-learn Preprocessing Guide
- Feast Documentation
- Great Expectations Documentation
Спробуйте наживо
Дослідіть пов'язану модель на практиці: відкрийте Feature Engineering: Building Predictive Models і змінюйте параметри під час роботи. Усе лишається у вашому браузері.
▶ Відкрити симуляцію Feature Engineering: Building Predictive Models