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

Сообщество обнадеживающих спекулянтов ловит каждое слово, исходящее из твиттер-аккаунта @realDonaldTrump, пытаясь оценить статус своих ставок. В любой момент вы можете получить поток твитов, которые могут утроить ваши вложения или свести их к нулю. Эти «твиттер-бури», кажется, случаются случайно и без предупреждения. Но действительно ли они случаются случайно? Если вы можете предсказать, когда он собирается начать бурю твитов, вы получите неплохую прибыль. Однако привычки президента твитнуть невероятно спорадические, поэтому спрогнозировать шторм твитов сложно.

Объем данных о президенте огромен: упоминания в новостях, количество твитов в прошлом, его публичное расписание, упоминания в твиттере, рейтинги одобрения и т. Д. Я придумал несколько методов прогнозирования штормов твитов, но ни один из них не является идеальным. В этой статье мы поговорим о моей модели «подписания», в которой используется информация НЛП из твитов @realDonaldTrump, чтобы определить, собирается ли он попасть в шторм.

Данные

Каждый твит @realDonaldTrump каталогизируется в Архиве Твиттера Трампа с 2011 года. Эта база данных содержит некоторую основную информацию: текст и дату создания его 43 393 твитов по состоянию на 10 декабря 2019 года. Мы будем обращать внимание только на твиты. сделано после его инаугурации на посту президента 20 января 2017 года, но это все еще огромный объем информации. Теперь нам просто нужно его разобрать.

Что такое буря твитов?

Вероятность того, что он напишет твит за любой короткий период времени, невероятно мала, что затрудняет прогнозирование бури твитов до того, как они произойдут. Однако если вы следите за президентом в твиттере, то знаете, что его твиты собираются группами. Он может отправить дюжину твитов в течение нескольких минут, а затем подождать несколько часов, прежде чем отправить следующий. Это можно увидеть, построив гистограмму разницы во времени (в минутах) между последующими твитами.

Это распределение сильно смещено вправо со средней разницей во времени 109 минут 18 секунд и средней разницей во времени 18 минут 48 секунд. Таким образом, без дополнительной информации, кроме того факта, что он только что написал в Твиттере, вероятность того, что в течение 20 минут будет еще один, будет чуть больше 50%. Будем рассматривать твиты с

20-минутная разница во времени до следующего твита в качестве «подписывающего» твита. Это дает нам метку классификатора, которая приблизительно сбалансирована, поскольку 20 минут близки к средней разнице во времени в 18 минут 48 секунд. Со всей информацией, которую мы собрали на данный момент, практически нет функций для прогнозирования.

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

Разработка функций

Особенности времени:

Пока у меня есть только две формы необработанных данных: когда был отправлен твит, и что в нем было. Чтобы начать процесс разработки функций, важно знать, что Трамп предпочитает твиты в определенное время дня.

Имея это в виду, первыми функциями будут горячие закодированные часы дня и дни недели, когда был отправлен твит. Есть несколько других функций времени, которые также могут быть важны. Запаздывание разницы во времени - это просто время между данным твитом и твитом, который был отправлен непосредственно перед ним. Я также включил функцию «числа шторма», которая отслеживает количество твитов с момента последнего подписания твита.

Особенности текста:

Я предположил, что эмоции, вызываемые твитом, будут связаны с тем, сколько твитов последует за ним. Я использовал анализатор настроений Vader, textblob и textstat, чтобы получить тональность, субъективность и уровень оценки твитов соответственно. Также учитывается слово и длина цепочки твитов, поскольку короткий содержательный твит, скорее всего, будет быстро отслежен. Завершая текстовые функции, я также нахожу расстояние Левенштейна до последнего твита Трампа, которое говорит нам, восторгается ли этот твит по тем же темам, что и последний (расстояние Левенштейна между двумя строками - это количество удаленных символов, вставок , и замены, чтобы сделать строки эквивалентными). Как правило, смена темы с одного твита на другой снижает шансы на последующий твит. Я также использую теги части речи с помощью nltk, чтобы узнать, сколько существительных, прилагательных, глаголов и т. Д. Содержится в твите.

Также учитывается отставание этих переменных (т.е. текстовые особенности твита, непосредственно предшествующего рассматриваемому).

Особенности расписания:

Я также добавляю некоторые функции на основе публичного расписания президента на https://factba.se/topic/calendar. Эти функции включают количество элементов расписания с 8:00 до 12:00, с 12:00 до 16:00, с 16:00 до 20:00, а также от того, находится ли он в пути, обедает или нет элементов расписания в этот день.

Трамп против персонала:

Чтобы усложнить твиты Трампа, не каждый твит, исходящий от @realDonalTrump, написан президентом. Чуть менее половины твитов без ретвитов написаны его королем социальных сетей Дэном Скавино. В Интернете есть несколько моделей, которые предсказывают, написал ли Трамп или его сотрудники конкретный твит, поэтому нам не нужно изобретать велосипед на этом твите. Я скопировал прогнозы модели Трампа и персонала с сайта https://blog.trumptweettrack.com/ и добавил это как особенность модели выхода.

Модель

Это простая задача двоичной классификации, и я хочу оптимизировать ее по F1-баллу и точности. Я также использовал порог 0,4, который снижает точность и точность на небольшая сумма для значительного увеличения отзыва и оценки F1.

Древовидный классификатор с градиентным усилением, созданный с помощью sklearn, дает лучшие результаты модели по сравнению с набором тестов удержания. Результаты приведены ниже:

Точность: 66%

Точность: 60%

Отзыв: 88%

F1: 71%

И матрица путаницы:

Модель правильно предсказывает, что твит не является знаком почти в 90% случаев. Ему немного сложнее правильно спрогнозировать истинный знак отказа, но это все же лучше, чем случайность.

Ниже представлены наиболее и наименее важные функции:

Наиболее важные функции в основном основаны на факторах времени, относящихся к твиту. Две наиболее важные функции (последняя разница и количество твитов за последние 10 минут) измеряют разницу во времени между этим твитом и последним, а также количество твитов @realDonaldTrump за 10 минут, предшествующих текущему твиту. Среди наиболее важных характеристик единственным вневременным фактором является доля твита, содержащего заглавные буквы. Наименее важные функции измеряют синтаксические элементы самого твита. Функции @user - это двоичные переменные, указывающие, является ли твит ретвитом этого пользователя или они упомянуты в твите. Другие функции ссылаются на позиционные маркеры тегов в твите. Например, RBS - это количество наречий в превосходной степени, содержащихся в твите.

Заключение

Существует заметная корреляция между временными и текстовыми характеристиками твита и тем, сколько времени пройдет до следующего твита. Модель подписи отлично справляется с предсказанием того, когда твит не будет подписью (отзыв составляет почти 0,9). Однако он изо всех сил пытается определить, когда произойдет настоящий выход.

Я создал твиттер-бота, который обновляется каждый раз, когда Трамп пишет твиты, и информирует подписчиков о результатах этой модели для твитов @realDonalTrump в режиме реального времени. Этого бота можно найти здесь: https://twitter.com/sign_off_bot

Я поместил все данные и код для создания этой модели в репозиторий github. Пойдите и проверьте это! Https://github.com/Robdei/Trump-Tweets/tree/master/Sign%20off%20modeling