TLDR

Набор данных Financial News Sentiment Dataset (FiNeS) содержит в себе заголовки финансовых новостей о компаниях, торгующихся на Московской и СПб биржах. Целевой переменной датасета является оценка тональности новостных заголовков в виде вещественного числа. Идеи для использования датасета: Создание трейдинговых стратегий на основе анализа тональности новостей "на лету"; Анализ новостного фона в разрезе времени (день/неделя) или в разрезе компании.

Анализ тональности текста

Анализ тональности текста или анализ сентимента (англ. sentiment analysis) — задача не новая. В общем виде суть её представляется в сопоставлении входному тексту определённой шкалы, по которой измеряется его "настроение". При этом, шкала может быть как дискретной — в частности бинарной, так и вещественной — например от 0 до 1.

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

Упрощённая формализация способов решения задачи анализа тональности
Упрощённая формализация способов решения задачи анализа тональности

Интерес к этой, давной известной, задаче заключается в её приложениях. В частности, в данной статье мы рассмотрим анализ тональности текстов на русском языке на примере финансовых новостей о компаниях, собранных из различных источников (РБККоммерсантФинамInvesting, и Ведомости). В основе статьи лежит датасет Financial News Sentiment Dataset, специально подготовленный автором для такой задачи, о нём и пойдёт речь далее.

Financial News Sentiment Dataset (FiNeS)

Набор данных Financial News Sentiment Dataset (FiNeS) содержит в себе заголовки финансовых новостей о компаниях, торгующихся на Московской и СПб биржах. Целевой переменной датасета является оценка тональности новостных заголовков в виде вещественного числа. В наборе данных присутствуют следующие переменные, описывающие контекст новостного заголовка:

  • заголовок (title),

  • целевая переменная тональности (score),

  • ссылка на источник (link),

  • дата публикации (published),

  • тикеры компаний (tickers).

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

Пример набора данных (за исключением столбцов link и summary) показан ниже:

title

score

published

tickers

Электромобильный стартап Arrival экс-главы Yota уйдет из России

-0.5833333333

Thu, 12 May 2022 05:10:01 +0300

['ARVL']

Шрёдер отклонил предложение войти в совет директоров «Газпрома»

-0.3333333333

Tue, 24 May 2022 22:12:05 +0300

['GAZP']

Шельф берут в разработку // Генподрядчиком «Газпрома» на море может стать компания Андрея Патрушева

0.7

Fri, 29 Jul 2022 00:28:00 +0300

['GAZP']

Чистая прибыль "РусГидро" по РСБУ за 1 полугодие выросла на 17%

0.6818181818

Thu, 28 Jul 2022 19:06:29 +0300

['HYDR']

Финский производитель шин Nokian Tyres решил уйти из России

-0.4117647059

Tue, 28 Jun 2022 18:17:06 +0300

['NOK']

Федун ушел с поста вице-президента ЛУКОЙЛа на пенсию

-0.02564102564

Mon, 27 Jun 2022 17:19:50 +0300

['LKOH']

Процесс сбора данных

Сбор новосте проводился из RSS-лент следующих источников: РБККоммерсантФинамInvesting, и Ведомости. Для каждой новости автоматически проверялось наличие наименования определённой компании в заголовке. Например, в заголовке Тиньков решил уйти на пенсию после продажи доли в TCS Group имеется упоминание TCS Group — держателя акций банка Тинькофф. Новости, без упоминания компаний не были включены в датасет. После чего, было сформировано задание по типу краудсорсинга для разметки заголовков.

Процесс разметки заголовков

Разметка заголовков происходила с помощью краудсорсинговой платформы Яндекс Толока. Разметчику предлагалось выполнить 10 заданий, в каждом из которых необходимо выбрать, какой из двух новостных заголовков имеет более положительную тональность (см. рисунок ниже). Такой метод называется Best-Worst Scaling.

Пример задачи для краудсорсинга
Пример задачи для краудсорсинга

В общем пуле задач каждому заголовоку случайным образом подбиралось 8 пар для сравнения (второй заголовок). Таким образом, на основе 532 новостных заголовков было сформировано 4256 заданий для краудсорсинга. С помощью интерфейса Толоки перекрытие заданий было задано равным 3. Таким образом, каждый заголовок размечался 24 раза (8*3). Аудитория разметчиков была ограничена по следующим параметрам:

  • Языки: Русский (как минимум);

  • Образование: Высшее или среднее специальное;

  • Дата рождения: старше 01.01.2000.

В дополнение к этому, было выбрано топ 30% разметчиков по качеству. Автоматический контроль качества проводился посредством блокировки разметчиков, слишком быстро выполняющих задание (менее 25 секунд) и неправильно вводивших капчу (менее 70% правильных ответов).

Подсчёт целевой переменной

Целевая переменная (тональность заголовка) была подсчитана следующим образом: T = npositive/ntotal - nnegative/ntotal.

Где npositive — количество раз, когда заголовок был размечен как более положительный, ntotal — общее количество разметок, nnegative - количество раз, когда заголовок был размечен как более отрицательный. Распределение значений целевой переменной доступно на рисунке ниже.

Распределение значений целевой переменной (тональность текста)
Распределение значений целевой переменной (тональность текста)

Надёжность результатов разметки

Надёжность результатов разметки была подсчитана следующим образом.

Первый критерий — расчёт показатель Fleiss' Kappa, который равен 0.2639, что соответствует достаточной согласованности разметчиков (англ. fair agreement).

Второй критерий — расчёт коррелляции оценок с помощью метода Split-half reliability, корелляция равна 0.8451, что означает высокую корелляцию в ответах разметчиков из случайно отобранных групп.

Идеи для использования датасета

  • Создание трейдинговых стратегий на основе анализа тональности новостей "на лету";

  • Анализ новостного фона в разрезе времени (день/неделя) или в разрезе компании.

Пример построения простейшей модели

from sklearn.linear_model import LinearRegression
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
import pandas as pd
df = pd.read_csv("../data/data.tsv", sep='\t')
train, test = train_test_split(df, test_size=0.3, random_state=42)
vectorizer = TfidfVectorizer()
vectorizer.fit(df['title'])
model = LinearRegression()
model.fit(vectorizer.transform(train['title']), train['score'])
print(mean_squared_error(test['score'], model.predict(vectorizer.transform(test['title']))))
>>> 0.23952362826629248
print(model.predict(vectorizer.transform(["Яндекс увеличил прибыль на $1 млрд"])))
>>> [0.52505851]

Для более подробного ознакомления с датасетом прошу сюда, а по вопросам в личные сообщения.

А ещё: Python Библиотека, реализующая функциональность торгового робота на основе Tinkoff Invest API для Python с торговой стратегией, основанной на анализе тональности новостей.

Комментарии (13)


  1. freakru
    10.09.2022 18:34
    +3

    Идея не новая, да и обычно поздно реагировать на рынке акций если новость появилась в явном виде.

    Интереснее было бы прогнозировать рынок на основе неявных данных.

    А за техническую часть - спасибо.


    1. Hardcoin
      11.09.2022 08:02

      Если реагировать поздно, тогда почему после новостей цена меняется? Миллиарды долларов реагируют, вероятно в этом есть смысл на долгосрок.


      1. thevlad
        11.09.2022 11:09

        Реагируют в основном на новые фактические данные: отчеты, макро статистика, реже какие-то существенные факты. Обычно это все выходит периодически в известные периоды времени, в известном формате. Надо только распарсить, и посчитать новую "справедливую цену", а дальше кто первый встал того и тапки.


  1. amarao
    10.09.2022 19:27
    +2

    Вы с Мартингейлом и Монте-карло сравнивали результаты?


    1. perevalov_a Автор
      10.09.2022 19:34
      +1

      Статья о датасете, а не о стратегии. Можете взять за основу и сравнить)


    1. rinat_crone
      11.09.2022 09:53
      +1

      Мартингейл и монте-карло это же не про индикаторы (когда входить / выходить, к чему собсно описываемый автором подход и удобно будет применить), а про управление размером ставки (риска).

      Можно подобрать такие точки входа в Мартингейл на исторических данных, которые дадут фантастические результаты. А вот наперед такие точки предсказать сильно сложнее :)

      Я не очень долго, но с достаточно большим интересом в своё время увлекался алгоритмическим трейдингом (на форексе, правда), в том числе, пробовал стратегии, основанные на анализе тональности новостей (эта идея наверное всем на ум приходит). Более-менее интересных результатов даже на исторических данных добиваться не получалось, к сожалению.


      1. Format-X22
        11.09.2022 11:50
        +1

        Это как раз про то и колкость что выше ли рандома результат.


  1. vandriichuk
    11.09.2022 07:53
    +2

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


    1. bestsalut
      12.09.2022 10:33

      "Новости в газетах пишут люди" - это верно. Добавлю также, что и интерпретируют новости тоже люди. Пример из этой же статьи: Чистая прибыль "РусГидро" по РСБУ за 1 полугодие выросла на 17%. Это хорошая новость? Если сравнивать 0% и 17% то да. А если ожиданием рынка был рост на 25%, а фактический составил только 17% - то это уже не очень. Способен ли толокчанин за 25 секунд плошку риса качественно это оценить? Поэтому идея имеет право на жизнь, а вот качественная реализация намного сложнее.


      1. perevalov_a Автор
        12.09.2022 11:49

        Способен ли толокчанин за 25 секунд плошку риса качественно это оценить?

        Возможно не способен, но что будет если их несколько? И если 25 секунд возьмём как триггер к блокировке за слишком быстрое выполнение? А что если покрытие одной новости при разметке, например, 8 раз? Так же стоит понять для чего мы размечаем и что хотим предугадать? Если хотим предугадать действия среднестатистического неквалифицированного инвестора, то мнение усреднённого толокера скорее всего подойдёт. Ну а если хотим наиболее объективную информацию, как вы упомянули с учётом ожиданий и фактов, нужен, естественно, более глубокий анализ.


        1. bestsalut
          13.09.2022 08:43

          Чем больше покрытие - тем лучше. Но конкретно в этом вопросе толокеры врят ли помогут. Дай им хоть минуту - не думаю что они полезут искать прогноз прибыли РусГидро за первый квартал/полугодие. А из тех кто полезут - многие ли найдут.

          По второму вопросу - что мы хотим предугадать. Если, как вы говорите, действия среднестатистического неквалифицированного инвестора, то их воздействие на рынок невелико. Крупными суммами управляют хорошие специалисты.


  1. Aleksid1
    11.09.2022 11:52

    Утром председатель совета директоров Лукойла выпал из окна ЦКБ и скончался (новость негативная, так ведь?), после обеда - взрывной рост курса акций Лукойла.


    1. dmitryvolochaev
      11.09.2022 15:48

      Отсюда вопрос, а зачем вообще это промежуточное звено - сентимент? Что будет, если мы возьмем за целевой признак изменение курса акций в течение N дней после новости?