Мир населен встраиваемыми моделями. Word2vec, Изображение в векторы и многое другое. После недавних новостей о извлечении знаний из научных статей я решил применить модель в мире финансов.

Прежде чем начать, я должен признать: я не получил много знаний, но все же узнал много вещей.

Сканирование холдингов ETF

Сначала мне нужна была информация о владении портфелем ETF. Не желая платить за такие базы данных, как efdb.com, я решил скопировать информацию прямо с веб-сайтов ETF.

Есть много поставщиков ETF, поэтому я рассмотрел некоторых из них:

  1. Blackrock (1,5 трлн.): вся информация на одной странице, портфолио можно загрузить в виде отдельных файлов csv, также доступны исторические данные за выбранные даты.
  2. Vanguard (1,1 млрд): нет загружаемых файлов .csv, все хранилища на отдельной вкладке с кнопками «Далее» / «Назад». Очень неудобно сдавать на слом.
  3. Invesco (200 млрд): очень сложно получить список etfs.
  4. Fidelity (14 миллиардов): на сегодняшний день худший сайт для сканирования: несколько вкладок, портфолио в отдельных всплывающих окнах, пакеты обновляются раз в месяц, файлы .csv отсутствуют.

Я еще не все проверил, но держу пари, что ни у одного из провайдеров нет API для скачивания. В конце концов, BlackRock - явный победитель: самый большой (около 800 ETF, охватывающих практически все, что стоит торговать по всему миру), самый удобный в использовании. Для краулера я использовал библиотеки selenium и multiprocessing.

Я загрузил 792 отдельных холдинга ETF по состоянию на 07.07.2019. Они здесь".

Подготовка данных

Проблемы с фильтрацией были следующие:

  1. Некоторые ETF, несмотря на разные названия, по сути, одинаковы. Например, AGGG и AGGH идентичны: первый в долларах США, второй - в евро.
  2. Множественные ETF - это ETF для облигаций, и количество выпусков облигаций превышает количество пакетов акций. Это естественно, поскольку типичная компания имеет один торгуемый капитал (забудьте на мгновение о привилегиях), но может иметь десятки выпусков облигаций с разными сроками погашения. Итак, я решил ограничить вселенную активов только акциями.
  3. Я ограничил количество etfs, которые имеют вес не менее 2%. Существует множество ETF, которые отслеживают большие индексы, такие как S&P 500 или Russel 2000, и ясно, что существует минимальная связь между акциями в индексах.
  4. В конце концов, я ограничил вселенную ETF, которые после всей фильтрации имеют как минимум 10 активов. Финальный набор -146 ETF.

Модель ETF2Vec

Я использовал простейшую модель из pytorch tutorial с немного измененными названиями:

Обычно слова и контекст слов в предложениях вводятся в модель word2vec, чтобы найти что-нибудь связанное. В моем случае холдинги ETF - это слова, а разные ETF - предложения. Слова идентифицируются по номеру ISIN (подробности см. В Википедии), который является уникальным для каждой ценной бумаги.

Алгоритм поиска соседей основан на весах активов в ETF. Я использовал веса как вероятности для выбора с помощью numpy.random.choice ()

etf_list имеет форму списка dic of dic: [ETF_1: {'ISIN': [], 'Weight': [], 'Sector': [], 'Ticker': []} ,…].

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

У меня было 1181 актив в 146 etfs, и я сгенерировал 2153 примера, что означает, что в среднем каждый актив встречается 1,82 раза за эпоху. Это означало, что многие акции произошли только один раз.

Встраиваемое пространство = 10, Context_size = 10

После примерно 100-летнего периода обучения ошибка перестала уменьшаться.

Визуализация

Я все визуализировал в красивом инструменте анализа Google: https://projector.tensorflow.org

Чтобы сопоставить данные, я создал векторные вложения и мета-векторы с (информация о секторе и тикере).

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

Несмотря на кажущееся хаотичное распределение активов, акции сгруппированы частично логично: Coca-Cola сгруппирована с Pepsico и Procter & Gamble.

Но, несмотря на кажущиеся близкие отношения, Coca-Cola и Pepsico не так тесно связаны в исходном векторном пространстве.

Векторная математика

Самая забавная часть вложения - это векторная математика. Итак, первоначальной целью моего исследования было выяснить, что произойдет, если вычесть, например, Pepsico из Coca-Cola или сложить вместе GE и McDonalds?

Coca-Cola - PepsiCo = Energy Stocks

Что ж, результат отнюдь не скучный: ConocoPhillips, Sinopec и Manila Electric Company. Все три акции подключены к энергии.

Заключение и выводы

Я считаю, что модель встраивания применима в мире финансов. Кто знает, что мы можем увидеть, если модель будет включать больше данных?

Кроме того, я узнал кучу вещей об извлечении данных из Интернета и об отношении провайдеров ETF к своим веб-сайтам.