Redes Bayesianas com o Netica

O Netica é um software comercial desenvolvido pela empresa Norsys Software (http://www.norsys.com/), que fica localizada em Vancouver (Canadá) e tem como foco o trabalho com redes bayesianas. Mas primeiramente, você já ouviu falar no Teorema de Bayes? Primeiramente precisamos entender o que ele é para ter uma ideia melhor desta ferramenta! 🙂 Esse teorema vem da teoria da probabilidade, então se você já fez alguma disciplina de Probabilidade ou Estatística talvez você deve se lembrar um pouco deste assunto. Caso não, vamos lá para uma explicação bem simples com um exemplo bem clássico da área. Considere as seguintes afirmações:

Um médico sabe que a meningite causa torcicolo em 50% dos casos. Porém, o médico também conhece algumas probabilidades incondicionais que dizem que, um caso de meningite atinge uma em cinquenta mil pessoas. Por fim, a probabilidade de alguém ter torcicolo é de uma em vinte.

Baseado nessa descrição, podemos fazer as seguintes representações:

P(T|M) = 0.5

O P indica probabilidade, o T torcicolo e o M meningite. Podemos ler essa “fórmula” da seguinte maneira: se uma pessoa tem meningite (M), então a probabilidade de ter torcicolo (T) é de 0.5 (50%), conforme apresentado na descrição. Como você pôde ter notado, a leitura parte do M para o T, seguindo depois para o valor.

Temos também o seguinte:

P(M) = 1/50000
P(T) = 1/20

A primeira probabilidade indica as chances de uma pessoa ter meningite, enquanto que a segunda diz respeito ao torcicolo. Com isso, queremos calcular o seguinte neste exemplo: suponha que você esteja com torcicolo, qual será a probabilidade de você também estar com meningite? O Teorema de Bayes é adequado para este tipo de cálculo, e logo abaixo você pode conferir a fórmula para calcular esse valor:

P(M|T) = (P(T|M)P(M)) / P(T)

Conforme visto anteriormente, a leitura da primeira parte da fórmula P(M|T) fica da seguinte maneira: dado que uma pessoa está com torcicolo (T), a probabilidade de ter meningite (M) é? O que resta a fazer para finalizar esse cálculo é somente substituir os valores, ou seja:

P(M|T) = (0.5 x 1/50000)/(1/20)
P(M|T) = 0.0002

Veja que somente substituímos os valores e temos a resposta de 0.0002 para a probabilidade de uma pessoa estar com torcicolo e ter meningite, que é um valor muito baixo e que não requer preocupação :). Esse exemplo mostrou muito resumidamente a aplicação do Teorema de Bayes, para que então você entenda melhor o que é uma rede bayesiana. A melhor e mais didática explicação sobre esse teorema você pode encontrar no Capítulo 6 do livro “Use a Cabeça: Análise de Dados”, que você pode encontrar o review completo do livro neste link: https://iaexpert.academy/2016/06/21/use-a-cabeca-analise-de-dados/.

Conforme o próprio nome indica, uma rede bayesiana é a grosso modo uma rede de probabilidades, na qual existem nós conectados uns aos outros no formato de um grafo. Essa técnica de inteligência artificial faz parte dos métodos para trabalhar com incerteza e é considerado como um raciocínio probabilístico, que pode estabelecer relações entre sentenças  utilizando teoria de probabilidades. A figura abaixo mostra um exemplo das ligações entre as probabilidades, na qual é possível observar que na parte superior está indicada a probabilidade de ter um ladrão P(L) e um terremoto P(T) em uma determinada cidade. É claro que de acordo com os valores, você também pode chegar a conclusão de que essa cidade não é no Brasil não 🙂

A ideia desse exemplo é calcular a probabilidade do alarme da casa disparar P(A) dado que tem ou não ladrão ou terremoto. Note que no centro existe uma tabela que apresenta a conjunção das probabilidades, como por exemplo: se ladrão e terremoto forem verdadeiros, então a probabilidade do alarme tocar é de 95%. Por outro lado, se ladrão for falso e terremoto verdadeiro (terceira linha), a probabilidade do alarme tocar é de 29%. Tomando como base essa conjunção de probabilidades que é construída uma rede bayesiana, unindo várias probabilidades para dar uma resposta final ao usuário.

Caso você queira aprender um pouco mais sobre a teoria das redes bayesianas, deixo abaixo o link para um artigo bem didático que foi produzido na Universidade Federal do Rio de Janeiro, autorado por Roberto Ligeiro Marques e Inês Dutra.

Agora que você entendeu um pouco sobre o Teorema de Bayes e as redes bayesianas, vou escrever um pouco mais sobre o Netica. Na figura abaixo você pode visualizar um exemplo muito interessante de uma rede bayesiana construída neste software, que apresenta os dados relativos ao diagnóstico de um carro.

Perceba que existem vários nós, que representam as luzes, filtro de ar, fusível, distribuidor, bateria, dentre vários outros. O objetivo dessa rede é realizar um diagnóstico em um carro, ou seja, a cada clique nessas porcentagens, toda a rede é afetada e recalculada! Por exemplo, localize o nó chamado Gas Tank (direita da imagem): note que ele influencia no sistema de combustível (Fuel System), que por sua vez influencia no nó Car Starts, que indica se o carro vai ou não funcionar. Em resumo, baseado nas condições de todos os sistemas complexos que existem em um carro, é possível prever se o carro vai ou não vai ligar!

Para chegar nessas previsões, o usuário deve ter conhecimento prévio da área para definir todas essas probabilidades, ou seja, uma rede bayesiana necessita de um especialista no assunto. Veja a figura abaixo, que mostra a janela na qual as probabilidades foram definidas para o nó Starter System. Existem três flechas chegando até ele, que são provenientes de Battery Voltage, Main Fuse e Starter Motor. Desta forma, é necessário combinar todos os valores de cada um desses nós, totalizando 12 probabilidades. Esse número vem da combinação dos atributos, ou seja: Battery Voltage possui três valores (strong, weak e dead), Main Fuse dois (okay e blown) e Starter Motor mais dois (okay e faulty). Desta forma, multiplicando 3 x 2 x 2 temos as 12 opções que o especialista necessita preencher! Para entender melhor, considere a primeira linha da tabela mostrada na figura, em que se o Main Fuse estiver okay, o Starter Motor também estiver okay e Battery Voltage for forte (strong), então a probabilidade do Starter System estar okay é 98% e a probabilidade de ele estar falho é de 2%. Assim segue-se sucessivamente preenchendo todas as outras combinações! Você pode chegar a conclusão que é bastante trabalhoso mesmo construir uma rede bayesiana do zero!

Esse exemplo do diagnóstico do carro está localizado na pasta de instalação do Netica, e além desse, existem muitos outros que vale a pena conferir e entender melhor. A Norsys disponibiliza duas formas de comercialização do produto, sendo que a primeira é a aplicação em interface gráfica, conforme mostrada a janela do exemplo anterior. Essa versão custa em torno de U$ 585 para uso comercial e U$ 285 para uso educacional, existindo também a versão para testes que apresenta todas as funcionalidades completas, porém com limitações de tamanho do modelo.  A segunda forma de comercialização é a mais interessante para desenvolvedores, que são as APIs para diversas linguagens de programação, tais como Java, C, C#, Visual Basic, C++, Matlab ou CLisp. A biblioteca é compatível com Windows, Linux e Mac e o que eu achei mais interessante é que a versão para C permite que qualquer outra linguagem que consiga invocar funções em C pode fazer uso dela, como Python, Delphi, Fortran, Cobol, dentre várias outras. Desta forma, se você é desenvolvedor de alguma linguagem que não está listada como sendo nativa pela API do Netica, é possível mesmo assim acessar as funções e construir softwares inteligentes! Para uso comercial, o valor para comprar a licença é de U$ 685.

Para finalizar este artigo, sugiro que você acesse a seção dos clientes que utilizam o Netica (http://www.norsys.com/clients.htm). Quando ensino a utilizar o básico dessa ferramenta nos meus cursos de IA, os alunos em geral ficam bastante surpresos com as áreas que essa ferramenta é utilizada em âmbito comercial, como por exemplo: indústrias, engenharia, mineração de óleo, química, meio ambiente, agricultura, biotecnologia, área médica, indústria aérea, ministério da defesa, finanças, marketing, dentre outras (veja a lista completa no site). São muitos clientes de peso que utilizam as redes bayesianas, como: Motorola, Airbus, Boeing, NASA, United Airlines, US Air Force, Citi Bank, Alcatel, Cisco, Nokia, dentre muitos outros que estão listados no site.

Com isso eu vejo uma ótima oportunidade de negócio! Por exemplo, se você é desenvolvedor pode construir módulos específicos de estatística no seu software, e cobrar mais por isso como pacotes adicionais de inteligência artificial! Se você não é programador, pode mesmo assim aprender a versão com interface gráfica e construir redes bayesianas nas quais o próprio usuário poder interagir e tomar decisões! Além disso, se você ficar bom nesta ferramenta, com certeza novas oportunidades de negócio fora do Brasil podem surgir! 🙂

Eu gravei dois vídeos práticos sobre o Netica, explicando com mais detalhes como funciona esse processo de construção das probabilidades. Você pode assistir logo abaixo:

Nos vemos no próximo artigo!

Até lá!