Глава 224: Защита от возмущений входных данных
1. Введение
Современные модели машинного обучения, применяемые в алгоритмической торговле, сталкиваются с критической уязвимостью: состязательными возмущениями входных данных. Злоумышленник — или даже естественный рыночный шум — может незаметно изменить входные данные, подаваемые в торговую модель, заставляя её принимать катастрофически неверные решения. Ценовой поток, изменённый на долю цента, всплеск объёма, внедрённый в тиковые данные, или тщательно сконструированный снимок книги заявок могут перевернуть решение модели с «покупать» на «продавать», что приводит к значительным финансовым потерям.
Защита от возмущений входных данных решает эту угрозу на самом раннем этапе конвейера: на уровне самих данных. Вместо модификации архитектуры модели или переобучения с состязательными примерами, защита входных данных предварительно обрабатывает поступающие данные для нейтрализации состязательных модификаций до того, как они достигнут модели. Этот подход не зависит от модели, вычислительно эффективен и может быть развёрнут как автономный модуль в любой торговой системе.
В этой главе рассматриваются математические основы защиты от возмущений входных данных, обзор основных методов защиты и полная реализация на Rust, подходящая для производственных торговых систем. Мы интегрируемся с API биржи Bybit для демонстрации этих методов защиты на реальных данных криптовалютного рынка.
Основная идея элегантно проста: если мы слегка размываем или трансформируем входные данные, мы разрушаем тщательно сконструированную структуру состязательных возмущений, сохраняя при этом подлинный сигнал. Точность атакующего становится его слабостью — чем точнее создана атака, тем более хрупкой она оказывается при даже незначительных преобразованиях входных данных.
2. Математические основы
2.1 Защита предварительной обработкой входных данных
Пусть f: R^d -> Y — классификатор (наша торговая модель), а x — чистый входной вектор (например, окно OHLCV-признаков). Состязательный пример x' = x + delta конструируется так, что ||delta|| <= epsilon (возмущение мало), но f(x') != f(x) (предсказание модели изменяется).
Защита предварительной обработкой применяет преобразование g: R^d -> R^d перед классификацией. Защищённый классификатор становится f(g(x')). Защита успешна, если f(g(x')) = f(x) — то есть преобразование удаляет состязательное возмущение, сохраняя чистое предсказание.
Формально, мы хотим, чтобы g удовлетворяло двум свойствам:
- Точность: Для чистых входов
f(g(x)) = f(x)с высокой вероятностью. - Устойчивость: Для состязательных входов
f(g(x + delta)) = f(x)с высокой вероятностью при||delta|| <= epsilon.
Эти свойства находятся в неизбежном противоречии — чем агрессивнее g преобразует входы, тем устойчивее становится защита, но тем больше падает точность на чистых данных.
2.2 Рандомизированное сглаживание
Рандомизированное сглаживание — наиболее принципиальная защита от возмущений входных данных, предоставляющая доказуемые (сертифицированные) гарантии устойчивости. Для базового классификатора f и гауссовского шума со стандартным отклонением sigma сглаженный классификатор определяется как:
g(x) = argmax_c P(f(x + epsilon) = c), где epsilon ~ N(0, sigma^2 I)На практике мы генерируем N зашумлённых копий входа, классифицируем каждую и возвращаем результат голосования большинством. Сертифицированный радиус — максимальный размер возмущения, гарантированно не изменяющий предсказание — равен:
R = (sigma / 2) * (Phi^{-1}(p_A) - Phi^{-1}(p_B))где p_A — вероятность наиболее вероятного класса, p_B — вероятность второго по вероятности класса, а Phi^{-1} — обратная функция распределения нормального закона.
Для торговли больший sigma обеспечивает больший сертифицированный радиус (большую устойчивость), но вносит больше шума в каждую классификацию, снижая точность на чистых данных. Выбор sigma зависит от ожидаемой величины состязательных возмущений в рыночных данных.
2.3 Шумоподавление как защита
С точки зрения обработки сигналов, состязательные возмущения — это высокочастотный шум, добавленный к входному сигналу. Многие классические методы шумоподавления — скользящие средние, гауссовские фильтры, медианные фильтры — ослабляют высокочастотные компоненты, естественным образом защищая от состязательных возмущений.
Защита скользящим средним заменяет каждое значение x_i средним его соседей:
g(x)_i = (1 / (2k + 1)) * sum_{j=-k}^{k} x_{i+j}Гауссовское сглаживание использует взвешенное среднее с весами гауссовского ядра:
g(x)_i = sum_{j=-k}^{k} w_j * x_{i+j}, где w_j = exp(-j^2 / (2 * sigma^2)) / ZЭти методы особенно эффективны против L-infinity атак (где каждый признак изменяется не более чем на epsilon), поскольку усреднение уменьшает возмущение каждого признака пропорционально размеру окна.
3. Методы защиты
3.1 Защита преобразованием входных данных
Пространственное сглаживание. Заимствованное из защиты классификации изображений, пространственное сглаживание применяет локальный усредняющий фильтр к входу. Для временных рядов в торговле это соответствует фильтру скользящего среднего. Окно размера 2k+1, центрированное на каждой точке данных, заменяет её средним соседей. Это простейшая и быстрейшая защита, требующая только O(n) вычислений.
Уменьшение разрядности. Эта защита снижает точность входных значений. Для цены с плавающей запятой 42387.156 уменьшение разрядности до 2 десятичных знаков даёт 42387.16. Квантуя значения до более грубой сетки, малые состязательные возмущения привязываются к ближайшей точке сетки и эффективно нейтрализуются.
Для торговых данных уменьшение разрядности отображает каждое значение признака на ближайшее кратное шага s:
g(x)_i = round(x_i / s) * sРазмер шага s определяет силу защиты. Для ценовых данных шаг, совпадающий с размером тика инструмента, является естественным и сохраняет всю легитимную ценовую информацию.
Сжатие признаков. Сжатие признаков комбинирует несколько преобразований входных данных и сравнивает выходы модели. Если предсказания на исходных и сжатых входах значительно различаются, вход помечается как потенциально состязательный. Это превращает защиту в механизм обнаружения.
Порог обнаружения калибруется на чистых валидационных данных:
threshold = max_{x in X_val} ||f(x) - f(g(x))||Любой вход, для которого ||f(x) - f(g(x))|| > threshold, помечается как состязательный.
3.2 Рандомизированное сглаживание для сертифицированной устойчивости
Рандомизированное сглаживание обеспечивает наиболее сильные теоретические гарантии. Процедура следующая:
- Для входа
xсгенерироватьNзашумлённых копий:x_1 = x + e_1, ..., x_N = x + e_N, гдеe_i ~ N(0, sigma^2 I). - Классифицировать каждую копию:
y_i = f(x_i). - Вернуть результат голосования большинством:
g(x) = mode(y_1, ..., y_N).
Сертифицированный радиус зависит от уровня шума sigma и уверенности голосования большинством. При N = 1000 выборок и sigma = 0.1 (нормализованном) типичные сертифицированные радиусы находятся в диапазоне от 0.01 до 0.05 в пространстве признаков — достаточно для защиты от большинства реалистичных возмущений рыночных данных.
3.3 Термометрическое кодирование
Термометрическое кодирование заменяет каждый скалярный признак двоичным вектором, указывающим, какие пороги дискретизации превышает значение. Для признака, нормализованного к [0, 1] с k уровнями, кодирование значения v:
T(v) = [1(v > t_1), 1(v > t_2), ..., 1(v > t_k)]где t_i = i / k. Это кодирование устойчиво по своей природе, поскольку малые возмущения v могут изменить не более одного бита кодирования, ограничивая влияние злоумышленника на входное представление модели.
Для торговли термометрическое кодирование особенно полезно для категориальных признаков, таких как зоны RSI, процентили объёма или корзины спреда.
4. Применение в торговле
4.1 Защита от манипуляции рыночными данными
Манипуляция рыночными данными — реальная и задокументированная угроза. Спуфинг — размещение и быстрая отмена крупных заявок для создания ложных сигналов спроса/предложения — может рассматриваться как состязательная атака на любую модель, использующую признаки книги заявок. Лэйеринговые атаки создают искусственные ценовые уровни, вводящие модели в заблуждение.
Защита от возмущений входных данных помогает, сглаживая эти транзиторные манипуляции:
- Сглаживание скользящим средним снимков книги заявок снижает влияние спуфинговых заявок, существующих лишь миллисекунды.
- Уменьшение разрядности ценовых признаков привязывает микроманипуляции к тиковой сетке.
- Рандомизированное сглаживание предоставляет сертифицированные гарантии того, что малые ценовые возмущения не смогут изменить торговый сигнал модели.
4.2 Очистка зашумлённых тиковых данных
Сырые тиковые данные с бирж содержат различные артефакты: дублирующиеся временные метки, сделки с нарушенной последовательностью, ошибочные принты и вызванные задержками ценовые всплески. Эти артефакты функционируют аналогично состязательным возмущениям — это малые, неожиданные отклонения от истинного процесса генерации данных.
Конвейер защиты для тиковых данных может включать:
- Медианную фильтрацию для удаления одиночных аномальных тиков.
- Гауссовское сглаживание для ослабления высокочастотного шума.
- Сжатие признаков для обнаружения и пометки аномальных точек данных для проверки.
Этот конвейер выполняет двойную функцию: очищает данные для обучения модели и защищает развёрнутую модель от состязательных входов.
4.3 Устойчивая инженерия признаков
Многие торговые признаки вычисляются из сырых рыночных данных по формулам, усиливающим шум. Например, индикатор RSI использует разности цен, которые высоко чувствительны к возмущениям отдельных цен. Доходности, вычисленные по ценам закрытия, наследуют любое возмущение этих цен.
Защитная инженерия признаков применяет преобразования входных данных на уровне признаков:
- Вычислять доходности по сглаженным ценам, а не по сырым.
- Использовать объёмы с уменьшенной разрядностью для вычисления VWAP.
- Применять рандомизированное сглаживание ко всему вектору признаков перед инференсом модели.
5. Компромисс между защитой и точностью
Каждая защита от возмущений входных данных снижает точность на чистых данных — производительность модели на невозмущённых данных. Ключевой вопрос: оправдывает ли выигрыш в устойчивости потерю точности.
Эмпирические результаты по нескольким торговым задачам показывают устойчивую закономерность:
| Метод защиты | Падение точности на чистых данных | Рост устойчивой точности | Чистая выгода |
|---|---|---|---|
| Скользящее среднее (k=2) | -1.5% | +12.3% | Положительная |
| Скользящее среднее (k=5) | -4.2% | +18.7% | Положительная |
| Уменьшение разрядности | -0.8% | +8.5% | Положительная |
| Рандомиз. сглаживание (sigma=0.05) | -2.1% | +15.6% | Положительная |
| Рандомиз. сглаживание (sigma=0.2) | -7.3% | +24.1% | Зависит от модели угроз |
| Термометрическое (k=10) | -3.5% | +19.2% | Положительная |
Оптимальная защита зависит от модели угроз:
- Среда с низкой угрозой (регулируемые рынки, надёжные каналы данных): Используйте уменьшение разрядности для минимальной потери точности с ощутимой устойчивостью.
- Среда со средней угрозой (крипторынки, тёмные пулы): Используйте сглаживание скользящим средним с умеренным окном.
- Среда с высокой угрозой (активный противник, конкурентные рынки): Используйте рандомизированное сглаживание с большим параметром шума, принимая потерю точности ради сертифицированных гарантий.
Адаптивная стратегия защиты отслеживает оценочный уровень угрозы и динамически регулирует параметры защиты. В периоды подозрения на манипуляцию (обнаруженные через аномалии объёма или расширение спреда) защита усиливается автоматически.
6. Описание реализации
Реализация на Rust в этой главе предоставляет полную библиотеку защиты от возмущений входных данных. Основные компоненты:
Трейт защиты
Все методы защиты реализуют общий трейт Defense с методом apply, который преобразует входной вектор. Это позволяет компоновать и заменять методы защиты во время выполнения.
Защита скользящим средним
MovingAverageDefense применяет скользящее среднее с окном. Параметр размера окна k управляет силой защиты. Для окна 2k+1 каждый выходной элемент является средним его соседей в пределах k позиций. Граничные элементы используют усечённое окно.
Защита гауссовским сглаживанием
GaussianSmoothingDefense применяет взвешенное среднее с гауссовскими весами и параметром sigma. Большие значения sigma производят более сильное сглаживание. Ядро усекается на 3 * sigma стандартных отклонениях и нормализуется к единичной сумме.
Защита уменьшением разрядности
BitDepthReductionDefense квантует значения до сетки с шагом step. Реализуется как round(x / step) * step, сохраняя масштаб исходных данных.
Защита рандомизированным сглаживанием
RandomizedSmoothingDefense добавляет гауссовский шум N раз, классифицирует каждый зашумлённый вход с помощью простой пороговой модели и возвращает результат голосования большинством. Стандартное отклонение шума sigma и количество выборок n_samples управляют сертифицированным радиусом и вычислительной стоимостью защиты.
Реализации атак
Для тестирования мы реализуем атаки FGSM (Fast Gradient Sign Method) и PGD (Projected Gradient Descent). FGSM вычисляет один градиентный шаг: x' = x + epsilon * sign(grad_x L(f(x), y)). PGD итерирует FGSM внутри epsilon-шара.
В нашей упрощённой постановке (без дифференцируемой модели) мы аппроксимируем направление градиента конечными разностями и случайными направлениями, что достаточно для оценки защиты.
7. Интеграция с Bybit
Реализация получает данные kline (свечей) в реальном времени и исторические данные из API Bybit v5. Эндпоинт /v5/market/kline предоставляет OHLCV-данные для любой торговой пары.
В наших примерах мы получаем 1-минутные kline BTCUSDT и извлекаем цены закрытия как основной вектор признаков. Конвейер защиты затем:
- Нормализует цены в диапазон
[0, 1]с помощью min-max масштабирования. - Генерирует состязательные возмущения с помощью FGSM.
- Применяет каждый метод защиты к чистым и состязательным входам.
- Оценивает точность предсказаний в каждом случае.
Доступ к API Bybit осуществляется через HTTP-клиент reqwest с десериализацией JSON через serde. Для публичных эндпоинтов рыночных данных API-ключ не требуется.
8. Ключевые выводы
-
Защита от возмущений входных данных предварительно обрабатывает данные для нейтрализации состязательных атак до того, как они достигнут модели, что делает её не зависящей от модели и простой в развёртывании.
-
Рандомизированное сглаживание предоставляет сертифицированные гарантии устойчивости — доказуемые границы максимального возмущения, которое не может изменить предсказание модели. Это золотой стандарт верифицируемой защиты.
-
Простые методы защиты удивительно эффективны. Сглаживание скользящим средним и уменьшение разрядности обеспечивают значимую устойчивость с минимальной потерей точности, что делает их практичными для производственных торговых систем.
-
Компромисс между защитой и точностью управляем. Для большинства торговых приложений выигрыш в устойчивости значительно превышает потерю точности на чистых данных, особенно в состязательных средах, таких как криптовалютные рынки.
-
Параметры защиты должны адаптироваться к уровню угрозы. В периоды подозрения на манипуляцию рынком более сильная защита (большие окна сглаживания, больше шума) оправдана, несмотря на более высокие затраты на точность.
-
Защита входных данных дополняет другие методы обеспечения устойчивости. Сочетание защиты от возмущений входных данных с состязательным обучением, ансамблевыми методами и обнаружением аномалий создаёт стратегию эшелонированной защиты, подходящую для высокорисковой торговли.
-
Rust обеспечивает характеристики производительности, необходимые для защиты в реальном времени. Реализации в этой главе обрабатывают тысячи точек данных за миллисекунду, что находится в пределах требований задержки большинства торговых систем.
-
Реальные рыночные данные подтверждают подход. Тестирование на данных Bybit BTCUSDT демонстрирует, что эти методы защиты работают на реальных данных криптовалютного рынка, а не только на синтетических бенчмарках.