Migliorare l’accuratezza del punteggio di sentiment con FinBERT e abbracciare i principi SOLID

Migliorare la precisione del punteggio di sentiment con FinBERT e abbracciare i principi SOLID

In un precedente laboratorio intitolato “Costruzione di un’applicazione NLP per l’analisi del sentimento delle notizie e delle performance dei prezzi delle azioni con Python“, ho brevemente accennato al concetto di trading algoritmico utilizzando l’analisi del sentimento delle notizie di mercato automatizzata e la sua correlazione con le performance dei prezzi delle azioni. I movimenti di mercato, specie nel breve termine, sono spesso influenzati dal sentiment degli investitori. Uno dei principali componenti delle strategie di trading basate sull’analisi del sentiment è il calcolo algoritmico di un punteggio di sentiment dal testo grezzo e successiva incorporazione di tale punteggio nella strategia di trading. Più accurato è il punteggio di sentiment, maggiori sono le probabilità che il trading algoritmico predica i potenziali movimenti dei prezzi delle azioni.

In quel laboratorio precedente, ho utilizzato la libreria vaderSentiment. Questa volta, ho deciso di esplorare un’altra contendente NLP, l’algoritmo FinBERT FinBERT e confrontarlo con l’accuratezza del punteggio di sentiment di Vader con l’intento di migliorare i rendimenti della strategia di trading.

La fonte primaria dei dati rimane invariata. Sfruttando l’API di Yahoo Finance disponibile su RapidAPI Hub, ho ottenuto i dati delle notizie per il nostro esercizio di analisi del sentiment.

Ho utilizzato un blocco note Python Jupyter come area di sviluppo per questo esperimento. Nel mio blocco note Jupyter, richiamo innanzitutto la classe API che recupera i dati di mercato da Yahoo e converte la risposta JSON in un dataframe Pandas. Puoi trovare questo codice nel mio laboratorio precedente o nel repository GitHub. Successivamente, applico gli algoritmi di machine learning di Vader e FinBERT alla colonna “Titolo” del dataframe per calcolare i corrispondenti punteggi di sentiment e aggiungerli in una nuova colonna di punteggio di sentiment per ciascun algoritmo di NLP.

Un confronto manuale di questi punteggi mostra che l’algoritmo di machine learning di FinBERT è più accurato.

Ho inoltre introdotto una significativa riorganizzazione del codice incorporando i seguenti principi SOLID.

  • Principio di responsabilità singola: la logica di preparazione delle notizie di mercato è stata consolidata nella classe API
  • Principio di apertura/chiusura: Sia la logica specifica di Vader che quella di FinBERT risiedono nelle sottoclassi di SentimentAnalysisBase

Spero che questo articolo sia stato utile. Puoi trovare il codice in questo repository GitHub.

Happy coding!!!