Machine Learning · Insper
Árvores de Decisão
Abordagem fundamental
Como uma árvore escolhe as perguntas, como responde e por que precisa ser parada
Vinte perguntas
Um bom jogador não pergunta "é o bule da minha avó?"; pergunta "é um ser vivo?": qualquer resposta elimina metade das possibilidades.
- Uma árvore faz o mesmo com dados: cada nó pergunta atributo ≤ limiar?
- Cada resposta manda o exemplo por um ramo; cada folha guarda uma previsão.
- Aprender uma árvore é escolher as perguntas.
Uma boa pergunta é aquela cujas respostas deixam grupos mais puros — menos misturados — que o grupo de partida.
O caminho desta parte
- Medir a impurezavinte perguntas; Gini e entropia
- Achar o melhor cortetodo atributo, todo ponto médio, pontuado
- Crescer e preverrecursão gulosa; a folha guarda proporções
- Parar a temposobreajuste e pré-poda
- Ler as regrascada caminho é uma regra
Cada etapa responde a uma pergunta: o que torna uma pergunta boa? → qual pergunta o nó deve fazer? → como os cortes viram um modelo que responde? → quando a árvore deve parar de crescer? → o que a árvore nos diz?
Etapa 1 · o que torna uma pergunta boa?
12 clientes, uma pergunta
| A | B | C | D | E | F | G | H | I | J | K | L |
| tenure (meses) | 2 | 3 | 5 | 6 | 8 | 11 | 14 | 19 | 24 | 30 | 38 | 50 |
| bill (R$) | 95 | 120 | 60 | 110 | 45 | 130 | 70 | 115 | 55 | 125 | 100 | 65 |
| churn | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
Cinco dos 12 cancelaram. Procure uma pergunta que separe quem cancelou dos demais.
Todo cliente que paga menos de R$ 75 ficou. O resto da aula transforma essa intuição num número, para que o computador encontre a pergunta sem olhar.
Impureza: quão misturado está um nó?
Gini (CART)
\[ G = 1 - \sum_c p_c^2 \]
chance de dois exemplos sorteados serem de classes diferentes
Entropia (ID3, C4.5)
\[ H = -\sum_c p_c \log_2 p_c \]
bits para codificar a classe de um exemplo
As duas valem 0 num nó puro e são máximas em 50/50 (\(G = 0{,}5\), \(H = 1\)). Na raiz, 7 ficaram e 5 cancelaram:
\[ G = 1 - \left(\tfrac{7}{12}\right)^2 - \left(\tfrac{5}{12}\right)^2 = 0{,}486 \qquad H = 0{,}980 \]
Etapa 2 · qual pergunta o nó deve fazer?
A melhor pergunta: todos os cortes
\[ \Delta = I(\text{pai}) - \tfrac{n_L}{n} I(L) - \tfrac{n_R}{n} I(R) \]
A conta do vencedor: bill ≤ 82,5
- Esquerda: 5 ficaram, 0 cancelaram → Gini 0.
- Direita: 2 ficaram, 5 cancelaram → \(G_R = 1 - (2/7)^2 - (5/7)^2 = 0{,}408\).
\[ \tfrac{5}{12}\cdot 0 + \tfrac{7}{12}\cdot 0{,}408 = 0{,}238 \qquad \Delta = 0{,}486 - 0{,}238 = 0{,}248 \]
- Nenhum outro limiar de
bill chega perto; o melhor de tenure (≤ 4) fica em 0,350.
- Entre dois valores vizinhos, todo limiar dá o mesmo corte: o CART testa só os pontos médios.
DecisionTreeClassifier(max_depth=1) encontra o mesmo atributo, o mesmo limiar e os mesmos três Gini: 0,486, 0 e 0,408.
Etapa 3 · como os cortes viram um modelo que responde?
Guloso e recursivo
GROW(nó):
se nó puro, profundidade máxima
ou poucos exemplos: vira folha
para cada atributo j e
cada ponto médio t:
pontue x_j ≤ t pela queda Δ
aplique o melhor corte
GROW(esquerdo); GROW(direito)
Recursivo: cada filho é o mesmo problema, menor. Guloso: o melhor corte agora, sem olhar adiante — a árvore ótima é NP-completa.
Prever é seguir um caminho; a folha guarda proporções
| cliente | tenure | bill | folha | P(fica) | P(cancela) |
| M | 6 | 70 | 5 ficaram · 0 cancelaram | 1,000 | 0,000 |
| N | 4 | 115 | 0 · 4 | 0,000 | 1,000 |
| O | 25 | 110 | 2 · 1 | 0,667 | 0,333 |
predict_proba devolve as proporções de classe dos exemplos de treino da folha. Uma árvore com 3 folhas só produz 3 probabilidades distintas.
Crescida até a pureza
O terceiro corte existe por causa de um cliente (J). 100% no treino, nada aprendido.
Simulador: uma árvore crescendo, um corte por vez
Preveja. Aumente a profundidade de 0 a 8. A impureza de treino chega a subir? Como ficam as regiões na profundidade 8?
Etapa 4 · quando a árvore deve parar de crescer?
Num conjunto real: uma árvore completa decora
Spambase: 4.207 e-mails (sem as 394 linhas duplicadas), 57 atributos.
| restrição | treino | validação | folhas |
| nenhuma (até o fim) | 1,000 | 0,906 | 181 |
max_depth=3 | 0,890 | 0,880 | 8 |
max_depth=10 | 0,967 | 0,915 | 86 |
min_samples_leaf=50 | 0,902 | 0,892 | 30 |
max_leaf_nodes=40 | 0,950 | 0,906 | 40 |
Pré-poda: max_depth, min_samples_leaf, max_leaf_nodes. Com 40 folhas, a mesma validação da árvore de 181: as outras 140 só memorizavam.
Etapa 5 · o que a árvore nos diz?
Um caminho é uma regra
Árvore de profundidade 2 no Spambase (contagens: não spam, spam):
$ raro e remove raro → não é spam (1.770 contra 356)
$ raro, mas remove aparece → spam (211 contra 19)
$ frequente e hp raro → spam (687 contra 50)
$ frequente, mas hp aparece → não é spam (57 contra 5): os dados vêm da Hewlett-Packard
4 regras, 0,863 no teste, contra 0,923 da árvore completa com 221 folhas. A última regra é verdadeira neste conjunto e inútil fora dele — e só lendo você descobre.
Resumo
- Uma árvore faz perguntas atributo ≤ limiar, uma de cada vez; prever é seguir um caminho.
- Uma boa pergunta deixa os filhos mais puros: Gini ou entropia, ponderados.
- O melhor corte sai por força bruta: todos os atributos, todos os pontos médios.
- O crescimento é guloso e recursivo.
- Sem regra de parada, a árvore decora; a validação cruzada escolhe quanto segurá-la.
| sintoma | o que fazer |
| treino 1,000, validação bem abaixo | limitar profundidade ou tamanho de folha |
| árvore pequena quase tão boa quanto a grande | ficar com a pequena: ela se lê |
Lab fundamental · cerca de 30 min, em duplas
Uma chave para pinguins, passos 1 a 5
- Palmer penguins: 344 aves, três espécies, medidas do bico e da nadadeira, massa, sexo e ilha.
- Uma chave dicotômica de guia de campo é uma árvore de decisão escrita à mão: vamos construir uma e lê-la.
- Notebook no Colab: nada para baixar. Salve uma cópia no seu Drive.
- Em cada passo, responda o Preveja antes de rodar.
- Simulações: a raiz, escolhida por você (passo 4) e uma árvore decora até rótulos aleatórios (passo 5).
Ritmo: passos 1 a 3 em 8 min; passo 4 e a primeira simulação em 12 min; passo 5 e a segunda em 10 min.