Простой тренинг по временным рядам MLP дает результаты нестандартной средней линии

Я пытаюсь поиграть с простыми предсказаниями временного ряда. Учитывая количество входов (1Min ticks), Net должен попытаться предсказать следующий. Я обучил 3 сети с разными настройками, чтобы проиллюстрировать мою проблему:

введите описание изображения здесь

Справа вы можете увидеть 3 тренера MLP – случайным образом названным и закодированным цветом, с некоторой статистикой обучения. Слева – график прогнозов, сделанных этими сетями, и фактические данные валидации в белом. Этот сюжет был сделан путем прохождения каждого тика данных валидации (белый), подачи 30 | 4 | 60 (Nancy | Kathy | Wayne) предыдущих тиков в сеть и построения прогноза, который он будет прогнозировать на месте текущего тика.

Настройки многослойного персептрона (настройки Nancy | Kathy | Wayne):

Геометрия: 2×30 | 4 | 60 входных узлов -> 30 | 4 | 60 узлов скрытого слоя -> 2 выхода
Количество эпох: 10 | 5 | 10
Скорость обучения: 0,01
Момент: 0,5 | 0,9 | 0,5
Нелинейность: Rectify
Потеря: ошибка в квадрате

Похоже, что с большим количеством тренировок – прогнозы приближаются к какой-то средней линии, чего я не ожидал вообще. Я ожидал, что прогнозы будут несколько близки к данным валидации с некоторым пределом погрешности.
Я собираю неправильную модель, недопонимание некоторых основных понятий машинного обучения или что-то не так в лазаньи / аано?

Быстрые ссылки на наиболее релевантные (на мой взгляд) части кода:

  • Определение геометрии MLP
  • Компиляция функций
  • Обучение и проверка
  • Создание MLP
  • Анализ синтаксических данных CSV

И вот полные, более или менее источники:

  • Данные, используемые для обучения в формате – дата, открытые, высокие, низкие, закрытые, объем – используются только дата, максимум и минимум
  • Модуль MLP
  • Соответствующие MLP- модули модуля Gui

Прежде всего, я хочу поблагодарить вас за использование нелинейного исправления. Согласно тому, что полагает Джеффри Хинтон, изобретатель машины Больцмана, нелинейный выпрямитель – лучшая нога для деятельности человеческого мозга.

Но для других частей, которые вы выбрали, я предлагаю вам изменить архитектуру NN. Для прогнозов фондового рынка вы должны использовать некоторые повторяющиеся NN: самыми легкими кандидатами могут быть сети Elman или Jordan. Или вы можете попробовать более сложные, например, сеть LSTM.

Еще одна часть рекомендаций, я предлагаю изменить то, что вы кормите в NN. В общем, я рекомендую применять масштабирование и нормализацию. Например, не кормите NN сырой ценой. Измените его одним из следующих способов (эти предложения не написаны на камне): 1. Подайте в NN проценты изменений цены. 2. Если вы загружаете значения NN 30 и хотите предсказать два значения, то вычтите из 30 + 2 значений минимум из всех 32 значений и попробуйте предсказать 2 значения, но исходя из 30. Затем просто добавьте к результату минимум 32 значения.

Не подавайте только даты в NN. Он говорит NN ничего о предсказании. Вместо этого укажите дату и время NN как категориальное значение. Категорически означает, что вы преобразовываете дату и время в более чем одну запись. Например, вместо предоставления NN 2016/09/10 вы можете рассмотреть некоторые из следующих.

  1. год торговли, скорее всего, не даст никакой полезной информации. Таким образом, вы можете опустить год торговли.
  2. 09 – число месяцев или около сентября. У вас есть выбор: подавать в NN число месяца, но я настоятельно рекомендую вам сделать 12 входов в NN, а в случае янвского – дать сначала вход NN 1 и нули для остальных одиннадцати. Таким образом, вы будете тренировать свою сеть, чтобы отделить торговый период в январе с торгового периода в июне или декабре. Также я предлагаю сделать категорический ввод дня недели таким же образом. Потому что торговля в понедельник отличается от торговли в пятницу, особенно в день NFP.
  3. В течение нескольких часов я предлагаю использовать кодировку с периодами 6-8 часов. Это поможет вам обучить сеть принимать во внимание различные торговые сессии: Азия, Франкфурт, Лондон, Нью-Йорк.
  4. Если вы решите подать в NN некоторые индикаторы, то для некоторых индикаторов рассмотрите кодирование термометра. Как правило, для таких индикаторов, как ADX, требуется кодирование термометра.

Согласно вашему вопросу в комментариях о том, как использовать минимум, я приведу вам упрощенный пример. Предположим, вы хотите использовать для обучения NN после близких цен на eur / usd:
1.1122, 1.1132, 1.1152, 1.1156, 1.1166, 1.1173, 1.1153, 1.1150, 1.1152, 1.1159. Вместо размера окна для обучения 30 я продемонстрирую обучение с размером окна 3 (просто для простоты) и размером окна прогноза 2.
В общей сложности данные, используемые для прогнозирования, равны 3. Выход будет равен 2. Для обучения мы будем использовать первые 5 значений или:
1.1122, 1.1132, 1.1152, 1.1156, 1.1166
затем еще 5 значений или:
1.1132, 1.1152, 1.1156, 1.1166, 1.1173
В первом окне минимальное значение: 1.1122.
Затем вы вычитаете 1.1122 из каждого значения:
0, 0,002, 0,003, 0,0033, 0,0034. В качестве входных данных вы подаете в NN 0, 0,002, 0,003. В качестве вывода из NN вы ожидаете 0,0033, 0,0034. Если вы хотите, чтобы он учился намного быстрее, подайте NN нормализованные и масштабированные значения. Затем каждый раз вам нужно выполнить де-нормализацию и де-масштабирование входов.

Другой способ, подать в NN процент от изменения цены. Дайте мне знать, если вам нужен образец.

И еще один важный совет. Не используйте только NN для совершения торговли. Никогда!!! Лучший способ сделать это – придумать какую-то систему с некоторым процентом успеха. Например, 30%. Затем используйте NN, чтобы увеличить успешный процент успеха до 60%.

Я также хочу предоставить вам также пример кодирования термометра для некоторых индикаторов. Рассмотрим индикатор ADX и следующие примеры:

a.> 10> 20> 30> 40
1 0 0 0
б. > 10> 20> 30> 40
1 1 0 0
пример a обеспечивает ввод в NN с ADX больше 10. Пример b обеспечивает ввод в NN с ADX больше 20.
Вы можете модифицировать кодирование термометра для обеспечения ввода стохастических значений. Как правило, стохастическое значение имеет значения в диапазонах 0-20 и 80-100 и в редких случаях в диапазоне 20 – 80. Но, как всегда, вы можете попробовать и посмотреть.