Machine Learning · Insper
Árvores de Decisão
Abordagem avançada
Onde as árvores brilham, onde falham e por que viram a matéria-prima dos ensembles
O caminho desta parte
- Medir o corteimpureza, não erros; variância na regressão
- Podar depois de crescerpoda por custo-complexidade e a escolha de α
- Encarar a instabilidadeuma pequena mudança nos dados, outra árvore
- Forças e limitesescala, escadas,
NaN, importância
Cada etapa responde a uma pergunta: o que um corte deve medir? → quanto de uma árvore crescida vale manter? → quanto dá para confiar numa árvore só? → quando a árvore é a ferramenta certa?
Etapa 1 · o que um corte deve medir?
Por que não simplesmente contar erros?
- Pai: 8 negativos, 2 positivos. Corte: 5 + 0 e 3 + 2. Os dois filhos continuam prevendo "negativo": taxa de erro 0,20 → 0,20.
- Mas um filho ficou puro e os positivos se concentraram: Gini 0,32 → 0,24.
Gini e entropia são estritamente côncavas: recompensam o progresso antes de a previsão mudar. É o que faz a busca gulosa funcionar.
Árvores de regressão
A folha prevê a média; a impureza é o MSE em torno dela (a variância do alvo no nó).
\[ I(\text{nó}) = \frac{1}{n}\sum_{i \in \text{nó}} (y_i - \bar y)^2 \]
- Oito apartamentos: média R$ 2,362 mil, MSE 0,7873.
area ≤ 67.5: R$ 1,720 mil para os cinco pequenos, R$ 3,433 mil para os três grandes; MSE ponderado 0,0993.
Uma única pergunta remove 87% da variância. O mesmo algoritmo, outra impureza.
Uma escada que não extrapola
Com \(L\) folhas, no máximo \(L\) valores. Acima de 120 m², a árvore de profundidade 3 diz R$ 3,87 mil para qualquer tamanho: RMSE fora da faixa 1,14, contra 0,22 da reta.
Etapa 2 · quanto de uma árvore crescida vale manter?
Pós-poda: crescer, depois cortar
\[ R_\alpha(T) = R(T) + \alpha\,|T| \qquad \alpha_{\text{ef}}(t) = \frac{R(t) - R(T_t)}{|T_t| - 1} \]
Cada passo colapsa o nó de menor \(\alpha_{\text{ef}}\): 0,111 (o corte que isolava J) → 0,127 → 0,248. É a sequência de cost_complexity_pruning_path.
A poda no Spambase
- Sem poda: 221 folhas, 0,906. Melhor \(\alpha\): 109 folhas, 0,915.
- Regra de um erro padrão (Breiman et al., 1984): 57 folhas, 0,913 — um quarto da árvore.
A poda compra pouca acurácia aqui; seu trunfo é o tamanho: igualmente acurada e muito mais fácil de ler.
Etapa 3 · quanto dá para confiar numa árvore só?
Instabilidade: uma pequena mudança, outra árvore
50 reamostras bootstrap do Spambase:
- a raiz muda:
$ em 29, ! em 19, outras duas palavras uma vez cada;
- 136 a 186 folhas;
- acurácia 0,895 em média, mas duas árvores discordam em 11,8% dos e-mails.
Deixar as 50 votarem dá 0,950, melhor que a melhor árvore (0,919). A instabilidade é o defeito de uma árvore e a matéria-prima do ensemble.
Etapa 4 · quando a árvore é a ferramenta certa?
O que as árvores dispensam
Escalonamento
Um corte só usa a ordem. Padronizar: as mesmas previsões em 100% do teste. log1p: 99,3% (só os limiares entre valores mudam).
Interações
"O tempo de casa importa quando a conta é alta": a árvore diz isso aninhando perguntas, sem atributo-produto.
Imputação
Desde o scikit-learn 1.3, NaN entra direto: cada corte aprende para que lado mandar o faltante.
Categorias
O DecisionTreeClassifier ainda pede números: one-hot para poucas categorias.
Onde elas sofrem: diagonais viram escadas
16 folhas e 0,932 para o que a regressão logística diz com uma reta (0,985). Com o atributo \(x_2 - x_1\), 2 folhas e 1,000: engenharia de atributos ajuda uma árvore mais que qualquer hiperparâmetro.
Importância de atributos e seu viés
feature_importances_ soma a queda de impureza dos cortes de cada atributo, nos dados de treino.
- Uma coluna de números aleatórios fica em 12º lugar entre 59, à frente de 46 atributos reais; uma moeda aleatória, em 41º.
- Atributos com muitos valores oferecem muitos limiares; um deles separa algumas linhas ruidosas por acaso (Strobl et al., 2007).
Para medir importância de verdade: permutação em dados separados (próxima aula) ou SHAP (Explicabilidade).
Perfil prático
| Pontos fortes | regras legíveis; sem escalonamento; interações automáticas; aceita NaN; rápida |
| Pontos fracos | sobreajusta sem poda; instável; escadas para diagonais; não extrapola; importância enviesada; probabilidades grosseiras |
| Use quando | o modelo precisa ser lido, auditado ou aplicado à mão |
Uma árvore, raramente; muitas árvores, o tempo todo: random forests (muitas árvores fundas, em média) e gradient boosting (muitas rasas, somadas).
Lab avançado · cerca de 35 min, em duplas
A chave final e o que ela vale, passos 6 a 10
- Mesmo notebook, mesma sessão: os passos usam
X, X_train, y_train, cv e cv_report.
- Ajustar profundidade, folhas e poda; comparar com regressão logística e k-NN nos mesmos folds; testar uma vez; medir a estabilidade da chave.
- Notebook no Colab, a partir do passo 6.
- Simulações: dê a diagonal à árvore (passo 7) e bagging à mão (passo 10).
Ritmo: passos 6 e 7 e a primeira simulação em 15 min; passos 8 e 9 em 10 min; passo 10 e a segunda em 10 min.