Classificando milhares de licitações com IA: estudo de caso

Invalid Date

Um cliente veio até mim e solicitou um modelo de IA personalizado que fosse capaz de compreender e classificar corretamente o tipo de obra relacionado a cada edital de licitação. Por exemplo:

ObjetoCategoria
Seleção de empresa do ramo da construção civil para o desenvolvimento do Programa Municipal de Habitação Nossa Casa, visando a incorporação de imóvel e construção de unidades habitacionais na forma de condomínio vertical, modalidade imóvel...CONSTRUÇÃO, REFORMA, DEMOLIÇÃO
Contratação de empresa especializada para realização de levantamento prévio das comunidades pesqueiras e demais dados relacionados no território marinho da área de influência indireta da Portos do Paraná municípios de Pontal do Paraná, Paranag...PROJETOS, ESTUDOS, PLANOS, AVALIAÇÕES
Contratação de empresa especializada para execução de serviços de levantamento topográfico e sondagem nas futuras instalações da subestação transformadora de energia do Edifício Sede e Anexos, cujas especificações estão definidas no Anex...LEVANTAMENTO TOPOGRÁFICO, GEOLÓGICO, GEOTÉCNICO…

Como podemos perceber, trata-se de uma tarefa complexa até mesmo para um ser humano. Mas será que a IA é capaz de executar isso com precisão? Neste artigo eu vou te mostrar como eu fiz isso e como você pode automatizar tarefas de grande complexidade no seu negócio.

Contextualização

Você sabia que o Governo, no Brasil, é o maior comprador do país? Todos os dias, bilhões de reais são movimentados para comprar de tudo: de itens de limpeza até a construção de hidrelétricas ou universidades. Mas o governo não pode simplesmente 'ir à loja'. Para qualquer compra ou contratação, ele é obrigado por lei a fazer um processo público, transparente e competitivo para selecionar a empresa mais adequada a prestar o serviço.

Esse processo é denominado licitação. O termo licitação vem do latim licitatio e significa venda em leilão. E funciona assim mesmo.

Vamos a um exemplo real. A Universidade Federal de Minas Gerais, a UFMG, precisa comprar roteadores para a atualização de sua rede wi-fi. A autarquia então publica um edital detalhando os itens a serem adquiridos, o preço de referência esperado, e o critério de contratação (neste caso, menor preço).

A partir da publicação, as empresas tomam ciência e, satisfazendo todos os requisitos, podem apresentar sua proposta de preço para aqueles itens. Por fim, dentre as empresas qualificadas que satisfazem todos os requisitos, será contratada aquela que apresentar a proposta de menor preço.

Quando a oportunidade vira um pesadelo

Embora as licitações públicas possam oferecer excelentes oportunidades para algumas empresas, dados oficiais mostram que são publicadas, por mês, no mínimo 100 mil licitações, o que representa uma média superior a 3000 licitações por dia. Para que uma empresa tenha conhecimento do edital, ela precisaria analisar milhares de licitações irrelevantes todos os dias para, se tiver sorte, encontrar uma ou outra licitação relacionada aos seus serviços.

Uma empresa que forneça equipamentos de rede, poderia tentar filtrar as licitações por palavras-chave como “informática”, “TI” ou “internet”. Essa busca não encontraria o pregão da UFMG cujo objeto é “aquisição de equipamentos para expansão da cobertura e atualização da rede sem fio da UFMG”. Em contrapartida, um objeto como “Serviço de gerenciamento e controle de frota […] permitindo a transmissão de dados […] via internet”, mesmo que totalmente irrelevante, seria um candidato da busca.

Nosso objetivo, então, é desenvolver um modelo de IA que seja capaz de interpretar o objeto da licitação e classificá-la conforme o tipo de serviço envolvido.

Planejamento

O primeiro passo é definir bem o escopo do problema e o tipo de dados que temos para trabalhar. A cliente me informou que trabalharia com cerca de 30 categorias e que já possuia uma base de dados com quase 5000 licitações classificadas manualmente. Aquilo soou como música para meus ouvidos: era tudo o que eu precisava.

Como estamos lidando com texto, sabemos que estamos na área de Processamento de Linguagem Natural, que é uma das áreas da aprendizagem de máquina.

Já que dispomos de dados de treinamento fornecidos pela cliente, nós seremos capazes de avaliar a performance final do modelo com base em quantos acertos e erros ele comete. Cenários como esse, no qual o modelo aprende “sob supervisão” de dados confiáveis, constituem a aprendizagem supervisionada.

Em aprendizagem supervisionada, temos dois tipos principais de modelos:

Evidentemente, buscamos um classificador. Os classificadores, por sua vez, podem ser divididos em alguns outros grupos:

No nosso caso, cada licitação pertence a uma única categoria. Isso significa que buscamos um Classificador Multi-Classe.

Temos à nossa disposição uma infinidade de modelos diferentes que são úteis nesse tipo de classificação: Regressão Logística, SVM, Random Forest, Gradient Boosting, Redes Neurais Artificiais… Cabe ao Engenheiro de Machine Learning encontrar o modelo mais adequado às características do problema.

Com base na minha experiência, optei por iniciar com uma Rede Neural Artificial do tipo Perceptron.

![Um diagrama de uma rede neural artificial perceptron, mostrando a arquitetura de camadas. Da esquerda para a direita, a imagem exibe uma camada de entrada, seguida por duas camadas ocultas e, por fim, uma camada de saída. Linhas conectam os neurônios de cada camada à camada seguinte, ilustrando um fluxo de dados densamente conectado.](https://www.researchgate.net/publication/354817375/figure/fig2/AS:1071622807097344@1632506195651/Multi-layer-perceptron-MLP-NN-basic-Architecture.jpg align="center")

Esse tipo de rede é composto por neurônios organizados em camadas e conectados entre si. Cada círculo na figura representa um neurônio, e cada neurônio armazena um número. Os neurônios são agrupados em camadas: em azul, a camada de entrada, em laranja as camadas ocultas, e em verde a camada de saída.

Nesse tipo de modelo, cada exemplo do conjunto de dados é representado por uma sequência de números, chamada vetor. A camada de entrada da rede recebe o vetor (um número por neurônio) e, com operações matemáticas, transforma uma camada na seguinte, sucessivamente, até a camada de saída.

A camada de saída contém um neurônio para cada categoria possível. Após a execução do modelo, cada neurônio na saída contém a probabilidade de que aquele texto pertença àquela categoria. O neurônio de maior probabilidade corresponde à categoria “escolhida” pelo modelo.