Skip to content

🐱‍👤 Dados

Com a proposta da solução definida, foi necessário definir a arquitetura da plataforma de dados que irá suportar a solução, bem como quais dados, modelos e ferramentas serão utilizados para a construção da solução.

Fonte de dados

Foi realizado uma busca de dados abertos que pudessem ser utilizados para a construção da solução em sites como Kaggle, UCI Machine Learning Repository e Google Dataset Search. Entretanto, não foi encontrado nenhum dataset que atendesse aos requisitos necessários para a construção da solução, como por exemplo: dados em português, dados de notícias referente a Soja, bem como uma classificação de sentimento para essas notícias que tivesse o ponto de vista do produtor rural/trading.

CEPEA - Centro de Estudos Avançados em Economia Aplicada

Com a necessidade de treinarmos o modelo utilizando o máximo de fontes que não houvesse viés político, foi encontrado o site do CEPEA, que é um centro de estudos avançados em economia aplicada, que é uma instituição de pesquisa da USP. O CEPEA possui uma página de boletins diários, chamada Diárias do Mercado, que são publicações diárias sobre o mercado de commodities agrícolas, como soja, milho, café, etc. Esses boletins são publicados diariamente desde 1997.

Notícias Agricolas

Além do CEPEA, foi encontrado o site Notícias Agricolas, que é um portal de notícias sobre o agronegócio brasileiro. Esse portal possui uma seção de notícias sobre soja, que são publicadas diariamente desde 2006. Essa fonte de notícias é interessante pois possui uma visão mais voltada para o produtor rural, diferente do CEPEA que possui uma visão econômica. O Notícias Agricolas possui um grande volume de notícias que são de outras fontes como Reuters, o que pode ser interessante para o treinamento do modelo, uma vez que podemos regras para o mercado internacional da commodity.

Coleta de dados

Introdução

Para realizar a coleta de dados das plataformas acima, foi necessário a utilização da ferramenta Apache Airflow, que é uma plataforma de orquestração de fluxos de trabalho (workflow) de código aberto que permite aos usuários programar, agendar e monitorar tarefas em fluxos de trabalho complexos. Essa ferramenta foi escolhida pois suas vantagens permite com que o processo de coleta seja escalável, flexível e com monitoramento em tempo real. As tarefas de coleta de dados foram divididas em 3 etapas:

Para cada fonte de dados, foi necessário criar uma DAG (Directed Acyclic Graph) que é um fluxo de trabalho que define como as tarefas serão executadas, para cada fonte de dados. Essas DAGs foram criadas utilizando a sintaxe de Python, e utilizam bibliotecas como BeautifulSoup, Pandas e Requests para realizar a coleta de dados.

O processo de fluxo de dados ficou da seguinte forma:

Fluxo de dados

Processo de coleta

Para executar a primeira carga de dados completa, foi necessário parametrizar as DAGs para buscar os dados desde 1997, para o CEPEA, e desde 2006, para o Notícias Agricolas. Após a execução da primeira carga de dados, as DAGs foram parametrizadas para buscar os dados apenas do dia anterior, para que o processo de coleta seja incremental.

DAG desenvolvida para coleta de dados do CEPEA DAG desenvolvida para coleta de dados do Notícias Agricolas

Na imagem acima, é possível visualizar a DAG desenvolvida para a coleta de dados do CEPEA e do Notícias Agricolas. Essas DAGs são executadas diariamente, e a cada execução, os dados do dia anterior são coletados e armazenados localmente, podendo vir a ser carregado a um banco de dados ou a um data lake.

Análise exploratória

Ao concluir a carga incremental do CEPEA, foi possível obter 7639 notícias, desde Julho de 2006 até a presente data, conforme o gráfico abaixo:

Gráfico de notícias coletadas da plataforma CEPEA.
(Fonte: Autores, 2023)

Já o Notícias Agricolas, foi possível obter 23.601 notícias, conforme a imagem abaixo:

Gráfico de notícias coletadas do portal Notícias Agricolas.
(Fonte: Autores, 2023)

Para iniciar o tratamento das notícias, de maneira que fosse possível filtrar apenas as notícias referentes a soja, foi necessário realizar uma análise exploratória dos dados, para entender quantas notícias houvesse Soja mencionada, ao menos duas vezes. No Dataset do CEPEA, foi possível encontrar 954 notícias que tivesse a palavra Soja mencionada ao menos duas vezes, conforme a imagem abaixo:

No Dataset do Notícias Agricolas, foi possível encontrar 3.358 notícias que tivesse a palavra Soja mencionada ao menos duas vezes, conforme a imagem abaixo:

Gráfico de notícias que mencionam a palavra Soja.
(Fonte: Autores, 2023)

Rotulação dos dados

Para realizar a rotulação dos dados, foi utilizado a ferramenta Label Studio, que é uma plataforma de marcação de dados (data labeling) de código aberto que permite criar tarefas de marcação de forma simples e escalável. Conforme o curto prazo para a entrega do projeto, foi necessário realizar a rotulação dos dados manualmente, porém, para uma entrega futura, é possível utilizar técnicas de NLP para realizar a rotulação dos dados de maneira automática, como por exemplo, utilizando o Spacy.

Devido ao grande volume, a equipe optou por classificar apenas as notícias do CEPEA, que possuía um volume menor de dados, e que possuía uma visão mais econômica, diferente do Notícias Agricolas, que pode possuir notícias com viés político.

Foi realizado o deployment da ferramenta Label Studio utilizando o serviço de Kubernetes da Azure, e a rotulação dos dados foi realizada por 4 pessoas do time, conforme a imagem abaixo: Rotulação dos dados

Imagens da plataforma Label Studio.
(Fonte: Autores, 2023)

Criação do modelo

Após a rotulação dos dados, foi necessário realizar o treinamento do modelo de Machine Learning, para que fosse possível criar o Motor de Classificação do Radar da Soja, que é o responsável por classificar as notícias em Positivo, Neutro ou Negativo. Com a necessidade de desenvolvermos um modelo utilizando BERT (através de redes neurais), o time optou por desenvolver um modelo baseline, para servir de efeito de comparação, utilizando o modelo Naive Bayes Multinomial, que é um modelo de classificação probabilístico baseado no teorema de Bayes, que assume que a presença de uma característica em uma classe não está relacionada com a presença de qualquer outra característica.

Modelo Naive Bayes Multinomial (Baseline)

O modelo Naive Bayes Multinomial foi escolhido por ser um modelo de classificação probabilístico, que é um modelo simples e rápido, que pode ser utilizado como baseline para comparação com outros modelos mais complexos.

No Naive Bayes Multinomial, determinamos a probabilidade de uma notícia pertencer a uma classe, baseado na frequência de palavras que aparecem na notícia.
Para o treinamento do modelo, foi utilizado o dataset rotulado (701 notícias).
Sendo separado em 80% para treino (560 notícias) e 20% (130 notícias) para validação.

Após o treinamento, foi possível obter o seguinte reporte de classificação:

Resultado de classificação do modelo no conjunto de teste.
(Fonte: Autores, 2023)

Enquanto que para o conjunto de validação, foi possível obter o seguinte reporte de classificação:

Resultado de classificação do modelo no conjunto de validação.
(Fonte: Autores, 2023)

Após o treinamento do modelo, foi possível obter uma acurácia de 0.65 no conjunto de teste, e 0.57 no conjunto de validação, o que mostra que o modelo possui uma capacidade média de generalização, e que pode ser utilizado como baseline para comparação com outros modelos mais complexos.

Modelo BERT

Com a crescente utilização de modelos de Deep Learning para a resolução de problemas de NLP, o time optou por utilizar o modelo BERT, que é um modelo de Deep Learning desenvolvido pelo Google, que possui uma arquitetura baseada em redes neurais, e que possui um desempenho superior a outros modelos de NLP, como o Naive Bayes Multinomial.

O modelo BERT é utilizado como um modelo pré-treinado, que é treinado em um grande volume de dados, e que pode ser utilizado para resolver problemas de NLP, como classificação de texto, sumarização de texto, entre outros.

Para a aplicação do modelo no projeto, foi necessário realizar o fine-tuning do modelo, que é o processo de treinar o modelo pré-treinado em um conjunto de dados específico para o problema que se deseja resolver.

Para o treinamento do modelo, foi utilizado o dataset rotulado (701 notícias).
Sendo separado em 80% para treino (562 notícias) e 20% (112 notícias) para validação.

Após o treinamento, foi possível obter o seguinte reporte de classificação para o conjunto de teste:

Resultado de classificação do modelo no conjunto de teste.
(Fonte: Autores, 2023)
Resultado de classificação do modelo no conjunto de validação.
(Fonte: Autores, 2023)

Considerações sobre o modelo

Após o treinamento dos modelos, foi possível obter os seguintes resultados:

Modelo Quantidade de Notícias Acurácia (Teste) Acurácia (Validação) Precisão
(V)
Recall
(V)
F1-Score(V)
Naive Bayes Multinomial 560 0.65 0.57 0.39 0.57 0.46
BERT 701 0.75 0.78 0.78 0.78 0.77

V*: Conjunto de validação contendo 30 notícias. O mesmo é executado no Naive e BERT para comparação.

Por se tratar de um modelo de Deep Learning, o BERT possui uma acurácia superior ao Naive Bayes Multinomial, que é um modelo de Machine Learning tradicional.
Entretanto, o modelo BERT possui uma precisão inferior ao Naive Bayes Multinomial, o que pode ser explicado pela quantidade de dados de treinamento. Para uma entrega futura, é necessário que o modelo BERT seja treinado com um volume maior de dados, para que seja possível obter uma precisão maior, e que possa ser utilizado no Radar da Soja.

Contundo, é nitido que o modelo BERT possui uma acurácia superior ao Naive Bayes Multinomial, o que mostra que o modelo BERT possui uma capacidade de generalização superior ao Naive Bayes Multinomial, e que pode ser utilizado como modelo de classificação no Radar da Soja.

Deploy do modelo

Para que o modelo possa ser utilizado no Radar da Soja possa ser integrado na plataforma, foi necessário realizar dois deploys do modelo: Integração no Pipeline de ingestão de notícias na plataforma e criação de uma API para que seja feito a interação do modelo. O usuário digitaria o texto da notícia e o modelo retornaria a classificação da notícia, com suas respectivas probabilidades.

Pipeline de classificação

Para o Pipeline de classificação, foi incrementar a tarefa já criada para o Airflow, para que ao concluir a ingestão de notícias ao armazenamento, o modelo fosse executado, e que a classificação encaminhada a plataforma através da aplicação Backend. Para atingir esse objetivo, foi necessário incluir os arquivos dos modelos (Para o Naive Bayes Multinomial, foi necessário incluir o arquivo naive_bayes.pkl, e para o BERT, foi necessário incluir os arquivos modelo_soja_rede_neural.pt).

API de classificação

Para que outras aplicações do Radar da Soja pudesse interagir com o modelo, foi necessário criar uma API para que fosse possível realizar a classificação de notícias. Para isso, foi necessário criar uma API utilizando a ferramenta FastAPI, que é uma ferramenta de desenvolvimento de APIs de alto desempenho, que utiliza a sintaxe de Python, e que possui uma documentação automática através do Swagger.
Para a criação da API, foi necessário criar um endpoint que recebesse o texto da notícia, e que retornasse a classificação da notícia, com suas respectivas probabilidades, foi necessário carregar o modelo treinado, e que fosse possível realizar a classificação da notícia.


Last update: 2023-05-20