Припустимо, у вас 5000 ознак від датчиків, а на навчання — всього 10 хвилин. Ручний перебір пайплайнів (препроцесинг + алгоритм + гіперпараметри) зайняв би тижні. Auto-sklearn вирішує це за один запуск: байєсівська оптимізація, мета-навчання на 140+ датасетах, раннє зупинення (Hyperband) та фінальний ансамбль. Ми інтегруємо цей інструмент прямо у ваш стек, щоб ви отримували best-in-class пайплайн без рутини.
Проблеми, які вирішуємо
Шумні ознаки та масштаб. Генерація 1000+ фіч потребує автоматичного відбору. Auto-sklearn перебирає PCA, SelectPercentile та інші препроцесори — ми налаштовуємо простір під вашу предметну область.
Часові ряди без витоку. Стандартна k-fold CV перемішує дані — це дає завищені метрики. Ми впроваджуємо TimeSeriesSplit або custom cross-validation, щоб оцінка була чесною. Для коректної роботи з часовою структурою доводиться патчити Auto-sklearn або переходити на FLAML.
Масштабування на великі дані. Якщо датасет не вміщується в пам'ять, використовуємо partial_fit-сумісні моделі (SGD, NB) або підвантажуємо дані через Dask. Ми також обмежуємо memory_limit та кількість воркерів під вашу інфраструктуру.
Як ми це робимо
На одному з проєктів обробляли логи банкоматів: 2 млн рядків, 200 категоріальних ознак. Ручний пайплайн давав ROC-AUC 0,74. Ми запустили Auto-sklearn з бюджетом 2 години, обмеживши простір градієнтним бустингом та випадковим лісом (швидше, ніж повний пошук). Ансамбль з 15 моделей дав 0,81 на тесті. Потім ми експортували найкращу модель через joblib і загорнули в MLflow-модель з типом pyfunc. У продакшені час інференсу — 5 мс на запис.
Стек: Python, auto-sklearn, scikit-learn, MLflow, Docker, Kubernetes.
Як Auto-sklearn справляється з великою кількістю ознак?
Мета-навчання на 140 датасетах підказує, який препроцесинг спрацює найкраще. Для 5000+ ознак ми часто комбінуємо feature_agglomeration з select_percentile_classification. Якщо пам'яті не вистачає — використовуємо truncatedSVD або PCA зі зниженням розмірності до 500. Auto-sklearn автоматично відсіває неінформативні ознаки через вбудований feature importance.
Чому правильна крос-валідація критична для часових рядів?
Для часових рядів ми використовуємо TimeSeriesSplit або custom CV, щоб уникнути look-ahead bias. В auto-sklearn немає прямої підтримки timeseries, тому ми модифікуємо resampling_strategy або підключаємо FLAML. У будь-якому разі гарантуємо, що метрики не завищені.
Процес роботи
- Аналіз даних — розподіл ознак, пропуски, тип задачі (бінарна/мультиклас/регресія).
- Проектування простору пошуку — вибір препроцесорів, класифікаторів, гіперпараметрів. Виключаємо повільні моделі (SVM з RBF-ядром).
- Запуск AutoML — на staging середовищі, з MLflow-трекінгом.
- Інтерпретація — аналізуємо leaderboard, sprint statistics, stderr.
- Експорт та тестування — зберігаємо ансамбль (joblib) і розгортаємо в Kubernetes.
Строки орієнтовно
- Базова інтеграція з налаштуванням простору та evaluation: від 2 до 5 днів.
- Кастомізація (timeseries CV, кастомні препроцесори, ONNX-експорт): від 1 тижня.
- Великі проєкти з кількома датасетами та MLOps-пайплайном: від 2 тижнів.
Точний строк оцінюємо після аналізу ваших даних та вимог до latency. Зв'яжіться з нами для консультації.
Що входить у deliverables
- Код інтеграції Auto-sklearn з вашою кодовою базою (
train.py,inference.py). - MLflow-експеримент з логом метрик та конфігів.
- Документація по запуску, налаштуванню та інтерпретації результатів.
- Рекомендації щодо подальшої оптимізації.
- Навчання команди (1 година — як розширювати простір і читати виводи).
Середня економія на часі інженерів автоматично окупає проєкт. Замовте аудит вашого ML-пайплайну — ми підготуємо пропозицію щодо інтеграції Auto-sklearn.
Порівняння: Auto-sklearn vs ручний підбір
| Критерій | Auto-sklearn | Ручний GridSearch |
|---|---|---|
| Час налаштування | 1 день | 1-2 тижні |
| Кількість випробувань | 600+ (автоматично) | 20-50 (ручних) |
| Покриття алгоритмів | 15 препроцесорів + 20 моделей | 2-3 моделі |
| Ансамбль | Автоматичний (стеккінг) | Не будується |
| Latency інференсу | Середнє (ансамбль) | Низьке (одна модель) |
Порівняння конфігурацій Auto-sklearn
| Параметр | Швидке налаштування | Глибока оптимізація |
|---|---|---|
time_left_for_this_task |
1 година | 4-8 годин |
per_run_time_limit |
2 хвилини | 10 хвилин |
ensemble_size |
10 | 50 |
initial_configurations_via_metalearning |
25 | 50 |
| Типове покращення метрики | 5-10% | 15-20% |
Експорт і деплой
Збереження моделі
import pickle import joblib def export_autosklearn_model(automl, output_path: str): """ Auto-sklearn використовує sklearn Pipeline під капотом. Збереження через joblib — стандартний sklearn шлях. """ joblib.dump(automl, f'{output_path}/autosklearn_ensemble.pkl') best_model = list(automl.get_models_with_weights())[-1][1] joblib.dump(best_model, f'{output_path}/best_single_model.pkl') return {'ensemble_path': f'{output_path}/autosklearn_ensemble.pkl'} Для зниження розміру та прискорення інференсу застосовуємо pruning: залишаємо лише 5 найкращих моделей з ансамблю. Якщо latency критична, замінюємо ансамбль на одну модель (наприклад, GradientBoosting) — точність падає на 2-5%, але швидкість зростає в 10 разів.
Код з TimeSeriesSplit (потребує налаштування):
from autosklearn.classification import AutoSklearnClassifier from sklearn.model_selection import TimeSeriesSplit import numpy as np def run_autosklearn_timeseries(X: pd.DataFrame, y: pd.Series) -> dict: """ Для часових рядів не можна використовувати звичайну CV. Використовуємо custom resampling з TimeSeriesSplit. """ tscv = TimeSeriesSplit(n_splits=5) cv_splits = list(tscv.split(X)) automl = AutoSklearnClassifier( time_left_for_this_task=300, resampling_strategy='cv', resampling_strategy_arguments={'folds': 5}, seed=42 ) # Примітка: повноцінний timeseries CV в auto-sklearn v1 # потребує monkey-patching або перемикання на FLAML/Optuna automl.fit(X.values, y.values) return automl Ми гарантуємо, що при інтеграції Auto-sklearn метрики не будуть завищені через витік майбутнього в минуле. Для цього модифікуємо resampling_strategy або використовуємо альтернативні фреймворки. Отримайте консультацію інженера — опишіть задачу: розмір даних, тип моделі, вимоги по latency.







