Сегодня очень загруженный вторник. Часы на стене показывают 15:45. Когда вы снова смотрите на экран, ваш мобильный телефон звонит. Даже не глядя в телефон, вы понимаете, о чем идет речь. Каждый день, по несколько секунд, одно и то же скучное текстовое сообщение:

Hey Joe. Good afternoon. Your strategy VR1 triggered suggestions on your portfolio "US Stocks" for tomorrow's market:
BUY 100 shares APPL limit 185.10
SELL 50 shares GOOG limit 1,328.50
Reply with TRADE and I execute these for you.
Your friendly neighborhood robot, HAL.
HAL Trading
DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss and is not suitable for every investor. The valuation of futures, stocks and options may fluctuate, and, as a result, clients may lose more than their original investment. ...BLAH, BLAH, BLAH, BLAH.

Это круто. Технологии выводят рассылку спама и оскорбления на новый увлекательный уровень.

По сути, есть три возможных источника подобного сообщения. Во-первых, обычный человек, изображающий из себя робота. да. Не смейся. Очень распространенный. Это все злая экономика. Обычные люди намного дешевле ученых с огромной задолженностью по студенческим ссудам и тщательно подготовленными навыками, позволяющими им собирать хорошо спроектированных роботов.

Но, двигаясь вперед, второй и третий источники, скорее всего, являются роботами, прошедшими какое-то подкрепление или инкрементное обучение.

Здесь мы делаем паузу, чтобы можно было спросить: «Разве такой вариант использования не идеален для пакетного обучения с учителем?» На что другой может ответить: «Не совсем».

Торговые боты должны уметь действовать по мере поступления новых финансовых данных, а финансовые данные не являются своего рода циклическим прогнозом погоды или данными о недвижимости. Входящие торговые данные являются действительно новыми и нестационарными, поэтому есть вероятность, что модель, которую вы получаете сейчас, не та, которую вы получили несколько минут назад, или в последний час, или вчера. Это изменится, и чаще всего, если вы думаете, что знаете почему, вы не можете доказать почему (очень ненаучно). Использование моделей контролируемого обучения в подобном сценарии требует времени простоя для надлежащего обучения, а выбор лучших окон данных для обучения и тестирования - нетривиальная задача.

В обучении с подкреплением ваш робот является агентом, который действует в ответ на окружающую среду таким образом, чтобы максимизировать свое потенциальное вознаграждение (для торгового робота вознаграждением может быть прибыль от совершения торговых операций). Есть много интересных способов смоделировать вашего торгового бота как агента, особенно когда потенциальные выгоды предсказываются моделью инкрементального обучения, основанной на глубокой сети - гибрид обучения с подкреплением и глубокого инкрементального обучения. Это круто, очень профессионально, но, к сожалению, не входит в рамки этого быстрого примера.

Пошаговое обучение - это особый тип онлайн-обучения с учителем, при котором модель учится постепенно, кумулятивно, по мере поступления новых данных. В случае с торговым роботом задача прогнозирования на самом деле является прогнозированием регрессии, другими словами, зависит от последовательности данных, временного ряда. Существует два основных способа подготовки данных временного ряда для использования в модели.

Первый, называемый регрессией последовательности, прост:

Это естественный способ организации временных рядов, один тик за другим. Обратной стороной является то, что ваша модель должна принимать последовательности. Обычно это случается с RNN и вариантами, такими как LSTM, но поскольку мы стремились к более простой модели регрессора, (подробнее об этом вскоре) нельзя использовать регрессию последовательности.

Второй, называемый регрессией окна сдвига, компенсирует ограничение модели, сдвигая каждую выборку на окно размером n. Описать сложнее, чем показать, как это выглядит, поэтому вот оно:

Как мы упоминали ранее, мы будем использовать простую модель регрессора, называемую стохастическим градиентным спуском или SGD. Градиентный спуск - это модель оптимизации, подобная тому, как слепой пытается найти путь вниз по склону горы. Человек не может видеть топографию, поэтому он шаг за шагом идет в направлении с самым крутым падением. Точно так же алгоритм градиентного спуска ищет минимумы или максимумы шаг за шагом, учитывая значения в окрестности текущего значения.

Теперь давайте исследуем точность нашего робота. Упрощенное исследование торгового робота будет проходить через последовательность очень конкретных шагов:

  1. Извлекать данные и создавать синтетические объекты на основе существующих;
  2. Масштабировать некатегориальные признаки;
  3. Категориальные функции с горячим кодированием;
  4. Создает сдвигающееся окно функций из 5 столбцов для каждой из 2 функций, связанных с временными рядами;
  5. Подгоните модель SGD в режиме онлайн и сгенерируйте метрику квадратичной ошибки разницы между прогнозами и фактическими данными;
  6. Сгенерируйте экспоненциально взвешенную метрику ошибки в квадрате;
  7. Не масштабируйте некатегориальные черты на всякий случай, для целей интерпретации.

Поток QuantLET для этих шагов задается:

И вуаля! вот и все. Робот определен, и точность зафиксирована. Эта нотация финансовой модели основана на Sigma, и вы можете найти больше примеров во вкладке образцы в QuantLET и в предыдущих публикациях.

Из этого потока мы берем визуализацию прогресса точности нашего вновь созданного робота:

Синяя линия - это фактическая цена, а зеленая линия - это прогноз. Мы видим, что в начале временного ряда робот сходит с ума, пытаясь предсказать следующий тик, делая ужасные ошибки, пока он учится. В подростковом возрасте ошибка подвижного квадрата отражает это поведение. На этом пути случаются всплески неопределенности, и снова скользящая метрика фиксирует ошибки. Сглаженная метрика, которую мы называем «ewme», используется только для того, чтобы убедиться, что прошлые всплески неопределенности по-прежнему учитываются при будущих наблюдениях.

Пока все выглядит хорошо. Но я знаю, о чем вы думаете. Если мы сможем предсказать цены на следующий день, мы сможем заработать кучу денег, верно? Хорошо, попробуем ответить на этот вопрос:

В этой финансовой модели, которая намного ближе к «живому торговому роботу», мы генерируем сигналы продажи (или покупки) только в том случае, если разница в цене превышает (или ниже) определенного порога -. Однако эти сигналы выполняются только в том случае, если (а) у вас достаточно денег для покупки (б) у вас достаточно акций для продажи, и © ошибка скользящего квадрата не превышает порогового значения. Размер ставки оптимизирован для фиксированной доли портфеля. Первоначальный остаток денежных средств составляет 5000 долларов США, а стоимость транзакции - 7 долларов США.

Итак, каков результат?

Если серьезно, то это, очевидно, не так. Это упражнение делает нереалистичные предположения о рынке. С другой стороны, интересным открытием является то, насколько хорошо настроенная модель SGD может предсказать движение цены. Это была первоначальная мотивация этого упражнения, на составление которого у меня ушло всего около 15 минут, и я решил поделиться: более легкая (и, следовательно, более быстрая) альтернатива моделям глубокого обучения с сопоставимой производительностью в торговле.

Первоначально опубликовано на http://jfaleiro.wordpress.com 27 марта 2019 г.