Вы задаетесь вопросом, какое влияние повседневные новости могут иметь на фондовый рынок? В этом уроке мы собираемся исследовать и построить модель, которая читает 25 лучших мировых новостей от Reddit и предсказывает, будет ли индекс Dow Jones расти или падать в течение данного дня.

Прочитав этот пост, вы узнаете,

  • Как предварительно обработать текстовые данные для модели последовательности глубокого обучения.
  • Как использовать предварительно обученные векторы внедрения GloVe для инициализации слоя Keras Embedding.
  • Постройте модель ГРУ, которая может обрабатывать последовательности слов и может учитывать порядок слов.

А теперь приступим, дочитаем до конца, ведь будет секретный бонус.

Предварительная обработка текстовых данных

Для входящего текста мы собираемся объединить все 25 новостей в одну длинную строку на каждый день.

После этого мы собираемся преобразовать все предложения в нижний регистр, удалить символы, такие как числа и знаки препинания, которые не могут быть представлены позже вложениями GloVe.

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

Перед принятием решения о максимальной длине последовательности полезно визуализировать распределение длин по всем входным выборкам.

Имейте в виду, что чем больше максимальная длина, которую мы выбираем, тем больше времени потребуется на обучение модели, поэтому вместо выбора самой длинной длины последовательности в наших наборах данных, которая составляет около 700, мы собираемся выбрать 500 в качестве компромисса, чтобы покрыть большую часть текста по всем образцам, оставаясь при этом относительно коротким временем обучения.

Слой встраивания

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

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

Следующая функция обрабатывает первый шаг преобразования строк предложений в массив индексов. Сопоставление слова с индексом взято из файла внедрения GloVe, поэтому мы можем легко преобразовать индексы в векторы слов позже.

После этого мы можем реализовать предварительно обученный слой встраивания вот так.

  • Инициализируйте матрицу внедрения как массив нулей правильной формы. (Vocab_len, размерность векторов слов)
  • Заполните матрицу вложений всеми вложениями слов.
  • Определите слой внедрения Keras и make не обучается, установив для trainable значение False.
  • Установите вес слоя внедрения равным матрице внедрения.

Давайте быстро проверим слой встраивания, запросив векторное представление слова «кошка».

В результате получается 50-размерный массив. Вы можете дополнительно изучить словесные векторы и измерить сходство, используя косинусное сходство, или решить задачи аналогии слов, такие как «Мужчина для женщины», как «Король» для __.

Постройте и оцените модель

Задача модели состоит в том, чтобы взять последовательность новостных строк и провести бинарную классификацию, будет ли значение закрытия Dow Jones повышаться / не повышаться по сравнению с предыдущим значением закрытия. Он выводит «1», если значение выросло или остается неизменным, «0», если значение уменьшается.

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

Затем мы можем обучить оценивать модель.

Также полезно сгенерировать ROC или наш классификатор двоичной классификации, чтобы визуально оценить его производительность.

Наша модель примерно на 2,8% лучше, чем случайное предположение о рыночной тенденции.

Для получения дополнительной информации о ROC и AUC вы можете прочитать другой мой блог - Простое руководство по созданию графика ROC для классификатора Keras.

Заключение и дальнейшие размышления

В этом посте мы представили быстрый и простой способ создания модели Keras со слоем встраивания, инициализированным с помощью предварительно обученных встраиваний GloVe. Что-то, что вы можете попробовать после прочтения этого сообщения,

  • Сделайте веса слоя Embedding обучаемыми, обучите модель с самого начала, а затем сравните результат.
  • Увеличьте максимальную длину последовательности и посмотрите, как это может повлиять на производительность модели и время обучения.
  • Включите другие входные данные, чтобы сформировать модель Кераса с несколькими входами, поскольку другие факторы могут коррелировать с колебаниями фондовых индексов. Например, вам на рассмотрение предлагается индикатор MACD (осциллятор схождения / расхождения скользящих средних), индикатор Momentum. Чтобы иметь мульти-ввод, вы можете использовать Функциональный API Keras.

Есть идеи по улучшению модели? Комментируйте и делитесь своими мыслями.

Вы можете найти полный исходный код и данные для обучения здесь, в моем репозитории на Github.

Бонус для инвесторов

Если вы новичок во всем инвестиционном мире, как и я много лет назад, вы можете задаться вопросом, с чего начать, желательно инвестировать бесплатно с нулевыми комиссиями. Научившись торговать акциями бесплатно, вы не только сэкономите деньги, но и ваши инвестиции потенциально увеличатся быстрее. Robinhood, одно из лучших приложений для инвестирования, делает именно это, независимо от того, покупаете ли вы только одну или 100 акций, никаких комиссий. Он был построен с нуля, чтобы быть максимально эффективным за счет сокращения количества жира и передачи экономии потребителям. Присоединяйтесь к Robinhood, и мы оба получим акции, такие как Apple, Ford или Sprint, бесплатно. Убедитесь, что вы используете мою общую ссылку.

Первоначально опубликовано на www.dlology.com.