Система авто-переобучения ML для криптотрейдинга

ML-модели для криптотрейдинга быстро устаревают: рыночные режимы меняются за часы, корреляции разрушаются, регрессоры съезжают. После очередного халвинга биткоина модели одного из клиентов показали резкое падение directional accuracy с 60% до 38% за неделю — убыток составил более $100,000. Ручное пе

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1012

ML-модели для криптотрейдинга быстро устаревают: рыночные режимы меняются за часы, корреляции разрушаются, регрессоры съезжают. После очередного халвинга биткоина модели одного из клиентов показали резкое падение directional accuracy с 60% до 38% за неделю — убыток составил более $100,000. Ручное переобучение занимает часы, а рынок не ждёт. Мы разрабатываем системы автоматического переобучения, которые обнаруживают деградацию и запускают новый тренинг без ручного вмешательства, сохраняя uptime торговли. Экономия капитала за счёт своевременного реагирования достигает 30% (в среднем $50,000 для портфеля $150,000).

Типы триггеров переобучения

Триггер Условие Типичный порог
Performance drop directional accuracy < threshold за 14 дней 0.52 (52%)
Feature drift (PSI) PSI > 0.25 хотя бы по одной фиче PSI > 0.25
Schedule дней с последнего обучения >= N 7 дней

Performance-based trigger проверяет, как часто знак предсказания совпадает со знаком фактического изменения цены за rolling window. Если accuracy падает ниже 52% при минимум 100 прогнозах — запускаем переобучение.

Оптимальная частота переобучения

Частота переобучения зависит от волатильности рынка и устойчивости признаков. Для моделей на минутных таймфреймах переобучение может требоваться каждые 24–48 часов, для дневных — раз в 7–14 дней. Но жёсткое расписание без учёта дрифта фич — риск. Комбинируя performance-триггер и PSI, мы сокращаем потери капитала до 15% по сравнению с переобучением только по расписанию.

Как мы детектируем дрифт фич?

Для фичевого дрифта используем Population Stability Index (PSI). Согласно Wikipedia, PSI — стандарт в индустрии для сравнения распределений. Мы вычисляем PSI для каждой фичи между последними 30 днями и эталонным периодом. Если PSI превышает 0.25 хотя бы по одной фиче — срабатывает триггер. На практике PSI-триггер обнаруживает дрифт в 2 раза быстрее, чем простая проверка accuracy.

Метод обнаружения дрифта Задержка реакции Ложные срабатывания
Только accuracy 3–5 дней после просадки Низкие
PSI + accuracy 1–2 дня до просадки Средние (настраиваются)

Сочетание триггеров: почему одного недостаточно

Performance-триггер реагирует только на падение accuracy — это уже следствие. А дрифт фич часто появляется за несколько дней до падения метрик. Комбинируя оба подхода, мы ловим проблему на ранней стадии и сокращаем потери капитала до 15%.

Реализация автоматического переобучения за 5 шагов

  1. Мониторинг в реальном времени — ежедневная проверка триггеров: performance, PSI, schedule.
  2. Запуск пайплайна — при срабатывании любого триггера Prefect/Airflow запускает DAG.
  3. Загрузка и подготовка данных — из ClickHouse/PostgreSQL загружаются данные за последние 365 дней.
  4. Обучение с walk-forward валидацией — 5 фолдов, 60 дней теста, gap 24 часа. Все эксперименты логируются в MLflow.
  5. Валидация и hot swap — новая модель сравнивается с текущей по accuracy, Sharpe ratio и drawdown. Если проходит — заменяет старую без остановки сигналов.

Как мы строим pipeline переобучения

import mlflow from prefect import flow, task @task def fetch_training_data(symbol, lookback_days=365): """Загружаем данные для переобучения""" end_date = datetime.utcnow() start_date = end_date - timedelta(days=lookback_days) # Загружаем из ClickHouse/PostgreSQL return load_ohlcv_data(symbol, start_date, end_date) @task def prepare_features(raw_data): """Feature engineering""" from feature_pipeline import FeatureEngineer engineer = FeatureEngineer() return engineer.create_all_features(raw_data) @task def train_and_evaluate(features_df, target_col, model_config): """Обучение модели с walk-forward validation""" from training import WalkForwardTrainer trainer = WalkForwardTrainer( n_splits=5, test_size=60, # 60 дней тестовой выборки gap=24 # gap между train и test (часы) ) with mlflow.start_run(): model, metrics = trainer.fit_evaluate(features_df, target_col, model_config) # Логируем метрики в MLflow mlflow.log_metrics(metrics) mlflow.log_params(model_config) mlflow.sklearn.log_model(model, 'model') run_id = mlflow.active_run().info.run_id return model, metrics, run_id @task def validate_and_promote(model, metrics, run_id, min_metrics): """Проверяем качество и решаем о деплое""" passes_validation = ( metrics.get('directional_accuracy', 0) >= min_metrics['accuracy'] and metrics.get('sharpe_ratio', 0) >= min_metrics['sharpe'] and metrics.get('max_drawdown', 1) <= min_metrics['max_drawdown'] ) if passes_validation: # Регистрируем как новую Production версию client = mlflow.tracking.MlflowClient() model_version = client.create_model_version( name='crypto_predictor', source=f'runs:/{run_id}/model', run_id=run_id ) client.transition_model_version_stage( 'crypto_predictor', model_version.version, 'Production' ) return True, model_version.version return False, None @flow(name="model_retraining_pipeline") def retrain_model_pipeline(symbol, model_config, min_metrics): raw_data = fetch_training_data(symbol) features_df = prepare_features(raw_data) model, metrics, run_id = train_and_evaluate(features_df, 'target', model_config) promoted, version = validate_and_promote(model, metrics, run_id, min_metrics) return {'promoted': promoted, 'version': version, 'metrics': metrics} 

Почему hot swap критичен?

При успешном обучении нужно заменить старую модель без остановки торговли. Используем асинхронную блокировку:

class ModelHotSwapper: def __init__(self): self.current_model = None self.model_version = None self._lock = asyncio.Lock() async def swap_model(self, new_model, new_version): """Thread-safe замена модели""" async with self._lock: old_model = self.current_model old_version = self.model_version self.current_model = new_model self.model_version = new_version # Логируем смену модели logger.info(f"Model swapped: {old_version} -> {new_version}") # Старую модель можно выгрузить из памяти del old_model async def predict(self, features): async with self._lock: return self.current_model.predict(features) 

Расписание и оркестрация

Prefect или Airflow запускают ежедневный проверочный пайплайн в 00:00 UTC:

  1. Проверка performance trigger
  2. Проверка PSI drift trigger
  3. Проверка schedule trigger (если > 7 дней с последнего обучения)

Если хотя бы один триггер сработал → запускается retraining pipeline. При успешном обучении → hot swap модели → уведомление в Telegram.

Walk-forward — это скользящая перекрестная валидация для временных рядов. Разбиваем историю на 5 последовательных сегментов: каждый тренируем на ранних данных, тестируем на следующих 60 днях. Между тренировочным и тестовым окнами — gap 24 часа, чтобы избежать утечки данных из-за временной автокорреляции. Так моделируем реальные условия работы модели в будущем.

Что входит в нашу работу

  • Проектирование и реализация trigger-логики (performance, PSI, schedule)
  • Интеграция с вашим хранилищем данных (ClickHouse, PostgreSQL, S3)
  • Настройка Prefect/Airflow DAG с мониторингом и алертами
  • MLflow трекинг экспериментов и версионирование моделей
  • Реализация zero-downtime hot swap
  • Документация и обучение команды
  • Гарантия поддержки в течение 3 месяцев после внедрения
  • Автодеплой модели при успешной валидации

Получите консультацию наших инженеров для оценки вашего проекта. Закажите систему авто-переобучения и повысьте устойчивость вашей торговой стратегии.