Улучшение точности оценки настроения с помощью FinBERT и принятие принципов SOLID

Повышение точности оценки настроения с помощью FinBERT и применение принципов SOLID

В предыдущей лабораторной работе с названием «Создание приложения NLP для анализа настроений новостей и производительности акций с использованием Python» я кратко затронул концепцию алгоритмической торговли с использованием автоматизированного рыночного анализа настроений из новостей и его связь с производительностью цен на акции. Движения рынка, особенно в краткосрочной перспективе, часто влияют на настроения инвесторов. Одним из главных компонентов стратегий торговли настроениями является алгоритмическое вычисление оценки настроения из текста и включение этой оценки в стратегию торговли. Чем точнее оценка настроения, тем больше вероятность, что алгоритмическая торговля предсказывает потенциальные движения цен на акции.

В предыдущей лабораторной работе я использовал библиотеку vaderSentiment. На этот раз я решил изучить другой алгоритм NLP, FinBERT, и сравнить его с точностью оценки настроений Vader с целью улучшения доходности стратегии торговли.

Исходный источник данных остается неизменным. Используя API Yahoo Finance, доступный на RapidAPI Hub, я получил новостные данные для нашего упражнения по анализу настроений.

Я использовал Python Jupyter Notebook в качестве площадки разработки для этого эксперимента. В моем блокноте Jupyter я первым делом вызываю класс API, который извлекает рыночные данные с Yahoo и преобразует JSON-ответ в таблицу данных Pandas. Вы можете найти этот код в моей предыдущей лабораторной работе или в репозитории на GitHub. Затем я применяю алгоритмы машинного обучения Vader и FinBERT к столбцу “Заголовок” в таблице данных для вычисления соответствующих оценок настроений и добавления их в новый столбец с оценками настроений для каждого алгоритма NLP.

Ручное сравнение этих оценок показывает, что алгоритм машинного обучения FinBERT более точный.

Я также внес значительные изменения в код, включив следующие принципы SOLID:

  • Принцип единственной ответственности: Логика обработки новостей была объединена в класс API
  • Принцип открытости/закрытости: Логика, относящаяся как к Vader, так и к FinBERT, находится в подклассах SentimentAnalysisBase

Надеюсь, эту статью стоило потратить ваше время. Вы можете найти код в этом репозитории GitHub.

Счастливого кодирования!!!