Árvore de decisão: entenda esse algoritmo de Machine Learning

A árvore de decisão é um importante algoritmo de ML para dominar, devido à sua versatilidade. Entenda como funcionam as decision trees.


Dentre todos os conhecidos algoritmos de machine learning, um que se destaca pela sua estrutura visual é a árvore de decisão (decision tree). 

Isso se dá porque a composição desse algoritmo é similar a de um fluxograma, com etapas muito fáceis de visualizar e entender. Assim, além de uma boa técnica com bons resultados, é também ótima abordagem para uma compreensão melhor de como funciona o aprendizado de máquina.

Talvez ele seja o método mais conhecido de ML, se não considerarmos as redes neurais. Mas mesmo que redes neurais sejam conhecidas, poucas pessoas realmente sabem como elas funcionam. Uma árvore pega emprestada uma noção de tomada de decisões que está muito presente em outras áreas, por isso, é mais acessível.

Para entender melhor como funciona esse conceito, como ele é utilizado, suas vantagens e como o desenvolvimento propriamente dito ocorre, acompanhe.

O que é uma árvore de decisão?

Uma árvore de decisão é um algoritmo de aprendizado de máquina supervisionado que é utilizado para classificação e para regressão. Isto é, pode ser usado para prever categorias discretas (sim ou não, por exemplo) e para prever valores numéricos (o valor do lucro em reais).

Assim como um fluxograma, a árvore de decisão estabelece nós (decision nodes) que se relacionam entre si por uma hierarquia. Existe o nó-raiz (root node), que é o mais importante, e os nós-folha (leaf nodes), que são os resultados finais. No contexto de machine learning, o raiz é um dos atributos da base de dados e o nó-folha é a classe ou o valor que será gerado como resposta.

decision-tree

Fonte da imagem: Data Science Foundation

Na ligação entre nós, temos regras de “se-então”. Ao chegar em um nó A, o algoritmo se pergunta acerca de uma regra, uma condição, como “se a característica X do registro analisado é menor do que 15?”. Se for menor, então ele vai para um lado da árvore; se for maior, então ele vai para outro. No próximo nó, segue a mesma lógica.

É um algoritmo que segue o que chamamos de “recursivo” em computação. Ou seja, ele repete o mesmo padrão sempre na medida em que vai entrando em novos níveis de profundidade. É como se uma função chamasse a ela mesma como uma segunda função para uma execução paralela, da qual a primeira função depende para gerar sua resposta.

O grande trabalho da árvore é justamente encontrar os nós que vão ser encaixados em cada posição. Quem será o nó raiz? Depois, quem será o nó da esquerda? E o da direita?

Para isso, é preciso realizar alguns importantes cálculos. Uma abordagem comum é usar o ganho de informação e a entropia. Essas duas variáveis dizem respeito à desorganização e falta de uniformidade nos dados. Quanto mais alta a entropia, mais caóticos e misturados estão os dados. Quanto menor a entropia, mais uniforme e homogênea está a base.

Para definir os posicionamentos, é preciso calcular a entropia das classes de saída e o ganho de informação dos atributos da base de dados. Quem tiver maior ganho de informação entre os atributos é o nó-raiz. Para calcular a esquerda e a direita, deve-se realizar novos cálculos de entropia e ganho com o conjunto de dados que atende à condição que leva à esquerda ou à direita.

Como falamos, para dividir a base de dados em uma árvore, dependemos das condições. A partir delas, dividimos a base em caminhos com análise dos registros que satisfazem determinada condição. 

Se uma condição for “idade > 15” para o lado direito, por exemplo, teremos somente os registros da base que possuem idade maior que 15 anos. Já se a condição for “idade < 15” para a esquerda, teremos somente registros com idades menores que 15 para a esquerda.

O ganho de informação é calculado a partir dessa lógica. Se quando eu analiso um atributo, os registros das bases para cada lado são homogêneos ou próximos disso, temos um alto ganho de informação. Afinal, sabemos que se optarmos por determinada condição, é muito provável que saibamos exatamente a saída esperada ou estejamos mais próximos de descobrir. 

ganho-de-informacao-arvore-de-decisao

Contudo, se o ganho for pequeno, isso quer dizer que os dados estão muito misturados e que, portanto, estamos mais distantes de descobrir as saídas esperadas.

Outro ponto acerca desse algoritmo é que ele foca bastante na tarefa atual, e menos no resultado final. Ou seja, quando está calculando o lado esquerdo de um nó, esse método não considera o outro lado. É o que chamamos de algoritmo ganancioso.

Isso tudo ficará mais claro quando abordarmos a construção de uma árvore no tópico 3.

Para que serve esse algoritmo em machine learning?

Como já falamos, as árvores servem para classificação ou regressão, ambos tipos de tarefas de aprendizado supervisionado. Aliás, essa versatilidade explica muito do sucesso desse algoritmo, principalmente se comparado com outros mais simples, como o Naive-Bayes.

Outra aplicação muito importante das árvores é quando há um problema de diversos rótulos. Ou seja, quando as categorias de classificação são múltiplas, e não apenas duas (como sim ou não). Outros algoritmos apresentam consideráveis problemas e uma maior complexidade, ao passo que com as árvores, cientistas de dados conseguem lidar com isso com facilidade.

Além disso, quando é preciso lidar com dados sem se preocupar muito com o tratamento deles, a decision tree cai bem como uma luva. 

Nela, valores que ficam muito fora do padrão dos dados ou valores faltantes não chegam a ser prejudiciais. Pouquíssimas etapas de tratamento são necessárias. A pessoa cientista não precisará nem mesmo converter os dados para informações numéricas, já que esse algoritmo também lida bem com informações categóricas (nominais).

Em casos de problemas gerais que envolvem tanto classificação quanto regressão, as árvores também são uma boa pedida. Nesse caso, pode-se implementar uma random forest (floresta aleatória), que consiste basicamente em um conjunto de árvores treinadas que oferecem uma predição sobre os dados, escolhendo uma categoria. 

Então, é feita uma avaliação da categoria que mais apareceu nos resultados das árvores para que haja uma decisão final.

Com algumas linhas de código, cientistas de dados conseguem uma visualização prática de uma árvore de decisão. Por isso, é também uma estratégia muito importante para quando se deseja visualizar de forma simples e fácil como o algoritmo trabalha. Para aprendizado e compreensão de pessoas leigas, é uma ótima opção também. 

Como montar uma árvore de decisão?

Para montar um algoritmo de árvore de decisão, é necessário utilizar bibliotecas auxiliares que trazem consigo implementações e configurações já prontas. É útil, contudo, entender o que são os termos técnicos, como a entropia já citada. Afinal, essas informações são passadas para as funções prontas. 

Entretanto, caso a pessoa queira aprender mais, ela pode tentar implementar sua própria árvore. Isso pode ser feito com o cálculo da entropia das classes e do ganho de informação em funções recursivas. De certo modo, a função não é tão complexa quanto o funcionamento dela. 

Nas duas principais linguagens de programação utilizadas em Data Science, Python e R, temos métodos bem fáceis e intuitivos para gerar esse algoritmo e conduzir classificação ou regressão sem problemas.

Árvores de decisão com Python

Você consegue implementar uma decision tree em apenas quatro linhas em Python. Pode usar, por exemplo, o módulo DecisionTreeClassifier, da biblioteca Sklearn, com as funções “fit”, “score” para treinar e configurar. Quando precisar classificar um novo registro e verificar se o modelo aprendeu realmente, utiliza-se o método “predict”.

Depois disso, a pessoa cientista pode inclusive utilizar funções do matplotlib para plotar um gráfico indicando visualmente como essa decision tree está realizando previsões. Isso vira um tipo de informação visual para compartilhar com outras pessoas, inclusive. 

Árvores de decisão com R

No R, também conseguimos com muita facilidade construir um algoritmo de árvore decisória. Temos bibliotecas distintas como cTree, RPart e Tree. Em pouquíssimas linhas, podemos chegar à criação desse modelo. Também é possível visualizar de forma intuitiva. É interessante perceber que se usa também o método “fit” — ou seja, o raciocínio não é tão diferente do Python.

Exemplos de árvore de decisão

Visto que você já entendeu como montamos uma árvore e como ela funciona na estruturação de sua hierarquia de nós, vamos avançar para aplicações práticas.

Diagnóstico de doenças

Uma decision tree pode ser aplicada para identificar doenças a partir de informações cedidas ao algoritmo como treinamento — uma classificação. Nesse caso, o sistema apreende os dados, entende suas relações, realiza os cálculos a fim de entender quais são os nós mais importantes e ajusta as condições. 

A grande vantagem, como falamos, é o fato de que não é necessário se preocupar muito com o tratamento dos dados. Para resultados ainda mais interessantes, uma assembleia (random forest) deve ser adotada.

Previsão de empréstimo 

Outro tipo de uso é para previsão de um valor de empréstimo que pode ser concedido a um usuário do banco. Esse é um problema de regressão, pois requer uma informação numérica como saída. O sistema vai entender como a base de dados está organizada de acordo com os atributos e criar um modelo capaz de fazer essa previsão. 

Análise de sentimentos

Não é incomum ver também aplicações na área da análise de sentimentos, subcategoria do campo de processamento de linguagem natural. O modelo entende os dados e tenta prever se um texto deve ser categorizado como positivo ou negativo, por exemplo. Para melhores resultados, a random forest é aplicada também.

Previsão de saída de funcionários

Outro uso muito específico é para o RH saber quando um funcionário está quase saindo da empresa por insatisfação. Com a análise de dados sobre cada um, o modelo entende a base de dados e consegue realizar uma predição, ou seja, uma classificação. 

….

As árvores de decisão são importantes ferramentas para o desenvolvimento de modelos inteligentes, seja para classificação, seja para regressão, como vimos neste texto. Por isso, é fundamental entender como elas funcionam e saber em quais casos elas se aplicam de modo a gerar melhores resultados. 

Gostou do conteúdo? Entenda melhor como Python é essencial para a ciência de dados.