Жадность и страх - две движущие силы на фондовом рынке. Оказывается, положительные и отрицательные настроения в сообщениях в социальных сетях, например в твитах, можно использовать для прогнозирования ежедневных движений цен на акции.

Хотя новости, безусловно, влияют на цены на фондовом рынке, не менее важную роль могут играть состояния или настроения общественности. Из психологических исследований мы знаем, что эмоции, помимо информации, играют важную роль в принятии решений человеком. Поведенческие финансы являются дополнительным доказательством того, что финансовые решения в значительной степени определяются эмоциями и настроением. Поэтому разумно предположить, что общественные настроения и настроения могут влиять на стоимость фондового рынка в такой же степени, как и новости. Что касается твитов, некоторые интересные открытия уже сделаны, например [1], [2], [3] и [4].

Я тоже хотел исследовать это и сделал несколько интересных открытий! Весь анализ был написан на Python.

Гипотеза

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

Что такое кэштег?

Функция в Twitter, позволяющая пользователям нажимать на символы акций и видеть, что говорит Twitterverse, например, о $ GOOG, $ AAPL или $ FB. Система работает так же, как известные хэштеги Twitter. Для Cashtags требуется символ «$», за которым следует тикер.

Набор данных

Коллекция из около миллиона твитов, собранных в течение 79 дней, с 28 марта 2016 года по 15 июня 2016 года, с упоминанием любого кассового тега компании NASDAQ 100. Данные предоставлены followthehashtag.com, инструментом поисковой аналитики и бизнес-аналитики Twitter.

Вот два примера негативных и позитивных твитов с кэштегами для Apple, Google и некоторых других.

Из 100 сотен исходных акций в данных мне пришлось отбросить 15 по различным причинам, связанным с данными, например, из-за несоответствия дат или просто потому, что было слишком мало твитов о кассовых тегах, то есть даже не ежедневных твитов. Среди исключенных оказались, например, Apple, Tesla и Yahoo.

Кэштеги с наибольшим количеством твитов, включенных в окончательный анализ, были (Топ-12):

Среднее количество твитов на кэштег среди всех 100 акций составило 6446 в течение 79-дневного периода, то есть 81 твит в день для каждой акции / кэштега.

Измерение настроения в твитах

Чтобы извлечь тональность каждого твита, я использовал VADER, стандартную библиотеку машинного обучения Python для обработки естественного языка, специально предназначенную для чтения настроений твитов. VADER может уделять больше внимания заглавным буквам, а также распознает сленговые выражения, восклицательные знаки и наиболее распространенные смайлы. Настроениям присваиваются баллы от крайне отрицательных (-1) до крайне положительных (+1), нейтральные - ноль. Примеры

Создание среднесуточных значений для данных твита

После объединения каждого твита с его настроением он был умножен на количество подписчиков учетной записи. Таким образом, в окончательной модели больше внимания уделялось настроениям твитов более «влиятельных» аккаунтов. После этого твиты, в среднем почти 6500 на кэштег, были сужены до 75 строк, состоящих из дневных средних значений для каждого настроения, которые затем сравнивались с дневными изменениями цен на соответствующие акции.

Сбор данных об акциях

Используя библиотеку Python pandas-datareader, ежедневные данные по акциям были загружены из Yahoo Finance. После добавления столбца дневного процентного изменения к данным о запасах и интерполяции недостающих данных для выходных, два набора данных, настроения твитов и ежедневные изменения акций , теперь можно комбинировать.

Новый фрейм данных с двумя функциями, «Pct_change_stock» и «Compound_multiplied», и добавленным столбцом данных метки «Buy / Sell», теперь был готов к использованию в обучении.

Блок-схема первой части анализа

Данные о запасах (стрелка влево), данные Twitter (стрелка вправо)

Обучение классификаторов машинного обучения на данных

Поскольку это была задача бинарной классификации, то есть результат был либо «Купить», либо «Продать», я использовал 6 различных алгоритмов, подходящих для этой цели.

· K-ближайшие соседи (KNN)

· Логистическая регрессия (LogReg)

· Машина опорных векторов (SVM)

· Наивный байесовский

· "Древо решений"

· Случайный лес

Разделение данных обучения и тестирования

Из имеющихся 74 дней данные за 59 дней (80%) для каждой акции использовались для обучения и 15 дней (20%) для проверки точности каждого алгоритма.

Перекрестная проверка

Из-за ограниченного объема данных тестирование моделей только с 20% данных (15 дней) по сравнению с 80% обучающих данных (59 дней) может быть недостаточно репрезентативным. Чтобы избежать возможности того, что разделение Train / Test не будет полностью случайным, была проведена перекрестная проверка данных, чтобы получить более репрезентативный результат точности каждого алгоритма. Данные обучения были разделены на 10 подмножеств, каждый из которых сравнивался с 9 другими.

Блок-схема второй части анализа

Результаты

Результаты после прохождения каждой из 85 акций через каждый из 6 бинарных классификаторов и 10-кратной перекрестной проверки были следующими. В среднем точность каждого классификатора была выше 50%. Это означает, что в настроениях твитов есть предсказательная сила, которая превосходит, по крайней мере, подбрасывание монеты. Подбрасывание монеты в среднем дает точность 50%, поэтому точность более 50% является доказательством способности моделей в некоторой степени достигать «экстраординарных» результатов. Более того, для многих акций точность / предсказательная сила моделей составляла 65–75%!

Точность каждого классификатора по кэштегу - ТОП 5

На графиках ниже красная линия представляет предел точности 50%.

Логистическая регрессия: средняя точность 57,6% при 76 кэштегах из 85 выше 50%

Support Vector Machine: средняя точность 57,5% при 77 кэштегах из 85 выше 50%

Наивный Байесов: средняя точность 57,4% при 77 кэштегах из 85 выше 50%

K-Nearest Neighbours: средняя точность 51,9% при 53 кэштегах из 85 выше 50%

Дерево решений: средняя точность 50,5% при 40 кэштегах из 85 выше 50%

Случайный лес: средняя точность 50,2% при 53 кэштегах из 85 выше 50%

Резюме

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

Код и образцы данных доступны на моем Github.

Дальнейшие действия

Я провел моделирование торговли с восемью акциями, которые показали наиболее многообещающие результаты теоретических моделей. Они представлены во второй части статьи. Данные твита для моделирования, охватывающего акции в марте 2019 года, были извлечены из Twitter с использованием его API для разработки. Ниже представлены результаты одной из самых многообещающих акций American Airlines. Следование любой из шести стратегий алгоритмов бинарного классификатора (пунктирные линии) дало бы лучшие результаты, чем простая стратегия покупай и держи. Для остальных семи акций результаты были разными, но результат все равно был таков, что стратегии алгоритмов опережали рынок в среднем в 60–75% случаев!