Como uma árvore de decisão aprende

Uma árvore de decisão é uma sequência de perguntas. O algoritmo escolhe, a cada passo, a pergunta que melhor separa os dados em grupos "puros". Vamos ver isso acontecer, conta por conta, com um exemplo clássico.

Com base no clima, vamos jogar tênis hoje?

Primeiro: medir a bagunça de um grupo

Antes de escolher perguntas, precisamos de um número que diga o quão misturado está um grupo. Um grupo só com Sim é puro. Metade Sim e metade Não é o mais misturado possível. Mexa nas quantidades e veja o índice mudar.

Sim 6
Não 2
Índice Gini — a chance de errar se sortearmos um exemplo e o rotularmos ao acaso segundo as proporções do grupo: Entropia — outra métrica comum, vinda da teoria da informação:

As duas métricas lado a lado

No eixo horizontal, a proporção de Sim no grupo. As duas curvas valem zero nas pontas (grupos puros) e atingem o máximo no meio.

Gini (máximo 0,5)Entropia (máximo 1)

Agora: construindo a árvore passo a passo

Temos 14 dias registrados. Em cada nó, o algoritmo testa todos os atributos, calcula quanto cada um reduziria a impureza e escolhe o melhor. Use os botões (ou as setas do teclado) para avançar.

Métrica:

Os dados

As linhas acesas são os dias que chegaram ao nó em análise.

O algoritmo em resumo

Receita (para cada nó)

  1. Calcule a impureza do nó (Gini ou entropia).
  2. Se o grupo for puro, ou não houver mais atributos, transforme o nó em folha com a classe mais frequente.
  3. Para cada atributo disponível, divida os exemplos pelas respostas e calcule a impureza de cada grupo.
  4. Faça a média ponderada: grupos maiores pesam mais.
  5. Ganho = impureza do nó − média ponderada. Escolha o atributo de maior ganho.
  6. Crie um ramo para cada resposta e repita tudo em cada novo nó.

Para conversar em sala

Por que ponderar? Um grupo com 1 exemplo puro não deveria valer tanto quanto um grupo com 10 exemplos misturados.

Gini ou entropia? Na prática quase sempre levam à mesma árvore, como você pode testar trocando a métrica acima. O Gini é um pouco mais barato de calcular (não usa logaritmo).

E o sobreajuste? Crescer até a pureza total pode decorar os dados. Por isso se limita a profundidade, o mínimo de exemplos por folha, ou se poda a árvore depois.

Observação: aqui cada atributo gera um ramo por valor (estilo ID3). O CART, usado no scikit-learn, faz sempre divisões binárias, como "Tempo = Ensolarado? sim / não", mas a lógica de escolha pelo Gini é a mesma.