Мир населен встраиваемыми моделями. Word2vec, Изображение в векторы и многое другое. После недавних новостей о извлечении знаний из научных статей я решил применить модель в мире финансов.
Прежде чем начать, я должен признать: я не получил много знаний, но все же узнал много вещей.
Сканирование холдингов ETF
Сначала мне нужна была информация о владении портфелем ETF. Не желая платить за такие базы данных, как efdb.com, я решил скопировать информацию прямо с веб-сайтов ETF.
Есть много поставщиков ETF, поэтому я рассмотрел некоторых из них:
- Blackrock (1,5 трлн.): вся информация на одной странице, портфолио можно загрузить в виде отдельных файлов csv, также доступны исторические данные за выбранные даты.
- Vanguard (1,1 млрд): нет загружаемых файлов .csv, все хранилища на отдельной вкладке с кнопками «Далее» / «Назад». Очень неудобно сдавать на слом.
- Invesco (200 млрд): очень сложно получить список etfs.
- Fidelity (14 миллиардов): на сегодняшний день худший сайт для сканирования: несколько вкладок, портфолио в отдельных всплывающих окнах, пакеты обновляются раз в месяц, файлы .csv отсутствуют.
Я еще не все проверил, но держу пари, что ни у одного из провайдеров нет API для скачивания. В конце концов, BlackRock - явный победитель: самый большой (около 800 ETF, охватывающих практически все, что стоит торговать по всему миру), самый удобный в использовании. Для краулера я использовал библиотеки selenium и multiprocessing.
Я загрузил 792 отдельных холдинга ETF по состоянию на 07.07.2019. Они здесь".
Подготовка данных
Проблемы с фильтрацией были следующие:
- Некоторые ETF, несмотря на разные названия, по сути, одинаковы. Например, AGGG и AGGH идентичны: первый в долларах США, второй - в евро.
- Множественные ETF - это ETF для облигаций, и количество выпусков облигаций превышает количество пакетов акций. Это естественно, поскольку типичная компания имеет один торгуемый капитал (забудьте на мгновение о привилегиях), но может иметь десятки выпусков облигаций с разными сроками погашения. Итак, я решил ограничить вселенную активов только акциями.
- Я ограничил количество etfs, которые имеют вес не менее 2%. Существует множество ETF, которые отслеживают большие индексы, такие как S&P 500 или Russel 2000, и ясно, что существует минимальная связь между акциями в индексах.
- В конце концов, я ограничил вселенную 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 к своим веб-сайтам.