Джек Беллуч, Форд Джонстон, Алекс Брокман
Дональд Трамп - первый президент, который активно использовал Twitter во время своего президентства. С более чем 55,6 миллионами подписчиков и новостными сетями, жаждущими сообщать обо всем, что он говорит, его твиты доступны широкой аудитории. Он может влиять на людей и на их образ мыслей, но может ли он влиять и на фондовый рынок? Это то, что мы хотели узнать.
В нашем последнем проекте мы хотели посмотреть, сможем ли мы предсказать изменения на фондовом рынке после твитов Трампа. К счастью для нас, Трамп действительно улучшил свою игру в Твиттере и публикует твиты почти полдюжины раз в день, давая нам много данных, с которыми можно работать.
Получите данные
Чтобы проанализировать его твиты, нам сначала нужно было создать набор данных. Мы начали с использования Tweepy, библиотеки Python с открытым исходным кодом, для вызова API Twitter и сбора твитов Трампа. Сразу возникла проблема. Twitter API ограничивает пользователей только последними 3200 твитами, а у Дональда Трампа более 35 000 твитов. Все выглядело мрачно.
Мы рассматривали возможность использования Beautiful Soup для сбора твитов Трампа, очищая его веб-страницу в Twitter. Это был бы очень длительный процесс. К счастью для нас, мы нашли сайт www.trumptwitterarchive.com, на котором уже собраны для нас все твиты Трампа. Это ускорило наш проект, так как очистка Интернета от всех 35000+ твитов, а также анализ и форматирование данных заняли бы значительное количество времени.
С нашим новым набором данных мы могли начать анализировать данные. Из trumptwitterarchive мы смогли преобразовать все его твиты в красивый и удобный для работы формат CSV; однако мы столкнулись с проблемами с кодировкой данных и решили загрузить их в формате JSON, который работал без проблем. Мы использовали записную книжку Jupyter для анализа и форматирования данных и загрузили данные в DataFrame pandas, что упростило манипулирование и извлечение определенных данных.
Анализ данных
Мы хотели использовать общее мнение о твите, будь то положительное, отрицательное или нейтральное, а также другие факторы, такие как состояние рынка, чтобы попытаться предсказать рост или падение S&P 500 сразу после твита Трампа. Для этого идеально подошел бы анализ настроений! Мы использовали комбинацию библиотек Natural Language Toolkit и Afinn, чтобы получить оценку тональности каждого твита. Положительный балл, если общий твит имеет положительный оттенок, и отрицательный балл, если твит имеет отрицательный оттенок. Оценка настроения около нуля считается нейтральной.
Проведя наш анализ по всем 35000+ твитов, мы видим, что большинство твитов имели средний балл тональности около нуля или равный нулю. Мы объяснили это в основном небольшой длиной твитов. Мы удалили некоторые «стоп-слова», которые включали такие слова, как «я», «я», «это», «то» и другие слова, не передающие никакого значения. Мы действительно видим множество твитов с позитивным настроением и множество твитов с негативным настроением, что хорошо для обучения нашей модели.
Две другие особенности, на которые мы хотели обратить внимание, - это время твита и день недели, когда он был отправлен. Для этого мы преобразовали метку времени из наших исходных данных, которые мы извлекли с веб-сайта, и преобразовали ее в метку времени панд, с которой было проще работать. Вот результаты, когда мы строили графики для каждого дня недели:
Глядя на график, мы видим, что большинство твитов происходит с понедельника по пятницу, что для нас хорошо, потому что именно тогда фондовый рынок открыт. В эти дни рынок открывается в 9:30 EST и закрывается в 16:00 EST, что является небольшим промежутком времени по сравнению с остальной частью дня. Вот график, на котором показаны все твиты и час, когда они были написаны.
Линии на графике представляют время открытия и закрытия рынка. Как мы видим, значительная часть твитов попадает в этот диапазон, а это значит, что у нас будет достаточно точек данных для обучения наших моделей.
Теперь, когда у нас есть оценка настроения для каждого твита, мы можем перейти к их анализу в рыночной среде. Чтобы получить данные по S&P 500, мы использовали Quantopian, хедж-фонд с открытым исходным кодом, который предоставил данные через свою исследовательскую среду. К счастью, их среда очень похожа на записную книжку Jupyter, но некоторые функции ограничены, чтобы пользователи не могли извлекать данные из своей среды. Нам пришлось загрузить наши собственные CSV-файлы и извлечь оттуда наши данные, потому что они не позволяли читать данные из github. Мы поминутно собирали спотовые цены на SPY ETF, который активно имитирует авуары и движения цен рыночного индекса S&P 500, и приступили к работе.
Моделирование
Чтобы проверить нашу гипотезу о том, что твиты Трампа действительно влияют на рынок, и мы можем предсказать изменение в SPY ETF, мы обучили три модели. Одна модель RandomForest, одна модель AdaBoost и одна модель KNearestNeighbors. Все эти модели классифицируют данные по дискретным меткам. Для наших классификационных меток у нас было число 1, представляющее увеличение цены более чем на 0,10 доллара США, число -1 представляло снижение цены более чем на 0,10 доллара США и 0, если изменение цены оставалось в пределах этого диапазона.
Наш вклад состоял из четырех основных частей. Оценка настроения твита, время твита, день твита и импульс рынка, рассчитанный за последние пятнадцать минут. Время твита было разделено на четыре категории: утро, до_полудни, после_полудни и поздно_полудни. Мы использовали одно горячее кодирование, поэтому время было представлено четырьмя столбцами. День твита также был горячо закодирован, поскольку в нем были столбцы с понедельника по пятницу. В целом наш вход имел размеры 1x11.
Мы разделяем наши данные на 80% данных поездов и 20% тестовых данных. Для каждой модели мы обучили и протестировали ее десять раз и взяли среднюю точность для каждой модели, чтобы увидеть, какая модель в целом работает лучше всего. После всего нашего тестирования мы обнаружили, что AdaBoost работает лучше всех со средней точностью 72,4%, что особенно хорошо. Средняя точность для этой модели составила 58,5%, а средний балл F1 составил 61,4%. RandomForest имел среднюю точность 61,8%, а KNN - 67,6%. Мы были очень довольны успехом наших моделей, но мы хотели знать, есть ли лучший способ измерить настроение твита. Не бойтесь, смайлы здесь!
EMOJIS
В классе мы рассмотрели DeepMoji, нейронную сеть, которая принимает твиты в качестве входных данных, пытается понять смысл и мнение твита и сопоставляет определенные смайлики с этим твитом. Сердитый или негативный твит может содержать смайлики с сердитым лицом, а счастливый или позитивный твит может содержать смайлики с улыбкой до ушей. DeepMoji был обучен миллионам твитов, что означает, что он может улавливать сарказм и другие эмоции, которые может упустить базовый анализ настроений. Вот изображение сети со всеми слоями:
Мы хотели использовать эту предварительно обученную сеть и применить ее к твитам Трампа и посмотреть, поможет ли это лучше понять настроения, чем простой алгоритм анализа настроений. (Большое спасибо Ульфу за эту идею!) Вот что мы сделали!
Но сначала мы хотели посмотреть твиты Трампа и создать облако слов, чтобы увидеть, какие слова он писал больше всего.
Судя по всему, большое спасибо. Некоторые другие известные - «Обама», «великие», «люди» и «большие».
Мы клонировали репозиторий DeepMoji на нашу машину и использовали некоторые из включенных в них примеров для анализа твитов и передачи их в нейронную сеть. К счастью, команда DeepMoji включила предварительно натренированные веса, поэтому нам не пришлось начинать модель с нуля. Нейронная сеть создает список из 64 смайликов и уровень достоверности для каждого смайлика относительно того, насколько хорошо он соответствует тону твита.
Мы просмотрели все твиты и нашли пять лучших смайлов до и после того, как Трамп стал президентом.
Это пять лучших смайликов до того, как Трамп стал президентом. Число внизу показывает, сколько твитов было смайликом номер один, связанным с твитом.
Эти пять наиболее часто используются после того, как Трамп стал президентом. Нет большой разницы между до и после, но мы считаем, что смайлики показывают, что Трамп очень выразительный.
После передачи каждого твита в нейронную сеть мы взяли пять основных значений смайликов, которые составляли от 0 до 63, вероятность для каждого смайлика и общую достоверность смайликов, которая представляла собой сумму уровней достоверности отдельных смайликов, и прошли те в наши модели. Наши модели и классификационные метки остались прежними, чтобы можно было точно сравнить два набора моделей. Модель RandomForest имела среднюю точность 61,6%, AdaBoost имела среднюю точность 72,6%, а модель KNearestNeighbors имела среднюю точность 67,7%. Довольно удивительно! Точность двух наборов моделей практически идентична.
Вывод
Итак, что мы можем извлечь из этого? Несмотря на то, что наши самые успешные модели обеспечивают точность около 72%, нам все же необходимо протестировать эти модели на исторических данных, чтобы увидеть, как они будут работать в реальном мире. Если большая часть успеха исходит от модели, предсказывающей нулевое изменение, то это нам не поможет, потому что мы не будем покупать или продавать акции SPY, если модель говорит, что движение должно быть незначительным или отсутствовать. Проверив это на истории в квантопической среде, мы можем увидеть, как наша модель работала бы на реальном рынке без необходимости вкладывать собственный капитал для совершения сделок. Если модель поддерживает 72% точности прогнозов подъема и спада рынка, то она может принести много денег.
Чтобы повысить точность, в обучение модели можно включить гораздо больше факторов. Однако для большего количества функций требуется больше точек данных, чтобы создать полную и надежную модель. Слишком мало точек данных - и у вас не будет точной модели.
Но влияют ли твиты Трампа на рынок? Определенно. Существенно ли влияют на рынок твиты Трампа? Возможно нет. Вот почему мы рассматривали только краткосрочные изменения. Трамп - чрезвычайно успешный бизнесмен и президент США, поэтому он имеет хоть какое-то влияние на то, как люди думают. Наша модель пытается предсказать, что делают эти люди. Надеюсь, у нас все получится!
Надеемся, вам понравился наш пост. Чтобы увидеть наш код и наборы данных, нажмите здесь. Большое спасибо команде MIT, которая сделала DeepMoji, что сделало возможным наш проект. Вот ссылка на их репозиторий.
Ваше здоровье!