"Trading Strategies to Exploit Blog and News Sentiment" (Zhang, Skiena 2010)
"The Predictive Power of Financial Blogs" (Frisbee 2010)
"An analysis of verbs in financial news articles and their impact on stock price" (Schumaker 2010)
Но это все там, за океаном. А что же у нас, в России?
Искать правду в твиттере для российского рынка, мне показалось, бесполезным. Во-первых твиттером у нас пользуются по-прежнему единицы, а во-вторых у американцев, так или иначе, в фондовый рынок вовлечено почти все население, у нас же это развлечение для избранных. Зато в России есть раскрученная социальная сеть трейдеров comon.ru. На этом ресурсе публикуется несколько десятков статей ежедневно и, что самое главное, они по теме. Что может быть лучше для задачи анализа текста?
Итак, сказано - сделано. Я решил проверить связано ли как-то настроение блогеров comon.ru с движениями на рынке и, самое интересное, могут ли эти данные быть использованы для предсказания движений рынка. Первым делом, было выкачано около 10 тыс. статей от 100 авторов с comon.ru, вместе с датой публикации и именем автора. Потом текст статей был обработан: удалены все элементы HTML-разметки и стоп-слова а у всех оставшихся слов была выделена основа.
Дальше надо было научиться как-то характеризовать текст. Для начала я выбрал всего две категории: негативную и позитивную. Под позитивной понимаются тексты в которых идет речь о росте, восходящем тренде и повышении. Негативные тексты, напротив, изобилуют словами типа дефолт, кризис, обвал и понижение. Интересно, что негативных слов получилось вдвое больше чем позитивных.
Существует несколько разных подходов для составления списка позитивных и негативных слов. Одним из них может быть латентно-семантический анализ. В простейшем случае, можно собрать списки слов вручную.
Предположим, что некоторым образом, мы составили списки слов обладающих позитивной окраской и негативной окраской. Далее, самой простой метрикой настроения текста будет разность количества позитивных и количества негативных слов в нем. Очевидно, что подобная метрика не идеальна и существует масса различных улучшений, позволяющих добиться еще более значимых результатов. Но это тема отдельной статьи. В данном случае мы можем использовать даже самую простую метрику.
Когда я прогнал полученный алгоритм по набору текстов, стало понятно, что результаты крайне нестабильны. И понятно почему. Одни авторы используют много негативных слов, другие мало, одни оптимисты, другие пессимисты, одни пишут часто и регулярно, другие редко, у одних тексты состоят из нескольких тысяч слов, у других они больше похоже на посты в твиттере. Чтобы сгладить влияние отдельных авторов, было проведено нормирование индекса настроений, по каждому автору, предположив, что среднее настроение автора за весь период жизни на комоне нейтрально. Попутно, кстати, получилась интересная метрика, показывающая насколько одни авторы более пессимистичны или оптимистичны чем другие.
Далее, после усреднения данных по дням, получился некоторый индекс, назовем его индексом настроений comon.ru. Это число, которое характеризует среднее настроение блогеров comon.ru в этот день. Интересным оказался график изменения индекса настроения:
Из графика видно, что вначале года, несмотря на ряд провалов, среднее значение индекса настроений большую часть времени больше нуля. Во второй половине года настроения изменились и стали все больше негативными. Что в это время происходило на бирже, комментировать не надо. Кроме того, индекс настроений успешно предсказал два самых крупных обвала года.
Следующим шагом, я проверил а сколько можно было бы заработать если покупать вечером того дня когда индекс настроений больше нуля и закрывать позицию на следующий день. И аналогично для отрицательных значений индекса настроений. Оказалось, что среднее дневное изменение индекса ММВБ в день, следующий за днем с позитивным настроением составляет: 0.13%. А в дни следующие за днями с негативным настроением -0.34%. Результат мне показался вдохновляющим. И было решено проверить математически гипотезу о том, что индекс настроения комона предсказывает значения ММВБ. Для этого, я воспользовался методом описанным в оригинальной работе, а именно, причинным тестом Грейнджера:
Model 1: MICEX ~ Lags(MICEX, 1:1) + Lags(SIGNAL, 1:1) Model 2: MICEX ~ Lags(MICEX, 1:1) Res.Df Df F Pr(>F) 1 178 2 179 -1 2.9539 0.08741 .
P-value теста составило 0.087, что меньше 0.1. Значит наша гипотеза о том что индекс настроений комона предсказывает изменения индекса ММВБ на следующий день верна с вероятностью 90%. Что является неплохим результатом, вполне сравнимым с результатом в оригинальной работе с твиттером.
Большим недостатком полученного индекса является его высокая волатильность. По-идее, добавление других источников данных и улучшение алгоритма анализа настроений должны её сгладить. С другой стороны, увеличение количества источников данных может снизить точность результатов.
Что использовалось для данной работы?
1. Граббер текстов с comon.ru и предварительная обработка были написан на Java
2. Вся математика, анализ и построение графиков выполнялись на R с использованием библиотек lmtest и rusquant
Какие варианты развития?
1. В отличии от твиттера, количество авторов комона которые пишут регулярно не велико. Можно ввести что-то вроде предсказательного рейтинга автора, тем самым улучшив общий прогноз.
2. Учитывать оценки других пользователей и комментарии к каждой статье.
3. Добавить анализ морфологии русского языка, учитывать время в котором написаны отдельные предложения статьи.